OberonCore
https://forum.oberoncore.ru/

Смысл ООП
https://forum.oberoncore.ru/viewtopic.php?f=8&t=3925
Страница 1 из 4

Автор:  Info21 [ Понедельник, 09 Апрель, 2012 09:32 ]
Заголовок сообщения:  Смысл ООП

На самом деле всё уже не раз проговаривалось, и обсуждать даже и надоело, но всплывает снова и снова. И нет уголка с табличкой, куда ткнуть любого желающего. (Или я уже забыл?)

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

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

Вот и с ООП: есть базовые технологические императивы, выявленные (фуфффф) в Модуле-Обероне, и ограничивающие дискуссию по ООП:

Императив №1. Нужны модули. Раздельно пишомые разными субъектами, договорившимися про интерфейс, и пишомые так, чтобы друг другу не мешать (всё остальное следует отсюда). Никуда от этого не деться -- Природу не обманешь, никто и не сумел.

Императив №2. В сложных задачах неизбежно возникают динамические структуры данных, в которых возникает проблема -- отделить сложную общую функциональность по управлению структурой от специфики по информационному наполнению.
"Расслоение функциональности по модулям." Отсюда однозначно вылазит однопредковое наследование в том виде, в каком оно практикуется в Оберонах.

(Про централизованный сбор мусора не говорим, это здесь деталь и подразумеваемое автоматическое следствие.)

После установления императивов-ограничителей болтовни можно дать волю фантазии.

1.
Возможны варианты оформления и реализации "расслоения функциональности", ср. классический Оберон и КП, но это варианты в рамках ограничений двух императивов. Два минималистичный подмножества -- классическое и с наследованием только от ABSTRACT (подмножество КП). Интересно понять ограничения обоих.

2.
Далее имеет смысл вести "общефилософскую" дискуссию хоть про объектную декомпозицию, хоть про множественное наследование -- но уже с пониманием того, что при обсуждении в установленных фундаментальных ограничениях само собой произошло разделение:

ООП-0 как технологический инструмент (взгляд снизу).

ООП-1 -- разные фантазийные схемы организации структур данных, включая штучки в духе множественного наследования и т.п.
Но при этом сразу ясно, что это сложные, громоздкие, сильно неоднозначные и потому совершенно-неочевидно-что-универсальные вещи. И что обсуждать такие вещи (то же множественное наследование) нужно в духе рассуждений о сложных структурах данных, имея при этом в виду отображение на уровень реализации -- ООП-0, жестко ограниченный базовыми императивами.

Автор:  Владислав Жаринов [ Понедельник, 09 Апрель, 2012 11:16 ]
Заголовок сообщения:  Re: Смысл ООП

О! Чего-то такого я и хотел в виде квалифицированного мнения... хорошо, что появилось.
Насчёт "арности" наследования - это, как ни странно, хорошо на примерах из жизни уяснить. Например - почему обычно родство считается по одному из родителей (и национальность во многих традициях - причём "китайская специфика" тоже не сказать, чтобы этому противоречит)? :)
    Помню, в одном из "беллетристических" сочинений небезызвестного Резуна это неплохо описывалось. На самом деле все они служат одной цели - и потому, кроме "искусного цитирования и форматирования", широко применяется и другая "базовая техника манипуляции" - продвигаемые автором положения включаются в контекст вещей правильных или возможных. Вот как раз главный герой там среди прочего объяснял главной героине, что будет, если учитывать родство не по одному родителю... то самое, о чём сказал Фёдор Васильевич... Было очень сжато и доходчиво... так что "продвигаемое" отфильтровалось, а это в числе кое-чего "контекстного" осталось... :wink:
И вот, кстати, интересно в случае дискуссии, если она сосредоточится на понимании отображения в ограничения... И, кстати, на ограничении объектности и для "общефилософского" понимания. Что я понимаю как формализацию задачи/предметки в виде спецификации - из которой можно выделить спецификации будущих программ. М.б. уже там нужно меньше фантазировать?..

Автор:  Валерий Лаптев [ Вторник, 10 Апрель, 2012 17:40 ]
Заголовок сообщения:  Re: Смысл ООП

B вот кстати. Множественное наследование - это не устоявшаяся штука, как например, принцип подстановки.
В С++ имеем то, что имеем. В результате этого "имения" в Java и C# множественное наследование классов совсем исключили, а включили интерфейсы и их реализацию. В Эйфеле - интересный механизм с переименованием унаследованных имен на данном уровне иерархии.
В КП множественное наследование запрещено совсем. В Аде - просто не знаю как сделано.
Налицо необходимость конкретного исследования.

