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

Поиск:

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


Эксперт
****


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

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



Совершенно согласен с фразой:
Цитата(w1nd @  15.5.2006,  12:05 Найти цитируемый пост)
Что ж, некоторые собеседники (не буду указывать пальцем) выявили непонимание идеологии ООП (точнее выражаться не буду).


Цитата(onsh76 @  15.5.2006,  00:48 Найти цитируемый пост)
Domestic Cat, да нет наверное смысла  сказки глухому рассказывать ...
Винград форум силен тех.специалистами -  за это Вам большой респект... 
Нафига давать простор дилетантам и демагогам?
Закрывайте тему, господа модераторы, либо перемещайте ее в "Оффтоп"...  

Спасибо. 
Ванкувер? Жаль так там и не побывал.  


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

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


Шустрый
*


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

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



[quot w1nd]
Подведём итог. Изначальный вопрос - что может быть странного (или непонятного) в примере наследования квадрата от точки - так и остался без ответа  Разумеется, это была чистой воды провокация; мне самому чье-либо мнение по затронутым в теме вопросам... как бы это сказать... не очень интересно. Что ж, некоторые собеседники (не буду указывать пальцем) выявили непонимание идеологии ООП (точнее выражаться не буду).
[/quot]

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

Если последовательно провести вашу линию в жизнь, то окажется, что правильнаяя ОО программа должна состоять ровно из одного класса.
В самом деле, вернёмся к вашему решению об отображении размеров квадрата в статусБаре.
Почему вы решили, что квадрат должен говорить статусБару, что тот должен отображать?!
Чем СтатусБар хуже? Сделаем в нём метод showКвадрат(квадрат:Квадрат).
Чтобы сильно не мучаться соберём статусБар и квадрат в один класс. 
Полное сокрытие данных! Идилия!

Кстати о наследовании...
Мейер выделяет 12++ форм наследования, начиная от наследования интерфейса и заканчивая наследованием реализации.
Далеко не все из этих форм наследования доступны в ОО языках.  
Попытка наследовать класс квадрат от класса точка - это пример наследования реализации.
Наследуется не поведение (квадрат _всегда_ ведёт себя как точка), а какие-то языковые конструкции.
Так же точно можно наследовать: 

Код

class Point {
    protected int x; //координаты
    protected int y;
}

class Size extends Point {
                             //x = width, y = height
}  

class Dollar extend Size {
                             //x = доллары, y = центы
}


class Person extends Dollar {
                             //x = возраст, y = количество детей
}   


Тоже хотите задать вопрос  "что может быть странного" в этом примере?


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

Рекомендую к чтению не книжки безымянных программистов на С, а что-нибудь из нижеследующих:
http://www.ozon.ru/context/detail/id/2336754/  - что такое ОО метод
http://www.ozon.ru/context/detail/id/1048352/  - что такое ОО дизайн
http://www.ozon.ru/context/detail/id/1616782/  - немножко реальных задач
 
PM MAIL   Вверх
w1nd
Дата 16.5.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

З. Ы. Да, и кто такой Мейер? Всего лишь безвестный основатель EiffelSoft, хех. 

З. З. Ы. Еще и два плюса за этот бред получили smile   

Это сообщение отредактировал(а) w1nd - 16.5.2006, 17:00


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


Эксперт
****


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

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



Цитата(w1nd @  16.5.2006,  06:54 Найти цитируемый пост)
2NotGonnaGetUs: сударь мой, то что вы высказали - сами должны это понимать - бред.


Если честно, то то, что вы здесь высказали - бессвязные мысли, даже не оформленные во что либо законченное (хотя бы в код что ли) - не знаю как и назвать... Если просто покричать охота - вам не сюда. Потрудитесь вести спор нормально, а не кричать "бред" не отвечая по существу. 
Это предупреждение. 


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

PM   Вверх
w1nd
Дата 16.5.2006, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата
Если просто покричать охота - вам не сюда. Потрудитесь вести спор нормально, а не кричать "бред" не отвечая по существу.

Ваши слова: "то, что вы здесь высказали - бессвязные мысли" - есть ваше личное мнение, не более того. Единственное что можно охарактеризовать, как бессвязное в теме - вопросы (ваши и прочих). 

Я не намерен вести споры (тем более нормально), когда за мои слова выдают откровенную чепуху. Нормально я буду отвечать на адекватные вопросы. Если вам не нравятся ответы, закройте тему; если вам нужно дать покричать другим - выкиньте меня из форума. 


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


Эксперт
****


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

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



Цитата(w1nd @  16.5.2006,  10:03 Найти цитируемый пост)

Я не намерен вести споры (тем более нормально), когда за мои слова выдают откровенную чепуху.

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


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

PM   Вверх
chipset
Дата 16.5.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(w1nd @  15.5.2006,  11:05 Найти цитируемый пост)

Но главное - я никогда не считаю мнение того или иного автора истиной в последней инстанции. Эти самые авторы ничем не отличаются от нас - ушли из программирования благодаря продвижению по карьерной лестнице и теперь обладают временем для писательства.

