История развития языков программирования высокого уровня.
Этапы:
1) Машинный язык, с помощью которого программист мог задаbhвать команды, оперируя с ячейками памяти, полностью используя возможности машины. Однако использование большинства компьютеров на уровне машинного языка затруднительно
2) Машинно-ориентированные языки — ассемблеры. Люди используют мнемонические команды взамен машинных команд
3) Языки высокого уровня. Структурные языки.
изобретения языков структурного программирования (англ. structured programming language), таких как Фортран(1954), Алгол(1958), Паскаль(1970), Си(1972).
Структурное программирование предполагает точно обозначенные управляющие структуры, программные блоки, отсутствие инструкций безусловного перехода (GOTO), автономные подпрограммы, поддержка рекурсии и локальных переменных.
Суть такого подхода заключается в возможности разбиения программы на составляющие элементы.
Хотя структурное программирование, при его использовании, дало выдающиеся результаты, даже оно оказывалось несостоятельным тогда, когда программа достигала определенной длины. Для того чтобы написать более сложную (и длинную) программу, нужен был новый подход к программированию.
4) Языки высокого уровня. ООП
В итоге в конце 1970-х и начале 1980-х были разработаны принципы объектно-ориентированного программирования. ООП сочетает лучшие принципы структурного программирования с новыми мощными концепциями, базовые из которых называются инкапсуляцией, полиморфизмом и наследованием.
ООП позволяет оптимально организовывать программы, разбивая проблему на составные части, и работая с каждой по отдельности. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути, описывает часть мира, относящуюся к этой задаче.
Архитектура языков программирования (три поколения).
Первое поколение (1954-1958)
FORTRAN I | Математические формулы |
ALGOL-58 | Математические формулы |
Flowmatic | Математические формулы |
IPL V | Математические формулы |
Второе поколение (1959-1961)
FORTRAN II | Подпрограммы, раздельная компиляция |
ALGOL-60 | Блочная структура, типы данных |
COBOL | Описание данных, работа с файлами |
Lisp | Обработка списков, указатели, сборка мусора |
Третье поколение(1962-1970)
PL/I | FORTRAN+ALGOL+COBOL |
ALGOL-68 | Более строгий приемник ALGOL-60 |
Pascal | Более простой приемник ALGOL-60 |
Simula | Классы, абстрактные данные |
В каждом следующем поколении менялись поддерживаемые языками механизмы абстракции. Языки первого поколения ориентировались на научно-инженерные применения, и словарь этой предметной области был почти исключительно математическим
Топология языков первого и начала второго поколения.
Программы, реализованные на таких языках, имеют относительно простую структуру, состоящую только из глобальных данных и подпрограмм. Нет разделения данных, много перекрестных связей между подпрограммами, поэтому много мест для ошибок.
Топология языков позднего второго и раннего третьего поколения.
Рост алгоритмических абстракций:
Во-первых, были разработаны языки, поддерживавшие разнообразные механизмы передачи параметров. Во-вторых, структуры управления и области видимости. В-третьих, возникли методы структурного проектирования, стимулирующие разработчиков создавать большие системы, используя подпрограммы как готовые строительные блоки.
Топология языков конца третьего поколения
Появилась возможность решать все более сложные задачи, но это требовало умения обрабатывать самые разнообразные типы данных. Такие языки как ALGOL-68 и затем Pascal стали поддерживать абстракцию данных. Программисты смогли описывать свои собственные типы данных.
Архитектура объектно-ориентированных языков программирования.
Во многих практических ситуациях сложность объектов, с которыми нужно работать, составляет основную часть сложности всей задачи". Осознание этого влечет два важных вывода. Во-первых, возникают методы проектирования на основе потоков данных, которые вносят упорядоченность в абстракцию данных в языках, ориентированных на алгоритмы. Во-вторых, появляется теория типов, которая воплощается в таких языках, как Pascal.
Естественным завершением реализации этих идей, начавшейся с языка Simula и развитой в последующих языках в 1970-1980-е годы, стало сравнительно недавнее появление таких языков, как Smalltalk, Object Pascal, C++, CLOS, Ada. По причинам, которые мы вскоре объясним, эти языки получили название объектных или объектно-ориентированных. Основным элементом конструкции в указанных языках служит модуль, составленный из логически связанных классов и объектов, а не подпрограмма, как в языках первого поколения. По этой же причине структура программ малой и средней сложности при объектно-ориентированном подходе представляется графом, а не деревом, как в случае алгоритмических языков. Кроме того, уменьшена или отсутствует область глобальных данных. Данные и действия организуются теперь таким образом, что основными логическими строительными блоками наших систем становятся классы и объекты, а не алгоритмы.
Для очень сложных систем классы, объекты и модули являются необходимыми, но не достаточными средствами абстракции. Кластеры абстракций в больших системах могут представляться в виде многослойной структуры. На каждом уровне можно выделить группы объектов, тесно взаимодействующих для решения задачи более высокого уровня абстракции. Внутри каждого кластера мы неизбежно найдем такое же множество взаимодействующих абстракций.
Объектный подход зарекомендовал себя как унифицирующая идея всей компьютерной науки, применимая не только в программировании, но также в проектировании интерфейса пользователя, баз данных и даже архитектуры компьютеров. Причина такой широты в том, что ориентация на объекты позволяет нам справляться со сложностью систем самой разной природы. Объектно-ориентированный анализ и проектирование отражают эволюционное, а не революционное развитие проектирования; новая методология не порывает с прежними методами, а строится с учетом предшествующего опыта.