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

Поиск:

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


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Цитата(w1nd @  18.5.2006,  22:40 Найти цитируемый пост)
Не надо выдавать чьи-то формулировки за "общепринятые"

Цитата(w1nd @  18.5.2006,  22:40 Найти цитируемый пост)
Да, не утруждайтесь мне разъяснять, что есть ООП, JavaBeans, шаблоны, хороший тон в проектировании. Ваши усилия пропадают зря: вы не сообщите мне ничего нового или интересного, а ваше понимание этих вопросов - это только ваше понимание.

Тем не менее вы в данный момент пытаетесь выдать свои формулировки за абсолютную истину. Если нет, то я не понимаю вообще смысла этого спора.
Цитата(w1nd @  18.5.2006,  22:40 Найти цитируемый пост)
Цитата(NotGonnaGetUs @  18.5.2006, 14:36)
Решить задачу вычисления расстояния между двумя объектами согласно вашей (новаторской) трактовке ООП нельзя вовсе, чтобы не скатиться к "процедурному коду" <…>

Легко и непринужденно. Ни в чем не отступая от ООП.

Ждем с нетерпением. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Irokez
Дата 18.5.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



Цитата(w1nd @  17.5.2006,  16:38 Найти цитируемый пост)
Реальные проекты целиком на ООП - никогда.

я бы уже после этого закрыл спор smile  
PM   Вверх
skyboy
Дата 18.5.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Асилил  smile Особо улыбнуло следующее: квадрат - суть точка, точка имеет размер(Si!), а квадрат имеет координаты(впервые слышу, честно говоря... координаты имеет каждая из вершин квадарта, но не квадрат в целом). Конечно, это мелочи на фоне развёрнутых боевых действий  smile Так и не понял, в чём же свойства виноваты? Как уже было замечено(вполне справедливо) свойства, в отличии от публичных полей, просто замаскированный синтаксисом вызов методов - где тут нарушение инкапсуляции? 
PM MAIL   Вверх
w1nd
Дата 18.5.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата
Тем не менее вы в данный момент пытаетесь выдать свои формулировки за абсолютную истину. Если нет, то я не понимаю вообще смысла этого спора.

Господин NotGonnaGetUs имел смелость предположить, что незнание мною известной ему формулировки говорит о моем незнании формулируемого.  

Цитата
Ждем с нетерпением. 


Код

Point {
    public int x, y;
}

Polygon {
    private Point coord;
    public int distance(Point p);
    public int distance(Polygon p);
    protected Point findNearestPointFor(Point p);
}


Этого хватит. Да, если вы мне захотите сказать, что я сам был против возврата данных (как NotGonnaGetUs) - перечитайте мои посты.

Добавлено @ 00:05 
Цитата(skyboy @ 18.5.2006,  23:16)
Как уже было замечено(вполне справедливо) свойства, в отличии от публичных полей, просто замаскированный синтаксисом вызов методов - где тут нарушение инкапсуляции?

Как уже было замечено (вполне справедливо), свойства, в отличие от обычных публичных полей, просто замаскированы парой методов. Но при этом остаются публичными полями.   

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


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


Эксперт
***


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

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



Цитата(w1nd @  11.5.2006,  19:02 Найти цитируемый пост)
Цитата
Наследование - это отношение is-a
Именно так. Но вы (как и многие) допускаете распространенную ошибку - отождествляете эти классы с объектами реального мира. Для квадрата свойственны все поля и методы координаты и размера - именно это (все поля и методы) определяет наличие отношения is-a для классов.    

Спорные аргументы приводите.

http://forum.vingrad.ru/index.php?showtopi...st&p=736064 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
skyboy
Дата 19.5.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

Как уже было замечено (вполне справедливо), свойства, в отличие от обычных публичных полей, просто замаскированы парой методов. Но при этом остаются публичными полями.  