А я считаю, что в учебе скромность и отсутствие мании величие тоже немаловажный фактор.
Цитата(w1nd @  14.5.2006,  19:09 Найти цитируемый пост)
Я не считаю это верным или неверным. Просто это будет нарушением принципов ООП.  

А можно по пунктам и с цитатами? Просто видишь-ли, дело в том что теория ООП используется на практике и большинство людей согласны с тем что данные которые надо открыть -- надо открывать, ибо в этом случае данные представляют собой интерфейс.
Ты же, пытаешься посягнуть на фундаментальное. Ок, ноу проблем, никто не сдерживает так сказать, "полёт мысли" и абстрактное мышление. Но будь добр доказать что ты прав.

Цитата(w1nd @  15.5.2006,  11:05 Найти цитируемый пост)
Изначальный вопрос - что может быть странного (или непонятного) в примере наследования квадрата от точки - так и остался без ответа smile 

(пошёл наследовать класс XML ноды от точки) 


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Void
Дата 16.5.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


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

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



w1nd, два вопроса:
Совместима ли статическая типизация с «хорошим ООП»?
Являются ли примитивные типы нарушением принципов «хорошего ООП»? 


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


software saboteur
****


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

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



Тут возникло предложение позвонить в Sun Microsystems и попросить заменить класс Object на класс Point ...   smile 
Теперь все от точки наследовать будем!!!   smile  smile  


--------------------
user posted image нет времени думать - нужно писать КОД!

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


Leprechaun Software Developer
****


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

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



Цитата(w1nd @  15.5.2006,  01:53 Найти цитируемый пост)
Как я уже дважды (если не больше) писал в этой теме, GUI делать я в ООП не буду даже и пытаться. Когда я делаю гуевые компоненты в Java, я не отступаю от принятого авторами стандарта. Переписывать существующие не-ООП фреймворки с нуля невыгодно, а гибрид делать невыгодно тем более - всё равно ничего хорошего не получится.

Ну хорошо, предположим что в существующих GUI фреймворках не соблюдаются ООП принципы, и комбинировать эти два подхода не выгодно. Хотя не совсем понятно как получается что:
Цитата(w1nd @  12.5.2006,  00:48 Найти цитируемый пост)
Хорошим примером ООП наверняка может быть отдельно взятый фрагмент в любом из существующих якобы-ООП-фреймворков

при этом если взять, что Java, что .NET там почти все построено на концепции properties, а:
Цитата(w1nd @  12.5.2006,  00:48 Найти цитируемый пост)
Самое жуткое - это, конечно, properties.


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


--------------------
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   Вверх
Domestic Cat
Дата 16.5.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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




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



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

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


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


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

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



Цитата(chipset @  16.5.2006, 20:56)
А я считаю, что в учебе скромность и отсутствие мании величие тоже немаловажный фактор.

Я тоже так считал. Когда учился.

Цитата(chipset @  16.5.2006, 20:56)
пошёл наследовать класс XML ноды от точки

Назовите свои pro et contra. Пока один лишь Domestic Cat возразил по существу, говоря, что квадрат в реальном мире не может быть представлен, как точка (хоть он в этом и не прав).

Цитата(Domestic Cat @  16.5.2006, 20:16)
Не увидел никакой чепухи, в данной теме вы именно это и утверждали.

Ну а я утверждаю, что подобного не писал smile Процитируйте что-нибудь, будте так любезны. Да, и, развивая тему, разъясните мне, что это было:
Цитата(MoonCat @  16.5.2006, 21:55)
Тут возникло предложение позвонить в Sun Microsystems и попросить заменить класс Object на класс Point ...    
Теперь все от точки наследовать будем!!!
К слову, разъясните мне так же, как все мирятся с вопиющим фактом наследования классов вроде AbstractAction из класса Object. Исходя из верований всех отметившихся, класс Object может быть родителем AbstractAction только в том случае, если будет переименован в Something или что-то в этом духе.

Добавлено @ 23:28 
Цитата(Void @ 16.5.2006,  20:56)
w1nd, два вопроса:
Совместима ли статическая типизация с «хорошим ООП»?
Являются ли примитивные типы нарушением принципов «хорошего ООП»?

Да. Нет. 
Что вы хотели сказать?

Добавлено @ 23:34 
Цитата(LSD @ 16.5.2006,  22:21)
Цитата(w1nd @  15.5.2006,  01:53 Найти цитируемый пост)
Как я уже дважды (если не больше) писал в этой теме, GUI делать я в ООП не буду даже и пытаться. Когда я делаю гуевые компоненты в Java, я не отступаю от принятого авторами стандарта. Переписывать существующие не-ООП фреймворки с нуля невыгодно, а гибрид делать невыгодно тем более - всё равно ничего хорошего не получится.

