|
Поведение и структура классаКласс воплощает в себе множество функциональных обязанностей, которые обусловливают поведение (behavior) объектов этого класса. Обязанности реализуются посредством операций, определяемых в контексте класса. Операция должна осуществлять всего одну функцию, но успешно и во всей ее полноте. Например, класс "предложение курса" следует снабдить функциями регистрации студента и отмены таковой. Эти обязанности представляются двумя операциями: одна из них ответственна за регистрацию студента на курс, а другая — за отмену регистрации. Каждая операция класса поступает в распоряжение всех его объектов. Структура (structure) объекта определяется множеством атрибутов класса. Атрибут представляет собой определение порции данных, доступной для объекта. Объекты класса обладают собственными значениями каждого из атрибутов. Например, в состав класса "курс" уместно включить атрибуты "наименование", "описание" и "количество учебных часов". В этом случае каждому объекту класса "курс" ставится в соответствие некоторая комбинация значений названных атрибутов. Значения одного и того же атрибута в нескольких объектах не обязаны быть уникальными — те или иные университетские курсы могут обладать, скажем, равной временной "протяженностью". При определении атрибутов и операций, как и при создании классов, надлежит придерживаться единого сообразного стиля, позволяющего улучшить восприятие модели и программного кода, генерируемого на ее основе. Мы будем следовать такому правилу: идентификатор начинается со строчной буквы, не содержит символов подчеркивания, а отдельные слова в нем пишутся слитно и выделяются прописными буквами (например, количество студентов). Если объект не нуждается в атрибутах и/или операциях, стоит еще раз присмотреться к определению соответствующего класса. Это может свидетельствовать о том, что класс не является самодостаточным и потому подлежит объединению с каким-либо иным классом. С другой стороны, избыток данных или их разноречивость также недопустимы. Предположим, что в определение класса "предложение курса" помимо атрибутов "наименование курса", "номер курса", "номер предложения", "место проведения занятий" и "время проведения занятий" включен атрибут "количество предложений курсов по факультету". В компетенцию объекта класса определенно входит сохранение первых пяти атрибутов, чего не скажешь о последнем. Было бы лучше связать класс "предложение курса" с отдельным классом "факультет": напомним общее правило, гласящее, что класс должен представлять какую-либо одну основную сущность. Лекция №5 Создание операций
Сообщения в диаграммах взаимодействия, как правило, соотносятся с операциями (operations), определенными в составе класса-приемника. Однако встречаются ситуации, когда сообщение не "превращается" в операцию. Если класс, которому адресовано сообщение, является классом границ, представляющим тип некоторого элемента графического интерфейса пользователя, сообщение выражает одно из требований, предъявляемых к интерфейсу. Подобные типы сообщений обычно реализуются в виде тех или иных управляющих компонентов интерфейса (скажем, диалоговых окон или их отдельных частей) и не преобразуются в операции напрямую, поскольку соответствующих функции принимает на себя компонент управления как таковой. Например, активный субъект "профессор", намеревающийся инициировать сценарии внесение предложения курса", обязан ввести пароль, чтобы зарегистрировав в системе. Эта функция описывается сообщением, направляемым в адрес объекта класса границ "опции выбора курсов", и не реализуется в форме самостоятельной операции класса интерфейса пользователя — в данном случае речь идет всего лишь о поле ввода текста, размещенном в пределах некоторого диалогового окна. Вообще говоря, все сообщения, направляемые и получаемые активными субъектами, заслуживают отдельного изучения. Если в роли активного субъекта выступает человек, сообщение выражает выполняемое им действие и потому достойно упоминания в печатном руководстве пользователя, а не реализации в виде операции, осуществляемой системой. Вернемся к сценарию "внесение предложения курса": тот факт, что субъект-"профессор" должен предварительно ввести пароль, дабы получить доступ к системе, является важным требованием, которое заслуживает отражения в памятке пользователя. Если же активный субъект представляет внешнюю систему, создается некоторый класс, обеспечивающий поддержку протокола взаимодействия систем, и в этом случае сообщение отображается в виде определенной операции такого класса. Каждую операцию следует именовать в терминах класса, который ее реализует, а не класса, запрашивающего требуемые функции. Например, операцию по регистрации студента на определенный курс (сущность "предложение курса") уместно назвать как "назначить студента". Наименование операции не должно отражать особенности ее реализации, поскольку со временем таковая способна изменяться. Каждый объект "предложение курса" может представлять не более десяти студентов, которые зарегистрировались на курс. Вполне правомочен вопрос, каково текущее количество студентов, ассоциированных с некоторым объектом "предложение курса". Допустим, что в данный момент это значение подсчитывается путем просмотра ссылок на связанные объекты "студент". Если назвать операцию как "вычислить количество студентов", подобный идентификатор будет напрямую свидетельствовать о том, что получение значения сопряжено с некими вычислениями. Сегодня это может соответствовать действительности, но нельзя гарантировать, что реализация останется неизменной завтра. Более удачным вариантом имени операции был бы "нейтральный" идентификатор "получить количество студентов", не несущий в себе никаких дополнительных сведений о специфике реализации. Операции классов допустимо определять и вне контекста диаграмм взаимодействия, поскольку обычно далеко не все сценарии моделируются в виде диаграмм. То же справедливо и в случае, когда операции носят "вспомогательный" характер. Например, при создании объекта класса "предложение курса" имеет смысл проверить, обладает ли профессор сертификатом, разрешающим преподавать определенный курс. С этой целью в составе класса может быть создана дополнительная операция "проверить полномочия профессора". Сигнатура операции способна свидетельствовать о наличии некоторой связи между классами. Если тип аргумента или возвращаемого значения операции относится к числу "стандартных" (таких, как, скажем, String), соответствующая связь на диаграмме обычно не отображается. В противном случае (когда аргументы и/или возвращаемые значения принадлежат к пользовательским типам) предполагается существование набора связей между классами. Например, аргументами операции назначить профессора" класса "курс" служат объекты типов "профессор" и "предложение курса", что обусловливает наличие связей между классами Связи, основанные на сигнатурах операций, изначально моделируются в виде ассоциаций, а позже, в ходе развития системы, могут трансформироваться в связи зависимости (за подробностями обращайтесь к главе 12). По мере пополнения модели связями, обусловленными сигнатурами операций, подлежат пересмотру и связи пакетов. Например, поскольку в модель добавлена связь между классами "курс" и "профессор", отсюда следует факт существования связи между пакетами "курсы" и "личные данные".
Создание атрибутов Многие из атрибутов класса нетрудно "найти", изучив постановку задачи и потоки событии, предусматриваемые теми или иными вариантами использования. Порции данных, пригодные на роль атрибутов, могут быть выявлены и в процессе обдумывания определения класса. Наконец, неплохим "поставщиком" атрибутов класса способны стать результаты исследования предметной области в целом. Пусть, например, в числе исходных требований к системе содержится такое: "В каталоге курсов на семестр должны указываться наименование, описание и продолжительность каждого курса". Почти очевидно, что указанные параметры следует включить в состав класса "курс" в качестве атрибутов.
![]() ![]() Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор... ![]() Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом... ![]() Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все... ![]() Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|