Автор:  Info21 [ Вторник, 10 Апрель, 2012 20:02 ]
Заголовок сообщения:  Re: Смысл ООП

Валерий Лаптев писал(а):
В Эйфеле - интересный механизм ...
Чур! чур меня!

Автор:  Евгений Темиргалеев [ Вторник, 10 Апрель, 2012 20:34 ]
Заголовок сообщения:  Re: Смысл ООП

Валерий Лаптев писал(а):
Налицо необходимость конкретного исследования.
Хорошо бы фундаментального, лет на 20-30. И чтобы исследователь попался не просто теоретик, но и практик...

viewtopic.php?p=71865#p71865
Валерий Лаптев писал(а):
Получил Проект Оберон - балдею!
...
2. Больше половины книжки - прямой учебник по операционным системам и системному ПО.
3. Тексты программ - можно во все разобраться практически, а не только теоретически.
...
В общем - блеск!

Автор:  Владислав Жаринов [ Среда, 11 Апрель, 2012 08:18 ]
Заголовок сообщения:  Re: Смысл ООП

Info21 писал(а):
Валерий Лаптев писал(а):
В Эйфеле - интересный механизм ...
Чур! чур меня!
Да, кстати, начинает-то Мейер (в Гл.16) здорово объяснять, как можно одинарным наследованием пользоваться... :)

Автор:  Сергей Прохоренко [ Понедельник, 07 Май, 2012 16:39 ]
Заголовок сообщения:  Смысл ООП

Интересная статья: Кризис объектно-ориентированного программирования

