Инкапсуляция.

Элементы абстракции

Слоистая архитектура, базирующаяся на абстракции, имеет три основные характеристики.

1. Ясно определенные слои. Слои должны строиться один на другом так, чтобы каждый новый слой обеспечивал более сложную и комплексную абстракцию по сравнению с нижележащим слоем. Например, клетки - более комплексные и сложные, чем молекулы, скелетная система более комплексная и сложная, чем клетки, из которых она состоит, и т.д. В то же время термин "высший уровень абстракции" использован для формирования конкретного указания о том, как слои абстракции строятся один на другом.

2. Формальные и явные интерфейсы между конкретными слоями. Каждый слой может обращаться к услугам нижележащего слоя. Интерфейсы определяют высокоуровневые действия, которые активизируют более детальное поведение, выполняемое на нижележащем слое. Это аналогично тому, как ваш мозг выдает команды - поднять правую ногу, опустить ее перед левой ногой. Эти высокоуровневые операции переводятся в специфические нервные сигналы, активизирующие группы мышц. Тем не менее, все эти детали скрыты высокоуровневым интерфейсом между вашим мозгом и телом. Эти операции являются доступными для вышележащего слоя, а интерфейс определяет точно, какие аспекты функций внутри данного слоя являются видимыми и доступными для внешнего мира. Например, ваш рациональный рассудок не имеет интерфейсных функций, позволяющих сознанию контролировать биение вашего сердца. В результате контроль пульса рассматривается как функция, недоступная вашему сознанию потому, что ее нет в интерфейсе.

3. Скрытые и защищенные детали внутри каждого слоя. Например, ваш рациональный рассудок обычно "думает" в терминах высокоуровневых действий, которые может выполнить тело; передвинуть руку, сделать шаг и т.п. В то же время ваше тело запрещает вашему рациональному рассудку контролировать его на более детальном уровне. Проиллюстрируем это. Когда вы начинаете бежать, часть вашего мозга, тело и нервная система заставляют сердце увеличить ритм. После того как вы остановились, ваше сердце начинает вновь биться медленнее. Это автоматическое поведение: вы не можете контролировать его вашим рациональным сознанием, даже если захотите.

Инкапсуляция - процесс объединения информации и поведения системы в некоторую новую сущность, именуемую компонентом.

Чтобы лучше понять сущность инкапсуляции, необходимо обратиться к понятию объекта. Одно важное использование этого термина ориентировано на сочетание «субъект-действие-объект». Люди мыслят категориями объектов, с которыми они работают, перед тем как думают о действиях, которые хотят применить к данным объектам. Так, обычно человек сначала думает о гвозде и только потом о молотке как инструменте для забивания гвоздя в доску. На этом психологическом принципе основаны многие современные программные средства, ориентированные на дружественные интерфейсы пользователя. Объектно-ориентированные интерфейсы позволяют пользователю сначала думать о своей непосредственной работе (например, о составлении отчета или написании служебной записки), без необходимости вспоминать о том, что все это построено на системах обработки текстов, электронных таблицах и т.д. Выберите объект, откройте его - и подходящее действие или инструментальное средство вызывается для вас автоматически. Таким образом, в нашем контексте объектом может служить небольшой фрагмент программного кода приложения, реализующий некоторую функцию делового процесса. Например, это могут быть стандартные функции календаря, выдающие на экран информацию о количестве рабочих дней в месяце. Об объекте можно говорить как о некоторой совокупности данных и операций над ними, которую можно использовать при проектировании приложений, встраивая ее там, где это необходимо.

Поток процессов простого приложения может представлять некоторую диаграмму объектов.

На объектном языке каждый процесс становится компонентом, который сотрудничает с другими компонентами. Эти объекты, хоть и велики, зато легко объяснимы и понятны. Представление процессов в виде объектов имеет два преимущества:

1. Каждый объект представляет собой законченный деловой процесс того или иного слоя абстракции, поэтому его можно использовать при разработке больших систем в качестве составляющего элемента.

2. Объекты независимы от языков программирования.

Общим смыслом объектной ориентации является инкапсуляция (т.е. объединение) данных и конкретных программ, которые работают на этих данных, внутри одного отдельного объекта. Следовательно, работа с конкретными данными возможна только через интерфейс к соответствующим объектам. Не только полные слои, но даже конкретные компоненты, составляющие эти слои, формируются как объекты. В этом мире интерфейсы являются ключом к конкретным слоям, а также ко всем конкретным компонентам внутри них. До какой степени эти интерфейсы являются проработанными, до такой степени компонент будет в состоянии обеспечивать общие услуги широкому множеству других компонентов; все это является базой для идеи компонентов, которые взаимодействуют друг с другом.