Presentation is loading. Please wait.

Presentation is loading. Please wait.

Klasių diagramos Paskaitos tikslas – supažindinti su klasių diagramos notacija ir jos ryšiu su programiniu kodu.

Similar presentations


Presentation on theme: "Klasių diagramos Paskaitos tikslas – supažindinti su klasių diagramos notacija ir jos ryšiu su programiniu kodu."— Presentation transcript:

1 Klasių diagramos Paskaitos tikslas – supažindinti su klasių diagramos notacija ir jos ryšiu su programiniu kodu

2 Klasių diagramos Klasių diagrama (class diagram) specifikuoja sistemos klases (interfeisus) ir jų tarpusavio sąryšius. Klasių diagrama vaizduoja statinį sistemos modelį, t.y. statinę sistemos struktūrą ir hierarchiją. Klasių diagrama, aprašo objektus, turinčius bendrus atributus, operacijas, ryšius ir semantiką. Tai viena pagrindinių objektinio projektavimo diagramų. Klasių diagrama lyginant su kitomis yra išskirtinė – tai pagrindinis automatinio kodo generavimo šaltinis. Klasių diagrama aprašo abstrakcijas, taisykles ir koncepcijas kaip objektai gali būti naudojami.

3 Klasių diagramos kūrimas
Nustatomos dalykinės srities esybės ir atvaizduojamos klasėmis su atitinkamais atributais ir operacijomis. Nustatomi sąryšiai tarp dalykinės srities esybių ir atvaizduojami tipiniais ryšiais tarp klasių. Sukuriamas pradinis programinės įrangos sistemos loginis modelis, kuris toliau bus realizuotas fiziniais modeliais. Paruošiama dokumentacija tolesniam programinio kodo kūrimui.

4 Klasių diagrama Klasių diagrama vaizduojama grafu kurio viršūnėmis yra klasifikatoriai kurie gali būti susieti įvairaus tipo struktūriniais ryšiais. Kuo vaizduojama struktūrinio programavimo programa? Klasifikatorius (classifier) – speciali sąvoka skirta bendras charakteristikas turintiems egzemplioriams klasifikuoti (tipas). Klasė (class) – modelio elementas aprašantis aibę objektų turinčių vienodas charakteristikų specifikacijas, tuos pačius ribojimus ir semantiką.

5 Darbo pradžia: Pasirenkame File/New Project Pasirenkame Class Diagram
Atsiradusiame lange spaudžiame OK Įrankių juostoje renkamės klasių diagramos elementus Pabaigoje išsaugome diagramą Pavardė2.jpg ir siunčiame dėstytojui File/Save Diagram As Image

6 Notacija: viršutinis skyrius
Grafiškai klasė vaizduojama stačiakampiu, dažniausiai turinčiu tris skyrius. Viršutinis skyrius yra vienintelis būtinas skyrius. Viršutiniame skyriuje rašome: Klasės vardą pradedamas didžiaja raide ir rašomas centre paryškintu šriftu. Abstrakčios klasės vardą (rašomas kursyvu). Interfeiso vardą (dažnai žymimas stereotipu <<interface>>).

7 Klasių vardai Randame programos tekste:
klases – žymimos raktiniu žodžiu class abstrakčias klases – žymimos raktiniais žodžiais abstract class interfeisus – žymimi raktiniu žodžiu interface Kiekvienu rastu vardu pažymime atskirą stačiakampį. kontekstiniu meniu pasirenkame:

8 interfeisui nurodome stereotipą
klasės vardas abstrakčiai klasei pažymime nereikalingų skyrių galime nerodyti

9 Atributai Klasės atributas (attribute) vaizduoja bendrą visų klasės objektų charakteristiką arba savybę. Atributo aprašas: [<matomumas>] [‘/’] <vardas> [‘:’ <tipas>] [‘[‘<daugybiškumas>’]’] [ ‘=‘ <reikšmė pagal nutylėjimą> ] ['{'<modifikatorius> [',' <modifikatorius>]*'}']