Автор:  Axcel [ Понедельник, 07 Май, 2012 18:19 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Сергей Прохоренко писал(а):

Гуманитария (в ругательном смысле). Впрочем автор самокритично так и назвал - "поток сознания"

Автор:  Сергей Прохоренко [ Понедельник, 07 Май, 2012 19:41 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Axcel писал(а):
Сергей Прохоренко писал(а):

Гуманитария (в ругательном смысле). Впрочем автор самокритично так и назвал - "поток сознания"


Не утруждая себя аргументами...

Можно подумать, что канонические тексты про триединство инкапсуляции, наследования и полиморфизма, которыми забиты полки всех книжных магазинов, хоть сколько-нибудь полезны. :x

Автор:  Info21 [ Понедельник, 07 Май, 2012 20:54 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

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

Автор:  Axcel [ Среда, 09 Май, 2012 11:17 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Сергей Прохоренко писал(а):
Axcel писал(а):
Сергей Прохоренко писал(а):

Гуманитария (в ругательном смысле). Впрочем автор самокритично так и назвал - "поток сознания"


Не утруждая себя аргументами...

Можно подумать, что канонические тексты про триединство инкапсуляции, наследования и полиморфизма, которыми забиты полки всех книжных магазинов, хоть сколько-нибудь полезны. :x

Канонические тексты потому имено и полезны, что канонические. С другой стороны попытаться обобщить развитие ООП, различные его варианты, наверно действительно имеет смысл. Возможно такие работы уже есть, но я не встречал. Мне кажется в реальном прграммировании каноническая модель моментально обрастает узкой спецификой, и как любая рабочая вещь выглядит настолько коряво, что ее трудно приводить в качестве примера. Остаются канонические тексты.
У меня в Делфи тоже коряво сделан набор компонент, но в полном соотвествии с каноническими текстами, и уже 8 лет пользуемся.
Я бы выделил три момента: основное назначение ООП в унификации алгоритмов и, следовательно в удобстве создания и представления библиотек, отсюда "строгая" модель ООП для отчуждаемых компонентов на основе наследования интерфейсов и "нестрогая" модель ООП на основе наследования реализации. Вторую модель часто критикуют за "хрупкость базового класса", но для квалифицированного владельца такой библитеки, возникают возможности акупунктуры, т.е. легким касанием, минимальными усилиями изменять поведение в нужную сторону.
Основная проблема в ООП - это трудность "переписывания" причем в обоих вариантах. Так однажды у меня при проектировании com - интерфейса из 5 методов реально рабочий получился 1, остальные баласт. В общем у меня никода не получалость сделать все правильно с первого раза (говорят Сергей Перовский на "Королевсте Делфи" умеет), но это не повод впадать в истерику. Иными словами (пафосно) ООП требует более качественного проектирования архитектуры.
В общем если и говорить о кризисе, то о кризисе обывательских представлений об ООП, т.е. типично гуманитарном кризисе.

Автор:  Info21 [ Среда, 09 Май, 2012 12:45 ]
Заголовок сообщения:  Re: Смысл ООП

Только давайте не будем так полоскать слово "гуманитарный".

Гуманитарии имеют такую же массу поводов презирать "технарей" за ограниченность.

То же насчёт филологии.

Автор:  Axcel [ Среда, 09 Май, 2012 13:33 ]
Заголовок сообщения:  Re: Смысл ООП

Info21 писал(а):
Только давайте не будем так полоскать слово "гуманитарный"...

Ладно так уж и быть :D

Автор:  Сергей Прохоренко [ Среда, 09 Май, 2012 22:29 ]
Заголовок сообщения:  ООП в структурном редакторе

Смысл ООП, очевидно, будет разным - в зависимости от того, какие цели человек ставит при анализе. Если подходить к ООП утилитарно-потребительски, то от ООП достаточно того, что перечислил Axcel: удобство проектирования библиотек, удобство создания собственных классов (и, в то же время, решение проблемы хрупкости базовых классов), удобство внесения изменений там и сям. Для этого действительно достаточно канонических текстов про абстракцию-инкапсуляцию-наследование-полиморфизм.

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

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

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

Автор:  Info21 [ Четверг, 10 Май, 2012 08:32 ]
Заголовок сообщения:  Re: Смысл ООП

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

Когда управление списком -- в одном модуле, а наполнение элементов списка конкретным смыслом -- в других.

Из этого требования полиморфизм и проч. получается, вроде бы, как следствие (интересно это подтвердить явными рассуждениями).

Можно оторвать полиморфизм-... от этой определяющей подложки и объявить особой парадигмой, философией, бла-бла-бла -- но лично мне это представляется наведением тени на плетень.

Автор:  Info21 [ Четверг, 10 Май, 2012 17:43 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Axcel писал(а):
Основная проблема в ООП - это трудность "переписывания" причем в обоих вариантах.
Это утверждение мне кажется немного странным.

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

В такой интерпретации процитированную трудность "пепреписывания" нужно отнести на счёт сложности задачи/решения, а вовсе не ООП.

Хотя, конечно, коллективное творчество недоученных масс способно загадить что угодно (это про разнообразные реализации ООП и философствование вокруг него).

Автор:  Axcel [ Четверг, 10 Май, 2012 21:17 ]
Заголовок сообщения:  Re: Смысл ООП

Выражение задачи через ООП требуют вдумчивости и основательности. При этом всякие экспериментальные итерации в виде кавалерийских наскоков имеют обыкновение разрастаться, ну а потом лень и сроки, и переписывать надо иерархию в целом а не отдельные куски. Либо интерфейс не выдерживает столкновения с реальностью, хорошо если достаточно просто дополнить, а если переделывать?. Ну и опять лень & сроки. ООП добавляет трудностей тем, что в целом.
Собственно как правило все как-то работает и ООП этому способствует, но выглядит так не идеально, что хочется переписать, а переписывать много, а оно еще и работает.
Вообщем как-то так.

Автор:  Валерий Лаптев [ Четверг, 10 Май, 2012 21:23 ]
Заголовок сообщения:  Re: Смысл ООП

Думаю, надо выделить несколько направлений использования ООП.

1. ООП как средство создания новых типов данных в языке программирования. Крайняя степень этого - новые типы данных не должны отличаться от старых. Эта точка зрения принята в С++.
Другая точка зрения - минималистская - принята в Обероне.
Но с этим справлялись и абстрактные типы данных.

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

3. Именно при наследовании и требуется динамическое связывание. Без него динамический тип - это уже динамическая типизация в языке (Perl, Python, Ruby и т.д.).
Таким образом, получается, что наследование - это важнейшая часть ООП.

Автор:  Info21 [ Пятница, 11 Май, 2012 05:22 ]
Заголовок сообщения:  Re: Смысл ООП

Axcel писал(а):
ООП добавляет трудностей тем, что в целом.
Опять же, лучше, наверное, уточнить в том духе, что добавляет трудностей не ООП, а его недодуманные реализации и неумение им пользоваться.

То есть я хочу всё время разделить в ООП:
1. объективный фактор
2. субъективный фактор на стороне реализации самого ООП
3. субъективный фактор на стороне использования ООП
4. субъективный фактор на стороне непонимания больших систем (то, на что алексус всё время намекает, но конкретными знаниями делиться не хочет).

П.1 ничего добавить не может -- объективная реальность просто есть.
А вот в пунктах 2-4 комбинаторная мысль масс бьёт ключом.

Автор:  Владислав Жаринов [ Пятница, 11 Май, 2012 10:03 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Info21 писал(а):
...
Сергей, Вы бы новую тему начали про смысл ООП -- или нашли старую (возможно уже была).
...
Была: viewtopic.php?f=8&t=3925.

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/