// codeart.ru / Теория программирования / Наследование против композиции, что предпочтительнее? Форум

Наследование против композиции, что предпочтительнее? rss подписка

Автор: Evgeniy Sergeev

Недавно, мне предложили провести серию небольших семинаров по объектно ориентированному программированию. Я согласился. И вот теперь пытаюсь накидать конспект лекции по инкапсуляции и наследованию.

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

  1. Немного о behaviour тестировании в TDD
  1. в контексте какого языка обсуждение?
    ведь очень важно наличие или отсутствие: method overloading, method mixing…

  2. dkrnl, мне кажется, что язык таки не очень важен. Не столько важна техническая реализация, сколько общая идея о том как должен быть построен код.

  3. Да нет, язык всё-таки важен. То, что композиция ВСЕГДА лучше наследования — это догма, которая не совсем верна. В таком языке как C++, имеющим множественное наследование и шаблоны, у композиции только один плюс: возможность изменять какие-то аспекты динамически. Если это не требуется, наследование может быть предпочтительнее.

  4. Anton, можете привести конкретный пример, когда наследование предпочтительнее композиции?

  5. Вот моя статья на хабре: http://habrahabr.ru/post/177447/

  6. Anton, спасибо. Ознакомился, в общем и целом согласен с твоими тезисами. ИМХО, здесь главное не заморачитваться сильно на подобные вопросы. Главное — решение задачи, которую поставил заказчик. Плохой код лучше чем никакой )

  7. Полностью согласен. Просто я против различных религиозных верований в разработке, коими являются и паттерны GoF. Иногда вера и убеждения часто становятся выше здравого смысла. И вместо того, чтобы развивать интуицию и писать код, исходя их неё и собственных выводов, разработчики часто слепо действуют шаблонам, причём в большинстве случаев «не в кассу»… Я ещё просто проработал лет 6 с молодыми разработчиками на C++, насмотрелся их кода, и у меня возникло стойкое желание отобрать у них всю литературу по паттернам на несколько лет :) Пока они к ней действительно не будут готовы…

  8. Вот, вот! Насчет интуиции очень правельная мысль. При написании кода в первую очередь руководствуюсь своими ощущениями, бывает так что вроде бы прозрачная и простая идея никак не ложится в код.
    И можно сколько угодно подгонять этот код под имеющуюся теорию (в том числе паттерны), а пока не изменишь саму идею ничего дельного не получается.

  9. Точно! Ещё вот работодателям бы это объяснить… Эмпирически развитая интуиция их мало волнует, зато вот паттерны на собеседованиях спрашивают почти всегда… И если человек сам может за минуту применить какое-то решение, но не знает при этом, что уже есть такой известный паттерн, и тем более, его название, то он очень рискует это собеседование провалить :) Когда-то программист бы сродни художнику… А сейчас методологии, методологии, методологии… А люди как гайки…

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

Leave a Reply

« »