Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ Легкость написания программы.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.04.2023

Просмотров: 163

Скачиваний: 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).