Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование 
:(
    Опции темы
w1nd
Дата 22.5.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: нет
Всего: 54



Цитата(NotGonnaGetUs @  22.5.2006, 15:22)
Могут и есть.

Да, если спросить сантехника, он не будет знать, что такое принцип подстановки Барбары Лисков, но для людей от computer science, утверждающих о владении ООП, такое не знание непростительно.

Не могут, не есть, не пить. Это подтверждает опыт, мой и моих многочисленных коллег. 

Как увидел слова "владение ООП", сразу вспомнил фразу из резюме: "профессионально овладел компьютером". Я ничем таким не овладевал, напраслина это. Мне достаточно понимания. 

Ладно, пока все разговоры о анекдотичности примеров или неприменимости определений не более чем буквоедство. Теперь поправка по существу вопроса: "наследовать человека от его левой руки, вместо того, чтобы использовать композицию" было бы неестественно наяву. Для конкретной модели классов человек может состоять и из одной левой руки и, может быть, колеса от телеги. Вообще из чего угодно. 

Скажите, ваши разъяснения применимы к ситуации, описанной здесь?
  

Это сообщение отредактировал(а) w1nd - 22.5.2006, 23:08


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
NotGonnaGetUs
Дата 23.5.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 25.2.2005
Где: Москва

Репутация: 8
Всего: 12



Цитата(w1nd)

Это подтверждает опыт, мой и моих многочисленных коллег. 


Грустно и за вас, и за ваших коллег.

Цитата(w1nd)

Теперь поправка по существу вопроса: "наследовать человека от его левой руки, вместо того, чтобы использовать композицию" было бы неестественно наяву. Для конкретной модели классов человек может состоять и из одной левой руки и, может быть, колеса от телеги. Вообще из чего угодно. 


По существу был бы следующий вопрос: почему никто в здравом уме не использует наследование для моделирования отношения "has" между концептуальными классами.

А ваш вопрос не по существу. Вы опять берётесь за свою любимую функциональную декомпозицию. 

Что такое "конкретная модель классов"? 

Никакая задача не навязывает "конкретную модель классов". 
Для решения _любой_ задачи можно использовать какие угодно классы, н-р, можно их вообще не использовать.
Однако решения можно _сравнивать_ между собой. 
Если вы утверждаете, что для решения задачи Х нужно наследовать человека от его левой руки, я скажу, что это глупо и смешно, потому что можно привести решение, которое будет _лучше_. 

Лучше или хуже не абсолютные категории. Это отражение вполне конкретных проблем с которыми столкивалась индустрия программного обеспечания на различных этапах своего развития. 
Различные "принципы ООП" (теже шаблоны GRASP, как наиболее полное собрание этих принципов) это своего рода указатели: куда нужно идти, чтобы не попасть в не приятную историю. 

Вы сами нам продемонстрировали пример "плохого" проектного решения. Наследование квадрата от точки привело к необходимости создания новой иерархии классов для того, чтобы сделать возможным вычисление расстояния между этими объектами. 



Цитата(w1nd)

Скажите, ваши разъяснения применимы к ситуации, описанной здесь?

Ссылка "Здесь" не ведёт ни в какое конкретное место.
 
PM MAIL   Вверх
w1nd
Дата 23.5.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: нет
Всего: 54



Цитата(NotGonnaGetUs @  23.5.2006, 11:12)
Грустно и за вас, и за ваших коллег.

Не печальтесь. Новые имена для старых вещей сути этих вещей не изменяют.

Цитата
Ссылка "Здесь" не ведёт ни в какое конкретное место.

"Допустим, вам нужно представить, как будет выглядеть изображение на составном экране или еще на какой-нить поверхности. Точки (из которых будет состоять эта поверхность, ваш будущий холст) будут родителями для самых разнообразных классов - от текстуры до телевизора."    

Это сообщение отредактировал(а) w1nd - 23.5.2006, 20:52


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Domestic Cat
Дата 23.5.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 4
Всего: 172



Цитата(w1nd @  23.5.2006,  11:49 Найти цитируемый пост)
"Допустим, вам нужно представить, как будет выглядеть изображение на составном экране или еще на какой-нить поверхности. Точки (из которых будет состоять эта поверхность, ваш будущий холст) будут родителями для самых разнообразных классов - от текстуры до телевизора."   

Напомню - речь с самого начала шла о геометрии, что было уточнено неоднократно. Точка в геометрии определяется так:
Цитата

То́чка — абстрактный объект в пространстве, обладающий координатами, но не имеющий размеров, массы, направленности и каких-либо других геометрических или физических характеристик.

Поскольку в вашем примере "точка" будет иметь размер, вы уже выходите за рамки рассматриваемого нами примера.  


--------------------

PM   Вверх
skyboy
Дата 23.5.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



w1nd, тогда любой класс должен включать в себя интерфейс с методом "представить в виде точки". Пересчет проекции в точку будет зависеть от фигуры - потому реализация всё равно будет разнесена по конкретным классам. Использования наследования классов не требуется.   

Это сообщение отредактировал(а) skyboy - 24.5.2006, 00:24
PM MAIL   Вверх
NotGonnaGetUs
Дата 24.5.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 25.2.2005
Где: Москва

Репутация: 8
Всего: 12



Цитата(w1nd)

Не печальтесь. Новые имена для старых вещей сути этих вещей не изменяют.

Только вы ни старых имён не знаете, ни в новых не разбираетесь, доказательством чему служат ваши посты.


Цитата(w1nd)

"Допустим, вам нужно представить, как будет выглядеть изображение на составном экране или еще на какой-нить поверхности. Точки (из которых будет состоять эта поверхность, ваш будущий холст) будут родителями для самых разнообразных классов - от текстуры до телевизора."    


Тоже самое на русском языке, плз. Или, лучше, сразу на java.
А то у вас опять не разбери что и в каких значениях: экран/поверхность/точка/холст/текстуры. 

И заодно разрулите, почему составные части экрана называются точками.

---

Кстати, я правильно понимаю, что вы продолжаете настаивать на том, что наследовать квадрат от точки и человека от руки это замечательные решения? smile  

Это сообщение отредактировал(а) NotGonnaGetUs - 24.5.2006, 11:55
PM MAIL   Вверх
w1nd
Дата 24.5.2006, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: нет
Всего: 54



Цитата
Только вы ни старых имён не знаете, ни в новых не разбираетесь, доказательством чему служат ваши посты.

Незачем.

Цитата
Тоже самое на русском языке, плз.

Это прозвучало в теме три раза. Точка может быть представлена любым объектом для отображения на поверхности, состоящей из этих объектов. 

Цитата
Кстати, я правильно понимаю, что вы продолжаете настаивать на том, что наследовать квадрат от точки и человека от руки это замечательные решения?

Именно так.  


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
NotGonnaGetUs
Дата 25.5.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 25.2.2005
Где: Москва

Репутация: 8
Всего: 12



Цитата(w1nd)

Цитата(NGGU)

Только вы ни старых имён не знаете, ни в новых не разбираетесь, доказательством чему служат ваши посты. 


Незачем.


Трудно комментировать такое сильное утверждение smile)