Я правильно понял? Вы против данных, связанных с конкретным экземплярам объекта, как таковых? Т.е. из связки код+данные просто выбрасываем вторую часть и оставляем только методы? А что же тогда методы будут обрабатывать? Скажем, для отрисовки чего-то надо будет не просто вызвать метод отрисовки, а и обьяснить, в каком месте рисовать и какого размера(ведь данные у нас в объекте не хранятся - надо передавать)? smile  
PM MAIL   Вверх
w1nd
Дата 19.5.2006, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(skyboy @ 19.5.2006,  01:08)
Я правильно понял? Вы против данных, связанных с конкретным экземплярам объекта, как таковых? Т.е. из связки код+данные просто выбрасываем вторую часть и оставляем только методы? А что же тогда методы будут обрабатывать? Скажем, для отрисовки чего-то надо будет не просто вызвать метод отрисовки, а и обьяснить, в каком месте рисовать и какого размера(ведь данные у нас в объекте не хранятся - надо передавать)? smile

Нет, я против свободного доступа к данным объекта. 


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


Эксперт
***


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

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



w1nd, умница. 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Exception
Дата 20.5.2006, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Я бы сейчас с большой радостью поделился своими ошибками.. Как раз вроде наследования компании от контакта. И к чему это привело. Но ведь Вам всё равно плевать на других, лишь бы Вашу идею никто не смог оспорить. Да ну, с Вами неинтересно. Очень напоминает тема вот что:
http://forum.vingrad.ru/index.php?showtopi...44&view=all
Особенно мне нравится последний пост - "Усекли?". Видимо, с такой аргументацией, Ваше мышление тоже никто не "усечёт". 
PM   Вверх
w1nd
Дата 20.5.2006, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Exception @ 20.5.2006,  00:29)
Я бы сейчас с большой радостью поделился своими ошибками.. Как раз вроде наследования компании от контакта. И к чему это привело. Но ведь Вам всё равно плевать на других, лишь бы Вашу идею никто не смог оспорить. Да ну, с Вами неинтересно. Очень напоминает тема вот что:
http://forum.vingrad.ru/index.php?showtopi...44&view=all
Особенно мне нравится последний пост - "Усекли?". Видимо, с такой аргументацией, Ваше мышление тоже никто не "усечёт".

Я никого здесь не просил поделиться со мной ошибками или "научить" меня что-то правильно делать. Это мне действительно не интересно. Я хотел увидеть ситуацию, когда пример с квадратом действительно работать не будет. Мне казалось - всё пучком.

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


   

Это сообщение отредактировал(а) w1nd - 20.5.2006, 01:15


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


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


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

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



w1nd, против свободного доступа к данным методам самого же объекта?! А кто ж их тогда будет обрабатывать?  smile  
PM MAIL   Вверх
Exception
Дата 20.5.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ОК.
Код
class Point
{
public int X;
public int Y;
void Draw(StatusBar sb)
}
class Rectangle : Point
{
public Point[] Points;
overrides void Draw(StatusBar sb);
}
/****/
Point p = new Point()
p.X = 5;
p.Y = 5;
p.Draw(myStatusBar);
p = new Rectangle() // у Вас такое вполне нормально?
p.Draw(myStatusBar); // вместо прямоугольника рисуется точка

Такое поведение нельзя назвать нормальным. 
PM   Вверх
NotGonnaGetUs
  Дата 20.5.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(w1nd)

А вас не смущает тот факт, что компоненты Swing - всё те же компоненты AWT? Никто не пользуется   Большая часть событий, поступающих Swing'овым компонентам - события AWT, очередь событий AWT никуда не делась. И способы взаимодействия компонент со времен AWT не изменились и вряд ли изменятся. 


Компоненты awt и компоненты swing находятся в различных иерархиях наследовния. 
Попробуйте, смеха ради, смешать те и другие компоненты.

Очередь событий не имеет никакого отношения к моделям обработки событий. 

На пальцах: 
awt: при движении мышкой создаётся событие. оно попадает в компонент над которым оно произошло. если компонент его не обработал, оно идёт к следующему компоненту и т.д.
swing: при движении мышкой создаётся событие, которое попадет именно в тот компонент, который на него зарегистировался.

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

-----

Цитата(w1nd)

Термин? С какой высоты падали? 
Какие понятия? Чьи термины? Не надо выдавать чьи-то формулировки за "общепринятые".  Вы читаете или просто текст распознаёте?


Хотелось бы читать, но приходится распознавать:

"объект сам управляет своими данными" (см. ниже новой термин)"  - так и не увидел, где это ниже...

"как вы управитесь с распределением прав на примере JFrame.getState() или JFrame.getExtendedState()."  -  прав на что и между кем их нужно распределять?