10 Visibility (matomumas)
Visibility is applied to both attributes and operations in a class. Visibility refers to the scope of access allowed for a member of a class. + public (viešas): raktažodžiu pažymėti klasės atributai ir operacijos prieinami bet kokiai kitai klasei. # protected (apsaugotas): raktažodžiu pažymėti klasės atributai ir operacijos prieinami paveldinčioms klasėms (pastarosios pažymėtos raktažodžiu extends) ~ package (paketo): raktažodžiu nepažymėti klasės atributai ir operacijos prieinami tik to paties paketo klasėms. - private (privatus): raktažodžiu pažymėti klasės atributai ir operacijos prieinami tik tai pačiai klasei. / derive (apskaičiuojamas) atributas, t.y. jo vertė gali būti rasta iš kitų atributų ir jo saugoti duomenų modelyje nereikia. Tokiam atributui būtina nurodyti jo vertę apskaičiuojančią operaciją. Nenurodžius matomumo, jis nėra numanomas.

11 Daugybiškumas (Multiplicity)
Multiplicity specifies the number of values that may be associated with a model element. n – n and only n. 1 – one and only one. zero or one. (Note that a multiplicity of 0..1 provides for the possibility of null values: the absence of a value, as opposed to a particular value from the range.) 0..* - from zero to any positive integer. 1..* - from one to any positive integer. * - any positive integer. Jei atributo daugybiškumas nenurodytas, vadinasi jis lygus 1. - performer[1..20]: Person Daugybiškumas dažniausiai naudojamas su atributais ir asociacijomis.

12 Atributo modifikatoriai
ordered – atributo vertės yra sutvarkytos; jei šis modifikatorius nenurodytas, jokia jo reikšmių tvarka nėra numanoma. readOnly – atributo vertę galima tik skaityti. redefines <atributo vardas> - atributas paveldint užkloja nurodytą atributą. subsets <atributo vardas> - atributo reikšmės sudaro nurodyto atributo reikšmių poaibį. unique – tarp artibuto reikšmių nėra pasikartojančių.

13 Atributų aprašymo pavyzdžiai
+ darbuotojoVardas : String {readOnly} - gimimoData : Data {readOnly} # darbuotojoAmžius : Integer + telefonoNumeris : Integer [*] {unique} – darbuotojas galiturėti daug telefono mumerių, arba neturėti nė vieno. - atlyginimas : Currency = $500 – priimant į darbą darbuotojui pagal nutylėjimą paskiriamas atlyginimas $500. Ateityje ši reikšmė gali keistis.

14 Atributai Vidurinajame skyriuje rašomi klasės atributai, t.y. klasės kintamieji. Dažniausiai naudojamas atributo aprašas: <Matomumas> <Vardas> : <Tipas> <Daaugybiškumas> = <Pradinė reikšmė>. Pavyzdys: - name: String = “Vardenis” nurodomas matomumas, vardas, tipas ir pradinė reikšmė Paprastiems tipams, bei standartiniams tipams (String, File ...) naudojame atributus. Vartotojo įvestiems tipams žymėti naudojame asociacijas.

15 Operacijos Klasės operacija (operation) vaizduoja bendrą visų klasės objektų elgesio charakteristiką. Operacijos aprašas: [<matomumas>] <vardas> ‘(‘[<parametrų sąrašas>]’)’[‘:’ [<grąžinamo rezultato tipas>] '{'<operacijos savybė> [',' < operacijos savybė >]*'}'] Nenurodžius matomumo, jis nėra numanomas. Nebūtina vaizduoti operacijos savybes, parametrus ir grąžinamo rezultato tipą

16 Operacijos savybės redefines <operacijos vardas> - operacija paveldint užkloja nurodytą operaciją. query – operacija nekeičia sistemos būsenos, t.y. neturi šalutinio poveikio. ordered – parametro daugybiškumas didesnis už vienetą ir jo vertės yra sutvarkytos; jei ši savybė nenurodyta, jokia jo verčių tvarka nėra numanoma. unique – parametro daugybiškumas didesnis už vienetą ir tarp jo verčių nėra pasikartojančių. <ribojimas> - išraiška aprašanti operacijai taikomą ribojimą.

17 Operacijos parametrų kryptys
in – parametro vertę operacijai perduoda iškviečiantis objektas. inout – parametro vertę operacijai perduoda iškviečiantis objektas, kuriam, įvykdžius operaciją, gauta reikšmė grąžinama atgal. out – įvykdžius operaciją, gauta reikšmė grąžinama iškviečiančiam objektui. return – įvykdžius operaciją, gauta parametro reikšmė grąžinama iškviečiančiam objektui kaip grąžinama reikšmė; operacija gali turėti tik vieną tokį parametrą. ekvivalentu: toString(return : String) ir toString() : String

