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