У инжењерингу софтвера, дијаграм класа или класни дијаграм у обједињеном језику за моделовање (UML) је тип дијаграма статичке структуре који описује структуру система приказивањем класа система, њихових атрибута, операција (метода) и односа између објеката.

Класа у дијаграму класа са три дела

Дијаграм класа је главни градивни блок објектно-оријентисаног моделовања. Користи се за опште концепутално моделовање структуре апликације, као и за детаљно моделовање превођења модела у програмски код. Дијаграми класа могу се користити и за моделовање података.[1] Класе у дијаграму класа представљају главне елементе, интеракције у апликацији и класе које треба да буду испрограмиране.

У дијаграму, класе су представљене кутијама које се састоје из три дела:

  • Горњи део садржи назив класе. Исписан је подебљано и центрирано, а прво слово назива класе је велико.
  • Средњи део садржи атрибуте класе. Они су поравнати улево, а прво слово је мало.
  • Доњи део садржи операције које класа може да изврши. Оне су такође поравнате улево и прво слово је мало.

У дизајнирању система, одређени број класа се идентификује и групише у дијаграм класе који помаже да се одреде статички односи између њих. Уз детаљно моделовање, класе концептуалног дизајна се често деле на више поткласа.

Да би се даље описало понашање система, ови дијаграми класа могу бити допуњени дијаграмом стања или UML аутоматом стања.[2]

Везе уреди

Веза је општи појам који покрива специфичне типове логичких веза на дијаграмима класе и објекта. UML дефинише следеће односе:

Везе на нивоу инстанце уреди

Зависност уреди

Зависност је семантичка веза између зависних и независних елемената модела.[3] Постоји између два елемента ако промене у дефиницији једног елемента (сервера или циља) могу проузроковати промене на другом (клијенту или извору). Ова асоцијација је једносмерна.

Асоцијација уреди

Асоцијација представља породицу веза. Бинарна асоцијација (са два краја) је нормално представљена као линија. Асоцијација може повезати било који број класа. Асоцијација са три везе се зове тернарна асоцијација. Асоцијација се може именовати, а крајеви асоцијације могу бити украшени именима улога, индикаторима власништва, вишеструкостима и другим својстима. Постоје четири различита типа асоцијација: двосмерна, једносмерна, агрегација (укључује агрегацију композиције) и рефлексивна. Двосмерне и једносмерне асоцијације су најчешће. На пример, класа лета је у асоцијацији са авионом двосмерно. Асоцијација представља статички однос који се дели између објеката две класе.

Агрегација уреди

 
Дијаграм класе који показује агрегацију између две класе. Овде, професор „има” разред који учи.

Агрегација је варијанта везе асоцијације која значи „има”; агрегација је специфичнија од асоцијације. То је асоцијација која представља део целине или део односа. Као што је приказано на слици, класа Професор (Professor) „има” класу Разред (Class) коју учи. Као врста асоцијације, агрегација може бити именована и имати исте украсе као и асоцијација. Међутим, агрегација не може укључивати више од две класе; то мора бити бинарна асоцијација. Штавише, тешко да постоји разлика између агрегација и асоцијација приликом имплементовања, а дијаграм може потпуно прескочити односе агрегације.[4]

Агрегација се може појавити када је класа збирка или контејнер других класа, али садржане класе немају снажну зависност животног циклуса од контејнера. Садржај контејнера и даље постоји када се контејнер уништи.

У UML-у, ова веза је графички приказана као шупљи дијамантни облик на страни класе која садржи неку класу, а повезана је са том класом која је садржана. Пример: библиотека и студенти. Овде студент може да постоји без библиотеке, те је због тога однос између студента и библиотеке агрегација.

Композиција уреди

UML представа везе композиције показује композицију линију која спаја класу која садржи и класу која је садржана, са попуњеним дијамантним обликом на страни класе која садржи.

Разлике између композиције и агрегације уреди

 
Два дијаграма класа. Горњи дијаграм показује композицију између две класе: аутомобил (Car) има тачно један карбуратор (Carburetor), а карбуратор може да буде у највише једном аутомобилу (карбуратори могу да постоје као независни делови, одвојени од одређеног аутомобила). Доњи дијаграм показује агрегацију између две класе: језеро (Pond) има нула или више патака (Ducks), а патка може да буде у највише једном језеру у одређено време.
Композиција
  1. Када покушавамо да представимо стварне односе целог дела, нпр. мотор је део аутомобила.
  2. Када се контејнер уништи, садржај се такође уништава, нпр. факултет и његови департмани.
