14 Глава 1. Основы ООМП
ние называется инкапсуляцией и позволяет скрыть структуру объекта и его
данные, делая их невидимыми для всех, за исключением методов самого
объекта. Инкапсуляция позволяет рассматривать объекты как изолирован-
ные «черные ящики», которые знают определенные действия и умеют их
выполнять, функционируя независимо друг от друга и скрывая за интер-
фейсом детали реализации. Внутреннее устройство «черных ящиков» недо-
ступно извне. Нам неизвестно, как все происходит. Важно только знать, как
приказать «ящику» выполнить определенные действия и что мы при этом
из него получим. Поэтому объекты в объектно-ориентированных системах
можно рассматривать как минимальные (в смысле самодостаточности) еди-
ницы инкапсуляции, позволяющие навести должный порядок среди данных
и кода, обрабатывающего эти данные.
К объекту может обращаться не только программист, скрывающийся
под местоимением «МЫ», но и любой объект системы, посылая нужному
объекту сообщение, которое представляет предписание (просьбу, приказ,
требование) выполнить некоторые действия. Если предписание может быть
выполнено получившим сообщение объектом (его называют объектом-по-
лучателем, или просто получателем), то оно выполняется и, как результат,
объекту-отправителю, пославшему сообщение, может возвращаться неко-
торый объект (возвращаемый объект). Если по какой-либо причине полу-
чатель не может выполнить сообщение, он в какой-то форме информирует
об этом пославший сообщение объект (или систему времени выполнения).
В других терминах: объект-получатель — это сервер, предоставляющий об-
служивание клиенту — объекту-отправителю.
Таким образом, объектно-ориентированное программирование сводится
к моделированию некоторого числа объектов, которые для решения постав-
ленной задачи взаимодействуют друг с другом, посылая сообщения, в ответ
на которые выполняют действия, описанные в методах, соответствующих
сообщениям. Поскольку все то, что объект может и должен делать, выра-
жено его методами, этот простой механизм поддерживает все возможные
взаимодействия между объектами.
Но как управлять таким миром объектов, когда их становится достаточ-
но много? Во-первых, объекты могут сильно отличаться друг от друга, а
могут быть очень похожи друг на друга. А во-вторых, часто бывают нужны
несколько однотипных объектов, а иногда — только один такой объект. На-
пример, программа, моделирующая движение автотранспорта на уличном
перекрестке, может иметь дело с множеством автомобилей всех существу-
ющих в мире типов. Так что же, в каждой такой ситуации необходимо
определять одни и те же свойства и одни и те же методы в каждом объекте
снова и снова?