Насчёт чьих-то формулировок это круто smile Оказывается "принцип подстановки Лисков" придумал я. Хочу премию за это.

Кстати о терминах:
Цитата(w1nd)

З. Ы. У любого геометрического объекта, между прочим, есть центр, а у точки отсутствует размер, поэтому любой объект - суть точка. 

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

У любого многоугольника (являющегося геометрическим объектом), который нельзя вписать в окружность, не будет "центра". 

Цитата(w1nd)

Согласиться с чем? Что чепуха?  Еще раз, на пальцах: есть некий объект, есть его проекция на плоскость, которая полностью умещается в одну ячейку координатной сетки плоскости (объект находится очень далеко от плоскости), т. е. проекция данного объекта вырождена в точку.

Проекция не зависит от расстояния до плоскости. (с) учебник геометрии

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

-----

Цитата(w1nd)

Цитата(NGGU)

Решить задачу вычисления расстояния между двумя объектами согласно вашей (новаторской) трактовке ООП нельзя вовсе, чтобы не скатиться к "процедурному коду" (с)w1nd.

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


Да, кстати, укажите слова "процедурному коду", если найдёте. 


Я всегда полагал (со ссылкой на работы классиков "поднявшихся вверх по служебной лестнице" smile),  что "структурный" это значит без использования операторов перехода (goto), а "процедурный" это когда есть процедуры/функции.

Вы творчески переосмыслили эти термины:
Цитата(w1nd)

Поэтому в структурно-ориентированной среде я практикую структурный подход. А в процедурно-орентированной ни за что не буду внедрять объекты.  
...
свойство навязывает структурный подход к взаимодействию с объектом: получить значение свойства, произвести некоторые вычисления, результат поместить обратно или передать другому объекту. 
...
ООП практически невозможно внедрить частично в структурно-ориентированный проект. 
...
Геттеры/сеттеры - это как раз нарушение инкапсуляции (замаскированный прием структурного программирования). 


У вас противопоставляются "структурно-ориентированный" и "процедурно-орентированный" "подходы" между собой и с ООП.

Понять с каких позиций вы противопоставляете С-О и П-О, я так и не смог.
Разницу между ПО и ООП я вижу только в способе декомпозиции, о чём писал выше. 
"не ООП", как я представляю, это "процедурный код с объектами": процедуры помещённые случайным образом в классы (стиль C-шников насильно пересаженных на C++)...

Поскольку getter/setter (доступ к данным) по вашим словам "бредовое ООП", что равнозначно "не ООП", то получаем что получаем: вам придётся писать "процедурный код".

Ах, да. Доступ к данным (c позиций "ООП"): 
Цитата(w1nd)

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

Перечитал одно:
Цитата(w1nd)

 Мы можем послать объекту сообщение (вызвать метод): "сделай что-то", но никогда не можем запросить у объекта данные.   

другое:
Цитата(w1nd)

Цитата(w1nd)

Доступ к данным должен быть невозможен. 
Цитата(???)

Кто это сказал? 


Вообще-то это имеет какое-то отношение к инкапсуляции, и говорят об этом все авторы, пишущие об ООП. 

третье:
Цитата(w1nd)

Цитата(???)

В чем принципиальная разница между мессагами "верни мне массив твоих координат" и "верни мне твою площадь"? 

Да ни в чем. Ни то, ни другое не нужно. От объекта нужен только функционал. Для чего его координаты или площадь? Где-нибудь нарисовать? Это сделает сам объект

четвёртое:
Цитата(w1nd)

Цитата(???)

Почему тогда объект не может сообщить свой размер? Я не понимаю! .

Я не считаю это верным или неверным. Просто это будет нарушением принципов ООП.  


----

Цитата(w1nd)

Само существование методов вроде DrawPoint или CreatePolygon полностью противоречит принципам ООП. Только сам объект может себя рисовать или создавать.


Во первых _объект_ сам себя создать в приципе не может. Объект всегда создаётся кем-то, посредством вызова конструктора.
Существуют ситуации, когда создатель объекта не может (не известно на момент написания кода) или не должен (из соображений инкапсуляции) знать объект какого класса он создаёт. Решения подобных проблем задокументированы в виде паттернов ООП.
Выходит паттерны ООП полностью "противоречат приципам ООП"?! 

