Автор Тема: Интерфейсы в Оберонах  (Прочитано 13576 раз)

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
Re: Интерфейсы в Оберонах
« Ответ #15 : Апрель 17, 2012, 09:05:48 pm »
Ок. Без дженериков придётся заводить ещё один интерфейс, наследующий интересующие

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Интерфейсы в Оберонах
« Ответ #16 : Апрель 17, 2012, 09:09:18 pm »
Ок. Без дженериков придётся заводить ещё один интерфейс, наследующий интересующие
Таким образом получаем тот самый "индокод" что был поскипан :-)

PS. А правильный код на java будет такой (c дженериками конечно)
public static <T extends A & B> void foo(T ab) {
    ab.a();
    ab.b();
}
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
Re: Интерфейсы в Оберонах
« Ответ #17 : Апрель 17, 2012, 09:12:45 pm »
Таким образом получаем тот самый "индокод" что был поскипан :-)
Да. Но это индокод для джавы, в которой есть дженерики и правильно делать на них. Для языка, где есть только интерфейсы это не будет индокодом :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Интерфейсы в Оберонах
« Ответ #18 : Апрель 17, 2012, 09:14:38 pm »
Таким образом получаем тот самый "индокод" что был поскипан :-)
Да. Но это индокод для джавы, в которой есть дженерики и правильно делать на них. Для языка, где есть только интерфейсы это не будет индокодом :)
Я просто взял первый попавшийся язык с "классическим" ООП. Можно было вообще псевдокодом.
Ну, можешь считать что то было на java 1.4 :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

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

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Интерфейсы в Оберонах
« Ответ #19 : Апрель 18, 2012, 04:38:51 pm »
Подход в Go очень похож на typeclasses из Хаскеля и концепты C++ (которых пока нет).
Интересно, как они это реализовали.
А Go обладает JIT компилятором? Возможно функция f рассматривается как "шаблонная", но шаблон этот для JIT компилятора. JIT компилятор может накодить в машинных кодах столько копий f сколько разных типов подадут на вход...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Интерфейсы в Оберонах
« Ответ #20 : Апрель 18, 2012, 08:55:47 pm »
А как обычно разруливается ситуация, когда совпадают имена методов в родительском классе и в прикручиваемом интерфейсе?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Интерфейсы в Оберонах
« Ответ #21 : Апрель 18, 2012, 09:04:29 pm »
Подход в Go очень похож на typeclasses из Хаскеля и концепты C++ (которых пока нет).
Интересно, как они это реализовали.
А Go обладает JIT компилятором? Возможно функция f рассматривается как "шаблонная", но шаблон этот для JIT компилятора. JIT компилятор может накодить в машинных кодах столько копий f сколько разных типов подадут на вход...
Нет, там нет ни байткода ни jit'a ни виртуальной машины. Оно компилируется сразу в нативный код. Обычный исполняемый файл на выходе. В этом плане оно слабо отличимо от оберона (в реализации например XDS) или от C++ или ObjC.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Интерфейсы в Оберонах
« Ответ #22 : Апрель 18, 2012, 09:05:09 pm »
А как обычно разруливается ситуация, когда совпадают имена методов в родительском классе и в прикручиваемом интерфейсе?
Все просто - там нет наследования, следовательно и нет родительсткого класса :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Интерфейсы в Оберонах
« Ответ #23 : Апрель 18, 2012, 09:08:09 pm »
Т.е. интерфейсы рядом с обычной иерархией классов сосуществовать не могут?
Либо обычное наследование, либо интерфейсы?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Интерфейсы в Оберонах
« Ответ #24 : Апрель 18, 2012, 09:20:56 pm »
Т.е. интерфейсы рядом с обычной иерархией классов сосуществовать не могут?
Либо обычное наследование, либо интерфейсы?
А зачем иерархия классов? Она обычно служит ровно одной цели (если у нас есть отдельно интерфейсы) - чтобы ручками не писать многократно один и тот же код. То есть повторное использование функционала. Но этого можно достичь и другими способами. Например так как это сделано в Go. Либо шаблонами, либо миксинами, либо еще как-то. Механизмов множество в разных языках.
« Последнее редактирование: Апрель 18, 2012, 09:29:02 pm от valexey »
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Интерфейсы в Оберонах
« Ответ #25 : Апрель 18, 2012, 09:25:28 pm »
Понял. Спасибо

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Интерфейсы в Оберонах
« Ответ #26 : Апрель 18, 2012, 09:26:44 pm »
Мне кажется что так лучше, чем в оберонах.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Интерфейсы в Оберонах
« Ответ #27 : Май 01, 2012, 09:51:17 pm »
Вот тут показан возможный вариант CP с интерфейсами:
http://plas.fit.qut.edu.au/generics/mcp/imcpi_example.aspx

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Интерфейсы в Оберонах
« Ответ #28 : Май 10, 2012, 07:50:35 am »
Цитировать
2.7 Описания (definitions)

Описание (definition) — это синтаксический контракт 1, определяющий набор сигнатур методов. Описание D0 может быть уточнено новым описанием D1, которое наследует все методы, объявленные в D0. Описания и их методы видимы глобально. Объект может реализовать одно или несколько описаний, в этом случае он обязуется реализовать все методы определенные в этих описаниях.

DEFINITION Runnable; 
  PROCEDURE Start; 
  PROCEDURE Stop; 
END Runnable; 
 
DEFINITION Preemptable REFINES Runnable; 
  PROCEDURE Resume; 
  PROCEDURE Suspend; 
END Preemptable; 
 
TYPE 
  MyThread = OBJECT IMPLEMENTS Runnable; 
    PROCEDURE Start; 
    BEGIN .... END Start; 
 
    PROCEDURE Stop; 
    BEGIN .... END Stop; 
  END MyThread;
Ключевое слово IMPLEMENTS используется для указания описаний, реализованных объектным типом. Объетный тип может реализовать несколько описаний.
Описания можно понимать как дополнительные свойства, которыми должен обладать объект, но которые ортогональны иерархии типов объектов. Метод объекта может быть вызван через описание, в этом случае во время исполнения проверяется, действительно ли экземпляр объекта реализует описание, и только после этого вызывается метод; если экземпляр объекта не реализует описание, то возникает исключение (run-time exception).

PROCEDURE Execute(o: OBJECT; timeout: LONGINT); 
BEGIN 
  Runnable(o).Start; 
  Delay(timeout); 
  Runnable(o).Stop; 
END Execute;
http://maxandreev.narod.ru/oberon/ActiveOberonReport_RUS.html