Ну хорошо, предположим что в существующих GUI фреймворках не соблюдаются ООП принципы, и комбинировать эти два подхода не выгодно. Хотя не совсем понятно как получается что:
Цитата(w1nd @  12.5.2006,  00:48 Найти цитируемый пост)
Хорошим примером ООП наверняка может быть отдельно взятый фрагмент в любом из существующих якобы-ООП-фреймворков

при этом если взять, что Java, что .NET там почти все построено на концепции properties, а:
Цитата(w1nd @  12.5.2006,  00:48 Найти цитируемый пост)
Самое жуткое - это, конечно, properties.


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

Не из одних properties все они состоят. Под фрагментами я имел в виду кусок модели классов, способы взаимодействия отдельных классов и прочие подобные детали.
Что касается последнего вопроса - да, безусловно. Что из этого следует?  

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


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


Leprechaun Software Developer
****


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

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



Цитата(w1nd @  17.5.2006,  00:21 Найти цитируемый пост)
Не из одних properties все они состоят.

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

Цитата(w1nd @  17.5.2006,  00:21 Найти цитируемый пост)
Что касается последнего вопроса - да, безусловно. Что из этого следует?

И они были написаны в соответсвии с твоими представлениями об ООП? 


--------------------
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   Вверх
Void
Дата 17.5.2006, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


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

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



Цитата(w1nd @  17.5.2006,  01:21 Найти цитируемый пост)
Что вы хотели сказать?

Я пытаюсь уяснить для себя ваше понимание ООП.

Если убрать из ваших постов излишний апломб и некорректные примеры, я с вами даже соглашусь по большей части. (Впрочем, вполне вероятно, что я вас опять неправильно понял, и вы меня быстро заставите изменить свое мнение).
Вы утверждали, что getters/setters и свойства нарушают инкапсуляцию и создают излишние связи между объектами. Но четкая граница между getter и посылкой сообщения «скажи мне какую-то свою характеристику» объекту так и не была проведена.
Свойство может скрывать сколь угодно сложную логику. Если нет прямого соответствия между значением свойства и каким-либо полем класса, если оно возвращает нечто вычисляемое, существенную информацию об объекте — оно не противоречит ООП и является синтаксическим сахаром над нотацией метода/пары методов, не так ли? (Если не так, я уж и не знаю, что сказать).
Но есть объекты, информация, содержащаяся в полях которых, составляет часть публичного интерфейса. Например, возьмем класс… нет, лучше интерфейс коллекции. Коллекция должна предоставлять метод для перебора своего содержимого — это ее наиболее существенное качество. Но можем ли мы отказать в существовании свойству или getter'у, который будет возвращать число элементов, содержащихся в коллекции? А ведь это тело этого свойства, скорее всего, будет состоять всего лишь из возврата значения поля.
Вы сказали, что примтивным типам не место в ООП. Но так или иначе, без типов, соответствующих, к примеру, множеству целых чисел, не обойтись. Значит, нужны классы, обладающие поведением целых чисел. А они-то как общаться будут с окружающим миром, не выпадая из рамок ООП?

Цитата(w1nd @  13.5.2006,  22:06 Найти цитируемый пост)
экземпляр_класса_квадрат.отобразить_свой_размер_в_статус_баре().

А вам не кажется, что при таком подходе количество излишних связей только возрастает? Ведь теперь класс квадрата обязан знать обо всех типах объектов, в которых ему надо отобразить свой размер. Или введем еще интерфейс нечто_в_чем_можно_отобразить_размер_квадрата?

Цитата(w1nd @  13.5.2006,  19:19 Найти цитируемый пост)
Конечно можно! Как правило, путем отказа от парадигм ООП.

А кто сказал, что отказ от парадигмы ООП — это непременно плохо? Не будьте догматиком. Цель проектирования — не следование парадигмам ООП (которые всяк норовит истолковать по-своему), а повышение уровня абстракции. Так что дело не в «недостаточной объектно-ориентированности» существующих фреймворков, а в том, что так называемое «чистое ООП» не является универсальным подходом. Говоря формальным языком, полностью stateful модель точно так же не всегда подходит для описания предметной области, как и полностью stateless. 


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


Эксперт
****


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

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



Цитата(w1nd @  16.5.2006,  14:21 Найти цитируемый пост)
Пока один лишь Domestic Cat возразил по существу, говоря, что квадрат в реальном мире не может быть представлен, как точка (хоть он в этом и не прав).

Речь шла (как я понял и на чем делал упор) о геометрии, а не вообще квадрате в любом контексте. И в этом случае подобное наследование ничем не лучше приведенных NotGonnaGetUs примеров. 
Цитата(w1nd @  16.5.2006,  14:21 Найти цитируемый пост)
Ну а я утверждаю, что подобного не писал

Относительно наследования вы утверждали что
1. Квадрат нужно наследовать от точки, тк у квадрата есть те же поля что и у точки
2. Пример номер два: наследовать квадрат от Size
3. Пример номер 3: Company можно наследовать от Contact.
Может вы этого не писали?
  


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

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

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

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


 




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


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

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