Цитата(w1nd)

Это прозвучало в теме три раза. Точка может быть представлена любым объектом для отображения на поверхности, состоящей из этих объектов. 

После ваших перлов с геометрическим центром выпуклуго многоугольника, я уже мало удивляюсь подобным вашим выскзываниям.

Где задача-то?

Единственное, что я могу из ваших бессвязных фраз предположить:

Дано: набор точек заданных их координатами, плоскость разбитая на какие-то ячейки
Надо: отметить ячейки, в которые попадают точки.

Код

class Point {
       private int x,y;
}
class Polygon {
       private List<Point> apexes;
       public boolean contain(Point point) { 
              ...; //оперделяем содержится ли точка внутри многоугольника
       }
}
class Cell {
      private Polygon bounds; //самая простая имплементация

      public void draw(Point point) {
            if (canDraw(point)) {
                   ...; // отмечаем ячейку как содержащую точку
            }
      }

      public boolean canDraw(Point point) {
            return bounds.contain(point);
      }
}
class Pane {
       private List<Cell> cells;

       public void drawPoint(Point point){
              for(Cell cell: cells) { //наипростейший алгоритм отрисовки
                    сell.draw(point); 
              }
       }
}


Не вижу в упор, кто должен наследоваться от точки и зачем.
Не согласны?
Сформулируете внятно свою задачу и покажите зачем вам для её решения нужно наследоваться от точки.


