OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 17:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Смысл ООП
СообщениеДобавлено: Понедельник, 09 Апрель, 2012 09:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
На самом деле всё уже не раз проговаривалось, и обсуждать даже и надоело, но всплывает снова и снова. И нет уголка с табличкой, куда ткнуть любого желающего. (Или я уже забыл?)

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
В Эйфеле - интересный механизм ...
Чур! чур меня!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смысл ООП
СообщениеДобавлено: Вторник, 10 Апрель, 2012 20:34 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Валерий Лаптев писал(а):
Налицо необходимость конкретного исследования.
Хорошо бы фундаментального, лет на 20-30. И чтобы исследователь попался не просто теоретик, но и практик...

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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Смысл ООП
СообщениеДобавлено: Понедельник, 07 Май, 2012 16:39 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Интересная статья: Кризис объектно-ориентированного программирования


Последний раз редактировалось Евгений Темиргалеев Суббота, 12 Май, 2012 00:30, всего редактировалось 1 раз.
прикреплено к существующей теме


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог procedure of object в КП
СообщениеДобавлено: Понедельник, 07 Май, 2012 18:19 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Сергей Прохоренко писал(а):

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог procedure of object в КП
СообщениеДобавлено: Понедельник, 07 Май, 2012 19:41 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Axcel писал(а):
Сергей Прохоренко писал(а):

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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог procedure of object в КП
СообщениеДобавлено: Понедельник, 07 Май, 2012 20:54 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог procedure of object в КП
СообщениеДобавлено: Среда, 09 Май, 2012 11:17 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Сергей Прохоренко писал(а):
Axcel писал(а):
Сергей Прохоренко писал(а):

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


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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смысл ООП
СообщениеДобавлено: Среда, 09 Май, 2012 12:45 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Только давайте не будем так полоскать слово "гуманитарный".

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

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


Последний раз редактировалось Info21 Среда, 09 Май, 2012 15:41, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смысл ООП
СообщениеДобавлено: Среда, 09 Май, 2012 13:33 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Info21 писал(а):
Только давайте не будем так полоскать слово "гуманитарный"...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: ООП в структурном редакторе
СообщениеДобавлено: Среда, 09 Май, 2012 22:29 
Аватара пользователя

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смысл ООП
СообщениеДобавлено: Четверг, 10 Май, 2012 08:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
В обсуждении WITH созрело некое, вроде бы, подтверждение (моего любимого) тезиса, что интерпретация ООП в Оберонах выявляет фундаментальный смысл ООП как способа расслоения функциональности между модулями в настоящей модульной системе.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог procedure of object в КП
СообщениеДобавлено: Четверг, 10 Май, 2012 17:43 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Axcel писал(а):
Основная проблема в ООП - это трудность "переписывания" причем в обоих вариантах.
Это утверждение мне кажется немного странным.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смысл ООП
СообщениеДобавлено: Четверг, 10 Май, 2012 21:17 

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


Последний раз редактировалось Axcel Четверг, 10 Май, 2012 21:29, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смысл ООП
СообщениеДобавлено: Четверг, 10 Май, 2012 21:23 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Думаю, надо выделить несколько направлений использования ООП.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смысл ООП
СообщениеДобавлено: Пятница, 11 Май, 2012 05:22 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Axcel писал(а):
ООП добавляет трудностей тем, что в целом.
Опять же, лучше, наверное, уточнить в том духе, что добавляет трудностей не ООП, а его недодуманные реализации и неумение им пользоваться.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог procedure of object в КП
СообщениеДобавлено: Пятница, 11 Май, 2012 10:03 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Info21 писал(а):
...
Сергей, Вы бы новую тему начали про смысл ООП -- или нашли старую (возможно уже была).
...
Была: viewtopic.php?f=8&t=3925.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB