Файл: Обзор языков программирования высокого уровня ( Классификация языков ).pdf

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

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

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

Добавлен: 04.04.2023

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

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Автоматическая память – это специальный регион памяти, резервируемый при запуске программы до вызова функции main из свободной оперативной памяти и используемый в дальнейшем для размещения локальных объектов т.е. объектов, определяемых в теле функций и получаемых функциями через параметры в момент вызова.

Автоматическую память часто называют стеком[19]. Как структура данных, стек работает по принципу–LIFO (Last In First Out), то есть первым извлекается элемент, пришедший последним. Автоматическая память имеет ряд недостатков, которые с успехом решает динамическая память. Динамическая память используется, вопервых, при нехватке единоразово выделенной автоматической или статической памяти, во-вторых, если модель LIFO не соответствует требовани ям программы. Динамическая память – это оперативная память компьютера, предоставляемая программе при ее работе, ее также называют кучей (heap). Динамическое размещение данных означает использование динамической памяти при работе программы[20].

При необходимости программа может запросить у ОС дополнительную память через аллокатор или напрямую через системный вызов. Все языки высокого уровня программирования как основную используют динамическую память, а в статической памяти или на стеке держат указатели на динамические объекты. Размер динамической памяти зависит от ОС, процессора, аппаратной архитектуры, максимального размера ОЗУ. Динамическая память имеет две явные проблемы.

Первая заключается в том, что любое выделение или освобождение памяти в ОС является системным вызовом, замедляющим работу программы. В языке C++ используются умные указатели и RAII. Управление динамической памятью является важнейшей стороной программирования на C++. Работая с динамической памятью, разработчик вплотную сталкивается с указателями, понимание природы которых позволяет избежать огромного количества ошибок. Как написал Джоэл Спольски в своей книге: «Указатели и рекурсия требуют определённых способностей к рассуждению и абстрактному мышлению, а главное – умения рассматривать проблему на нескольких уровнях абстракции одновременно. Поэтому способность разобраться в указателях и рекурсии непосредственно связана с перспективой стать выдающимся программистом»[21].

О нетривиальных подходах к управлению памятью, написании собственных диспетчеров памяти для нестандартного размещения объектов конкретных классов, а также об умных, мудрых, гениальных, ведущих и невидимых указателях можно почитать в книге Джеффа Элджера «C++: библиотека программиста»[22], содержание которой более точно отражает английский вариант названия «C++ for Real Programmers».


Подводя итог, можно сказать, что использование динамической памяти имеет неоспоримые преимущества по отношению к автоматической и статической памяти. Но умение управлять памятью становиться неотъемлемым навыком программиста. У каждого способа управления динамической памятью есть свои плюсы и минусы. Как правило, приходится искать компромисс между производительностью, простотой в использовании, простотой в реализации и совместимостью с многопоточностью.

Продемонстрируем использование вышеизложенного материала на примере реализации обработки множеств. Множества – понятие, часто используемое в математике, так и во многих предметных областях. Использование возможностей управления памятью дает преимущество в плане увеличения мощности обрабатываемого множества.

Пример использования памяти C++. Над множествами можно производить основные математические операции, такие как пересечение, объединение , разность, и симметрическая разность. Каждый из алгоритмов будет проиллюстрирован отдельно. Множества представлены в виде односвязных список, то есть в виде структуры данных, представляющей собой последовательность элементов, в которых хранится значение и указатель на следующий элемент списка[23].

Односвязные списки обладают преимуществом–вставка и удаление узлов легко осуществляется в любом месте списка.

Функция add добавляет элемент в множество, функция getSize возвращает номер последнего элемента, функция getValue возвращает значение элемента по указанному номеру, функция deleteList удаляет список.

Функция intersection: возвращает множество, полученное операцией пересечения двух указанных множеств.

List *intersection(List *headA, List *headB, List *headC)

{int a = 0, b = 0;

for (int i = 1; i <= getSize(headA); i++)

{ a = getValue(headA, i);

for (int j = 1; j <= getSize(headB); j++)

{ b = getValue(headB, j);

if (a == b) {

headC = add(headC, a);}}}

return headC;}

Функция Join: возвращает множество, полученное операцией объединения двух указанных множеств.

List *Join(List *headA, List *headB, List *headM)

{if (getSize(headA) > getSize(headB))

headM = headB;

else headM = headA;

int a = 0, d = 0;

bool multi=true;

for (int i = 1; i <= getSize(headA); i++)

{a = getValue(headA, i);

for (int j = 1; j <= getSize(headM); j++)

{d = getValue(headM, j);

if (a != d) multi = true;

else { multi = false;

break;}}

if (multi) headM = add(headM,a);}

return headM;}

