Про интерфейсы и фабрики

Sep 17, 2009 12:12


С месяц назад дорогой товарищ dargot в личной беседе посетовал на странные методы объектного программирования, практикуемые некоторыми программистами. Совершенно неясно, - говорил он, - зачем эти люди плодят такое множество интерфейсов, а потом постоянно кастуют их к реализациям и обратно. Неясно, зачем к каждому объекту граждане создают свою ( Read more... )

философия, программирование

Leave a comment

Comments 201

wild_wolfman September 17 2009, 08:36:12 UTC
> учить сразу объектной парадигме (или, буде оно разовьётся, функциональной)

Интересно, почему бы это нынешние светила программирования вот уже лет пять как настоятельно рекомендуют начинать обучение программированию не с Бейсиков и Дельфей, а с OCaML и упрощённого Scheme?

Reply


obivatel_ua September 17 2009, 08:49:36 UTC
> любой полезный подход он позволяет писать меньше. В описанной выше схеме код непомерно раздулся, а следовательно подход был использован неправильно.

Пользователь дурак. Он никогда не заплатит за метровую программу 10 баксов, но с удовольствием заплатит 50 за ту же прогу на двух ДВД! ;)

Reply

tl1 September 17 2009, 11:04:03 UTC
Ну и добей нехватающие 9.4 Гб мусором, а код делай нормальный :-)

Индусам-аутсорсерам часто платят за количество строк в коде, результат многие видели...
Пользователь за такую программу в большинстве случаев не платит ни копейки, потому что до релиза она не доживает :-)

Reply


(The comment has been removed)

Re: пФЧЕФ ОБ ЧБЫХ ЪБРЙУШ... lex_kravetski September 17 2009, 11:03:44 UTC
> Хорошим примером использования интерфейсов я всегда считал
> реализацию разных пользоательских интерфейсов, например, когда
> веб-морда или гуй основаны на интерфейсе и обращение к ним
> происходит по интерфейсу. Или, если возможно, то абстрактный класс.
> А так статья хорошая, спасибо.

Этот способ создания интерфейсов мне сильно не нравится. Поэтому я
придумал и внедрил авто-форму.

Reply

(The comment has been removed)

Re: Ржюеж пв ювщи явткхы... lex_kravetski September 17 2009, 12:48:40 UTC
Подробнее можно по тэгу «Авто-всё» почитать.

Reply


shiko_1st September 17 2009, 09:15:32 UTC
такой гражданин сходу начинает писать на нём как на процедурном С
Ну, если вспомнить известную программистскую байку, то человек по фамилии Страуструп заделал С++ как раз таки для того, чтобы программисты на С не лишились работы. Отвлекаясь от вопроса, может ли человек по фамилии "Труп Страуса" сделать что-то хорошее (см. СоЛЖЕницын), можно констатировать: этим языком кракозяберный малопонятный синтаксис (см. С) сильно преумножился.

Интерфейс - это такой класс, где методы заявлены, но ни один из них не имеет реализации. Кроме того, в данном классе нет полей
Интерфейс -- это никакой не класс. Интерфейс -- это таблица (пронумерованных) методов, не более того.

каждый из которых является наследником IComparable
Это не наследование. Это реализация. Наследование -- это есть абстрактный класс TComparable. Принципиальная разница как раз в том, что интерфейс -- не сущность, а описание возможностей сущности. Ему нельзя наследовать, можно только заявить о его реализации.

Увы, некоторые языки накладывают ограничение на множественное ( ... )

Reply

Re: пФЧЕФ ОБ ЧБЫХ ЪБРЙУШ... lex_kravetski September 17 2009, 13:16:47 UTC
> Интерфейс -- это никакой не класс. Интерфейс -- это таблица
> (пронумерованных) методов, не более того.

Детали реализации, есть мнение, нас не должны волновать на этом уровне
рассуждений.

> Это не наследование. Это реализация.

Разделение наследования и реализации надумано. И к тому же
противоречиво. Поскольку по этой концепции наследник абстрактного класса
и наследует и реализует одновременно.

Собственно, никакой разницы между этими процессами нет - нам не важно,
заявлена функция или уже реализована, если мы её переопределяем.

> Увы, некоторые языки накладывают ограничение на множественное
> наследование И слава Богу ( ... )

Reply

(The comment has been removed)

Re: Ржюеж пв ювщи явткхы... lex_kravetski September 17 2009, 13:40:39 UTC
> В случае с интерфейсом, никакого переопределения не происходит.

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

Reply


odysseos September 17 2009, 09:24:53 UTC
Такое ощущение, что приведенный в пример написун стратегической игры знает про инкапсуляцию, но и краем уха не слышал про наследование и полиморфизм - а следовательно, ни про какое "владение ООП" оным персонажем говорить нельзя.

Reply

lex_kravetski September 17 2009, 13:17:59 UTC
Кстати, когда они слышали, ещё веселее бывает: одновременно растут
иерархии интерфейсов и параллельных им реализаций.

Reply

odysseos September 17 2009, 13:20:18 UTC
Это как?

Reply

lex_kravetski September 17 2009, 13:38:41 UTC
Ну так: от IUnit-а наследуются IDragoon с IHussar-ом. От IUnit
наследуется Unit, от Unit наследуются Dragoon и Hussar. Dragoon от
IDragoon. Hussar от IHussar. Очень, очень полезная получается схема.

Reply


Leave a comment

Up