Эволюция языков программирования
1. Языки высокого уровня
· Машинный язык (ассемблеры)
В начале подпрограммы все использовали локальные данные, все подпрограммы использовали одни глобальные данные.
· Локальные данные в подпрограммах
Основная программа à глобальные данные ß(программа 1àдальше)
ß(программа 2àдальше)
ß(программа 3àдальше)
· Структурное программирование
70е гг – Дейкстира Э, Вирт.Н, Хоар Ч.
1970г – язык Паскаль (Н.Вирт)
· Основные концепции:
1) Нисходящая разработка – структурная декомпозиция.
2) Использование только 3х базовых конструкций – следование, ветвление, цикл.
3) Широкое использование подпрограмм
4) Компилируемая программа на каждом этапе.
· Структурная декомпозиция: разделение сложной задачи на подзадачи, каждая задача также делится на подзадачи и тд.
· Модульное программирование (1975г)
· Преимущества модульного подхода:
Ведение разработки несколькими программистами
Повторное использование модулей
· Совместное использование структурного и модульного подхода позволяет разрабатывать программы.
· Потребность в методологии разработки сложных систем привела к появлению объектно-ориентированного программирования.
· Simula-67 – первый в мире язык ООП
· 70ее гг – Smaiitalk
· 80-ее гг – С++, Objiect PPascal, Ada Eiffer
· 90-ее гг и начало века – Java, Dilphy
· Объектно-оринетированное програмирование – методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
· Класс – тип данных, который включает описание полей данных, а также процедур, работающих с этими полями данных.
· Объект – экхемпляр класса (переменная)
· Сообщение – запрос на выполнение действия (вызов функции).
· Объектно-ориентированное проектирование – методология проектирования, соединающая в себе процесс объектной декомпозиции и приемц представления логической и физической, а также статистической и динамической моделей проектируемой системы.
· Объектно-ориентированный анализ – методология, при которой требования к системе воспринимаются с точки зрения классов и объектов, выявление в предметной области.
Принципы ООП:
1) абстрагирование
2) инкапсуляция
3) модульность
4) иерархичность
5) типизация
6) параллелизм
7) сохраняемость.
Абстрагирование
· выделение абстракций в предметной области задач
· абстракция выделяет существенные для данной задачи характеристики некоторого объекта.
· ООП предполагает объединение всех свойств абстракции в единую программную единицу – класс.
ü Инкапсуляция – сокрытие деталей реализации абстракции.
ü Инкапсуляция позволяет легко модифицировать реализацию отдельных абстракций (классов).
ü Инкапсуляция приводит к наличию 2х частей описания абстракции (класса)
ü Интерфейс – доступные из вне элементы абстракции (состояние и поведение)
ü Реализация – недоступные извне элементы абстракции (внутренняя организация абстракции и механизмы реализации ее поведения).
· Модульность – реализация программы в виде отдельных слабо связанных между собой частей (модулей)
· Модули выполняют роль физических контейнеров, в которых помещаются определения классов и объектов.
ü Инкапсуляция сокрытые деталей реализации абстракции.
ü Она позволяет легко модифицировать реализацию отдельных абстракций (классов)
· Иерархичность
· Предполагает использование иерархий при разработке программных систем
· Виды иерархий: общее-частное(мебель-общее, столы-частное), целое-часть(стол-общее, столешница-часть).
· Наследование
ü Типизация
ü Тип – точная характеристика свойств, включая структуру и поведение, относящееся к некоторой совокупности объектов.
ü Тип и класс – одно и то же.
ü Ограничения, накладываемые на объект и препятствующие взаимозаменяемости объектов различных типов или уменьшающие возможность такой замены.
ü Типизация в языках программирования бывает сильной и слабой.
ü При сильной типизации с объектом можно сделать только то, что предписано его типом
ü При слабой типизации контроль типов отдается программисту
ü В С++ средняя степень типизации.
ü Тип может связыываться с объектом во время компиляции или во время выполнения программы
ü С++,Pascal? C# - динамическое связывание
ü Динамическое связывание позволяет реализовать полиморфизм – одно и то же имя может означать объекты разных типов, но имея общего предка, все они имеют и общее подмножество операций, которые можно над ним выполнить.
· Параллелизм – свойство нескольких абстракций одновременно находится в активном состоянии, т.е выполняет некоторые операции.
· Объектная модель хороша для параллельных систем, тк разделяет программу на распределенные единицы и сообщающиеся объекты.
· Реаьлный параллелизм достигается только на многопроцессорных машинах
· На однопроцессонных компьютерах параллелизм имитируется за счет разделения времени между процессами.
ü Сохраняемость – способность объекта существовать во времени, переживая породивший его процесс, и/или в пространстве, перемещаясь из своего персонального адресного пространства.
Этапы разработки программ с применением ОО-подхода:
1. Анализ
Цель этапа – максимально полное описание задачи. Этап включает: объектную декомпозицию, описание абстракций. Результат этапа диаграмма объектов.
2. Проектирование
Цель – формализованное описание задачи, готовое для реализации. Этап включает: логическое и физическое проектирование. Результат этапа – диаграмма классов.
3. Реализация
Цель – получение программной системы, выполняющей заданные функции. Результат: программная система
4. Модификация
Преимущества ОО:
· Полное использование ОО-языков
· Унификация разработки и пригодности программ для повторного использования
· Простота внесения изменений
· Уменьшение риска разработки сложных систем
· Ориентировано на человеческое восприятие мира.