18 Operacijų aprašymo pavyzdžiai
+ papildyti(in telefonoNumeris : Integer [*] {unique} ) + sukurti() : Boolean - pakeisti(in atlyginimas : Currency)

19 Operacijos vaizduojamos apatiniame skyriuje
Operacijos požymis – skliaustai. Dažniausiai naudojamas operacijos aprašas: <Matomumas><Vardas>(<Parametrų sąrašas>) :<Grąžinamo rezultato tipas>.

20 Operacijos vardas Matomumas Parametrai ir jų tipai Grąžinamo rezultato tipas (jei nieko negrąžinama) Jei operacija (ar atributas) turėtų modifikatorių static, ją pažymėtume Scope: classifier (ji taptų pabraukta). Abstrakti operacija rašoma kursyvu. Konstruktoriui grąžinamo rezultato tipas nenurodomas. Konstruktoriui galima nurodyti stereotipą <<constructor>> “get” ir “set” metodams galima nurodyti stereotipus: <<getter>> ir <<setter>>.

21 Ryšiai Asociacija (association) – klasė turi atributą esantį nuoroda į vartotojo klasės objektą. Agregacija (aggregation) Kompozicija (composition) Generalizacija (generalization) – atitinka raktinį žodį extends Realizacija (realization) – atitinka raktinį žodį implements Priklausomybė (dependency) – per parametrus perduodamas, arba lokaliai sukuriamas objektas. nurodome: navigaciją, polių vardus, matomumą, daugybiškumą.

22 Asociacija aprašoma: Asociacijos vardas (association name) – nėra būtinas elementas (jis naudojamas tuomet, kai apie ryšį reikia dažnai kalbėti) Pradedamas didžiąja raide. Šalia asociacijos vardo gali būti naudojamas mažas juodas trikampis nurodantis kuria kryptimi skaityti asociacijos vardą. Pavyzdžui, tam, kad nurodyti: “darbuotojas dirba firmai”, bet ne atvirkščiai. Asociacijos poliais (association end) – nurodomas atitinkamos klasės vaidmuo (role) šioje asociacijoje. Asociacija gali būti ir grįžtamoji, t.y. linija gali “sugrįžti” į tą pačią klasę. Tuo parodoma, kad vienos klasės egzempliorius pasiekia kitą tos pačios klasės egzempliorių.

23 Asociacijos polius rolename identifikuoja asociacijos galą (vardas),
tarnauja objektų navigacijai asociacijos pagalba, t.y. dažnai tarnauja atributu. šis atributas nurodomas priešingoje klasei asociacijos pusėje visibility – nurodo, ar ryšys prieinamas kitoms klasėms nei esančiai kitoje asociacijos pusėje. multiplicity – nurodo galimą susiejamų objektų skaičių.

24 Asociacijos poliai navigability – galimybė per asociaciją pasiekti kitos klasės egzempliorių. Jei rodyklė nevaizduojama, laikoma, kad navigacija nespecifikuota. navigacijos nėra – produktas nesaugo užsakymų sąrašo (pasenęs susitarimas) navigacija yra – kiekvienas užsakymas saugo produktų sąrašą

25 navigability pavyzdžiai

26 Containers For associations with multiplicity > 1, use a container
for constant multiplicity you can use an array for variable multiplicity, use a collection object: ArrayList, List, Vector

27

28 Grįžtamoji asociacija Reflexive association
class TreeMapNode { private TreeMapNode nodes[] = new TreeMapNode[2]; }