Цитата(w1nd)

Цитата(NGGU)

Кстати, я правильно понимаю, что вы продолжаете настаивать на том, что наследовать квадрат от точки и человека от руки это замечательные решения? 

Именно так.   

Ну вы бы снизошли тогда до меня и показали бы где я ошибаюсь пытаясь показать, что наследование в подобных ситуациях не уместно.

Вами были выдвинуты тезисы:
- наследование нужно использовать для моделирования отношения has
- объект не должен никому давать доступ к своим данным
- свойства и javabeans не-ООП
- все GUI не-ООП

Защитить свою позицию вы не смогли. 

Я пока не получил от вас ни одного вразумительного ответа, одни только рассуждения о моей не способности понимать, что вы пишите.

Цитата(w1nd)

2simanyay Тем, кому так трудно что-либо представить, не пощупав (увидев код), я отвечу: "fuck yourself". Это можно перевести, как: "учитесь использовать собственную голову по назначению".  


Мне, н-р, абсолютно не трудно представить к какому коду приводит ваша позиция.
Вот тут это было проделано http://forum.vingrad.ru/index.php?showtopi...st&p=737660
Вы почему-то (хотя я ни на шаг не отступил от ваших слов) отказались обсуждать полученный результат, тем самым признав, что за свои слова вы не отвечаете. А если это так, то пытаться что-то представить самому из ваших слов просто бесполезное занятие. Так что Линус Торвальдс дважды прав. 
PM MAIL   Вверх
w1nd
Дата 26.5.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: нет
Всего: 54



Цитата(NotGonnaGetUs @  25.5.2006, 10:41)
После ваших перлов с геометрическим центром выпуклуго многоугольника, я уже мало удивляюсь подобным вашим выскзываниям.

Это не мой перл, определение я нашел в сети. К сожалению, неверное. На самом деле не имеет значения, является ли координата квадрата его центром (я такого предположения не высказывал, просто поддержал по причине незнания определения геометрического центра). 

Надо ли мне перестать воспринимать ваши слова из-за опечаток/ошибок/противоречий в ваших сообщениях? Или вам нечего возразить, но очень хочется? 

Цитата(NotGonnaGetUs @  25.5.2006, 10:41)
Единственное, что я могу из ваших бессвязных фраз предположить

Аплодисменты. Пожалуй, вы всё же не умеете читать. Я сформулировал задачу предельно ясно четыре раза в этой теме. 

Еще раз. Задача - показать результат выполнения рисунка в мозаике. Воспроизвести рисунок с помощью камешков, стёклышек или кафельных плиток. Так как камешков, стёклышек или плиток под рукой может не оказаться, сделать программу, которая выведет на экран рисунок, выполненный в мозаике, элементами которой может быть любой отображаемый объект. 

Если вам снова непонятно, срочно нанимайте преподавателя русского языка и литературы.

Цитата(NotGonnaGetUs @  25.5.2006, 10:41)
Ну вы бы снизошли тогда до меня и показали бы где я ошибаюсь пытаясь показать, что наследование в подобных ситуациях не уместно.

