ВВЕДЕНИЕ
В течение последних двух десятилетий языки программирования развивались очень интенсивно как в количественном отношении (появление множества новых языков, особенно специализированных, рост возможностей языков высокого уровня, включая даже бейсик), так и в качественном отношении. Эти качественные изменения отразились в изменении самой методологии программирования, в появлении парадигмы объектно-ориентированного программирования.
Вещь эта – весьма новая и весьма сложная, к тому же эффективная лишь при профессиональной работе и решении больших задач, то есть тех задач, за которые платят. Поэтому вокруг проблем ООП очень много разговоров, однако очень мало книг, еще меньше хороших книг, а специалистов в этой области еще меньше.
Попробуем вкратце рассказать, что такое ООП, почему для освоения ООП выбран язык С++, а не иной.
Языки – ветераны, такие как Алгол, Фортран, Паскаль и др. являются процедурными языками. При программировании на этих языках основное внимание уделяется разработке процедур (функций) и подбору наилучших алгоритмов. Процедурное программирование – вещь хорошая, мы с вами в этом убедились, разбивая программы на автономные функции.
Со временем внимание при проектировании программ стало перемещаться с разработки процедур к более рациональной организации данных (включая и процедуры). Причины очевидны – рост объемов программ и сложности обрабатываемых данных.
Это привело к появлению модульного программирования, при котором множество связанных процедур и обрабатываемых ими данных оформляется в единый модуль.
При модульном программировании акцент делается на разбиении программы на модули таким образом, чтобы данные, обрабатываемые модулем, были спрятаны в нем. К языкам модульного программирования можно отнести Модула-2, базовый Си и некоторые другие.
Модульное программирование было шагом вперед, так как вело к более структурированным программам. Мы видели, что в рамках Си можно было вводить некоторые собственные типы данных (модули), которые однако значительно отличались от типов, встроенных в язык.
Следующим шагом в развитии языков были языки, предоставляющие возможность определения типов данных, которые вели бы себя почти так же, как встроенные типы (Ада, С++). Подобные типы обычно называют абстрактными типами данных (типами, определяемыми пользователем). Они объединяют данные и функции, манипулирующие этими данными, в один тип.
При использовании абстрактных типов данных важно определить, какие типы данных требуются для решения задачи, и обеспечить полный набор операций для каждого типа. Абстракции данных значительно облегчили обработку сложных структур данных. Но при разработке программ, требующих несколько пользовательских типов, которые имеют много общих свойств, оказалось, что часто приходится дублировать большие фрагменты программы. Избежать этого позволили языки ООП (Симула-67, Smalltalk, С++ и др.)