Перечисление. Доступ к членам класса (видимость). (методичка лабораторной работы №2)
Перечисление Перечисление (enumeration) – это тип данных, имеющий конечное множество значений. Например, атрибут accessPermission (разрешение доступа) представляет собой перечисление с возможными значениями read (чтение) и read-write (чтение и запись). На рисунке 2 показаны примеры перечислений. Figure.ре nТуре (тип кисти) – перечисление, включающее возможные значения solid (сплошная), dashed (штриховая) и dotted (пунктирная). TwoDimensional.fillType (тип заливки) – перечисление, включающее возможные значения solid (сплошная), gray (полутон), none (нет), horizontal lines (горизонтальные линии) и vertical lines (вертикальные линии), grade (градиент).
При конструировании моделей перечисления следует обязательно выделять, потому что они встречаются достаточно часто и важны для пользователей. Перечисления важны и для реализации. Все возможные значения перечисления можно указать в списке для выбора. Необходимо также ограничить возможные данные разрешенными значениями. Не следует использовать обобщение для указания значений перечислимого атрибута. Перечисление – это просто список значений, а обобщение предназначено для упорядочивания описания объектов. Обобщение следует использовать только там, где по крайней мере один из подклассов обладает атрибутами, операциями или ассоциациями, неприменимыми к суперклассу. Как показано на рис. 3, не следует строить обобщение класса Card, потому что в большинстве игр карты разных мастей ведут себя одинаково. В языке UML перечисление является типом данных. Для объявления перечисления необходимо указать ключевое слово enumeration в угловых кавычках («») над именем перечисления в верхнем разделе прямоугольника. Во втором разделе перечисляются значения перечисления (рис. 3). Кратность Кратность – это ограничение на количество возможных значений в наборе. Ранее мы рассмотрели применение кратности к ассоциациям. Кратность применима и к атрибутам. Указание кратности для атрибутов часто оказывается полезным, особенно в приложениях, связанных с базами данных. Кратность атрибута определяет количество возможных значений в каждом экземпляре атрибута. Наиболее типичные значения кратности: [1] – обязательное единственное значение, [0..1] – не- обязательное единственное значение, [*] – произвольное количество значений. Кратность определяет, является ли атрибут обязательным (в терминах баз данных – может ли атрибут иметь пустое значение). Она также указывает, является атрибут единственным значением, или он может представлять собой совокуп- ность значений. Если кратность не указана, предполагается, что она равна [1] (обязательное единственное значение). Например, человек должен иметь одно имя, один или несколько адресов, одну дату рождения иВидимость Видимость (visibility) характеризует способность метода ссылаться на составляющую другого класса и может принимать значения public (открытая), pro tected (защищенная), private (закрытая) и package (пакетная). Конкретная интерпретация этих значений зависит от языка программирования. Любой метод может свободно обращаться к открытым составляющим (public) (иными словами, любые методы любах классов, могут обращаться к открытым составляющим). К защищенным составляющим (protected) могут обращаться методы только класса-владельца и всех его потомков (то есть составляющая доступна классам в рамках иерархии наследования). К закрытым составляющим (private) могут обращаться только методы языке UML видимость обозначается при помощи префикса. Символ + ставится перед открытыми составляющими. Символ # ставится перед защищенными составляющими. Символ - ставится перед закрытыми составляющими. Символ ~ ставится перед составляющими, доступными в рамках пакета. Отсутствие префикса не позволяет делать никаких заключений о видимости. При выборе значения видимости для какой-либо составляющей следует учитывать следующие соображения. Понятность модели. Чтобы получить представление о возможностях класса, необходимо понять все его открытые составляющие. Закрытые, защищенные и пакетные составляющие можно игнорировать: они вводятся лишь для удобства реализации. Расширяемость. Открытые методы класса могут использоваться множеством других классов, поэтому изменение их сигнатуры (количества и типа аргументов, типа возвращаемого значения) может разрушить согласованность всей модели. Поскольку защищенные, закрытые и пакетные методы заведомо используются меньшим числом классов, их изменения обходятся дешевле. Контекст. Закрытые, защищенные и пакетные методы могут зависеть от предусловий или информации о состоянии, произведенной другими методами того же класса. Вне своего контекста закрытые методы могут возвратить неверные результаты или привести к отказу объекта в целом.
|