Вами были выдвинуты тезисы:
- наследование нужно использовать для моделирования отношения has
- объект не должен никому давать доступ к своим данным
- свойства и javabeans не-ООП
- все GUI не-ООП

Защитить свою позицию вы не смогли.

Я привел пример. Если считать это сообщение, то уже пять раз.

А на тезисах хотелось бы остановится подробнее. Разъяните, термин "отношение has", - для меня это что-то новое. 

Остальные тезисы, приведенные вами, к примеру не имеют отношения. Это ответы на вопросы или реплики оппонентов. С чего вы вообще взяли, что с их помощью я пытался защищать пример наследования?!

Цитата(NotGonnaGetUs @  25.5.2006, 10:41)
Мне, н-р, абсолютно не трудно представить к какому коду приводит ваша позиция. <...>
А если это так, то пытаться что-то представить самому из ваших слов просто бесполезное занятие. Так что Линус Торвальдс дважды прав.

Вот и представляйте. На счет слов я уже высказался, а Линус Торвальдс может быть правым, левым, верхним или нижним - это его проблемы.







 


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Domestic Cat
Дата 26.5.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 4
Всего: 172



w1nd временно забанен 

simanyay - аналогично  

Причина - нецензурная лексика.  


--------------------

PM   Вверх
Exception
Дата 26.5.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



No comments. Чувствую, что мне нечего сказать. Человек так и не подкрепил свою идею реальным примером кода и позволяет себе указывать всем вокруг, что они неправы.
 
PM   Вверх
Domestic Cat
Дата 26.5.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 4
Всего: 172




Модератор: Сообщение скрыто.



--------------------

PM   Вверх
Exception
Дата 26.5.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186




Модератор: Сообщение скрыто.

PM   Вверх
NotGonnaGetUs
Дата 29.5.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 25.2.2005
Где: Москва

Репутация: 8
Всего: 12



Уже разбанили? Можно продолжать?

Цитата(w1nd)

Это не мой перл, определение я нашел в сети. К сожалению, неверное. На самом деле не имеет значения, является ли координата квадрата его центром (я такого предположения не высказывал, просто поддержал по причине незнания определения геометрического центра). 


Дело не в том, где вы нашли определение. Дело в том, что вы его не поняли и стали использовать в своих сообщениях, утверждая из-за этого не возможные вещи. 


Цитата(w1nd)

Надо ли мне перестать воспринимать ваши слова из-за опечаток/ошибок/противоречий в ваших сообщениях? Или вам нечего возразить, но очень хочется? 


Если вы видите противоречая/ошибки в моих сообщениях, то напишите об этом.
И я либо соглашусь, что был не прав, либо объясню, что вы не поняли в моих словах.
Опечатки можно не комментировать.

Цитата(w1nd)

Аплодисменты. Пожалуй, вы всё же не умеете читать. Я сформулировал задачу предельно ясно четыре раза в этой теме. 


Пожалуй не соглашусь. Предельно ясной формулировки озвучено не было. 

Цитата(w1nd)

Еще раз. Задача - показать результат выполнения рисунка в мозаике. Воспроизвести рисунок с помощью камешков, стёклышек или кафельных плиток. Так как камешков, стёклышек или плиток под рукой может не оказаться, сделать программу, которая выведет на экран рисунок, выполненный в мозаике, элементами которой может быть любой отображаемый объект. 

Уже лучше, но я же просил код. Что от чего вы хотите отнаследовать? Продемонстрируйте, чтобы не было вопросов.

Что мы имеем:
Мозаика(Mosaic) состоит из кусочков (Сell) произвольного размера, цвета, формы. 
Задача стоит в том, чтобы отобразить картинку в мозаику и изобразить мозаику на экране.
Алгоритм преобразования картинки - не известен.

Первое что приходит на ум:

Код

interface Mosaic { //Готовая мозаика.
     List<Cell> getCells();
}

