Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Языки процедурного программирования).pdf
Добавлен: 23.04.2023
Просмотров: 593
Скачиваний: 2
СОДЕРЖАНИЕ
1. Понятие и классификация языков программирования
2. История появления языков программирования
2.1 Поколение языков программирования
2.1.1 Первое поколение языков программирования
2.1.2 Второе поколение языков программирования
2.1.3 Третье поколение языков программирования
3. Языки процедурного программирования
4. Недостатки структурного программирования
5. Объектно-ориентированный подход к программированию
6. Основные понятия объектно-ориентированного программирования
7. Основные принципы объектно-ориентированного программирования
7.1 Модификаторы доступа private и public
7.2 Инкапсуляция и скрытие данных
7.4.2 Множественное наследование
7.4.3 Спецификатор доступа protected
2.1.2 Второе поколение языков программирования
Изначально подпрограммы служили лишь для облегчения процесса написания программ. Подпрограммы будучи минимальными единицами переиспользования, стали своего рода кирпичиками при создании первых библиотек. Со временем они стали играть фундаментальную роль в декомпозиции программных систем[21].
Выделение подпрограмм, как механизм абстрагирования, имело следующие важные последствия:
- Были разработаны различные механизмы передачи параметров.
- Были заложены основания для структурного программирования, что выражалось в появлении языковой поддержки механизмов вложенности подпрограмм и научной разработке структур управления и областей видимости.
- Возникли методы структурного проектирования, основой которых служило использование процедур или подпрограмм в качестве отдельных строительных блоков.
Рисунок 1.2
Топология языков программирования конца второго и начала третьего поколения
Источник: В.В.Мухортов,В.Ю.Рылов Объектно-ориентированное программирование, анализ и дизайн: метод. пособие / В.В.Мухортов,В.Ю.Рылов.-Новосибирск: Изд-во Новософт, 2002г.-108
2.1.3 Третье поколение языков программирования
Со временем из-за роста программных проектов и в следствии увеличения коллективов разработчиков, появилась необходимость в таких механизмах, которые позволили бы независимо работать над разными частями проекта и такие механизмы получили название модули.
Модуль-отдельно компилируемая часть программы, состоящая из наборов данных и подпрограмм[22].
Как правило модули состояли из подпрограмм, которые совместно разрабатывались и изменялись. Также в модули для использования подпрограммами собирались данные. Постепенно модули стали новым, более крупным механизмом абстракции программных систем.
Сначала языки программирования не обладали развитыми механизмами защиты данных от использования их процедурами другого. Задача по защите данных легла на коллектив разработчиков, что способствовало появлению огромного количества языков, которые имели те или иные сильные и слабые стороны. Одним из наиболее развитых представителей языков третьего поколения стал язык ALGOL-68. Хоть язык ALGOL-68 и был достаточно труден для первоначального освоения, однако данный язык был универсален, реализовывал все разработанные к тому времени механизмы в алгоритмических языках и позволял разрабатывать системы корпоративного масштаба для больших ЭВМ.
Такие простые потомки языка ALGOL-60 как Pascal и C приобрели большую популярность благодаря распространению малых ЭВМ.
Pascal изначально служил средством обучения структурному программированию, для написания сложных программных комплексов служил язык Ada он был классическим потомком языка Pascal и имел встроенную поддержку модульности и абстрактных типов данных.
Появившейся во второй половине 70-х годов язык C он широко использовался в академической и учебной среде и приобрел наибольшую популярность среди профессиональных программистов[23], C был разработан для написания операционной системы Unix и имел гибкий лаконичный синтаксис, простую алгоритмическую структуру (в нем отсутствуют вложенные процедуры), стал очень популярным языком как системного, так и прикладного программирования. Следующие характеристики делают язык C языком системного программирования:
- Низкоуровневое управление памятью (преобразование типов, наличие указателей на данные и функции);
- Препроцессор;
- Поддержка макросов.
Эти возможности были ранее доступны на малых ЭВМ только на уровне языка ассемблер.
Рисунок 1.3
Топология языков конца третьего поколения
Источник: В.В.Мухортов,В.Ю.Рылов Объектно-ориентированное программирование, анализ и дизайн: метод. пособие / В.В.Мухортов,В.Ю.Рылов.-Новосибирск: Изд-во Новософт, 2002г.-108
3. Языки процедурного программирования
Программа, написанная на языке процедурного или императивного программирования, представляет собой последовательность команд, определяющих алгоритм решения задачи. Основной командой является команда присвоения, предназначенная для определения и изменения содержимого памяти компьютера. Фундаментальная идея процедурного программирования — использование памяти компьютера для хранения данных. Функционирование программы сводится к последовательному выполнению команд с целью преобразования исходного состояния памяти, т.е. программа производит пошаговое преобразование содержимого памяти, изменяя его от исходного состояния к результирующему.
3.1 Фортран
В США фирмой IBM в начале 50-х гг. был создан один из первых процедурных языков программирования высокого уровня его назвали Фортран[24].
Фортран разрабатывался для решения научно-технических задач, язык работал с такими объектами как:
- Целые числа;
- Вещественные числа;
- Числовые переменные.
Выражения в нем формируются с помощью четырех арифметических действий:
- Возведение в степень;
- Логические операции И, ИЛИ, НЕ;
- Операций отношения и круглых скобок.
Основные операторы Фортрана:
- Ввод;
- Вывод;
- Присваивание;
- Условный и безусловный переход;
- Цикл;
- Вызов подпрограмм.
Пример кода, написанного на языке Фортран:
Hello, World!
Фиксированный формат (символами «␣» выделены пробелы в позициях строки с 1 по 6):
␣␣␣␣␣␣PRINT*, 'Hello, World!'
␣␣␣␣␣␣END
Свободный формат:
print *, "Hello, World!"
end
3.2 Кобол
В период с 1958-1960 гг. в США был разработан язык программирования, ориентированный на решение задач обработки данных под названием COBOL (COmmon Business Oriented Language)[25]. Кобол предназначен, в первую очередь, для разработки бизнес-приложений по этой причине широко использовался для решения учетно-экономических и управленческих задач. Практически с самого своего рождения Кобол является ANSI-стандартизованным языком программирования. Программа на Коболе имеет вид ряда предложений на английском языке и напоминает обычный текст. Группы последовательно записанных операторов объединяются в предложения, предложения — в параграфы, параграфы — в секции. Программист присваивает параграфам и секциям имена (метки), что облегчает непосредственное обращение к нужному участку программы. В СССР был принят русский вариант языка. В Коболе были реализованы мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях.
Пример кода, написанного на языке Кобол:
Hello world
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
*
PROCEDURE DIVISION.
PARA-1.
DISPLAY "Hello, world.".
*
EXIT PROGRAM.
END PROGRAM HELLO-WORLD.
3.3. Алгол
В 1958 году на недельной конференции в ETH (Цюрих, Швейцария) как универсальный язык программирования для широкого круга применений, а затем доработан комитетом, созданным Международной федерацией по обработке информации (IFIP)[26]. Алгол предназначался для записи алгоритмов, построенных в виде последовательности процедур, применяемых при решении поставленных задач. В том же году была принята первая версия описания языка Алгол 58 (первоначально предполагалось назвать язык IAL — International Algebraic Language, но от этого отказались), для устранения проблем предыдущей версии комитет сформировал новый стандарт – Алгол 60; он и стал классическим Алголом. Годом позже в 1959 г. был разработан – формальный способ описания алгоритмических языков, названный в честь его создателя «нормальной формой Бэкуса» (БНФ). Первым языком, спецификация которого была записана в БНФ, стал Алгол 58. Впоследствии, после усовершенствований, которые предложил Питер Наур, возникла форма Бэкуса — Наура (аббревиатура та же — БНФ или BNF), которая использовалась для спецификации языка ALGOL 60 уже на этапе её разработки.
В Алголе в первые были введены такие понятия как: «блочная структура программы», «динамическое распределение программы». Внутри блока в Алголе можно вводить локальные обозначения, которые не зависят от остальной части программы. Несмотря на свое интернациональное происхождение, Алгол-60 получил меньшее распространение, чем Фортран. Например, не на всех зарубежных ЭВМ имелись трансляторы с Алгола-60. В 1968 г. в результате дальнейшего развития и усовершенствования Алгола-60 была создана версия Алгол-68[27]. Это многоцелевой универсальный расширенный язык программирования.
Пример кода, написанного на языке Алгол 60
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
value n, m; array a; integer n, m, i, k; real y;
comment Наибольший элемент матрицы a, размера n на m
передаётся в виде результата в y, а его индексы — в параметры i и k;
begin integer p, q;
y := 0; i := k := 1;
for p:=1 step 1 until n do
for q:=1 step 1 until m do
if abs(a[p, q]) > y then
begin y := abs(a[p, q]);
i := p; k := q
end
end Absmax
3.4. Бейсик
Из-за повышения доступности компьютеров в 1960-х годах и появления возможности работы в режиме разделения времени появилась потребность в простом для освоения языке программирования с наличием достаточно мощных универсальных средств, пригодных для решения научных, технических и экономических задач, а также задач бытового характера, игровых и т.д. Новый язык назвали универсальным символическим кодом для начинающих или сокращенно BASIC (Бейсик). 1964 г. считают годом рождения этого языка[28]. Бейсика его предназначался для более «простых» пользователей, не столько заинтересованных в скорости исполнения программ, сколько просто в возможности использовать компьютер для решения своих задач, не имея специальной подготовки. Согласно концепциям, заложенным в Бейсике, в нем широко распространены различные правила умолчания, что считается плохим тоном в большинстве языков программирования подобного типа. Возникло множество версий языка, зачастую мало совместимых друг с другом. Однако, зная одну из версий, можно без особого труда освоить любую другую. Бейсик активно поглощает многие концепции и новинки из других языков.
Первоначально интерактивный режим осуществлялся с использованием интерпретатора, в настоящее время для этого языка имеются также и компиляторы.
При проектировании языка использовались следующие восемь принципов.
Новый язык должен был:
- быть простым в использовании для начинающих;
- быть языком программирования общего назначения;
- предоставлять возможность расширения функциональности, доступную опытным программистам;
- быть интерактивным;
- предоставлять ясные сообщения об ошибках;
- быстро работать на небольших программах;
- не требовать понимания работы аппаратного обеспечения;
- защищать пользователя от операционной системы.
Фрагмент программы на Бейсике:
10 CLS 'Очистка экрана
20 PRINT "Добро пожаловать!" 'Заголовок в первой строке
30 'Цикл, выводящий линию под заголовком, на всю ширину экрана
40 FOR I=1 TO 80
50 PRINT "=";
60 NEXT I
65 'Ввод символьных данных от пользователя (комментарий добавлен после ввода нижних строк)
70 INPUT "Имя: ",N$
80 INPUT "Фамилия: ",S$
90 INPUT "Отчество: ",T$
95 'Вырезаем копию первых символов из имени и отчества
100 N2$=LEFT$(N$,1)
110 T2$=LEFT$(T$,1)
120 'Выводим результат
130 PRINT "Ваше имя кратко: ";S$;" ";N2$;". ";T2$;"."
140 INPUT "Повторить программу? (Y/N) ",U$
150 IF U$="Y" THEN GOTO 10
160 END
3.5. ПЛ/1
В начале 1960-х гг. разрабатываемые программы для научной и бухгалтерской сфер использовали разные компьютеры и писались на разных языках: научные — на Фортране, бухгалтерские — в основном на Коболе, в связи с этим появилась необходимость в создании такого языка, который подходил для обоих типов приложений и поддерживал конструкции для структурного программирования, взятых из Алгола-60, не поддерживаемых в то время ни Коболом, ни Фортраном. Были предприняты попытки преодолеть этот недостаток путем создания универсального языка программирования. ПЛ /1 (PL /1 — Programming language One) — первый многоцелевой универсальный язык, разработан в США фирмой IBM в 1963—1966 гг[29].
ПЛ /1 один из наиболее распространенных универсальных языков, он хорошо приспособлен для решения задач в области вычислительной техники: исследования и планирования вычислительных процессов, моделирования, решения логических задач и исследования логических схем, разработки систем математического обеспечения.
Основные свойства языка ПЛ/1:
- Свободный синтаксис;
- Ключевые слова и идентификаторы нечувствительны к регистру;
- По умолчанию (в классических версиях для мейнфреймов — всегда) передача параметров по ссылке;
- Поддержка сложных структур с объединениями (в терминологии языка Паскаль — записи с вариантами);
- Чрезвычайно развитая система встроенных типов данных, при этом возможность неявных преобразований между большинством из них;
- Несколько видов динамического выделения памяти;
- Очень обобщённые операторы со многими вариантами синтаксиса;
- Строго определённая семантика управляющих конструкций (например, оператор цикла определён через эквивалентные присваивания и go to и т. д.);
- Операции с массивами;
- Развитый механизм исключительных состояний;
- Поддержка на уровне языка мультизадачности и асинхронного ввода-вывода;
- Поддержка на уровне языка сложных методов доступа для ввода-вывода;
- Очень развитый препроцессор, фактически сам являющийся подмножеством ПЛ/1.