суббота, 24 марта 2012 г.

[prog] О сложности ООП

В продолжение вчерашних тем (#1, #2).

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

А вот одна из них, на которую дали ссылку в той же дискуссии, просмотренная сегодня утром, позволила мне четко осознать, что я всегда рассматривал ООП не как проявление какой-то теории, а как набор инженерных приемов, облегчающих выполнение конкретных действий. Не более того.

Чтобы проиллюстрировать, что такое удачные инженерные решения, я приведу пару цитат из книги Руала Амундсена “Южный полюс”.

Цитата первая:

     Патентованная дверь палатки была обычной модели -  мешком;  теперь  она считается единственно применимой в полярных областях.
     Патент этот чрезвычайно прост, как  и  вообще  все  патенты,  годные  к чему-нибудь. В палатке вырезывается отверстие нужных размеров.  Затем  берут мешок, открытый с обоих концов, и один конец его плотно пришивается к  краям отверстия в палатке. Ход через второе отверстие мешка и  будет  единственным входом в палатку. Когда влезают в палатку, то собирают открытый конец  мешка и завязывают его как всякий мешок, В палатку со сплошным дном и таким входом не попадет ни единой порошинки снега даже в самый сильный буран.

Цитата вторая:

…Устройство двери тоже  заслуживает  упоминания.  Есть  много  людей, которые, невидимому, никогда не могут научиться закрывать  за  собой  дверь. Где соберутся двое или трое, там найдется по меньшей мере  один,  страдающий таким недостатком. Тем более здесь, где нас было девять человек.  Бесполезно просить человека, страдающего этой "болезнью", закрывать за собою дверь.  Он все равно не сможет этого выполнить. Я еще недостаточно хорошо был знаком со своими спутниками, чтобы знать, как у них обстоит дело по этой части, но для большей верности мы, на всякий случай, сделали самозакрывающуюся дверь.
     Эту работу выполнил Стубберуд, укрепив дверную раму в стене в наклонном положении. Совершенно так, как устраивается у нас в Норвегии вход в  погреб. В  таком  положении  дверь  не  может  стоять  открытой,   Она   обязательно захлопывается сама собой. Я очень обрадовался, когда ее навесили.

В общем, мне удобнее считать, что основные принципы ООП – инкапсуляция, наследование и полиморфизм – в языках программирования появились сначала именно как подобного рода инженерные приемы. А уже потом их попытались впихнуть в какую-то стройную научную теорию (да, я представитель воинствующего невежества ;)

Поэтому не случайно, что Modula-3 у автора упомянутой выше статьи, Луки Карделли, таки не взлетела. В отличии от SmallTalk-а у Кея, C++ у Страуструпа и Java у Гослинга.

PS. Кстати говоря, книга Амундсена мне в свое время очень понравилась. Из нее хорошо видно, что покорение полюса было очень тщательно проработанной операцией, а вовсе не авантюрным приключением.

2 комментария:

v s комментирует...

А как эту статью прокомментируете: http://blogerator.ru/page/oop_why-objects-have-failed

eao197 комментирует...

@v s

Фактически, никак не прокомментирую. Текст самой "разборки" между лисперами и оо-шниками я читал довольно давно. Хороших впечатлений у меня она не оставила. Вроде как лисперы опять на словах всем доказали, что Лисп -- рулез, а ООП -- фигня.