Сравнение Языков Программирования

Материал из eSyr's wiki.

Перейти к: навигация, поиск

На этой страничке собираются материалы, которые могут помочь при подготовке к экзамену по языкам программирования.

ЯП из курса: C, C++, Java, C#, Pascal, Delphi, Оберон-2, Модула-2, Ада (83 и 95 стандарты)

Полезные ссылки:

Сравнение ЯП в википедии

Энциклопедия языков программирования

Немножно рекламное сравнения большинства языков

План (краткий, взят из методички Головина, подробный см. в самой методичке):

Содержание

Базисные типы данных в языках программирования: простые и составные типы данных, операции над ними

ADA

Integer
Размер не фиксирован.
Character 
Как я понял, существует несколько разновидностей (зависит от размера) и является особым перечислимым типом (Enumeration)
String
Массив Character фиксированной длины. Так же есть стандартные пакеты, реализующие строки квазистатической и динамической длины.
Floating point
Эти типы обычно определяются вручную в виде конструкции, где Num_Digits указывает минимальную погрешность:
digits Num_Digits
Fixed Point
Эти типы также обычно определяются вручную в виде конструкции, где Delta означает погрешность:
delta Delta range Low .. High

Массивы. Длина массива - статический или динамический атрибут.

Управление памятью (ручное или сборщик мусора, выделение памяти для объектов)

Указатели

Ада, C, C++, C#, Delphi, Оберон

Указатели языка Ада 83 ссылаются только на объекты из динамической памяти. Указатель языка Си++ может ссылаться на любой объект данных (динамический, локальный, статический), что может приводить к труднообнаружимым ошибкам.

Также в языке Ада отсутствует адресная арифметика (арифметические операции над указателями), что также уменьшает вероятность появления ошибки работы с памятью.

В языке Оберон указатель может быть объявлен только на массив или запись.

В Java явных указателей нет.

Операторный базис языков программирования. Управление последовательностью вычислений

Процедурные абстракции

Перегрузка операций

Ада 83, Ада 95, Си++, Java, Delphi, C#

Понятие «перегрузка» означает, что одному имени в одной области видимости может соответствовать несколько определений. В современных языках программирования перегружаться могут только имена подпрограмм, но не типов, переменных, модулей. Пример на языке Си++:

   class X {
   public:
       void f();
       void f (int)
   };
               
   X a;
   a.f(); // первая функция
   a.f(0); // вторая функция

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

Определение новых типов данных. Логические модули. Классы

ADA

В Аде вообще типы принято определять вручную, пользуясь конструкциями type и subtype. Например:

type Short is range -128 .. +128 
type Index is range 0 .. 256 
type My_String is array ( Index range <> ) of Character -- My_String - это массив, индексируемый типом Index в неизвестных пока границах, состоящий из Character
subtype String_10 is My_String ( 0 .. 10 ); -- Подтип типа My_String, состоящий из 11 элементов.
type Money is delta 1/100 range 0.0 ... 10000.0

Инкапсуляция и абстрактные типы данных

Модульность и раздельная трансляция

Раздельная трансляция

C, C++

Раздельная трансляция означает то, что программа разбивается на части — физические модули или единицы компиляции. Каждая единица может или обязана транслироваться отдельно от остальных. Независимая раздельная трансляция означает то, что транслятор не обладает информацией об уже оттранслированных единицах и поэтому не может проверить корректность межмодульных связей.

Исключительные ситуации и обработка ошибок

Исключения и блоки try {} catch {} finally {}. Семантика возобновления и семантика завершения.

Семантика возобновления: после обработки исключения управление может вернуться непосредственно в точку, где возникло исключение (варианты: на следующий оператор или на любой оператор из того же блока). Пример языка c семантикой возобновления: Visual Basic.

Семантика завершения: после возникновения исключения блок, в котором оно возникло, обязательно завершается. Обработка исключения происходит в блоках, вызвавших блок с исключением. Пример языка с семантикой завершения: Си++.

Наследование типов и классов

Динамический полиморфизм

Абстрактные классы и интерфейсы

Абстрактный тип данных (АТД) — это тип с полностью инкапсулированной структурой. Использовать объекты АТД возможно только при помощи явно определенных в интерфейсе типа операций. Абстрактный класс (АК) — это класс, содержащий хотя бы один абстрактный метод.

Прямой связи между АК и АТД нет. АТД может быть абстрактным классом, а может и не быть. Аналогично, АК может иметь инкапсулированную структуру, а может и не иметь.

Множественное наследование

Динамическая идентификация типа

Понятие о родовых объектах. Обобщенное программирование

ADA

Note to C++ programmers: generic units are similar to C++ templates. Ada Programming

Объявляем шаблон:

generic
 type Element_T is private;  -- Generic formal type parameter
procedure Swap (X, Y : in out Element_T);

Для его использования необходимо создать объект нужного типа:

procedure Swap_Integers is new Swap (Integer);

Возможна перегрузка:

procedure Instance_Swap is new Swap (Float);
procedure Instance_Swap is new Swap (Day_T);

Итоговая таблица

Если в таблице указан знак вопроса, то либо этого языка не было в списке языков в задании, либо информация отсутствует.

C C++ C# Java Pascal Delphi Оберон Оберон-2 Modula-2 Ada83 Ada95
есть оператор перехода «goto метка» есть есть есть нет есть есть нет нет нет есть есть
есть try-finally нет нет есть нет??? ? есть нет нет нет есть есть
есть понятие динамического связывания подпрограмм (методов класса) ? есть есть есть ? есть нет есть нет нет есть
Личные инструменты
Разделы