Функция difference: возвращает множество, полученное операцией разности двух указанных множеств.

List *difference(List *headA, List *headB, List *headD)

{ int a = 0, d = 0;

bool multi = true;

for (int i = 1; i <= getSize(headA); i++)

{ a = getValue(headA, i);

for (int j = 1; j <= getSize(headB); j++)


{ d = getValue(headB, j);

if (a == d) {

multi = false; break; }

else multi = true;}

if (multi) headD = add(headD, a);}

return headD;}

Функция sumDifference: возвращает множество, полученное операцией симметрической разности двух указанных множеств.

List *sumDifference(List *headA, List *headB, List *headS)

{ List *temp_A = NULL;

List *temp_B = NULL;

temp_A = difference(headA, headB, temp_A);

temp_B = difference(headB, headA, temp_B);

headS = Join(temp_A, temp_B, headS);

return headS;}

Анализируя работу со множествами посредством односвязных списков, нельзя не признать удобство и универсальность данных алгоритмов. За счет использования указателей и динамической памяти можно наблюдать экономию памяти и заметное увеличение быстродействия программы. Алгоритмы, изложенные выше, лишь малая область применения динамической памяти и указателей, которые позволяют повысить эффективность программы.

Заключение

Язык программирования – это особый язык программистов для разработки программного обеспечения или это другие наборы инструкций и алгоритмов. В нынешнем веке очень много языков программирования, но по-настоящему популярны и широко востребованы только некоторые из них.

Создание языков программирования высокого уровня являлось необходимым шагом. Данные языки программирования должны были быть более совершенными, и напоминать естественные языки программирования и позволять не работать с машинными командами напрямую. Языки программирования высокого уровня призваны для того, чтобы описывать алгоритмы. Также они носят название алгоритмические языки. Их преимущество заключается в большей наглядности и независимости от конкретного компьютера.

Мы рассмотрели классификации языков программирования: по уровню, по абстракции, по поколениям, по функциональному признаку.

Также мы рассмотрели объектно-ориентированные языки программирования. Практически все объектно-ориентированные языки программирования являются развивающимися, их стандарты регулярно обновляются. Вследствие этого развития во входных языках компиляторов различных систем программирования происходят неизбежные различия. Каждый язык имеет свои достоинства и недостатки, а отсюда и различные области эффективного применения. Это объясняет необходимость в изучении и освоении нескольких различных языков программирования.

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


Список литературы

Александреску, А. Язык программирования D / А. Александреску. - СПб.: Символ-плюс, 2014. - 544 c.

История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.05.2019)

Классификация языков программирования [Электронный ресурс]. URL:http://bourabai.ru/alg/classification.htm дата доступа (14.08.2018)

Костарев А.Н. Размещение объектов в оперативной памяти. Понятие указателя / RSDN Magazine. – 2010. – №2. – С. 25 - 32.

Коэльё Л. П., Ричерт В. Построение систем машинного обучения на языке Python. — Перевод с английского. — М.: ДМК Пресс, 2015.

Маккинли У. Python и анализ данных. — Перевод с английского. — М.: ДМК Пресс, 2015. — 482 с.

Объектно-ориентированные языки программирования [Электронный ресурс] // Vuzlit.ru: архив студенческих работ. – Режим доступа: https://vuzlit.ru/1021735/smalltalk.

ООП. Объектно-ориентированные языки программирования [Электронный ресурс] // Bourabai Research: официальный вебсайт частного Боровского исследовательского учреждения по внедрению новых технологий. – Режим доступа: http://bourabai.ru/ alg/oop11.htm.

Особенности объектно-ориентированных языков программирования [Электронный ресурс] // Kopilkaurokov.ru: сайт для учителей. – Режим доступа: https://kopilkaurokov.ru/informatika/prochee/ osobiennosti_obiektno_oriientirovannykh_iazykov_ proghrammirovaniia.

Пять поколений языков программирования [Электронный ресурс]. URL: http://life-prog.ru/view_zam2.php?id=194&cat=5&page=11 дата доступа (14.05.2019)

Спольски Дж. Джоэл И снова о программировании; пер. с англ. — СПб.: СимволПлюс, 2009. — 320 с.

Сравнение языков программирования. Википедия. URL: https://ru.wikipedia.org/ wiki/Сравнение_языков_программирования (дата обращения: 14.05.2019).

Элджер Дж. С++: библиотека программиста; пер. с англ. — СПб.: Питер, 2000. — 320 с.

Язык программирования C# [Электронный ресурс] // Bourabai Research: официальный веб-сайт частного Боровского исследовательского учреждения по внедрению новых технологий. – Режим доступа: http://bourabai.ru/alg/c-sharp.htm.

