Поставляется ли Ada со встроенным графическим интерфейсом и имеет ли она тот же уникальный подход к наследованию, что и Oberon?
Как реализовано наследование в Аде и есть ли у него встроенный графический интерфейс?
Ответы (3)
Нет, у Ады нет встроенного графического интерфейса; но тогда ближайший язык, о котором я могу думать, это PostScript. (Технически язык Java этого не делает, хотя включенная в него библиотека делает это.) При этом есть привязка GTK (которую я вообще не использовал) и привязка OpenGL (с которой я только играл; и чтобы честно говоря, привязка OpenGL намного тоньше, чем мне бы хотелось).
Модель наследования Оберона (насколько я понимаю) представляет собой наследование с одним расширением, такое же, как у Ады; хотя Ада включает в себя интерфейсную систему, похожую на Java. На самом деле я не использовал Oberon, поэтому я не могу предоставить вам параллельные примеры для них двух, но могу показать вам пример Ады.
База:
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.
procedure Op( Object : in out Base );
- person Keith Thompson; 29.08.2011
Немногие языки программирования предоставляют встроенный графический интерфейс, если под этим вы подразумеваете, что примитивы графического интерфейса являются неотъемлемой частью самого языка программирования. Ада может использовать наборы инструментов GUI, как и другие языки. Среди готовых к использованию с Ada — GtkAda и QtAda. А RAPID — это конструктор интерфейсов, специально разработанный для создания пользовательских интерфейсов приложений на языке Ada.
Я не могу говорить о подходе Оберона к наследованию, но в Ada WikiBook есть хорошее описание подхода Ады к ориентация объекта.
Не так много языков программирования имеют графический интерфейс. Оберон есть, но только потому, что на самом деле он поставляется с целой операционной системой (включая графический интерфейс этой ОС). У Java есть пара, но по той же причине (JVM - это, по сути, операционная система Java). В Delphi он есть, потому что Delphi — это, по сути, название Pascal в сочетании с определенным графическим интерфейсом.
Типичный язык программирования предназначен для выхода за рамки конкретной платформы, и поэтому большинство пользователей захотят использовать стандартный графический интерфейс на любой платформе (Windows, Linux и т. д.), над которой они работают. Ада — одна из них.
Это не означает, что не существует интегрированных сред, предназначенных для использования с Ada. Gnavi — это проект, пытающийся сделать что-то вроде Delphi, но с Ada и стандартной Windows. Графический интерфейс. GTKAda — это другой проект, который помогает программам на языке Ada создавать графические интерфейсы пользователя. с помощью набора инструментов для виджетов GTK+. GTK+ — это один из стандартных наборов инструментов с графическим интерфейсом, используемых в Linux (и переносимый в Windows).
Что касается наследования, то в последний раз, когда я играл с Oberon, мне казалось, что он использует простое наследование расширений на основе типов записей. Такого же подхода придерживается и Ада. Однако метод диспетчеризации Ады находится где-то на полпути между тем, что делает Oberon, и тем, что делает C++. Механически он подобен Оберону. Единственное, что немного странно, это то, что подпрограммы привязаны к классу (записи) в силу того, что этот класс используется в качестве параметра и определяется в том же пакете, что и класс, а не явно с помощью какое-то ключевое слово. В противном случае это будет выглядеть очень похоже.
Но я считаю, что в Обероне все переопределяющие методы являются динамической диспетчеризацией, тогда как Ада использует динамическую диспетчеризацию только тогда, когда это требуется из-за использования общеклассовых указателей или ссылок, как это делает C++. Если это не относится к вашему объектно-ориентированному вопросу, вам, возможно, придется уточнить, что именно в объектно-ориентированной системе Оберона вас интересует.