Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 16 июн 2025, 08:01

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




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 01 июл 2018, 11:57 
Не в сети

Сообщения: 146
ivan_denisov писал(а):
Абстрактная запись требует реализацию в обязательном порядке. А пустая только по необходимости. Например, вы можете сделать отображение Views.View, и обязательно только объяснить каркасу, что там рисовать Restore, но обрабатывать сообщения HandlePropMsg или пользовательский ввод HandleCtrlMsg в этом отображении — это уже опции, которые пользователь каркаса может и не уточнять в конкретной реализации, если не требуется.
Опции нужно выделять в отдельный интерфейс. Если есть две составляющие - обязательная и опциональная, то напрашивается, что это отдельные сущности. Композицию можно применять не только вместо множественного наследования.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 01 июл 2018, 20:17 
Не в сети
Администратор
Аватара пользователя

Сообщения: 108
Comdiv писал(а):
ivan_denisov писал(а):
Абстрактная запись требует реализацию в обязательном порядке. А пустая только по необходимости. Например, вы можете сделать отображение Views.View, и обязательно только объяснить каркасу, что там рисовать Restore, но обрабатывать сообщения HandlePropMsg или пользовательский ввод HandleCtrlMsg в этом отображении — это уже опции, которые пользователь каркаса может и не уточнять в конкретной реализации, если не требуется.
Опции нужно выделять в отдельный интерфейс. Если есть две составляющие - обязательная и опциональная, то напрашивается, что это отдельные сущности. Композицию можно применять не только вместо множественного наследования.

Слишком категоричное утверждение "нужно" про опции. Однако согласен, особенно в русле вашего проекта Восток, что такая точка зрения имеет право на существование. Для многих программ не нужно городить такой ООП. Это всё применимо главным образом для разработки каркасов. Не стоит забывать, что и сам Компонетный Паскаль был создан во время и для задачи создания фреймворка.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 02 июл 2018, 06:39 
Не в сети

Сообщения: 108
ivan_denisov писал(а):
Отсутствие множественного наследования скорее возможно записать в плюс, так как сегодня такие задачи рекомендуется решать композицией.


Множественное наследование хотя бы интерфейсов заменить композицией нельзя.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 02 июл 2018, 10:37 
Не в сети

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 02 июл 2018, 17:45 
Не в сети

Сообщения: 108
Comdiv писал(а):
Надо уточнить, что нельзя заменить так, чтобы те, кто привыкли ипользовать эту возможность часто и в полной мере, сочли это удобным. Но речь-то не о буквальной замене, иначе и смысла бы не было.


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

Comdiv писал(а):
Множественное наследование имеет ещё и тот недостаток, что многие вольно или невольно раскрывают дополнительные возможности для владельца одной из граней, который может сделать приведение и начать вызывать не то, что нужно, что является разновидностью нарушения сокрытия.


И чтобы без этого недостатка.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 02 июл 2018, 18:04 
Не в сети

Сообщения: 146
Нужна более конкретная задача, пока мне неясен смысл примера.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 03 июл 2018, 04:18 
Не в сети

Сообщения: 108
Comdiv писал(а):
Нужна более конкретная задача, пока мне неясен смысл примера.


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

Ну ладно, вот более частный, но все равно достаточно общий пример. Зачастую возникает ситауция, когда один и тот же объект должен обладать набором свойств A, B, C, чтобы с ним могли работать компоненты ComponentA, ComponentB, ComponentC. При том, что свойства примерное из одной оперы, например IComparable vs IEquatable, линейным наследованием они выражаются плохо, т.е. A->B->C или A->C->B неочевидно. Поэтому на этапе разработки компонентов мы не хотим строить (хрупких) иерархий, а просто зафиксировать минимальный интерфейс необходимй для работы компонента. В процессе эволиции системы, если у нас все три кмпонента должны уметь обрабатывать один и тот же объект - задача тривиально решается в помощью множественного наследования.

Композиция заставит писать адаптеры + специализированный интерфейс ABC (если надо такой объект использовать в разных местах). Message bus - слишком гибко, неконтроллируемо и многословно. Предложи свой вариант.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 03 июл 2018, 09:41 
Не в сети

Сообщения: 146
Я обычно отделяю операции от объектов, потому что те же сравнения или сериализация могут быть разными для одного и того же типа в зависимости от контекста. Если бы мне нужны были три интерфейса для трёх компонентов, то я бы использовал композицию интерфейсов, и нужному компоненту передавался бы только объект и нужный интерфейс.
Уверен, что в Design Patterns такое должно быть описано.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 03 июл 2018, 15:15 
Не в сети
Администратор
Аватара пользователя

Сообщения: 108
Пример Влада, если я правильно понял, несложно решается методом композиции через включение любого из трех объектов в виде ANYREC, как сделано у Петра в его расширении Lists. Какие бы вы объекты на начальном этапе не спроектировали, вы всегда потом сможете, например, сложить в список и обрабатывать в последующем в зависимости от типа через WITH.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атрибуты ABSTRACT и EMPTY
СообщениеДобавлено: 03 июл 2018, 19:41 
Не в сети
Администратор
Аватара пользователя

Сообщения: 108
Про EMPTY сегодня наткнулся в заметке Куно Пфистера

Цитата:
В Component Pascal имеется ряд оригинальных элементов (таких, как явный атрибут NEW для дополнительно введенных методов, " пустые " методы EMPTY, записи типа LIMITED), которые предназначены специально для повышения контролируемости крупных компонентных программных систем, создаваемых посредством повторного использования компонентов. В Component Pascal реализована более удачная схема именования, позволяющая компилятору лучше контролировать согласованность компонентов и соответствующих им компонентных инфраструктур. Это совершенно необходимо для реализации универсальной стыковки независимо разрабатываемых компонентов.

http://oberon2005.oberoncore.ru/paper/cp_java.pdf


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

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


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

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


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club