паранойя наследования
От: antonlavreev Россия  
Дата: 09.04.08 15:57
Оценка: 1 (1) +8 :)
Добрый день,
я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...


10.04.08 11:33: Перенесено модератором из 'C/C++' — Odi$$ey
Надо больше читать и думать
Re: паранойя наследования
От: Zigmar Израиль  
Дата: 09.04.08 16:28
Оценка:
Здравствуйте, antonlavreev, Вы писали:

A>Добрый день,

A> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...
Кажется, "паранойя наследования" как раз у автора поста а не наоборот
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Re[2]: паранойя наследования
От: antonlavreev Россия  
Дата: 09.04.08 16:34
Оценка:
Здравствуйте, Zigmar, Вы писали:

Z>Здравствуйте, antonlavreev, Вы писали:


A>>Добрый день,

A>> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...
Z>Кажется, "паранойя наследования" как раз у автора поста а не наоборот

Да у меня как раз нет просто во многих случаях я не понимаю зачем городить огород с наследованием, если можно использовать например, decorator или моделирование на основе стратегий и т.д.
Надо больше читать и думать
Re[2]: паранойя наследования
От: neFormal Россия  
Дата: 09.04.08 16:57
Оценка:
Здравствуйте, Zigmar, Вы писали:

Z>Кажется, "паранойя наследования" как раз у автора поста а не наоборот


нет, это "инХЕРофобия" — боязнь наследования..
...coding for chaos...
Re: паранойя наследования
От: Кодт Россия  
Дата: 09.04.08 17:18
Оценка: +1
Здравствуйте, antonlavreev, Вы писали:

A> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...


Это ты про Возможно ли вызвать оператор = класса предка в его потомке
Автор: Melamed
Дата: 09.04.08
?
Да, я бы тоже задумался — зачем это наследоваться от вектора...
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: паранойя наследования
От: Аноним  
Дата: 09.04.08 18:02
Оценка:
A> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...
Да нет ниче тупикового при грамотном использовании. Хотя конечно имеются проблемы у людей испорченных общением с делфи.
Re[3]: паранойя наследования
От: Аноним  
Дата: 09.04.08 18:31
Оценка:
Здравствуйте, antonlavreev, Вы писали:

A>Да у меня как раз нет просто во многих случаях я не понимаю зачем городить огород с наследованием, если можно использовать например, decorator или моделирование на основе стратегий и т.д.


