Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ Легкость написания программы.pdf
Добавлен: 25.04.2023
Просмотров: 159
Скачиваний: 1
- Ада При создании компилятора языка Ада Министерство обороны США требовало не засорять язык. Каждый компилятор проходил проверку, пропуская через него серию из порядка 2000 специальных тестов.
- C Язык C позволяет писать для Unix-систем эффективным код и является основным средством переноса программ между Unix-системами. Стандартизация языка ANSI(Американским национальным институтом) и ISO(Международной организацией по стандартам) закрепила роль языка, как средство написания эффективным и переносимых программ.
- C++ Как и СИ, C++ проектировался в расчете на переносимость. В программах, написанных на C++ можно использовать библиотеки C. Почти все программы, рассчитанные на C, можно использовать и в C++.
- Java Программы, написанные на Java запускаются в специальной виртуальной машине (песочнице) и работают на любом оборудовании, где установлена соответствующая виртуальная машина. Следовательно программы даже не нуждаются в какой-либо доработке и абсолютно мобильны.
Вывод: все языки являются мобильными, но у Java эта ключевая особенность реализована лучше всех.
2 Мощность языка
Определяется разнообразием задач, которые программируются на данном языке.
- Ada Ада предназначалась для военных целей, к которым предъявлялись большие требования надежности. Однако ввиду надежности этот язык нашел применение в медицине, телекоммуникации, банковских системах и промышленной автоматике.
- C Язык C можно считать универсальным. Так как в него включены средства программирования почти на уровне ассемблера. Большой набор операторов и операций позволяет писать весьма компактные программы.
- C++ Ключевой отличительной особенностью языка C++ от C и Ада является класс. Класс – это определяемый пользователем тип. В C++ сохранены также все возможности C. Что позволяет достаточно эффективно реализовать программы.
- Java, как и С++ является полноценным объектно-ориентированным языком. Он используется в веб-приложениях, а также на телефонах, ввиду сильного разнообразия железа.
Вывод: Все эти языки довольно популярны, из-за многих сфер их применения.
3 Уровень языка
- Машинный язык – система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины
- Машинно-ориентированный язык – язык программирования, позволяющий при составлении программ учитывать особенности системы команд и представления информации в объектной вычислительной машине.
- Высокоуровневый язык программирования – язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания.
Все четыре языка относятся к языкам программирования высокого уровня, а C и C++ включают в себя свойства и низкоуровневых языков.
Современные критерии
2 Читабельность программы
2.1Простота написания программы
Языки C, C++, Ada, Java имеют понятную модульную структуру программы. Приведем пример простой программы на этих языках:
|
С |
С++ |
Ada |
Java |
|
#include <stdio.h> int main() { printf ("Hello, world\n"); return 0; } |
#include <iostream> using namespace std; void main() { cout << “Hello, world!”; return 0; } |
with Ada . Text_IO; procedure Hello is use Ada . Text_IO; begin Put_Line ( " Hello World ! " ) ; end Hello ; |
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } |
1.2Разнообразие типов и структур данных. Ортогональность структур данных.
Булевый тип.
- Ada есть булевый тип, который может принимать два значения: true и false
- C В языке Си в явном виде нет булевого типа, а значения true и false обозначают ненулевым и нулевым значением соответственно.
- C++ Определен тип bool , который хранит две булевы константы: true и false. Если рассматривать bool в арифметическом выражении, то true = 1, а false = 0.
- Java есть булевый тип, который может принимать два значения: true и false
Целые, вещественные, символьные типы
|
Тип данных в C |
Тип данных в C++ |
Тип данных в Ada |
Тип данных в Java |
Размер занимаемой памяти (байт) |
Минимальный диапазон |
|
|
Целый тип |
int |
Int |
integer |
short |
2 |
от – 32768 до 32767 |
|
Модификатор целого типа |
long int |
long int |
long_integer |
int |
4 |
от – 2147483648 до 2147483647 |
|
Модификатор целого типа |
short int |
short int |
short_integer |
short int |
4 |
от -32767 до 32767 |
|
Вещественный тип |
float |
float |
float |
float |
4 |
от 3.4E–38 до 3.4E38 |
|
Вещественный тип |
double |
double |
double |
8 |
от 1.7E–308 до 1.7E308 |
|
|
Модификатор вещественного типа |
long double |
long double |
10 |
от 3.4E–4932 до 3.4E4932 |
||
|
Символьный тип. |
char |
char |
character |
char |
1 |
от -128 до 127 (С, С++) от 0 до 255 (Ада) |
|
Модификатор символьного типа. |
wide_character |
1 |
от 0 до 4294967295 |
|||
|
Булевский тип |
bool |
bool |
boolean |
1 |
True(1) или false (0) |
Массивы
Во всех 4х языка программирования есть возможность создавать массивы. Отметим ряд особенностей:
- ADA В языке Ада есть возможность задания отрезка массива (array slice). Пример:
Имя_ массива ( диапазон_значений_индекса )
abc (5..10) := (5, 6, 7, 8, 9, 10);
Также есть возможность использования «анонимных» массивов (без использования предопределенного типа)
- C и C++ В языке C и C++ также можно использовать одномерных, многомерных массивов. У всех массивов первый элемент имеет индекс ноль. Однако, в этих языках нет проверки границ массивов, т.е. мы можем записать в память не принадлежащую массиву.
Пример:
int A [10], i;
for (i=0; i<100; i++) A[i]=i;
- Java Для создания массива нужно пользоваться квадратными скобками, расположив их справа от имени массива или от типа объектов, из которых составлен массив, например:
int nNumbers[];
int[] nAnotherNumbers;
Записи
Запись – это структура данных, состоящая из фиксированного числа компонентов, которые называются полями записи. В отличие от массива поля записи могут быть различных типов. В Java нет типа «запись», зато можно обойти это ограничение, использовав класс.
|
Ада |
Си |
С++ |
Java |
|
Type имя_записи is Record Имя_поля_1:тип_поля_1; Имя_поля_2:тип_поля_2; … Имя_поля_N:тип_поля_N; End record; |
union un_tag { int a; float b; char *c; } un; |
union { // анонимное // объединение int i; char a[5]; }; // непосредственный доступ к переменным i и a i = 10; a[1] = 'A'; |
public class MYRecord { public int X; public String Y; public double Z; } |
Подпрограммы
|
Тип подпрограммы |
Ада |
С и C++ |
Java |
|
Процедура |
procedure имя_процедуры [(формальные параметры)] is Begin End имя_процедуры; |
Процедура заменяется функцией без возврата. |
В Java вместо процедур и функций есть сущность «Метод». Можно объявить, определить и запустить. class Main{ public void CallMe(){ System.out.println("Hi"); } } |
|
Функция |
function имя_функции [(формальные параметры)] return тип_возвр_значения is Begin End имя_функции; |
<тип> <имя > [(формальные параметры)] { // return … ; } |
2.4 Циклы и операторы.
|
Тип |
C и C++ |
Ада |
Java |
|
Условный оператор if |
if (<логическое_выражение>) оператор1; [else оператор2;] |
if <логическое_выражение> then Оператор1; elsif <логическое_выражение> then. Оператор2; elsif <логическое_выражение> then Оператор3; else Оператор4; end if; |
If (булево выражение) { тело } |
|
Оператор выбора (case,switch) |
switch (выражение) { [case константное-выражение_1]:[операторы_1]; [case константное-выражение_2]:[операторы_2]; [default:[операторы]]; } |
case (выражение) is when (значение_выбора) => действия when (значение_выбора) => действия when others => действия end case; |
switch (a) { case 1: a = 1; break; case 2: a = 2; break; default: a = 3; break; } |
|
Цикл с параметром (for). |
for(выражение1;выражение2;выражение3) {тело_цикла;} Выражение1 устанавливает начальное значение переменных. управляющих циклом. Выражение2 - это условие, при котором тело цикла будет выполняться. Выражение3- это изменение переменных. |
for счетчик in [reverse- счетчик в обратном порядке] диапазон_значений_счетчика loop --тело цикла end loop; for Count in 1..20 loop Put (Count); end loop; |
for(инициализация,булево выражение, смена счетчика) { тело } |
3 Легкость написания программы
Языки Java, C, C++, Ада имеют понятную модульную структуру программы. Все четыре языка имеют зарезервированные слова, также есть возможность добавления комментариев к программному коду, есть наличие перегрузки процедур и функций. Их все можно отнести к весьма выразительным. Пример выразительности в C и C++: i ++; i --;
Абстрактный тип данных и инкапсуляция.
- С++ и C В языке C++ введено понятие класса, который непосредственно поддерживает абстрактные типы данных. В языке C++ переменные объявляются как сущности, имеющие тип данного класса. Таким образом, классы похожи на встроенные типы. Программная единица на языке C++, которая объявляет экземпляр класса, имеет доступ к любым скрытым сущностям в этом классе, но только через экземпляр этого класса. Классы в языке C++ являются расширением типа «struct» языка C.
- Ада обеспечивает средства инкапсуляции, которые можно использовать для моделирования абстрактных типов данных. Конструкции инкапсуляции в языке Ада называются пакетами(packages). Пакеты могут состоять из двух частей, каждая из которых также называется пакетом. В языке Ада, в отличие от языка C++, не существует спецификатора доступа public .
- Java В языке Java понятие класса неотъемлемо, так как в нем вместо процедур и функций присутствуют только методы. (Метод — это функция или процедура, принадлежащая какому-то классу или объекту). Также он обладает инкапсуляцией
4 Надежность языка
4.1 Контроль типов данных
- Ада и Java являются строго типизированными языками, в них четко рассмотрены вопросы эквивалентности типов. Также в Ada есть возможность нарушать правила контроля типов, с помощью функции unchecked_conversion.
- С и С++ не являются сильно-типизированными , тем не менее контроль типов в C++ реализовано более полно чем в С.
4.2 Обработка исключительных ситуаций.
Исключениями или исключительными ситуациями (состояниями) называются ошибки, возникшие в программе во время её работы.
- В языке Ада существует 5 исключений, которые стандартно предопределены.
- Constraint_Error – ошибка ограничения.
- Numeric_Error – ошибка числа.
- Program_Error – ошибка программы.
- Storage_Error – ошибка памяти.
- Tasking_Error – ошибка задачи.
- В языке C практически полностью отсутствует обработка исключительных ситуаций.
- В C++ обработка исключительных ситуаций реализуется с помощью трех ключевых слов: try, catch и throw.
- Все исключения в Java являются объектами. Поэтому они могут порождаться не только автоматически при возникновении исключительной ситуации, но и создаваться самим разработчиком.Исключения делятся на несколько классов, но все они имеют общего предка — класс Throwable. Его потомками являются подклассы Exception и Error. Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемы и предсказуемы. Например, произошло деление на ноль в целых числах.
Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине. Программа дополнительную память всё равно не сможет обеспечить для JVM.
В Java все исключения делятся на три типа: контролируемые исключения (checked) и неконтролируемые исключения (unchecked), к которым относятся ошибки (Errors) и исключения времени выполнения (RuntimeExceptions, потомок класса Exception).