Svaka klasa ima i atribute i operacije. Osobine (engl. Properties) predstavljaju strukturne karakteristike klase. Osobina se pojavljuje u dva potpuno različita oblika na dijagramu klasa: kao atribut i kao asocijacija.
U fazi analize model klasa obično sadrži samo nazive atributa i operacija bez dodatnih parametara (npr. samo Naziv, KopijaNaPolici, Iznajmiti), dok se u fazi dizajna dodaju i ostali parametri (informacije). Radi upoređenja dat je primer iste klase prikazane u fazi analize i dizajna (slika):
Notacija za klasu u Rational Rose-u je:
Atributi klase opisuju podatke sadržane u objektu klase i prikazaju se u drugom (srednjem) delu ikone klase. Npr: na ikoni za Knjigu na kojem se pokazuje da svaki objekat klase Knjiga ima naziv (koji je string) i razmenjuje poruke sa selektorom “KopijaNaPolici” (koji nema argumenata i vraća integer) isto kao i sa “Iznajmiti” (koji uzima argument objekta klase “Kopija” i ne vraća rezultat). Možemo uočiti da nismo uključili atribute koji jednostavno implementiraju asocijaciju prikazanu u dijagramu klasa. Npr. mi nismo pokazali da Knjiga ima atribut “kopija” u koji bi postavljala referencu na “Kopija” objekte povezane sa “Knjiga” klasom.
Potpuni oblik zapisa atributa je:
Vidljivost ime: tip kardinalnost = default_vrednost {opis_osobine} |
Primer za atribut je:
- ime:String [1] = ''Neko ime'' {readOnly}
Obavezno je samo ime.
Pojedini delovi zapisa atributa imaju sledeće značenje:
Drugi način označavanja osobine jeste asocijacija. Npr. većina informacija koje možemo prikazati atributom (veza knjige i kopije) pojavljuje se i u asocijaciji “je kopija od”. Na sledećim slikama prikazane su iste osobine na dva različita načina – pomoću atributa i asocijacije: na primer, Narudžbenica i Stavka narudžbenice (jedna narudžbenica ima više vezanih stavki):
Osobina klase (asocijacija) prikazana kao atribut
Asocijacija se označava punom linijom između dve klase, usmerenom od izvorne ka odredišnoj (navigabilnost). Ime osobine je na odredišnom kraju asocijacije kao i njena kardinalnost. Odredišna klasa određuje tip osobine.
Osobina klase prikazana kao asocijacija
Uobičajni pristup je prikazivati:
• osobine kao atribute ukoliko su njihovi tipovi jednostavni (datumi, stringovi, logičke promjenljive...) ili
• asocijacije ukoliko je tip osobine klasa (narudžbenica, kupac ....).
Operacije su aktivnosti koje klasa može da obavi. One odgovaraju metodama klase. Jedna operacija je realizovana nijednom ili uz pomoć više metoda. Apstraktna operacija nije realizovana nijednom metodom.
Vidljivost operacije može biti javna (+), privatna (-), zaštićena (#).
Potpuna sintaksa operacija na jeziku UML glasi:
vidljivost ime (parametri) : tip_rezultata {opis_osobine} |
• ime je niz znakova kojim se obeležava operacija,
• parametri – lista parametara operacije,
• tip rezultata je tip rezultirajuće vrednosti operacije, ukoliko takva postoji,
• opis osobine ukazuje na posebna svojstva operacije.
Parametri se označavaju na sličan način kao i atributi:
smer ime : tip = default_vrednost |
Smer ukazuje na to da li je parametar ulazni (in - ne sme biti modifikovan), izlazni (out - mora se inicijalizovati) ili ulazno-izlazni (inout - može se modifikovati). Ako smer nije označen, podrazumeva se in.
Ime, tip i default vrednost imaju isto značenje kao u sintaksi atributa. Operacija vraća vrednost nakon što izvrši svoj rad.
Dijagrami klasa u velikoj meri prikazuju ograničenja (engl. Constraints) sistema. Osnovni elementi kao što su asocijacija, atributi i generalizacija definišu većinu važnih ograničenja, ali ne mogu ukazati na sva ograničenja. Preostala ograničenja ipak negde moraju biti prikazana, a dobro mesto za to je dijagram klasa.
Jezik UML dozvoljava da opišemo ograničenja kad god želimo. Jedino pravilo je da opis moramo smestiti unutar vitičastih zagrada - {}.
Pri tom možemo koristiti neki prirodan jezik, programski jezik ili UML-ov formalni jezik ograničenja objekata (engl. Object Constraint Language, OCL) koji je zasnovan na predikatskom računu.
Upotreba formalne notacije otklanja opasnost od pogrešnih tumačenja, koja mogu nastati zbog nepreciznosti prirodnog jezika. Međutim, ona unosi novu opasnost od pogrešnog tumačenja, ako autori i čitaoci ne razumeju dovoljno OCL.
Na sledećim slikama prikazani su primeri različitih prikaza ograničenja na dijagramu klasa:
Profesor može biti zaposlen na jednom i samo jednom fakultetu, a fakultet zapošljava više profesora, najmanje jednog. Profesor može biti član NNV akulteta. NNV ima jednog ili više članova. Profesor je član NNV samo onog fakulteta na kome je zaposlen. Ovo ograničenje je podskup asocijacije definisane između klasa Profesor i Fakultet.
Pojava asocijacije clanNNV u kojoj klasa Profesor ima ulogu <<clan>> mora biti podskup pojava asocijacije <<radi na>> u kojoj klasa Profesor ima ulogu <<zaposlen>>.
Jedan od velikih kvaliteta objektno-orijentisanog razvoja je da se može odvojeno posmatrati interfejs klase od implementacije. Interfejs definiše spoljašnje vidljive operacije neke klase, komponente ili paketa ne definišući internu strukturu tih operacija. On obuhvata samo ponašanje neke klase i ne sadrži implementaciju: nema atribute ni stanje (posmatra se kao apstraktna klasa).
Stereotip <<stereotypes>> je UML način da doda ekstra klasifikaciju na deo modela. Stereotip opisuje element modela i postavlja se na element dijagrama. Neki stereotipovi su predefinisani u UML-u, oni su automatski raspoloživi i ne mogu se redefinisati. Primeri: <<interfaces>>, <<type>> i <<implementation>>.
Značenje stereotipa je sledeće:
• <<interfejs>> - Interfejs specificira listu operacija koje klasa mora da obezbedi. Nema atributa i nema implementacije povezane sa operacijama,
• <<type>> - Klasa koja ima ovaj stereotip je kao interfejs osim što može specificirati i atribute a i operacije. Ne definiše implementaciju.
• <<implementation class>> - Klasa sa ovim stereotipom definiše implementaciju njenih operacija i atributa.
Interfejs se obično deklariše preko apstraktnih klasa. Takve klase mogu obezbediti i neku implementaciju, ali često one se primarno koriste da deklarišu interfejs.
Npr. tekst editor prikazan na donjoj slici je tipičan primer za ovo. Da bi se obezbedilo da editor bude nezavisan od platforme, definišemo apstraktnu klasu Window nezavisnu od platforme. Ova klasa nema operacija, ona samo definiše interfejs za tekst editor. Podklase koje su zavisne od platforme se mogu po želji koristiti.
Objekti apstraktne klase se ne mogu neposredno instancirati. Apstraktna klasa obično sadrži jednu ili više apstraktnih operacija. Apstraktna operacija nije realizovana, već je samo deklarisana, tako da se klijenti mogu povezati sa ovom klasom. Uobičajni način da se ukaže na apstraktnu klasu ili operaciju u UML-u jeste da se ime klase ili operacije piše italic slovima. Drugi način jeste koristiti rezervisanu reč {abstract}. Klase koje ne stvaraju objekte su apstraktne klase.
Interfejs je klasa koja nije realizovana – sve njene karakteristike su apstraktne. Interfejsi neposredno odgovaraju interfejsima jezika Java, C++, C#, a koriste se često i u drugim jezicima sa tipovima. Interfejs se označava sa <<interface>>. Klase uspostavljaju dve vrste veza sa interfejsima:
Asocijacija opisana kvalifikatorom koristi se da označi ključ (kvalifikator) koji se koristi za selekciju objekta iz neke strukture. Objekat strukture za datu vrednost ključa selektuje jedan ili grupu elemenata. Učesnici u relaciji su struktura i njen element. Element strukture se izdvaja uz pomoć ključa. Kvalifikator može imati više atributa, oni su atributi asocijacije. Na donjoj slici je prikazana upotreba kvalifikatora da bi se opisala asocijacija između klasa Narudžbenica i Stavka narudžbenice. Kvalifikator označava da jedna instanca klase Narudžbenica može biti povezana sa jednom instancom klase Stavke narudžbenice za svaki objekat tipa Knjiga.
Treba obratiti pažnju na kardinalnost asocijacije tj. da se kardinalnost asocijacije posmatra u odnosu na kvalifikator. Na slici se može videti da narudžbenica ima 0..1 stavki ali po knjizi.
N-arna asocijacija je asocijacija koja može povezivati više od 2 klase. Takva asocijacija se naziva n-arnom. Svaka instanca n-arne asocijacije je n-torka vrednosti odgovarajućih klasa. Primer ternarne asocijacije (sa klasom asocijacije) dat na sledećoj slici:
Klasa asocijacija omogućava da asocijacijama dodajemo atribute, operacije i druge karakteristike, kao što je to prikazano na slici. Sa dijagrama možemo zaključiti da jedan pisac može napisati više knjiga i da svaku knjigu može napisati više pisaca. Za svaku vezu između pisca i knjige moguće je definisati i neke dodatne atribute kao što je recimo procenat učešća pisca u pisanju pojedine knjige. Ova informacija se ne može smestiti niti u klasu Pisac, niti u klasu Knjiga.
U dijagramu klasa, klasa asocijacije transformiše se u potpunu klasu:
Parametrizovana klasa nije u principu vrsta klase, to je klasa koja prima parametar. Neki jezici imaju notaciju parametrizovane klase (poznatu i kao template).
Sledeća slika predstavlja parametrizovanu klasu. T u dijagramu je mesto za tip parametara. Element koji se koristi u parametrizovanoj klasi se naziva i „bound“ element.
Nabrojiva lista (engl. Enumeration) koristi se radi prikazivanja nepromenljivog skupa simboličkih vrednosti. Prikazuju se kao klase označene rezervisanom rečju «enumeration».