Объект с точки зрения ООП. Взаимоотношения между объектами
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Все отношения между объектами могут быть сведены к двум типам:

· Ассоциация (связь) — отношение, позволяющее реализовать взаимодействие клиент-сервер.

· Агрегация (композиция) — отношение, служащее для определения понятия целое-часть и организации иерархий объектов.

 

АССОЦИАЦИЯ

 

Ассоциация или связь — есть физическое или концептуальное соединение между объектами. Практически это означает, что для того, чтобы объекты могли взаимодействовать друг с другом, между ними должна существовать прямая или косвенная связь. Используя эту связь, объект, являющийся клиентом или инициатором взаимодействия, может вызвать метод (послать сообщение) у сервера — объекта являющегося адресатом взаимодействия, т.е. объект-клиент запрашивает некоторый сервис у объекта-сервера.

 

· С точки зрения языка программирования, прямая связь означает, что сервер достижим (адресуем) со стороны клиента напрямую с использованием переменной, ссылки или указателя, а так же с использованием «глобальной» видимости.

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

· Несмотря на то, что взаимодействие является однонаправленным, данные могут передаваться в обоих направлениях (от клиента данные передаются через аргументы при вызове метода, а от сервера данные передаются в возвращаемом методом значении).

 

При глобальном рассмотрении взаимодействий, можно выделить три основные категории объектов:

· Объекты-актеры — объекты, которые воздействуют на другие объекты, но сами никогда не подвергаются воздействию; это, своего рода, источники всех взаимодействий в системе.

 

· Объекты-серверы — объекты, которые могут только подвергаться воздействию со стороны других объектов, но никогда не выступающие в роли взаимодействующих объектов; это, своего рода, конечные точки взаимодействий в системе.

 

· Объекты-агенты — объекты, которые выступают как в активной, так и в пассивной роли; в конечном счете, они являются переносчиками взаимодействий в системе

 

При локальном рассмотрении взаимодействий, «актеры» всегда выступают в роли клиентов, «серверы» всегда выступают в роли серверов, а «агенты» при взаимодействии для одних объектов являются серверами, а для других — клиентами. При этом, как правило, агент выполняет операции в интересах какого-либо актера или агента.

 

При рассмотрении взаимодействий клиент-сервер нужно упомянуть еще два важных понятия — видимость и синхронизацию

 

Видимость:

Для того, чтобы объект-клиент мог вызвать метод объекта-сервера, во-первых, необходимо, чтобы сервер был «видим» для клиента, и во-вторых, клиент должен знать о контракте, предоставляемом сервером.

 

Информация о контракте задается типом (классом или интерфейсом, т.е. абстракцией) переменной (ссылки, указателя) через которую сервер доступен клиенту. В этом смысле, как мы увидим, при глубоком рассмотрении классов, эта зависимость выражается в семантике абстракций (классов) клиента и сервера.

 

Всего существует четыре способа обеспечения видимости:

· Сервер имеет глобальную видимость по отношению к клиенту.

· Сервер передан клиенту в качестве параметра операции (метода).

· Сервер является частью клиента.

· Сервер локально порождается клиентом в ходе выполнения какой-либо операции.

 

В C++ видимость может быть обеспечена с помощью именованных типизированных переменных, ссылок или указателей, которые могут быть глобальными, локальными, статическими, или являться параметрами методов; либо с помощью типизированных вычислимых значений lvalue.

 

Синхронизация:

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

В многопоточной возникает задача обеспечения конкурентного доступа к объекту-серверу со стороны нескольких активных объектов.

 

Иерархии объектов

Отношение целое – часть.

В отличие от классов, образующих иерархии наследования, объекты образуют агрегационные иерархии. Не следует путать агрегацию классов и агрегацию объектов.

При композиционном отношении между объектами существует зависимость по времени жизни. Так, агрегант (часть) не может существовать без агрегата (целого). При уничтожении объекта-целого, уничтожаются и объекты-части. При ассоциативном отношении объекты могут существовать независимо друг от друга по времени жизни.

 

Если в программе, написанной на C++, один объект объявлен как обычная (не ссылка и не указатель) переменная (поле) другого объекта, то эти объекты будут находиться в отношении композиции. Связь по времени жизни, в этом случае, обеспечивается самим компилятором (при создание объекта-агрегата будет создан и объект-агрегант; при уничтожении агрегата, агрегант будет уничтожен). В остальных случаях композиция определяется логикой программы.

 

 

10.  Классы. Природа классов. Метамодель. Инстанцирование.

Как мы уже говорили, в основе объектного подхода лежит принцип абстрагирования. Так вот, именно класс является самой важной формой абстракции. С точки зрения программирования, класс является основным кирпичиком при построении объектно-ориентированных программ, позволяя выразить все аспекты связанные как с интерфейсной частью абстракции, так и ее реализацией.

· Класс - множество объектов имеющих общую структуру и поведение.

· Метакласс – класс, экземпляры которого суть классы (Шаблонные классы).

· Объекты - суть экземпляры классов.

По своей природе, класс - это генеральный контракт между абстракцией и всеми ее клиентами.

Метамодель в информатике — модель, описывающая другую модель; транзитивное отношение между двумя моделям (например: если модель M1 описывает язык L0, в котором формулируется модель M0, то M1 является метамоделью М0; если же модель M2 описывает язык L1, в котором была сформулирована модель М1, то М2 — это метамодель M1, а M2 является тогда для M0 мета-метамоделью).

Например, Объекты – модель Реального мира, Классы – метамодель Объектов (т.к. Объекты - модель), UML – метамодель Классов и мета-метамодель Объектов.

* MOF – язык, формально описывающий UML

Инстанцирование, в общем случае, это операция создания элемента модели уровня на основе элемента (или группы элементов) модели уровня .

· Инстанцирование объектов происходит во время исполнения программы путем выделения памяти и вызова конструктора классов.

· Инстанцирование классов на основе элементов метамодели происходит во
время работы генераторов кода.

· Инстанцирование классов из шаблонов классов происходит во время компиляции программы.

 


Дата: 2019-02-19, просмотров: 600.