Агрегација
  1. Када представљамо однос софтвера или базе података, нпр. модел мотора аутомобила MM01 је део модела аутомобила AM01, али модел мотора MM01 може бити део и неког другог модела аутомобила.[5]
  2. Када се контејнер уништи, садржај се обично не уништава, нпр. професор има студенте, када професор умре, студенти не умиру заједно са њим.

Везе на нивоу класа уреди

Генерализација/Наслеђивање уреди

 
Дијаграм класа који показује генерализацију између наткласе човек и поткласа студент и професор.

Ова веза указује да се једна од две сродне класе сматра специјализованом формом друге, а наткласа се сматра генерализацијом поткласе. У пракси, ово значи да је свака инстанца поткласе такође инстанца наткласе. Ова врста генерализације може се наћи у биолошкој таксономији: људи су поткласа симијана, који су поткласа сисара, итд. Ова веза најлакше се схвати фразом „А је Б” (човек је сисар, сисар је животиња).

UML графички приказ генерализације је линија која спаја наткласу са поткласом (или стабло које повезује наткласу са поткласама), а на страни наткласе је празни троугао.

Генерализација је такође позната као и наслеђивање. Наткласа у генерализацији је такође позната и као „родитељ”, суперкласа, основна класа или основни тип. Поткласа у специјализованој вези је ткаође позната као „дете”, поткласа, изведена класа, изведени тип, наслеђена класа или наслеђени тип.

Пример: „храст је тип дрвета”, „аутомобил је врста возила”. Генерализација се може приказати само на дијаграмима класе и на дијаграмима случајева коришћења.

Реализација/Имплементација уреди

У UML моделовању, веза реализације је веза између два елемента модела, при чему један елемент модела (клијент) реализује (имплементује или извршава) понашање које други елемент модела (добављач) прописује.

UML графички приказ реализације је испрекидана линија која повезује интерфејс са једним или више имплементатора, при чему је на страни интерфејса шупљи троугао. Отворена глава стрелице користи се на линији која спаја интерфејс са својим корисницима и то на страни на којој је интерфејс. Реализације се могу приказати само на дијаграмима класа или компоненти. Реализација је однос између класа, интерфејса, компоненти и пакета који повезује елемент клијента са елементом добављача. Однос реализације између класа/компоненти и интерфејса показује да класа/компонента реализује операције које нуди интерфејс.

Општа веза уреди

Зависност уреди

Зависност је слабија форма везе која указује да једна класа зависи од друге зато што је користи у неком тренутку у времену. Једна класа зависи од друге ако је независна класа параметарска променљива или локална променљива методе зависне класе. Ово се разликује од асоцијације, где је атрибут зависне класе инстанца независне класе. Понекад је веза између две класа веома слаба. Оне се уопште не имплементирају са променљивим члановима. Уместо тога, они могу бити имплементирани као чланови аргумената функције.

Вишеструкост уреди

Ова веза асоцијације указује да (барем) једна од две сродне класе упућује на другу. Ова веза се обично описује као „А има Б” (мачка има мачиће, мачићи имају мајку мачку).

UML репрезентација асоцијације је линија која повезује две асоцијативне класе. На сваком крају линије постоји опциона нотација. На пример, можемо указати, користећи стрелицу, да шиљасти крај буде видљив са репа стрелице. Можемо означити власништво постављањем лопте, улогу елемената коју играју елементи на том крају тако што дајемо име за улогу и многострукост интсанци тог ентитета (опсег броја објекат акоји учествују у асоцијацији из перспективе другег краја).

0 Нема инстанци (реткост)
0..1 Нула или једна инстанца
1 Тачно једна инстанца
1..1 Тачно једна инстанца
0..* Нула или више инстанци
* Нула или више инстанци
1..* Једна или више инстанци

Види још уреди

Референце уреди

  1. ^ „Database Modeling in UML (Unified Modeling Language)”. www.methodsandtools.com. Приступљено 2019-06-12. 
  2. ^ „UML 2 Class Diagrams: An Agile Introduction”. www.agilemodeling.com. Приступљено 2019-06-12. 
  3. ^ Fowler (2003) UML Distilled: A Brief Guide to the Standard Object Modeling Language
  4. ^ „UML Class Diagram Tutorial”. www.visual-paradigm.com. Приступљено 2019-06-26. 
  5. ^ Goodwin, David. „Modelling and Simulation, p. 26” (PDF). The University of Warwick. Приступљено 28. 11. 2015. 

Спољашње везе уреди