Объекты и классы объектов
В настоящее время широко используются понятия объект и объектно-ориентированный. Эти термины применяются к различным типам объектов, методам проектирования, системам и языкам программирования. Во всех случаях применяется общее правило, согласно которому объект инкапсулирует данные о своем внутреннем строении. Это правило отражено в моем определении объекта и класса объектов.
Объект–это нечто, способное пребывать в различных состояниях и имеющее определенное множество операций. Состояние определяется как набор атрибутов объекта. Операции, связанные с объектом, предоставляют сервисы (функциональные возможности) другим объектам (клиентам) для выполнения определенных вычислений. Объекты создаются в соответствии с определением класса объектов, которое служит шаблоном для создания объектов. В него включены объявления всех атрибутов и операций, связанных с объектом данного класса.
Нотация, которая используется здесь для обозначения классов объектов, определена в UML. Класс объектов представляется как прямоугольник с названием класса, разделенный на две секции. В верхней секции перечислены атрибуты объектов. Операции, связанные с данным объектом, расположены в нижней секции. Пример такой нотации представлен на рис. 12.2, где показан класс объектов, моделирующий служащего некой организации. В UML термин операция является спецификацией некоторого действия, а термин метод обычно относится к реализации данной операции. Класс Работник определяется рядом атрибутов, в которых содержатся данные о служащих, в том числе их имена и адрес, коды социального обеспечения, налоговые коды и т.д. Конечно, на самом деле атрибутов, ассоциированных с классом, больше, чем изображено на рисунке. Определены также операции, связанные с объектами: принять (выполняется при поступлении на работу), уволить (выполняется при увольнении служащего из организации), пенсия (выполняется, если служащий становится пенсионером организации) и изменитьДанные (выполняется в случаях, если требуется внести изменения в имеющиеся данные о работнике).
Рис. 12.2. Объект Работник
Взаимодействие между объектами осуществляется посредством запросов к сервисам (вызов методов) из других объектов и при необходимости путем обмена данными, требующимися для поддержки сервиса. Копии данных, необходимых для работы сервиса, и результаты работы сервиса передаются как параметры. Вот несколько примеров такого стиля взаимодействия.
// Вызов метода, ассоциированного с объектом Buffer (Буфер), // который возвращает следующее значение в буфер v = circularBuffer.Get (); // Вызов метода, связанного с объектом thermostat (термостат), // который поддерживает нужную температуру thermostat.setTemp (20);
В некоторых распределенных системах взаимодействие между объектами реализовано непосредственно в виде текстовых сообщений, которыми обмениваются объекты. Объект, получивший сообщение, выполняет его грамматический разбор, идентифицирует сервис и связанные с ним данные и запускает запрашиваемый сервис. Однако, если объекты сосуществуют в одной программе, вызовы методов реализованы аналогично вызовам процедур или функций в языках программирования, например таких, как С или Ada. Если запросы к сервису реализованы именно таким образом, взаимодействие между объектами синхронно. Это означает, что объект, отправивший запрос к сервису, ожидает окончания выполнения запроса. Однако, если объекты реализованы как параллельные процессы или потоки, взаимодействие объектов может быть асинхронным. Отправив запрос к сервису, объект может продолжить работу и не ждать, пока сервис выполнит его запрос. Ниже в этом разделе показано, каким образом можно реализовать объекты как параллельные процессы.
Как отмечалось в главе 7, в которой описан ряд объектных моделей, классы объектов можно упорядочить или в виде иерархии обобщения или в виде иерархии наследования, которые показывают отношения между основными и частными классами объектов. Эти частные классы объектов полностью совместимы с основными классами, но содержат больше информации. В системе обозначений UML направление обобщения указывается стрелками, направленными на родительский класс. В объектно-ориентированных языках программирования обобщение обычно реализуется через механизм наследования. Производный класс (класс-потомок) наследует атрибуты и операции от родительского класса. Пример такой иерархии изображен на рис. 12.3, где показаны различные классы работников. Классы, расположенные внизу иерархии, имеют те же атрибуты и операции, что и родительские классы, но могут содержать новые атрибуты и операции или же изменять имеющиеся в родительских классах. Если в модели используется имя родительского класса, значит, объект в системе может быть определен либо самим классом, либо любым из его потомков.
Рис. 12.3. Иерархия обобщения
На рис. 12.3 видно, что класс Менеджер обладает всеми атрибутами и операциями класса Работник и, кроме того, имеет два новых атрибута: ресурсы, которыми управляет менеджер (бюджет), и дата назначения его на должность менеджера (датаНазначения). Также добавлены новые атрибуты в класс Программист. Один из них определяет проект, над которым работает программист, другой характеризует уровень его профессионализма при использовании определенного языка программирования (языкПрогр). Таким образом, объекты класса Менеджер и Программист можно использовать вместо объектов класса Работник. Объекты, являющиеся членами класса объектов, взаимодействуют с другими объектами. Эти взаимоотношения моделируются с помощью описания связей (ассоциаций) между классами объектов. В UML связь обозначается линией, которая соединяет классы объектов, причем линия может быть снабжена информацией о данной связи. На рис. 12.4 показаны связи между объектами классов Работник и Отдел и между объектами классов Работник и Менеджер.
Рис. 12.4. Модель связей
Связи представляют самые общие отношения и часто используются в UML там, где требуется указать, что какое-то свойство объекта является связанным с объектом или же реализация метода объекта полагается на связанный объект. Однако в принципе тип связи может быть каким угодно. Одним из наиболее распространенных типов связи, который служит для создания новых объектов из уже имеющихся, является агрегирование. Этот тип связи рассмотрен в главе 7.
Читайте также: SLA – это ежедневные насыщенные мастер-классы по праву от высокопрофессиональных тренеров Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|