Автор Тема: Множественное наследование и Оберон  (Прочитано 10436 раз)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Множественное наследование и Оберон
« : Сентябрь 06, 2012, 04:54:16 pm »
Господа, а напомните, плиз, как на Обероне реализуется функциональность, которую даёт множественное наследование (интерфейсов) в других языках...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Множественное наследование и Оберон
« Ответ #1 : Сентябрь 06, 2012, 05:11:46 pm »
В Active Oberon есть DEFINITION.

kemiisto

  • Jr. Member
  • **
  • Сообщений: 64
    • Просмотр профиля
    • kemiisto.ru
Re: Множественное наследование и Оберон
« Ответ #2 : Сентябрь 06, 2012, 05:28:47 pm »
H. Mössenböck. Twin - A Design Pattern for Modeling Multiple Inheritance.
J. Templ. A systematic approach to multiple inheritance implementation.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #3 : Сентябрь 06, 2012, 05:49:19 pm »
Ага, пасиба, одну статью Темпла на эту тему я уже нашёл ("Оберон против С++" (1995)).

Активный Оберон не хотелось бы трогать...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #4 : Сентябрь 06, 2012, 06:25:31 pm »
В статье Йозефа Темпла "Оберон против С++" (1995) написано:
Цитировать
Имеет место чёткое различие между созданием подтипов (расширение записи) и созданием подклассов (наследование кода). Наследование кода, включающее в себя множественное и даже динамическое наследование,может быть достигнуто путём программирования в разработчике соответствующего механизма диспетчеризации сообщений (см. ELSE-часть на рис. 3).
TYPE
  CopyMsg = RECORD (ObjectMsg)
    deep: BOOLEAN;
    cpy: Object
  END;
  DisplayMsg = RECORD (ObjectMsg)
    F: Frame;
    x, y: INTEGER;
  END;

PROCEDURE HandleMyObject (O: Object; VAR M: ObjectMsg);
BEGIN
  IF M IS CopyMsg THEN ...
  ELSIF M IS DisplayMsg THEN ...
  ...
  ELSE Objects.Handle(O,M)
  END
END HandleMyObject;
Честно говоря, не очень наглядный код...

Если я правильно понял, то тут получается что-то противоположное наследованию двух интерфейсов одним классом: тут создаются два отдельных класса, а методы этих двух интерфейсов реализованы в одной процедуре... Это совсем не то, что я ожидал...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #5 : Сентябрь 06, 2012, 06:37:51 pm »
Шаблон "Близнецы" (Twin pattern) ниасилил, как с этим можно жить?
Выдержка из статьи H. Mössenböck. Twin - A Design Pattern for Modeling Multiple Inheritance.
Цитировать
Although this is considerably more complex than multiple inheritance, it is rare that a class inherits from more than two parent classes.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #6 : Сентябрь 06, 2012, 06:39:35 pm »
Шаблон "Близнецы" (Twin pattern) ниасилил, как с этим можно жить?

Тебе чего сделать-то надо? :) Множественное наследование "в отрыве" никому не надо :)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #7 : Сентябрь 06, 2012, 06:41:38 pm »
Вот уж действительно Богатырёв прав: Оберон -- это ассемблер ООП...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #8 : Сентябрь 06, 2012, 06:44:21 pm »
Шаблон "Близнецы" (Twin pattern) ниасилил, как с этим можно жить?

Тебе чего сделать-то надо? :) Множественное наследование "в отрыве" никому не надо :)
Да просто увидеть, как 1 тип данных (класс) получит возможность использования методов нескольких интерфейсов.

Ну, тут у меня может ещё и смешались в голове классы типов Хаскелла -- их я считаю идеальными для этой задачи, так как сам тип данных не обязан ничего знать о классах типов. А вот в шарпе/яве класс должен знать об интерфейсах и реализовать их методы...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #9 : Сентябрь 06, 2012, 06:46:11 pm »
Тебе чего сделать-то надо? :) Множественное наследование "в отрыве" никому не надо :)

Многое из того, что решается множественным наследованием в традиционных ЯП на обероне может быть выражено через message bus. И не надо воротить этот ужос-ужос из статей, чтобы эмулировать именно множественное наследование само по себе.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #10 : Сентябрь 06, 2012, 06:53:09 pm »
Многое из того, что решается множественным наследованием в традиционных ЯП на обероне может быть выражено через message bus. И не надо воротить этот ужос-ужос из статей, чтобы эмулировать именно множественное наследование само по себе.

Делать через message bus, если я правильно себе это представляю, означает концентрировать в одной процедуре функциональность логически разных наборов процедур (интерфейсов).
Правильный ли это подход? А как же "разделяй и властвуй"?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #11 : Сентябрь 06, 2012, 06:56:35 pm »
Да просто увидеть, как 1 тип данных (класс) получит возможность использования методов нескольких интерфейсов.
Использовать методы через механизм интерфейсов, которые сам же и реализует? Какой в этом смысл?

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #12 : Сентябрь 06, 2012, 07:09:30 pm »
Да просто увидеть, как 1 тип данных (класс) получит возможность использования методов нескольких интерфейсов.
Использовать методы через механизм интерфейсов, которые сам же и реализует? Какой в этом смысл?
Смысл в том, что бы представлять один и тот же объект как реализующий разные наборы процедур в разных случаях использования. интерфейсный полиморфизм...

Но это в духе сишарпа/явы.
Было бы интереснее (для меня по крайней мере) увидеть, как на обероне имитируются классы типов хаскелла -- сам тип данных ничего не знает о классах типов, и для каждого класса типов реализуется отдельный instance этого типа. А затем экземпляр этого типа данных можно передать туда, где ожидается объект, реализующий интерфейс этого класса типов...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #13 : Сентябрь 06, 2012, 07:17:34 pm »
Делать через message bus, если я правильно себе это представляю, означает концентрировать в одной процедуре функциональность логически разных наборов процедур (интерфейсов).

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

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #14 : Сентябрь 06, 2012, 07:22:35 pm »
Было бы интереснее (для меня по крайней мере) увидеть, как на обероне имитируются классы типов хаскелла -- сам тип данных ничего не знает о классах типов, и для каждого класса типов реализуется отдельный instance этого типа. А затем экземпляр этого типа данных можно передать туда, где ожидается объект, реализующий интерфейс этого класса типов...
Что-то я запутался... Несколько раз прочитал, но чётко понять "что кому чего" не смог. Может ссылка есть на этот класс типов? На определение.