29 public class BlogAccount {
// Attribute introduced thanks to the association // with the BlogEntry class private BlogEntry[] entries; } public class BlogEntry { // with the Blog class private BlogAccount blog;

30 Asociacijos savybės eilutė (nurodo papildomas poliaus savybes)
{subsets <elemento vardas>} - asociacijos polius yra <elemento vardas> poaibis. Pastaruoju gali būti poliaus vardas arba klasės atributas. {redefined <poliaus vardas>} - asociacijos polius užkloja kitą polių, kurio vardas yra <poliaus vardas>. {ordered} – asociacijos polius yra tvarkioji aibė. {bag} – asociacijos poliaus elementai gali kartotis. {sequence} - asociacijos polius yra seka.

31 Išskiriančioji asociacija (xor-association)
Iš kelių galimų asociacijos variantų vienu metu galimas tik vienas. Šiame pavyzdyje klientas gali būti tik arba juridinis, arba fizinis asmuo. Kokiais daugybiškumais ar savybėmis papildytumėte diagramą? Sąskaita banke (abi asociacijos) 1..* ir {ordered} – pavyzdžiui, pagal atidarymo datą Fiziniam ir Juridiniam asmenims daugybiškumas 1

32 N-arinė asociacija – n-ary association (sieja asociacijos ryšiu daugiau nei dvi klases)
N-arinės asociacijos egzemplioriumi yra jos jungiamų klasių N objektų rinkinys. Pavyzdžiui: Pavardenis, Žebenkštys, 2008 Kaip papildytumėte šį fragmentą? N-arinės asociacijos trūkumas – ji negali atvaizduoti papildomos informacijos, pavyzdžiui susitikimo vietos ir t.t. sezonai - {ordered} pagal datas komandos - {ordered} pagal alfabetą įvarčiai - ne

33 Asociacija-klasė (association class)
Turi kaip asociacijos, taip ir klasės savybių ir aprašo papildomas asociacijos savybes klasės atributais ir operacijomis. Papildomos asociacijos savybės nepriklauso nė vienai jungiamai klasei Kaip interpretuotumėte pateiktą pavyzdį? Pavyzdyje, žmogus kompanijoje gali dirbti įvairius darbus ir Darbas Job nėra nei žmogaus, nei kompanijos savybė. Darbas yra šių klasių objektų ryšio savybė.

34 Kvalifikatorius (qualifier)
Nurodo kaip asocijuotų egzempliorių aibė skaidoma pagal egzempliorių kvalifikuotame asociacijos poliuje. Jei priešingame poliuje daugybiškumas 1 arba 0..1, kvalifikatoriaus reikšmės vienareikšmiškai sieja objektus. Kaip interpretuotumėte pateiktus pavyzdžius? Kiekviena banko sąsakita vienareikšmiškai susieta su konkrečiu asmeniu. Šachmatų lentos kvadratas vienareikšmiškai charakterizuojamas vertikale ir horizontale. Šachmatų lentos kvadratas savarankiškai neegzistuoja

35 Aggregation Agregacija (aggregation) tai toks klasių susietumo būdas, kuriame vienai klasei priklauso kitos klasės objektai. Tačiau šiais objektais ji gali dalytis su kitomis klasėmis. In a typical association the participating classes are peers. Each class remains independent of the other and neither class is superior to the other. They simply communicate. An aggregation is used primarily to define and protect the integrity of a configuration of objects. An aggregation defines an assembly or configuration so that the collection of objects can be managed as a single unit, as though the collection was one large object. In aggregation of objects there has to be a point of control, a boss, one object that represents the interface to the assembly and assumes responsibility for coordinating the behavior of the aggregation. For example, whem I push the gas pedal on my car to tell the car I want to accelerate, the entire car assembly (with its thousands of parts) accelerates, not just the gas pedal.

36 Aggregation Aggregation may represent both physical and logical assemblies. In a model of a desktop computer, the classes represent hardware devices that have physical connections. In a model of a project team, the classes represent people who are “connected” by agreements and assignments. Aggregation models a relationship just like an association, so the same rules apply to defining aggregations as to associations, namely roles, multiplicity, qualifiers, changeability, constraints, and derivation. Skirtingai nei asociacija, agregacija įveda apbribojimą ryšio cikliškumui, t.y. objektas negali būti savęs paties dalimi.

37 How to model an aggregation relationship
Agency Agent 0..* 1..* -employee {must have a current contract} An agent may be a part of no more than one agency, but an agent does not have to be part of an agency (0..1), that is an agent may be independent. The agency is always comprised of at least one agent but there may be any number of agents (1..*). An agent is considered an employee (role name) of an agency. Every agent is constrained by the fact that she must have a current contract in order to be an employee of the agency.

38 Aggregation agregacija realizuojama kaip ir asociacija – nuorodomis.
Object B is a “part of” m A’s Object A “contains” n B’s m n Class A Class B The relationship between an author and his blogs is much stronger than just association. An author owns his blogs, and even though he might share them with other authors, in the end, his blogs are his own, and if he decides to remove one of his blogs, then he can!

39

40 Composition Kompozicija realizuojama kaip ir asociacija – nuorodomis.
Kompozicija (composition) tai agregacijos atvejis, kai objektas-dalis vienu metu gali priklausyti tik vienam sudėtiniam objektui. Kompozicijoje priešingai nei agregacijoje dalys negali savarankiškai egzistuoti be to objekto kuriam jos priklauso. Composition does have a coding equivalent in Java using the private inner class construct.

41 Aggregation and Composition
If the team is disbanded, the employees live on (depending, of course, on how well they performed on the project :)). Each employee may or not be a member of a member team (0..*). In fact, an employee may simultaneously participate in many project teams. Aggregation allows the members to participate or not participate or even participate in other aggregations at the same time. An event is composed of one or more performances. The performances would not continue to exist elsewhere on their own. If the event were deleted, the performances would cease to exist along with the event. A performance must be associated with one and only one event (1). This tells me that a performance cannot exist independent of the event. renginys, pasirodymas

