Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретические вопросы ВвПИ.docx
Скачиваний:
27
Добавлен:
10.06.2015
Размер:
435.97 Кб
Скачать

22.Диаграммы классов. Обобщение. Цели применения. Переопределение составляющих.

Обобщение (generalization) – это отношение между классом (суперклассом) и одной или не-

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

Простое обобщение упорядочивает классы в рамках некоторой иерархии. В этом случае каждый подкласс имеет одного непосредственного предка (его суперкласс). Однако возможна более сложная форма обобщения, при которой подкласс может иметь несколько непосредственных суперклассов. Уровней обобщения может быть много.

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

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

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

Подмена составляющих Подкласс может подменять или перекрывать (override) составляющую суперкласса, опреде-

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

23.Диаграммы классов. Перечисления. Видимость.

Перечисление (enumeration) – это тип данных, имеющий конечное множество значений. Например, атрибут accessPermission (разрешение доступа) на рис. 2.4.2.2.7.10 представляет собой перечисление свозможными значениями read (чтение) и readwrite (чтение и запись)

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

Перечисление – это просто список значений, а обобщение предназначено для упорядочивания описания объектов.

Обобщение следует использовать только там, где по крайней мере один из подклассов обладает атрибутами, операциями или ассоциациями, неприменимыми к суперклассу.

Видимость (visibility) характеризует способность метода ссылаться на составляющую другого класса и может принимать значения public (открытая), protected (защищенная), private (закрытая) и package (пакетная). Конкретная интерпретация этих значений зависит от языка программирования. Любой метод может свободно обращаться к открытым составляющим(public) (иными словами, любые методы любах классов, могут обращаться к открытым составляющим). К защищенным составляющим(protected) могут обращаться методы только класса-владельца и всех его потомков (то есть составляю-щая доступна классам в рамках иерархии наследования). К закрытым составляющим(private) могут обращаться только методы класса-владельца (то есть закрытые составляющие доступны только членам своего же класса). К составляющим, доступным в рамках пакета(package), могут обращаться все методы того же пакета (классы и взаимосвязи между ними можно группировать в пакет)