КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 1:у С и С++ единицей компиляции может быть только файл
к пункту 2:PASCAL не имеет отдельного файла описания интерфе й са модуля; в OBERON экспортируемые имена помечаются специальным знаком прямо в тексте модуля
к пункту 3:С позволяет импортировать модули только с помощью директивы include; MODULA-2 позволяет импортировать не все экспортируемые модулем идентификаторы
к пункту 5:в С++ для ограничения видимости можно использовать конструкцию namespace
к пункту 7:конструкция template из С++ позволяет создавать настраиваемые модули, однако может приводить к ошибкам компиляции в template-функциях (в отличие от конструкций generate из ADA)
КОММЕНТАРИИ К ПРОГНОЗУ:
к пункту 1: выделение специальных скобок для единицы компиляции (UNIT, MODULE или PACKAGE) позволяет избежать некоторых семантических ошибок
к пункту 3: использование для импорта модулей в C механизма include является устаревшим методом и снижает скорость компиляции
к пункту 5: средства для изменения контекста не нашли большого практического применения
к пункту 6: синонимы для импортируемых идентификаторов являются удобным, но не необходимым механизмом для организации межмодульных связей
к пункту 7: настраиваемые модули являются расширением механизма макросов, однако они сложны для реализации и не являются жизненно необходимыми
G. АБСТРАКТНЫЕ ТИПЫ ДАННЫХ И ОБЪЕКТЫ.
Этот раздел характеризует реализацию в современных языках программирования теоретических разработок: абстрактных типов данных и объектно-ориентированного программирования (отчасти механизм абстрактных типов данных рассмотрен в предыдущем разделе).
|
C
|
C++
|
Java
|
|
Pascal
|
Modula-2
|
Oberon-2
|
|
Ada 95
|
|
Прогноз
|
1. Инкапсуляция
|
+
|
++
|
++
|
|
+
|
+
|
++
|
|
+
|
|
+
|
2. Полиморфизм
|
|
++
|
+
|
|
|
|
|
|
+
|
|
+
|
3. Наследование
|
|
++
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
4. Конструкторы и деструкторы
|
|
++
|
++
|
|
+
|
|
|
|
|
|
|
5. Виртуальные методы
|
|
+
|
++
|
|
+
|
|
++
|
|
++
|
|
++
|
6. Неявный параметр метода
|
|
++
|
++
|
|
++
|
|
+
|
|
|
|
+
|
7. Доступ к тегам объектов
|
|
|
|
|
|
|
+
|
|
+
|
|
|
РЕЙТИНГ ПО ГРУППЕ:
|
1
|
10
|
10
|
|
6
|
1
|
7
|
|
6
|
|
|
КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 1:С++ и JAVA имеют два уровня инкапсуляции - protected и private; OBERON допускает инкапсуляцию “только для чтения”
к пункту 2:в С++ можно перегружать знаки операций
к пункту 3:С++ допускает множественное наследование
к пункту 4:в PASCAL конструкторы требуется вызывать явно
к пункту 5:в PASCAL и С++ виртуальные методы требуется объявлять явно
к пункту 6:имеется в виду возможность префиксной записи вида “объект.метод(параметры метода)”; в OBERON такая возможность присутствует, однако при описании метода параметр следует указывать явно
к пункту 7:OBERON предоставляет ограниченные возможности для проверки тега объекта с помощью оператора WITH и операции IS
КОММЕНТАРИИ К ПРОГНОЗУ:
к пункту 1: необходимость в двух уровнях инкапсуляции представляется автору излишней
к пункту 2: перегрузка имен процедур необходима для реализации ООП, однако этот механизм ухудшает "читабельность" текста программы и нуждается в некоторых ограничениях
к пункту 3: множественное наследование можно реализовать с помощью других механизмов ООП
к пункту 4: как показал пример ADA, конструкторы и деструкторы не являются обязательными компонентами ООП
к пункту 5: компилятор в состоянии самостоятельно определить “виртуальность” метода
H. ПРОЦЕССЫ И ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ.
Механизмы реализации параллельных процессов и обработки исключительных ситуаций являются скорее экзотикой, нежели обязательным компонентом современных языков программирования. Однако наличие этих механизмов в нескольких языках требует включить их в анализ для сравнения.
|
C
|
C++
|
Java
|
|
Pascal
|
Modula-2
|
Oberon-2
|
|
Ada 95
|
|
Прогноз
|
1. Сопрограммы
|
|
|
|
|
|
+
|
+
|
|
+
|
|
+
|
2. Сигналы
|
|
|
|
|
|
+
|
+
|
|
++
|
|
|
3. Критические участки (мониторы)
|
|
|
|
|
|
|
|
|
+
|
|
+
|
4. Исключительные ситуации
|
|
+
|
+
|
|
|
|
|
|
+
|
|
|
5. Распространение ситуаций
|
|
+
|
+
|
|
|
|
|
|
+
|
|
|
РЕЙТИНГ ПО ГРУППЕ:
|
0
|
2
|
2
|
|
0
|
2
|
2
|
|
6
|
|
|
КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 2:ADA имеет специальный оператор приема сигналов when
КОММЕНТАРИИ К ПРОГНОЗУ:
к пункту 1: этот наиболее примитивный механизм параллельных процессов желателен в каждом языке программирования
к пункту 3: критические участки (мониторы) могут выступать альтернативой механизму сигналов
к пунктам 4-5: механизм обработки исключительных ситуаций в общем виде громоздок и трудно реализуем, однако желательно иметь некоторые средства для обработки ошибок времени выполнения
I. ПРОЧИЕ ВОЗМОЖНОСТИ.
Важные свойства языков программирования, тематически не относящиеся к предыдущим разделам, были объединены в дополнительный раздел "прочие возможности".
|
|
|
|
|
|
|
|
|
|
|
|
1. Инициализация переменных
|
+
|
++
|
++
|
|
+
|
|
|
|
+
|
|
+
|
2. Константные выражения
|
+
|
++
|
++
|
|
++
|
++
|
++
|
|
++
|
|
++
|
3. Типизированные константы
|
+
|
+
|
+
|
|
+
|
++
|
+
|
|
++
|
|
+
|
4. Макросы
|
+
|
+
|
+
|
|
|
|
|
|
++
|
|
|
5. Приоритеты логических операций
|
+
|
+
|
+
|
|
|
|
|
|
+
|
|
+
|
6. Адресная арифметика
|
+
|
+
|
|
|
|
|
|
|
|
|
|
7. Условное выражение
|
+
|
+
|
+
|
|
|
|
|
|
|
|
|
8. Операция разыменования
|
+
|
+
|
|
|
+
|
+
|
+
|
|
|
|
+
|
9. Операция “разыменование+доступ к полю”
|
+
|
+
|
|
|
|
++
|
++
|
|
++
|
|
+
|
РЕЙТИНГ ПО ГРУППЕ:
|
9
|
11
|
8
|
|
5
|
7
|
6
|
|
11
|
|
|
Достарыңызбен бөлісу: |