У меня уже длительное время происходит накопление паранойи стратегий и чувствую, скоро она случится

    class СChudoStrategnyiClass
        : public strats::armer<СChudoStrategnyiClass, bmpl::vector<
            strats::control_handleEventsStatic
            ,strats::control_data4UpdateCookieOnce
            ,strats::method
            ,strats::processor_static
            ,strats::methodInitializer_holder
            ,strats::singletonSeparator_fld
        > >::type
    {
    public:
        ...
Re: паранойя наследования
От: rg45 СССР  
Дата: 09.04.08 18:57
Оценка: +2
Здравствуйте, antonlavreev, Вы писали:

A>Добрый день,

A> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...

А можно как-то более конкретно пояснить, о каких "профессиональных" разработчиках идет речь и привести примеры случаях неуместного наследования, сделанного ими? В моем представлении если разработчик применяет наследодование без рабору, где нужно и где не нужно, то профессиональным его назвать никак нельзя.
... << RSDN@Home 1.2.0 alpha rev. 787>>
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: паранойя наследования
От: antonlavreev Россия  
Дата: 10.04.08 05:36
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, antonlavreev, Вы писали:


A>>Добрый день,

A>> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...

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


К примеру, есть некий класс B, который хранит некие идентификаторы — контейнер с числами. Далее требуется сделать так, чтобы он хранил контейнер с идентификаторами + каждому идентификатору ставился в соответствие еще один атрибут At. Происходит наследование от B. Далее другой атрибут At2 — еще раз наследование от B. Уже выглядит странновато. А затем выясняется, что нужен такой объект у которого был бы и идентификатор, и At, и At2... И лучше бы обойтись без виртуального наследования...Т.е. на каждый дополнительный атрибут(ы) будут создаваться классы-наследники...
Надо больше читать и думать
Re: паранойя наследования
От: jazzer Россия Skype: enerjazzer
Дата: 10.04.08 07:19
Оценка: +2
Здравствуйте, antonlavreev, Вы писали:

A>Добрый день,

A> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...

ты параною с манией не путаешь случайно?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: паранойя наследования
От: TheBeard Россия  
Дата: 10.04.08 07:24
Оценка: +1
A>> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования

J>ты параною с манией не путаешь случайно?


Путает, вне всякого сомнения. "Паранойя чего-либо" -- так по-русски вообще не говорят.
Re[3]: паранойя наследования
От: neFormal Россия  
Дата: 10.04.08 08:06
Оценка: +1
Здравствуйте, antonlavreev, Вы писали:

A>К примеру, есть некий класс B, который хранит некие идентификаторы — контейнер с числами. Далее требуется сделать так, чтобы он хранил контейнер с идентификаторами + каждому идентификатору ставился в соответствие еще один атрибут At. Происходит наследование от B. Далее другой атрибут At2 — еще раз наследование от B. Уже выглядит странновато. А затем выясняется, что нужен такой объект у которого был бы и идентификатор, и At, и At2... И лучше бы обойтись без виртуального наследования...Т.е. на каждый дополнительный атрибут(ы) будут создаваться классы-наследники...


имхо наследование нужно, когда нужно добавить/изменить поведение объекта, а не хранимые данные..
если только данные, то рефакторинг в сторону большей гибкости..
...coding for chaos...
Re: паранойя наследования
От: _FRED_ Черногория
Дата: 10.04.08 08:12
Оценка:
Здравствуйте, antonlavreev, Вы писали:

A> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...


ИМХО, всё дело в виде наследования: нельзя забывать, что в С++ _по умолчанию_ предлагается private-наследование, в котором ничего плохого нет: при желании заменить его на агрегирование или на что-то другое или выкинуть вовсе будет не так сложно. Проблемы есть с "видимым наружу" наследованием, которое надо обдумывать весьма и весьма тщательно.

Как говорили некогда гиганты мысли: "наследование (от себя добавлю, что речь, бузусловно, шла не о закрытом наследовании) — сильнейшая связь между объектами, разорвать которую сложнее всего". Вот поэтому избегать его, при возможности, необходимо.
... << RSDN@Home 1 alpha 3 rev. 0>>
Help will always be given at Hogwarts to those who ask for it.
Re[3]: паранойя наследования
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 10.04.08 08:39
Оценка: 3 (2) +4 -2 :)
Здравствуйте, antonlavreev, Вы писали:

A>Да у меня как раз нет просто во многих случаях я не понимаю зачем городить огород с наследованием, если можно использовать например, decorator или моделирование на основе стратегий и т.д.

Предложите программистам почитать, к примеру, GoF-ов. Наследованию стоит предпочитать композицию объектов.
  1. Наследование
    Плюсы:
    • статически детерминировано;
    • проще в использовании, так как вшито в ООЯ.
    Минусы:
    • статическая определенность кроме того и минус: нельзя изменить реализацию во время исполнения;
    • наследование нарушает инкапсуляцию, так как наследник имеет доступ к членам класса родителя, как следствие, в наследниках возникают, к примеру, проблемы безопасности инициализации при потере указателя this, вызов виртуальных методов, потоков и т.п. из конструктора и прочее;
    • наследование настолько тесно связывает классы, что изменение в родителе вызывает или волну изменений в наследниках, или волну ошибок в оных.
  2. Композиция
    Плюсы
    • определяется динамически за счет перекрестных ссылок (не связаны руки компилятором, во время исполнения любой объект может быть подменен другим соответствующего типа);
    • применяется на основе взаимного соблюдения классами контрактов друг друга, предпочтительно основанных на интерфейсах, то есть не нарушается принцип инкапсуляции;
    • не помню, писали об этом GoF-ы или нет: такие структуры объектов проще понимать, чем сложные графы наследования, ведь композиция приводит к более простым графам наследования, принуждает постепенно писать ориентируясь на шаблоны проектирования, в первую же очередь на основной принцип — одной ответственности класса.
    Минусы:
    • на ум приходит только высокий порог вхождения, то есть необходимость в некотором минимальном опыте разработки, чтобы понять, чем композиция лучше наследования; соответственно минус в том, что новичкам сложно понимать "композиционный код".
