Объектно-ориентированное программирование появилось на свет божий из
недр событийно-управляемого программирования и практически затмило его
своим светом, так как оказалось значительно более мощным и универсальным
средством программирования и проектирования.
В чистом
объектно-ориентированном программировании все, что можно - процессы,
данные, события - являются объектами. Все объекты располагают некоторыми
"собственными" данными, представленными как ссылки на другие объекты.
Объекты могут обмениваться между собой сообщениями. При получении
объектом сообщения запускается соответствующий ему обработчик, иначе
называемый методом. У объекта есть ассоциативный контейнер, который
позволяет получить по сообщению его метод для его обработки. Кроме
этого, у объекта есть объект-предок. Если метод для обработки сообщения
не найден, сообщение будет перенаправлено объекту-предку. Эту структуру в
целом (таблица обработчиков + предки) из соображений эффективности
выделяют в отдельный объект, называемый классом данного объекта. У
самого объекта будет ссылка на объект, представляющий его класс. Объект
по отношению к сковему классу является экземляром. Так как классы тоже
представлены, как объекты, существует класс, определяющий поведение,
общее для всех классов. Такой класс принято называть метаклассом.
Важно выделить следующие основные свойства объектов:
1.)
Так как один объект может воздействовать на другой исключительно при
помощи посылки последнему сообщений, он не может как-либо
непосредственно работать с собственными данными "собеседника", и,
следовательно, не может нарушить их внутреннюю согласованность. Это
свойство (сокрытие данных) принято называть инкапсуляцией.
2.) Так
как объекты взаимодействуют исключительно засчет обмена сообщениями,
объекты-собеседники могут ничего не знать о реализации обработчиков
сообщений у своего визави. Взаимодействие происходит исключительно в
терминах сообщений/событий, которые достаточно легко привязать к
предметной области. Это свойство (описание взаимодействия исключительно в
терминах предметной области) называют абстракцией.
3.) Объекты
взаимодействуют исключительно через посылку сообщений друг другу.
Поэтому если в каком-либо сценарии взаимодействия объектов заменить
произвольный объект другим, способным обрабатывать те же сообщения,
сценарий так же будет реализуем. Это свойство (возможность подмены
объекта другим объектом со сходной структурой класса) называется
полиморфизмом.
Отношение "потомок-предок" на классах принято называть наследованием.
Все
эти свойства по-отдельности встречаются и в других методологиях
программирования. Так, локальные переменные инкапсулированы в процедуре.
Объектно-ориентированное программирование достаточно гармонично их
сочетает.
Синтаксис чистых объектно-ориентированных языков описывает
всего одну операцию: послать сообщение M объекту А с параметрами B1..Вn.
Параметры сообщения - это объекты, которые сами могут быть результатами
обработки других сообщений. Часто операцию "вернуть объект-результат"
так же вводят в явном виде, хотя ее достаточно легко реализовать как
посылку сообщения системному объекту "стек возвращаемых значений".
Если
в чистом объектно-ориентированном языке нужно создать новый класс -
требуется послать классу-предку сообщение: "породить наследника" (
sublcass ). Существует класс, являющийся вершиной всей иерархии
наследования (как правило, наываемый Object), так что предок будет у
всех классов, даже явно его не имеющих. Для описания обработки сообщения
нужно послать классу, в котором задается обработчик, сообщение:
"установить новый обработчик сообщения" ( answer ).