Язык программирования. Эволюция языков программирования [Электронный ресурс]. URL:http://wiki.mvtom.ru/index.php/Язык_программирования дата доступа (14.05.2019)

Языки программирования и их классификация [Электронный ресурс]. URL:http://www.maksakov-sa.ru/ProgrProd/YazProgr/index.html дата доступа (14.05.2019)

INTUIT, [Электронный ресурс]. Режим доступа : https: // www.intuit.ru / studies / courses / 627 / 483 / lecture / 10960

TIOBE Index for November 2018. URL: https://www.tiobe.com/tiobe-index/ (дата обращения: 15.05.2019).

  1. Александреску, А. Язык программирования D / А. Александреску. - СПб.: Символ-плюс, 2014. - 544 c.

  2. История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.05.2019)

  3. История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.05.2019)

  4. Коэльё Л. П., Ричерт В. Построение систем машинного обучения на языке Python. — Перевод с английского. — М.: ДМК Пресс, 2015.

  5. Маккинли У. Python и анализ данных. — Перевод с английского. — М.: ДМК Пресс, 2015. — 482 с.

  6. ООП. Объектно-ориентированные языки программирования [Электронный ресурс] // Bourabai Research: официальный вебсайт частного Боровского исследовательского учреждения по внедрению новых технологий. – Режим доступа: http://bourabai.ru/ alg/oop11.htm.

  7. Объектно-ориентированные языки программирования [Электронный ресурс] // Vuzlit.ru: архив студенческих работ. – Режим доступа: https://vuzlit.ru/1021735/smalltalk.

  8. Особенности объектно-ориентированных языков программирования [Электронный ресурс] // Kopilkaurokov.ru: сайт для учителей. – Режим доступа: https://kopilkaurokov.ru/informatika/prochee/ osobiennosti_obiektno_oriientirovannykh_iazykov_ proghrammirovaniia.

  9. Особенности объектно-ориентированных языков программирования [Электронный ресурс] // Kopilkaurokov.ru: сайт для учителей. – Режим доступа: https://kopilkaurokov.ru/informatika/prochee/ osobiennosti_obiektno_oriientirovannykh_iazykov_ proghrammirovaniia.

  10. Особенности объектно-ориентированных языков программирования [Электронный ресурс] // Kopilkaurokov.ru: сайт для учителей. – Режим доступа: https://kopilkaurokov.ru/informatika/prochee/ osobiennosti_obiektno_oriientirovannykh_iazykov_ proghrammirovaniia.

  11. Язык программирования C# [Электронный ресурс] // Bourabai Research: официальный веб-сайт частного Боровского исследовательского учреждения по внедрению новых технологий. – Режим доступа: http://bourabai.ru/alg/c-sharp.htm.

  12. Классификация языков программирования [Электронный ресурс]. URL:http://bourabai.ru/alg/classification.htm дата доступа (14.08.2018)

  13. Языки программирования и их классификация [Электронный ресурс]. URL:http://www.maksakov-sa.ru/ProgrProd/YazProgr/index.html дата доступа (14.05.2019)

  14. Пять поколений языков программирования [Электронный ресурс]. URL: http://life-prog.ru/view_zam2.php?id=194&cat=5&page=11 дата доступа (14.05.2019)

  15. Пять поколений языков программирования [Электронный ресурс]. URL: http://life-prog.ru/view_zam2.php?id=194&cat=5&page=11 дата доступа (14.05.2019)

  16. Язык программирования. Эволюция языков программирования [Электронный ресурс]. URL:http://wiki.mvtom.ru/index.php/Язык_программирования дата доступа (14.08.2018)

  17. TIOBE Index for November 2018. URL: https://www.tiobe.com/tiobe-index/ (дата обращения: 15.05.2019).

  18. Сравнение языков программирования. Википедия. URL: https://ru.wikipedia.org/ wiki/Сравнение_языков_программирования (дата обращения: 14.05.2019).

  19. Костарев А.Н. Размещение объектов в оперативной памяти. Понятие указателя / RSDN Magazine. – 2010. – №2. – С. 25 - 32.

  20. INTUIT, [Электронный ресурс]. Режим доступа : https: // www.intuit.ru / studies / courses / 627 / 483 / lecture / 10960

  21. Спольски Дж. Джоэл И снова о программировании; пер. с англ. — СПб.: СимволПлюс, 2009. — 320 с.

  22. Элджер Дж. С++: библиотека программиста; пер. с англ. — СПб.: Питер, 2000. — 320 с.

  23. INTUIT, [Электронный ресурс]. Режим доступа : https: // www.intuit.ru / studies / courses / 627 / 483 / lecture / 10960 3