Многие задачи, решаемые наследованием, могут быть решены, как вы и сказали выше, на основе делегирования (а это и есть один из вариантов композиции). Кроме того, часто от наследования можно уйти за счет обобщенного программирования.
Re[4]: паранойя наследования
От: gbear Россия  
Дата: 10.04.08 11:20
Оценка:
Здравствуйте, neFormal, Вы писали:

F>имхо наследование нужно, когда нужно добавить/изменить поведение объекта, а не хранимые данные..


Вот насчет "изменить", имхо, таки нет.

---
С уважением, Сиваков Константин.
Re[4]: паранойя наследования
От: dr.Chaos Россия Украшения HandMade
Дата: 11.04.08 07:59
Оценка:
Здравствуйте, rsn81, Вы писали:

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


+1. Только старые компиляторы не позволяют иногда, а иногда и наоборот бывает приходится эмулировать наследованием отсутствие частичных специализаций.

Извиняюсь за оффтоп — накипело от общения с VC 6.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[2]: паранойя наследования
От: ZevS Россия  
Дата: 11.04.08 09:21
Оценка:
Здравствуйте, rg45, Вы писали:

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


Насчет профессионалов не знаю, но всякие учебники по ООП пестрят подобными примерами. Я конечно понимаю, что их цель просто продемонстрировать наследование. Он ведь будущий профессионал должен уметь не наследовать, а программировать. Вроде так.
Re[2]: паранойя наследования
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 12.04.08 08:04
Оценка:
Здравствуйте, rg45, Вы писали:

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


Классический пример в мире Java — класс Stack (или Queue, точно уж не помню) реализованный через наследование от класса Vector. Бага допущена очень давно, сейчас применяются совсем другие решения — но как пример сойдет.
http://jvmmemory.com — простой способ настройки JVM
Re: паранойя наследования
От: жертва мехмата Россия http://absurdopedia.wikia.com/
Дата: 07.07.08 14:31
Оценка: +1 -1
Здравствуйте, antonlavreev, Вы писали:

A>Добрый день,

A> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...


Встает вопрос, а нужно ли использовать наследование вообще?
Отношение "интерфейс-реализация" — согласен, нужно и необходимо на уровне языка программирования.
А вот моделировать отношение "широкое понятие — узкое понятие" теми способами, которые предлагают C++/Java (наследование) — куча смутных сомнений.
Как считает цивилизованная общественность, идея полного отказа от наследования в пользу делегирования — имеет ли право на существование?
Adobe Hitler. Zip File!!! Zip File!!!
Re: паранойя наследования
От: WFrag США  
Дата: 07.07.08 15:15
Оценка: 17 (2) :)))
Здравствуйте, antonlavreev, Вы писали:

A>Добрый день,

A> я все-таки никак не пойму почему у "профессиональных" разработчиков ПО часто прослеживается паранойя наследования — надо что-то заимплементить, мы пронаследуемся и еще раз и еще.... Может стоит остановиться и подумать над дизайном??? Ведь неоправданное наследование это тупиковый вариант, для последующего внесения изменений, они нарастают как снежный ком...

Да, иной раз смотришь на то, что понаписали джуниоры, и понимаешь, что порой наследование — это как копипаст, но без копипаста
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.