русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Атрибути класу та їх синтаксис


Дата додавання: 2014-10-07; переглядів: 2482.


У другій зверху секції прямокутника класу записуються його атрибути (attributes) або властивості. У мові UML прийнята певна стандартизація запису атрибутів класу, що підкоряється деяким синтаксичним правилам. Кожному атрибуту класу відповідає окремий рядок тексту, що складається із квантора видимості атрибута, ім'я атрибута, його кратності, типу значень атрибута й, можливо, його вихідного значення:

<квантор видимості><ім'я атрибута>[кратність]:

<тип атрибута> = <вихідне значення>{ рядок-властивість}

Квантор видимості може приймати одне із трьох можливих значень і, відповідно, відображається за допомогою спеціальних символів:

  • Символ "+" позначає атрибут з областю видимості типу загальнодоступний (public). Атрибут із цією областю видимості доступний або видний з будь-якого іншого класу пакета, у якому визначена діаграма.
  • Символ "#" позначає атрибут з областю видимості типу захищений (protected). Атрибут із цією областю видимості недоступний або невидний для всіх класів, за винятком підкласів даного класу.
  • І, нарешті, знак "-" позначає атрибут з областю видимості типу закритий (private). Атрибут із цією областю видимості недоступний або невидний для всіх класів без винятку.

Квантор видимості може бути опущений. У цьому випадку його відсутність просто означає, що видимість атрибута не вказується. Ця ситуація відрізняється від прийнятих за замовчуванням угод у традиційних мовах програмування, коли відсутність квантора видимості трактується як public або private. Однак замість умовних графічних позначень можна записувати відповідне ключове слово: public, protected, private.

Оскільки мова UML інваріантна щодо реалізації своїх конструкцій у конкретних мовах програмування, семантика окремих кванторів видимості не є строго фіксованою. Значення цих кванторів повинні додатково уточнюватися пояснювальним текстом природною мовою або угодою по використанню відповідних програмно – залежних синтаксичних конструкцій.

Ім'я атрибута являє собою рядок тексту, що використовується як ідентифікатор відповідного атрибута й тому повинна бути унікальної в межах даного класу. Ім'я атрибута є єдиним обов'язковим елементом синтаксичного позначення атрибута.

Кратність атрибута характеризує загальна кількість конкретних атрибутів даного типу, що входять до складу окремого класу. У загальному випадку кратність записується у формі рядка тексту у квадратних дужках після ім'я відповідного атрибута.

У цілому дана умовна позначка кратності відповідає теоретико-множинному об'єднанню відповідних інтервалів. У якості верхньої_границі може використовуватися спеціальний символ "*", що означає довільне позитивне ціле число. Інакше кажучи, це означає необмежене зверху значення кратності відповідного атрибута.

Значення кратності з інтервалу випливають у монотонно зростаючому порядку без пропуску окремих чисел, що лежать між нижньою й верхньою границями. При цьому дотримуються наступного правила: відповідні нижні й верхні границі інтервалів включаються в значення кратності. Якщо як кратність вказується однина, то кратність атрибута приймається рівної даному числу. Якщо ж вказується єдиний знак "*", то це означає, що кратність атрибута може бути довільним позитивним цілим числом або нулем.

Як приклад розглянемо наступні варіанти завдання кратності атрибутів.

  • [0..1] означає, що кратність атрибута може приймати значення Про або 1. При цьому 0 означає відсутність значення для даного атрибута.
  • [0..*] означає, що кратність атрибута може приймати будь-яке позитивне ціле значення більше або рівне 0. Ця кратність може бути записана коротше у вигляді простого символу - [*].
  • [1.:*] означає, що кратність атрибута може приймати будь-яке позитивне ціле значення більше або рівне 1.
  • [1..5] означає, що кратність атрибута може приймати будь-яке значення із чисел: 1, 2, 3, 4, 5.
  • [1..3,5,7] означає, що кратність атрибута може приймати будь-яке значення із чисел: 1, 2, 3, 5, 7.
  • [1..3,7.. 10] означає, що кратність атрибута може приймати будь-яке значення із чисел: 1, 2, 3, 7, 8, 9, 10.
  • [1..3,7..*] означає, що кратність атрибута може приймати будь-яке значення із чисел: 1, 2, 3, а також будь-яке позитивне ціле значення більше або рівне 7.

Якщо кратність атрибута не зазначена, то за замовчуванням приймається її значення рівне 1..1, тобто в точності 1.

Тип атрибута являє собою вираження, семантика якого визначається мовою специфікації відповідної моделі. У нотації UML тип атрибута іноді визначається залежно від мови програмування, що передбачається використовувати для реалізації даної моделі. У найпростішому випадку тип атрибута вказується рядком тексту, що має осмислене значення в межах пакета або моделі, до яких ставиться розглянутий клас.

