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

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #15 : Сентябрь 06, 2012, 07:41:14 pm »
Было свежее обсуждение:
http://forum.oberoncore.ru/viewtopic.php?p=74239#p74239

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #16 : Сентябрь 06, 2012, 08:25:35 pm »
Что-то я запутался... Несколько раз прочитал, но чётко понять "что кому чего" не смог. Может ссылка есть на этот класс типов? На определение.

"4.1  Обзор типов и классов"
"2  Ad-hoc полиморфизм в языке Haskell"

http://www.rsdn.ru/article/haskell/haskell_part1.xml#ERAAG
Цитата: Мягкое введение в Хаскелл
Сравнение с другими языками. Классы, используемые в Haskell, похожи на классы в других объектно-ориентированных языках, таких как C++ и Java. Однако существуют некоторые важные отличия:
  • Haskell отделяет определение типа от определения методов, связанных с этим типом. Класс в C++ или Java обычно определяет и структуру данных (переменные – члены класса) и функции, ассоциированные с этой структурой (методы). В Haskell эти определения даются раздельно.
  • Метод класса, определённый в классе Haskell, соответствует виртуальной функции в классе языка C++. Каждое воплощение класса обеспечивает своё собственное определение для каждого метода, умолчания в классе соответствуют реализации по умолчанию виртуальной функции в базовом классе C++.
  • Классы Haskell в грубом приближении похожи на интерфейсы в Java. Как и объявления интерфейсов, объявления классов в Haskell задают протокол использования объектов, а не определение собственно объекта.
  • Haskell не поддерживает перегрузку в стиле C++, при которой функции с различными типами разделяют общее имя.
  • Для типов объектов в Haskell нет неявного приведения; отсутствует универсальный базовый класс, вроде Object, к которому можно приводить значения.
  • C++ и Java присоединяют идентифицирующую информацию (такую, как таблица виртуальных функций) к представлению объекта во время исполнения. В Haskell такая информация присоединяется к значениям логически, а не физически, через систему типов.
  • В систему классов Haskell не встроен контроль доступа (такой, как метки public или private в определении класса). Вместо этого для сокрытия или раскрытия компонентов следует пользоваться системой модулей.
to iterate is human, to recurse, divine

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

valexey

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

Эти class types очень похожи на то что есть в Go. Собственно обсуждалось уже: http://oberspace.dyndns.org/index.php/topic,224.msg5085.html#msg5085
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #18 : Сентябрь 06, 2012, 09:56:43 pm »
Если я правильно понял
TYPE
  A = RECORD
    a1 : PROCEDURE();
    a2 : PROCEDURE();
    a3 : PROCEDURE();
    a4 : PROCEDURE();
  END;

  X = RECORD END;
  X1 = RECORD(X)
    x1 : PROCEDURE();
    x2 : PROCEDURE();
  END;

...

a := NewA();
x := NewX1(a);

(* используем x с его интерфейсом где нам надо *)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #19 : Сентябрь 07, 2012, 05:04:54 am »
Если я правильно понял
TYPE
  A = RECORD
    a1 : PROCEDURE();
    a2 : PROCEDURE();
    a3 : PROCEDURE();
    a4 : PROCEDURE();
  END;

  X = RECORD END;
  X1 = RECORD(X)
    x1 : PROCEDURE();
    x2 : PROCEDURE();
  END;

...

a := NewA();
x := NewX1(a);

(* используем x с его интерфейсом где нам надо *)

Тут не приведены реализации процедур NewA() и NewX1(a), в результате непонятно, зачем нужет тип A...
to iterate is human, to recurse, divine

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

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #20 : Сентябрь 07, 2012, 09:03:21 am »
NewA и NewX1 - это конструкторы. Тип A - это исходный объект (методы я не стал выписывать, а просто добавил их внутрь записи). X - это интерфейсы для доступа к A (X1, X2 и т.д.).

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Множественное наследование и Оберон
« Ответ #21 : Сентябрь 07, 2012, 09:44:22 am »
Кстати, Лаптев на RSDN сейчас жгёт напалмом (по части юмора) про множественное наследование:
http://rsdn.ru/forum/philosophy/4875187.aspx


Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #22 : Сентябрь 07, 2012, 09:49:13 am »
NewA и NewX1 - это конструкторы. Тип A - это исходный объект (методы я не стал выписывать, а просто добавил их внутрь записи). X - это интерфейсы для доступа к A (X1, X2 и т.д.).
Я понял, что это конструкторы, но хотелось бы увидеть, что именно конструктор NewX1 делает с переданной ему записью a...
to iterate is human, to recurse, divine

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

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Множественное наследование и Оберон
« Ответ #23 : Сентябрь 07, 2012, 10:28:09 am »
Да ничего особенного не делает...
X1 - это воплощение конструкции
instance Logic A where
...
NewX1(a) - это соединение данных с интерфейсом, через который программа умеет обращаться к данным.
Наличие логики в A под вопросом, а вот в X1 она точно будет. Что конкретно NewX1 делает с A зависит от действий, которые заложены в интерфейс X1.