Как наследование реализовано в Аде и имеет ли оно встроенный графический интерфейс? - PullRequest
2 голосов
/ 27 августа 2011

Ада поставляется со встроенным графическим интерфейсом, и он имеет тот же уникальный подход к наследованию, что и Оберон?

Ответы [ 3 ]

3 голосов
/ 29 августа 2011

Нет, Ada не поставляется со встроенным графическим интерфейсом; но самый близкий язык, который я могу придумать, - это PostScript. (Технически, Java-язык не делает этого; хотя включенная библиотека делает это.) При этом существует привязка GTK (которую я вообще не использовал) и привязка OpenGL (с которой я только играл; если честно, привязка OpenGL гораздо тоньше, чем хотелось бы).

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

Основание:

Type Base is Abstract Tagged Record
   Null;
End Record; -- Base

-- Base Operations
Procedure Op( Object : In Out Base );
Procedure Dispatching_Op( Object : In Out Base'Class );

Расширение:

Type Extended is New Base With Record
  Null;
End Record; -- Extended

Overriding Procedure Op( Object : In Out Extended );

С телами, скажем:

  Procedure Op( Object : In Out Base ) is
  begin
     Put( "Hello" );
  end Op;

  Procedure Dispatching_Op( Object : In Out Base'Class ) is
  begin
     Op( Object );
     Put_Line( " World." );
  end Dispatching_Op;

  Procedure Op( Object : In Out Extended ) is
  begin
     Put( "Goodbye" );
  End Op;

Который задал объект типа P {P: K.Base'Class: = K.Extended '(Others => <>);} можно назвать так:

P.Dispatching_Op;

И выдаст в этом случае следующие результаты:

Goodbye World.
3 голосов
/ 29 августа 2011

Не так много языков программирования поставляются с графическим интерфейсом. Oberon делает, но только потому, что он на самом деле поставляется с всей операционной системой (включая графический интерфейс этой ОС). У Java есть пара, но по той же самой причине (JVM - по существу Операционная система Java). У Delphi есть один, потому что Delphi по сути является именем для Pascal в сочетании с определенным графическим интерфейсом.

Типичный язык программирования предназначен для выхода за пределы конкретной платформы, и поэтому большинство пользователей захотят использовать стандартный графический интерфейс пользователя на любой платформе (Windows, Linux и т. Д.), Над которой они работают. Ада является одним из них.

Это не значит, что не существует интегрированных сред, предназначенных для использования с Ada. Gnavi - это проект, пытающийся сделать что-то вроде Delphi , но с Ada и стандартным графическим интерфейсом Windows. GTKAda - это другой проект, который помогает программам Ada создавать графические интерфейсы с использованием инструментария виджетов GTK +. GTK + - это один из стандартных наборов инструментов GUI, используемых в Linux (и переносимый на Windows).

Что касается наследования, в прошлый раз, когда я играл с Обероном, казалось, что он использует простое наследование расширений, основанное на типах записей. Это подход, который использует и Ада. Тем не менее, метод отправки Ada - это нечто среднее между тем, что делает Оберон, и тем, что делает C ++. Механически это похоже на Оберон. Единственное, что немного странно, это то, что подпрограммы связаны с классом (записью) в силу использования этого класса в качестве параметра и , определяемых в том же пакете, что и класс, а не явно с некоторыми своего рода ключевое слово. В противном случае это будет выглядеть очень похоже.

Но я считаю, что в Обероне все переопределяющие методы являются динамической диспетчеризацией, тогда как Ада использует динамическую диспетчеризацию только тогда, когда это требуется из-за используемых в классе указателей или ссылок, как это делает C ++. Если это не относится к вашему вопросу о OO, вам, возможно, придется узнать более подробно о том, что именно в OO-системе Oberon вас интересует.

3 голосов
/ 27 августа 2011

Немногие языки программирования предоставляют встроенный GUI, если под этим вы подразумеваете примитивы GUI, являющиеся неотъемлемой частью самого языка программирования. Ada может использовать инструментарий GUI, как и другие языки. Среди тех, кто готов к работе с Ada, GtkAda и QtAda . И RAPID - это дизайнер интерфейсов, специально разработанный для создания пользовательских интерфейсов приложений Ada.

Я не могу говорить о подходе Оберона к наследованию, но в Ada WikiBook есть хорошая рецензия на подход Ады к объектной ориентации .

...