Можна привести наступні приклади завдання імен і типів атрибутів класів:

  • колір: Соlоr - тут колір є ім'ям атрибута, Color - ім'ям типу даного атрибута. Зазначений запис може визначати традиційно використовувану RGB-Модель (червоний, зелений, синій) для подання кольору. У цьому випадку ім'я типу Color саме й характеризує семантичну конструкцію, що застосовується в більшості мов програмування для подання кольору.
  • ім'я_співробітника [1..2] : String - тут ім'я_співробітника є ім'ям атрибута, що служить для подання інформації про ім'я, а можливо, і по батькові конкретного співробітника. Тип атрибута String (Рядок) саме й указує на той факт, що окреме значення ім'я являє собою рядок тексту з одного або двох слів (наприклад, "Кирило" або "Дмитро Іванович"). Оскільки в багатьох мовах програмування існує тип даних String, використання відповідного англомовного терміна не викликає непорозуміння в більшості програмістів. Однак, хоча в мові UML всі терміни даються в англомовному поданні, використання як тип атрибута Рядок у даній ситуації не виключається й визначається тільки міркуваннями зручності.
  • видимість:Boolean - тут видимість є ім'я абстрактного атрибута (курсив тут не випадковий), що може характеризувати наявність візуального подання відповідного класу на екрані монітора. У цьому випадку тип Boolean означає, що можливими значеннями даного атрибута є одне із двох логічних значень: істина (true) або неправда (false). При цьому значення істина може відповідати наявності графічного зображення на екрані монітора, а значення неправда - його відсутності, про що додатково вказується в пояснювальному тексті. Оскільки кратність атрибута видимість не зазначена, вона приймає значення 1 за замовчуванням. У цій ситуації англомовне ім'я типу атрибута цілком виправдано наявністю відповідного базового типу в мовах програмування. Абстрактний характер даного атрибута позначається курсивним текстом у записі даного атрибута.
  • форма:Багатокутник - тут ім'я атрибута форма може характеризувати такий клас, що є геометричною фігурою на площині. У цьому випадку тип атрибута Багатокутник указує на той факт, що окрема геометрична фігура може мати форму трикутника, прямокутника, ромба, п'ятикутника й будь-якого іншого багатокутника, але не окружності або еліпса. Цілком очевидно, що в даній ситуації використання відповідного англомовного терміна навряд чи доцільно, оскільки тип Багатокутник не є базовим для мов програмування.

Вихідне значення служить для завдання деякого початкового значення для відповідного атрибута в момент створення окремого екземпляра класу. Тут необхідно дотримуватися правила приналежності значення типу конкретного атрибута. Якщо вихідне значення не зазначене, то значення відповідного атрибута не визначено на момент створення нового екземпляра класу. З іншого боку, конструктор відповідного об'єкта може перевизначати вихідне значення в процесі виконання програми, якщо в цьому виникає необхідність.

Як приклади вихідних значень атрибутів можна привести наступні доповнені вище варіанти завдання атрибутів:

  • колір:Соlоr = (255, 0, 0) - в RGB-Моделі кольору це відповідає чистому червоному кольору як вихідне значення для даного атрибута.
  • ім'я_співробітника[1..2]:String = Іван Іванович - можливо, це нетиповий випадок, що, скоріше, відповідає ситуації ім'я_керівника[2]:81пп§ = Іван Іванович.
  • видимість:Вооlеаn = істина - може відповідати ситуації, коли в момент створення екземпляра класу створюється видиме на екрані монітора вікно, що відповідає даному об'єкту.
  • форма:Багатокутник = прямокутник - навряд чи вимагає коментарів, оскільки тут мова йде про геометричну форму створюваного об'єкта.

При завданні атрибутів можуть бути використані дві додаткові синтаксичні конструкції - це підкреслення рядка атрибута й пояснювальний текст у фігурних дужках.

Підкреслення рядка атрибута означає, що відповідний атрибут може приймати підмножину значень із деякої області значень атрибута, обумовленої його типом. Ці значення можна розглядати як набір однотипних записів або масив, які в сукупності характеризують кожний об'єкт класу.

Наприклад, якщо деякий атрибут заданий у вигляді форма: Прямокутник. те це буде означати, що всі об'єкти даного класу можуть мати кілька різних форм, кожна з яких є прямокутником. Іншим прикладом може служити завдання атрибута у вигляді номер_рахунку:Integer. що може означати для об'єкта Співробітник наявність деякої підмножини рахунків, загальна кількість яких заздалегідь не фіксується.

Рядок-Властивість служить для вказівки значень атрибута, які не можуть бути змінені в програмі при роботі з даним типом об'єктів. Фігурні дужки саме й позначають фіксоване значення відповідного атрибута для класу в цілому, що повинні приймати всі знову створювані екземпляри класу без винятку. Це значення приймається за вихідне значення атрибута, що не може бути перевизначене надалі. Відсутність рядка-властивості за замовчуванням трактується так, що значення відповідного атрибута може бути змінене в програмі. Наприклад, рядок-властивість у записі атрибута заробітна_плата:Currency = = {$500} може служити для позначення фіксованої заробітної плати для кожного об'єкта класу "Співробітник" певної посади в деякій організації. З іншого боку, запис даного атрибута у вигляді зара-ботная_плата: Currency = $500 означає вже щось інше, а саме - при створенні нового екземпляра Співробітник (аналогія - прийом на роботу нового співробітника) для нього встановлюється за замовчуванням заробітна плата в $500. Однак для окремих співробітників можуть бути зроблені виключення як у більшу, так і в меншу сторону, про що необхідно подбати додатково в програмі.


<== попередня лекція | наступна лекція ==>
Ім'я класу | Операція та їх синтаксис


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн