1.4.2. Методологии программирования
В конце 1960-х – начале 1970-х годов началось интенсивное развитие структурного программирования. Важной причиной было смещение основных расходов с аппаратного на программное обеспечение. Это произошло из-за уменьшения стоимости микросхем и увеличения стоимости программ. С помощью компьютеров решались все большие и сложные задачи, а повышение производительности работы программистов было относительно небольшим.
Новые методологии разработки ПО, возникшие в результате исследований 1970-х годов, были названы нисходящим проектированием и пошаговым уточнением. Основными обнаруженными в то время недостатками языков программирования были неполная проверка типов и нехватка управляющих операторов (приводившая к широкому использованию оператора goto).
В конце 1970-х годов началось смещение внимания от процедурно-ориентированных к информационно-ориентированным методологиям разработки программ. Новые методы придавали большее значение структуре данных, сосредоточившись на использовании абстрактных типов данных для решения проблем.
Для эффективного использования абстракции данных нужно было обеспечить ее поддержку языками программирования. Первым языком, предназначенным для ограниченной поддержки абстракции данных, был язык SIMULA 67.
Завершающим этапом эволюции информационно-ориентированного ПО стало возникновение в начале 1980-х объектно-ориентированной методологии разработки программ. Она состоит из трех основных частей: абстракции данных, инкапсулирующей в одном объекте данные вместе с методами их обработки и скрывающей доступ к данным, а также наследования и динамического связывания (полиморфизма). Наследование – это мощная концепция, значительно усилившая возможность многократно использовать существующее программное обеспечение и, соответственно, резко повысившая производительность труда при разработке программ. Наследование оказалось важным фактором увеличения популярности объектно-ориентированных языков программирования. Более гибко использовать наследование позволяет динамическое связывание, осуществляемое в ходе выполнения программы.
Объектно-ориентированное программирование (ООП) развивалось одновременно с языком Smalltalk, поддерживающим его концепцию. Он не получил такого распространения, как некоторые другие языки, но поддержка ООП теперь включена в популярнейшие императивные языки программирования, к которым относятся языки Ada, C++, Java, C#. Концепции ООП также нашли применение в функциональном программировании – CLOS и в логическом программировании – Prolog++.
Процедурно-ориентированное программирование в некотором смысле является противоположностью информационно-ориентированного программирования. Методы последнего сейчас преобладают в разработке ПО, но и методы процедурно-ориентированного программирования еще актуальны. В последние годы процедурные подходы применяются в области параллельного выполнения программ. В результате возникла необходимость в языковых средствах, позволяющих создавать параллельные программные модули и управлять ими.