interface Cell {  //Произвольный кусочек
     Renderer getRenderer(); //один и тот же кусочек может отображаться по разному
}

interface Renderer {
     void render(Graphics g); 
}

interface MosaicBuilder {
       Mosaic createMosaic(BufferedImage picture); //реализует алгоритм отображения картинки в мозаику
}

class MosaicRenderer {
       private Mosaic mosaic;
       MosaicRenderer(Mosaic mosaic) {
               this.mosaic = mosaic;
       }
       public void render(Graphics g){ //тут можно наложить какие-нибудь эффекты и т.п.
               for(Cell cell: mosaic.getCells()) {
                       cell.getRenderer().render(g);
               }
       }
}

сlass Usage {
        public static void main(String[] args) {
                 new JFrame(){
                       {
                                BufferedImage image = loadImage(...);
                                Mosaic mosaic =  new ConcreteMosaicBuilder().createMosaic(image);
                                final MosaicRenderer renderer = new MosaicRenderer(mosaic);
                  
                                getContentPane().add(new JComponent(){
                                         public void paint(Graphics g){
                                                  renderer.render(g);
                                         }
                                });
                                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                       }
                 }.setVisible(true);
        }
}


Конкретные кусочки можно представить так:
 
Код

abstract class PolygonalCell implement Cell {
       protected Polygon bounds = new Polygon();
       protected Color color = Color.BLACK;
        
       public Color getColor() {
            return color;
       }
       
       public Polygon getBounds(){
            return new Polygon(bounds.xpoints, bounds.ypoints, bound.npoints); //или типа того 
       }
       
       protected void rotate(Point rotateCenter, int angle) {             
                ...;  //вращает полигон вокруг заданной точки
       }
      
       public Renderer getRenderer(){
               return new PolygonalRenderer(this);
       }
}

class PolygonalRenderer implements Renderer {
         private PolygonalCell cell;
         PolygonalRenderer(PolygonalCell cell) {
                 this.cell = cell;
         }

         public void  render(Graphics g) {
                  g.setColor(cell.getColor()); 
                  g.fillPolygon(cell.getPolygon());
         }
}

сlass SquareCell extends PolygonalCell {
       SquareCell(Point center, int size, int angle, Color defaultColor){
                 bounds.add(center.x - size/2, center.y - size/2);
                 bounds.add(center.x + size/2, center.y - size/2);
                 bounds.add(center.x + size/2, center.y + size/2);
                 bounds.add(center.x - size/2, center.y + size/2);
                 
                 color = defaultColor;

                 rotate(center, angle);
       } 
}

сlass TriangleCell extends PolygonalCell { 
       ...;
}



Цитата(w1nd)

А на тезисах хотелось бы остановится подробнее. Разъяните, термин "отношение has", - для меня это что-то новое. 

одно из отношений между объектами.

is-a - человек это млекопитающее
has - человек владеет сумкой

Цитата(w1nd)

Остальные тезисы, приведенные вами, к примеру не имеют отношения. Это ответы на вопросы или реплики оппонентов. С чего вы вообще взяли, что с их помощью я пытался защищать пример наследования?!

Все тезисы, влючая пропущенный про "комплексные типы", это утверждения прозвучавшие из ваших уст, с которыми я не согласен.
Я приводил аргументы в защиту своей точки зрения и не получил ответа с вашей стороны. 
Я "не брал, что с их помощью вы пытаетесь защищать пример наследования". 
Наследование - это один из этих тезисов.



Цитата(w1nd)

Вот и представляйте. На счет слов я уже высказался, а Линус Торвальдс может быть правым, левым, верхним или нижним - это его проблемы.

Угу, а я высказался на счёт вашего высказывания smile За свои слова нужно отвечать.

   

Это сообщение отредактировал(а) NotGonnaGetUs - 29.5.2006, 11:43
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1074 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.