----
Цитата(w1nd)

Код

Point {
    public int x, y;
}

Polygon {
    private Point coord;
    public int distance(Point p);
    public int distance(Polygon p);
    protected Point findNearestPointFor(Point p);
}


Вы уже не считаете, что наследование от точки это хорошая идея, гуд, но, О УЖАС(!),  у класса Point публичные поля! Это же "структурное программирование"(с)w1nd!

А как же утверждение: 

Цитата(w1nd)

С собственными атрибутами может работать только сам объект. Если некоему объекту X требуются данные квадрата, единственный путь - реализовать в квадрате обработчик сообщения (метод), который передаст эти данные объекту X.


Согласно ему должно быть написано такое:

Код

Point {
     private  int x, y;
     public void plsGiveMeXAndY(Polygon p);
}

Polygon {
    private Point coord;
    public int distance(Point p);
    public int distance(Polygon p);
    protected Point findNearestPointFor(Point p);

    public void setXAndY(int x, int y);
}


Нет! Не то. setXAndY() может вызвать кто угодно! Надо сделать интерфейс!

Код


Interface PointConsumer {
    void setData(int x, int y);
}

Point {
     private  int x, y;
     public void plsGiveMeXAndY(PointConsumer c);
}

Polygon {
    private class Consumer implements PointConsumer {
            void setData(int x, int y){
                   setXAndY(x, y);
            }
 
    }
    private Point coord;
    public int distance(Point p) {
          ...
          p.plsGiveMeXAndY(new Consumer());
          ...
    } 
    public int distance(Polygon p);
    protected Point findNearestPointFor(Point p);

    private void setXAndY(int x, int y);
}


Чёрт, а как же получить x и у  из метода setXAndY в методе вызвавшем plsGiveMeXAndY?
Сделать поля? А если нужно будет у разных точек узнать x и у? Значит нужны локальные переменные для хранения !
Хм. А этого добиться?  Сделаем MutableInteger!

Код

class MutableInteger {
      private int value;
      public void setValue(int value) {
          this.value = value;
      }
      public int getValue() {
          return value;
     }
}

Interface PointConsumer {
    void setData(int x, int y);
}

Point {
     private  int x, y;
     public void plsGiveMeXAndY(PointConsumer c);
}

Polygon {
    private class Consumer implements PointConsumer {
            private Mutable x,y;
            public Consumer(MutableInteger x, MutableInteger y){
                   this.x = x;
                   this.y = y;
            }
            void setData(int x, int y){
                   this.x.setValue(x);
                   this.y.setValue(y);
            }
    }
    private Point coord;
    public int distance(Point p) {
          ...
          MutableInteger x = new MutableInteger();
          MutableInteger y = new MutableInteger();
          p.plsGiveMeXAndY(new Consumer(x,y));
          
          ...
    } 
    public int distance(Polygon p);
    protected Point findNearestPointFor(Point p);
}


Так, уже лучше..., но что-то не даёт покоя... Ах, да! У MutableInteger есть getter/setter smile

Кажется мне, как и w1nd'у, не удалось написать правильную по w1nd ОО программу, не скатившись к структурному/процедруному/плохому ооп (нужное подчеркнуть) smile
   

Это сообщение отредактировал(а) NotGonnaGetUs - 20.5.2006, 15:32
PM MAIL   Вверх
LSD
Дата 20.5.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(NotGonnaGetUs @  20.5.2006,  16:12 Найти цитируемый пост)
У любого многоугольника (являющегося геометрическим объектом), который нельзя вписать в окружность, не будет "центра".

Ромб не всегда можно вписать в окружность, но тем не менее центр у него есть. Другое дело что не для всякой геометрической фигуры можно дать определение центра. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
NotGonnaGetUs
Дата 20.5.2006, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(LSD)

Ромб не всегда можно вписать в окружность, но тем не менее центр у него есть. Другое дело что не для всякой геометрической фигуры можно дать определение центра.  

Автор привёл определение "центра", как равноудалённой точки от вершин многоугольника. У робма такой точки нет.

 
PM MAIL   Вверх
Страницы: (10) Все « Первая ... 6 7 [8] 9 10 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

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

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


 




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


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

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