143
ней до сих пор не существует общепринятой терминологии. Существует
целый набор синонимов, означающих одно и то же и характерных,
например, для программистов на С++ или Java. Читателю предлагается
запомнить, что
класс и
тип;
родительский класс,
базовый класс и
суперкласс;
функция-член,
метод класса и сообщение;
переменная-член,
свойство и
атрибут;
подкласс,
унаследованный класс,
наследуемый класс,
дочерний (сыновний) класс — суть одно и то же.
Весьма важно выделить именно значимые и отличающие данный класс от
других наборы свойств объекта. Этот процесс называется
абстракцией.
Абстракция,
или абстрагирование, лежит в основе ООП.
Из книги в книгу кочует утверждение, что базовыми принципами, тремя
китами, на которых покоится ООП, являются
инкапсуляция,
наследование и
полиморфизм, которые будут рассмотрены далее. Однако с этим не вполне
можно согласиться. Нам представляется, что наряду с
абстракцией
важнейшим принципом ООП является
интеграция данных и функций
обработки этих данных, или придание им «активности».
Если традиционно программист должен был описать, с одной стороны,
набор пассивных структур данных, подлежащих обработке, а с другой —
набор функций для обработки этих данных (причем эти определения были
в некотором смысле ортогональны, или независимы — вплоть до хранения
в разных модулях программы), то в ООП все иначе. Определяя класс,
программист должен сразу задать методы обработки объектов этого
класса —
внутри него. На самом деле данный подход был разработан в
рамках концепции
абстрактного типа данных, предшествовавшей ООП.
В языках программирования существует набор встроенных базовых типов
данных — целое число, логический тип, символ и т. д. Что произойдет при
попытке применить, например, умножение к строкам? Или операцию
взятия остатка от деления — к числам с плавающей точкой? Как правило,
ошибка, причем в зависимости от того, относится язык программирования
к языкам со строгой статической или с нестрогой динамической
типизацией, или на этапе компиляции, или, что хуже,
ошибка времени
выполнения с выдачей в процессе исполнения программы системного
сообщения и аварийным остановом.
Концепция абстрактных типов данных позволяет избежать подобных
коллизий. Предписывается четко задавать набор операций, применимых к
каждому типу данных. Возможность конструирования (добавления в язык)
новых типов появилась еще в Паскале и Си. Довольно широкие
возможности подобного вида были введены в языки Ада 83, Модула-2 и
Модула-3. Однако до своего логического завершения она была доведена в
Клу (Clu, название происходит от слова «кластер» — cluster, которым в
нем обозначался абстрактный тип данных), созданном в 1974 году