42 Composition Object B “lives and dies” with A
The multiplicity of A is always 1, that is B is the “sole property” of A 1 n Class A Class B Pavyzdys: atskiri vaizdiniai komponentai vaizduojami tik lange.

43 A blog entry's introduction and main body sections are
actually parts of the blog entry itself and won't usually be shared with other parts of the system. If the blog entry is deleted, then its corresponding parts are also deleted. This is exactly what composition is all about: you are modeling the internal parts that make up a class.

44 Aggregation and Composition

45

46 Generalization Generalizacija (Generalization) tai ryšys apibendrinimas/specializacija, kai specializuoto elemento (vaiko) objektai gali būti panaudoti visur, kur tinka apibendrinto elemento (tėvo) objektai. Pavyzdžiui, generalizacijos ryšiai apibrėžia sistemos klasių (paveldimumo) hierarchiją. People use this process routinely to organize large amounts of information. Walk through a grocery store and you find foods located in areas of store depending on their properties. Dry goods are located in one area, fruits and vegetables in another, meat in yet another. All of these items are foods, but they are different kinds of foods or types of foods.

47 Styles of Displaying Generalizations
Separate Target Style Shared Target Style

48

49 Nested Class Declarations A class declared within another class

50 public abstract class Store {
public abstract void store(Article[] articles); public abstract Article[] retrieve( ); } public class BlogStore extends Store{ public void store(Article[] articles) {...} public Article[] retrieve( ) {...}

51 Interfeisas & Realizacija
An interface is a specifier for the externally-visible operations of a class, component, or other classifier (including subsystems) without specification of internal structure. Interfaces do not have implementation. They lack attributes, states, or associations; they only have operations. Interfaces may have generalization relationships. The implementation of a type by a class is modeled as the Realization relationship, shown as a dashed line with a solid triangular arrowhead (a dashed “generalization arrow”).

52 public interface EmailSystem {
public void send(Message message)); } public class SMTPMailSystem implements System{ public void send(Message message){...} Pastaba: interfeiso operacijos kursyvu nerašomos.

53 Because the SMTPMailSystem class does not implement the send(
Because the SMTPMailSystem class does not implement the send(..) operation as specified by the System interface, it needs to be declared abstract; the VendorXMailSystem class completes the picture by implementing all of its operations

54 Priklausomybės ryšys Priklausomybės ryšys (dependency relationship) nurodo kitokį pasiekiamumą tarp klasių nei atributų pagalba. Priklausomybė (Dependency) - tai semantinis ryšys tarp dviejų elementų, kai vieno iš jų, nepriklausomo, pasikeitimas gali paveikti kito, priklausomo, elemento pasikeitimą. Atvirkščiai tvirtinti kaip taisyklė negalima The model element at the tail of the arrow (the client element) depends on the model element at the arrowhead (the supplier element)

55 Dependency Is implemented through local-scope objects
passing an object as a parameter to a function/method instantiating a local object galima nurodyti stereotipą

56 Programos klasių diagrama
class A{ private String a; public A(String a){this.set1A(a);} public final void set1A(String aIn) {this.a = aIn;} public final String get1A() {return this.a;} public void set2A() { this.set1A(this.get1A().replace(' ','+')); } public String toString() {return (this.get1A());} abstract class B{ public abstract void b();} class C extends B{ private A a; public C(A aIn){ this.a = aIn; } public void b() {this.a.set2A();} class Kazkas { public static void main(String[] args){ A a1 = new A("1 2"); B b1 = new C(a1); b1.b(); System.out.println(a1.toString()); }


Download ppt "Klasių diagramos Paskaitos tikslas – supažindinti su klasių diagramos notacija ir jos ryšiu su programiniu kodu."

Similar presentations


Ads by Google