November 29th, 2011

Бритоголовый и С1-97

Про ООП

Снова услышал такую точку зрения на объектно-ориентированное программирование (цитирую другое ее изложение):

С++ и обжектпаскаль – это приятный синтаксический сахар, что-то типа процедур. Что-то типа — в том смысле, что мы “инкапсулируем” некий функционал в более или менее закрытые кирпичики, у которых все потроха внутри и попортить их сложнее.

сиплюсявые Классы – чуть хитрее. Это структурки и код работы с ними, плюс некие странные механизмы наследования.

В общем, утверждается, что ООП – это некое расширение обычного процедурного программирования, делающее более удобным объединение структур данных и работающего с ними кода. Из этого очень часто делается вывод, что, допустим, C++ – это не более, чем ненужная надстройка над обычным C. Этому способствует, скажем, изучение библиотек WinAPI и MFC – так как вторая является “объектно-ориентированной оберткой” над первой, формируется представление, что ООП мало чем отличается от процедурного программирования.

Так ли это? Действительно ли повсеместное использование ООП – это дань моде? Хотелось бы думать, что нет. И сразу же обращу внимание на то, что библиотека WinAPI на самом деле спроектирована с использованием принципов объектно-ориентированного программирования – именно поэтому при сравнении WinAPI и MFC кажется, что “объекты” во второй дублируют “необъектные” понятия первой. ООП – это не замена записи вида f(h, a, b, c) на h.f(a, b, c), это совсем другое. Как определяет его Гради Буч (в книге “Объектно-ориентированный анализ и проектирование”),

Объектно-ориентированное программирование – это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

В следующем же абзаце разъясняется, что в объектно-ориентированном стиле можно писать даже на Pascal, Cobol или даже на ассемблере. Правда, делать это неудобно и предлагается использовать специальные “объектно-ориентированные” языки программирования. Оказывается, что в случае добавления к C некоторого количества фич (превращающих его в C++ образца середины 90-х годов) происходит настоящий “переход количества в качество” – а именно, становится возможным использование совершенно другой методологии, которая оказывается более удобной при разработке больших и сложных программ.

“Странные механизмы наследования”, в частности, позволяют выразить отношение “A является B” – говоря другими словами, “классы образуют иерархию наследования”. Дело не в механизмах (хотя их реализация – крайне интересная штука), а в том, что они выражают. Апологеты ООП утверждают, что “объектно-ориентированное” мышление изначально присуще человеку. Изначально или нет – судить не нам, но вся средневековая философия была как раз “объектно-ориентированной”, а началось это все еще с Платона. А именно, Платон считал, что существует “мир идей” и “мир вещей”:

Во-первых, есть тождественная идея, нерожденная и негибнущая, ничего не воспринимающая в себя откуда бы то ни было и сама ни во что не входящая, незримая и никак иначе не ощущаемая, но отданная на попечение мысли. Во-вторых, есть нечто подобное этой идее и носящее то же имя — ощутимое, рождённое, вечно движущееся, возникающее в некоем месте и вновь из него исчезающее, и оно воспринимается посредством мнения, соединенного с ощущением. В-третьих, есть ещё один род, а именно пространство: оно вечно, не приемлет разрушения, дарует обитель всему роду, но само воспринимается вне ощущения, посредством некоего незаконного умозаключения, и поверить в него почти невозможно

Говоря в терминах программирования, существуют описания классов (”тождественная идея … отданная на попечение мысли”) и их экземпляры (”нечто подобное этой идее”). Но труды Платона развивались и дальше. В частности, для средневекового католического богословия важное значение имела так называемая “проблема универсалий” – то есть проблема существования общих, родовых и видовых понятий. Грубо говоря, существуют ли объективно такие понятия, как “человек”, общее для всех людей, или же это – просто созданная разумом абстракция? Для богословия был особенно интересен частный случай этого вопроса – если Бог един в трех лицах (Троица), то существует ли он реально и в каком виде? Переводя на язык современного программирования – есть ли “суперкласс” “Бог”, для которого “Бог-отец”, “Бог-сын” и “Святой Дух” являются “подклассами”? Вообще, философия Платона, Аристотеля и неоплатоников очень здорово излагается в терминах “абстракция-наследование-полиморфизм”.

Так или иначе, человеку свойственно видеть вокруг себя объекты и выделять в них что-то общее. Возможно, поэтому ООП оказалось доступно даже для самых тупых “недопрограммистов”. Дело не в том, что C++ или Java – “приятный синтаксический сахар”, дело в том, что они позволяют стандартными средствами выражать некоторые простые отношения (типа “А является Б”) – которые как минимум для “европеизированного” мышления кажутся естественными.

Считайтэ это “вступительной частью” к следующей записи, где я попытаюсь продемонстрировать, как выглядит программирование, “стыкующееся” с другой “философской” основой – а именно, с идеями Л. Витгенштейна о том, что мир состоит из фактов, а не из объектов.

PS На самом деле я это уже демонстрировал, правда, далеко не в “идеально чистом” виде.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

К чему приводит толкиенизм

Это является закономерным следствием любых “национально-освободительных движений”, созданных толкиенистами.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Предпринимательство при Сталине

Показалось интересным:

Наверное, если бы я сам прочитал лет пять-шесть назад такой заголовок, то сразу решил бы, что речь идет о ликвидации предпринимателей, как класса, перевоспитании на Беломорканале, наказаниях в ГУЛАГе и прочем «кошмарении малого бизнеса». Ну, как же может быть иначе – Сталин, строительство социализма, НЭП давно прикрыт, плановое хозяйство – какое тут может быть частное предпринимательство? А оказалось – могло быть.

http://kprf.ru/rus_soc/99271.html

Вспоминаются стоящие в alma mater здоровенные сейфы, в которых хранятся разного рода документы факультета, с табличками “Артель такая-то Моспромкооперации”.

UPD А вообще, меня всегда удивляло, кто выпускал “живопись”, которой в фильме Гайдая торговал Балбес.

Выходит, там у них была целая “артель инвалидов”, соответствующая описанию из книги В. Иванова “Желтый металл” (по на водке [info]ecoross1):

…иные «художественные» лишь по имени артели поступают достаточно бесцеремонно. В их ларьках и магазинах сбываются раскрашенные гипсовые фигурки, барельефы и прочие безделушки вопиюще-гнусного вида. Некоторые обширные районы поражены настенной коростой в виде рисованных «ковров». Копии картин известных художников доводятся до издевательства над авторами оригиналов и над публикой, продаются багет и рамки, тронутые проказой, отвратительно обляпанные позолотой, будто бы нарочно в подтверждение поговорки: не все то золото, что блестит. В иных местах, в некоторых областях, наша общественность запустила этот участок. И вкус народа развращается безвестными мазилами и фальсификаторами.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).