komponens-elvű alkalmazásfejlesztés
DESCRIPTION
Komponens-elvű alkalmazásfejlesztés. Vég Csaba . KLTE. A kezdetek. ‘60-as évek vége szoftver-krízis McIlroy (‘68): “mass produced components would end the sw. crisis” sw. komponensek: “sw. IC-k” (McIlroy ) Modul: adott követelmények, architektúra, - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/1.jpg)
1
Komponens-elvű alkalmazásfejleszté
s
KLTEKLTE
Vég CsabaVég Csaba <[email protected]><[email protected]>
![Page 2: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/2.jpg)
2
A kezdetekA kezdetek ‘‘60-as évek vége60-as évek vége
szoftver-krízisszoftver-krízis
McIlroy (‘68): “mass produced components would end the McIlroy (‘68): “mass produced components would end the sw. crisis”sw. crisis” sw. komponensek: “sw. IC-k” (McIlroy )sw. komponensek: “sw. IC-k” (McIlroy )
Modul: Modul: adott követelmények, adott követelmények, architektúra, architektúra, tervezési és implementációs módtervezési és implementációs mód
![Page 3: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/3.jpg)
3
OO fejlesztésOO fejlesztés OO előnyök:OO előnyök:
flexibilitásflexibilitás áttekinthetőségáttekinthetőség módosíthatóságmódosíthatóság
OO fejlesztés kockázata:OO fejlesztés kockázata: nagyobb szaktudásnagyobb szaktudás kevesebb tapasztalatkevesebb tapasztalat nincs elméleti hátterenincs elméleti háttere
![Page 4: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/4.jpg)
4
OO vs. componentsOO vs. components Sikeres OO fejlesztés:Sikeres OO fejlesztés:
komponens-elv alkalmazásakomponens-elv alkalmazása „„Object orientation has failed but component Object orientation has failed but component
software is succeeding.” (Udell, ‘94)software is succeeding.” (Udell, ‘94) sw. komponenssw. komponens a rendszer izolálható része a rendszer izolálható része ObjektumObjektum: állapot és viselkedés egységbezárása, : állapot és viselkedés egységbezárása,
polimorfizmus és örökléspolimorfizmus és öröklés nincs: nincs: függetlenségfüggetlenség (independence) és (independence) és
későikésői kompozíciókompozíció (late composition) (late composition) ““The OO techniques are too flexible, they allow too The OO techniques are too flexible, they allow too
much dependencies”much dependencies”
![Page 5: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/5.jpg)
5
„„de működik...”de működik...” OO fejlesztés:OO fejlesztés:
példákpéldák „„kevés elmélet sok gyakorlattal”kevés elmélet sok gyakorlattal”
Stratégia: architektúrális és tervezési tapasztalatStratégia: architektúrális és tervezési tapasztalat Kipróbált tervezési módszerek újrafelhasználásaKipróbált tervezési módszerek újrafelhasználása
Komponens: „szaktudás-konzerv”Komponens: „szaktudás-konzerv”
![Page 6: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/6.jpg)
6
Sw. komponensSw. komponens
““A A software component software component is is a unit of composition with a unit of composition with contractually specified contractually specified interfaces and explicit interfaces and explicit context dependencies context dependencies only. A sw. component only. A sw. component can be deployed can be deployed independentlyindependently and is and is subject to compositionsubject to composition by third parties”by third parties” (‘96 ECOOP workshop)(‘96 ECOOP workshop)
Nomen est omen: “components are for composition”
![Page 7: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/7.jpg)
7
SzempontokSzempontok Technológiai szempont:Technológiai szempont:
late integrationlate integration komponens-architektúra (wiring)komponens-architektúra (wiring)
Komponens-elv:Komponens-elv: a használat előtérbe helyeződésea használat előtérbe helyeződése
(funkcionális-csomópontok)(funkcionális-csomópontok) az elemek funkciókon keresztül kezelhetők az elemek funkciókon keresztül kezelhetők
(nem pedig közvetlenül)(nem pedig közvetlenül)
![Page 8: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/8.jpg)
8
Komponens-elv (absztrakció)Komponens-elv (absztrakció) Komponens-elv a tervezésben és programozásbanKomponens-elv a tervezésben és programozásban
adott (nem tetszőleges) módon programozunkadott (nem tetszőleges) módon programozunk–attribútumok helyett tulajdonságok attribútumok helyett tulajdonságok (property)(property)
(olvasó/író metódusok)(olvasó/író metódusok)–elnevezésekelnevezések–elemek elrendezéseelemek elrendezése
„„szabvány” szerinti forma, szabvány” szerinti forma, tapasztalat közvetlen megszerzésetapasztalat közvetlen megszerzése
könnyebben értelmezhető, könnyebben értelmezhető, struktúrája könnyebben azonosíthatóstruktúrája könnyebben azonosítható
könnyebben módosíthatókönnyebben módosítható
![Page 9: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/9.jpg)
9
Könnyen tanítható...Könnyen tanítható...(KLTE: Java + OO szemlélet +komponens-szemlélet)
Egy másodpercekben megadott időtartam alapján írjuk ki, hogy az hány óra, hány perc és hány másodperc!
Időtartam: getÓra():int
getPerc():intgetMásodperc():intgetÖsszesMásodperc():intsetÖsszesMásodperc(mp: int)
![Page 10: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/10.jpg)
10
abstract class Text abstract class Text private char[] text = new char[100]; private int used = 0;private int caret = 0;// maximum length of text int max() { return text.length; }// current length of textint length() { return used; }// read character at position poschar read(int pos) { return text[pos]; } // insert or append ch at position posvoid write(int pos, char ch) { for (int i=used; i>pos; i--) text[i] = text[i - 1]; used++; if (caretPos()>=pos) setCaret(caret+1); text[pos] = ch;}
// current caret positionint caretPos() { return caret; } // set caret positionvoid setCaret(int pos) { caret = pos; } // delete character at position posvoid delete(int pos) { used--; for (int i=pos; i<used; i++) //shift trailing text[i] = text[i + 1]; //characters left if (caretPos() >= pos) setCaret(caret - 1);} // insert character at current caret posvoid type(char ch) { int pos = caretPos(); write(pos, ch); setCaret(pos + 1); }// rubout char before current caret posvoid rubout() { int pos = caretPos(); delete(pos - 1); setCaret(pos - 1); }
![Page 11: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/11.jpg)
11
abstract class Text abstract class Text max(): intlength(): intread(pos:int)write(pos: int, ch: char) caretPos(): intsetCaret(pos:int)delete(pos:int)type(ch:char)rubout()
![Page 12: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/12.jpg)
12
abstract class Text abstract class Text private char[] text = new char[100]; private int used = 0;private int caret = 0;// maximum length of text int max() { return text.length; }// current length of textint length() { return used; }// read character at position poschar read(int pos) { return text[pos]; } // insert or append ch at position posvoid write(int pos, char ch) { for (int i=used; i>pos; i--) text[i] = text[i - 1]; used++; if(caretPos()>=pos) setCaret(caret+1); text[pos] = ch;} // current caret positionint caretPos() { return caret; }
private char[] character = new char[100]; private int length = 0;private int caretPos = 0;
int getMaximumLength() { return character.length;}int getLength() { return length; }
char getCharacter(int p) { return character[p];} void insertCharacter(int p, char c) { for (int i=length; i>p; i--) character[i]= character[i-1]; length++; if (getCaretPos()>=p) setCaretPos(caretPos+1); text[p] = ch;} int getCaretPos() { return caretPos; }
![Page 13: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/13.jpg)
13
abstract class Text abstract class Text // set caret positionvoid setCaret(int pos) { caret = pos; } // delete character at position posvoid delete(int pos) { used--; for (int i=pos; i<used; i++) text[i] = text[i + 1]; if(caretPos()>=pos) setCaret(caret-1);} //insert character at current caret posvoid type(char ch) { int pos = caretPos(); write(pos, ch); setCaret(pos + 1); }//rubout char before current caret posvoid rubout() { int pos = caretPos(); delete(pos - 1); setCaret(pos - 1); }
void setCaretPos(int pos) {caretPos = pos;}
void removeCharacter(int p) { length--; for (int i=p; i<length; i++) character[i] = character[i + 1]; if (getCaretPos()>=p) setCaretPos(caretPos-1);} void insertCharacter(char c) { insertCharacter(getCaretPos(), c); }
void ruboutCharacter() { setCaretPos(getCaretPos()-1); removeCharacter(getCaretPos()); }
![Page 14: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/14.jpg)
14
abstract class Text abstract class Text
max(): intlength(): intread(pos:int)write(pos: int, ch: char) caretPos(): intsetCaret(pos:int)delete(pos:int)type(ch:char)rubout()
getMaximumLength(): intgetLength(): intgetCharacter(pos:int): charinsertCharacter(pos:int, ch:char) getCaretPos(): int setCaretPos(pos:int) removeCharacter(pos:int) insertCharacter(ch:char)ruboutCharacter()
![Page 15: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/15.jpg)
15
abstract class Text abstract class Text
getMaximumLength(): intgetLength(): intgetCharacter(pos:int): charinsertCharacter(p:int, c:char) getCaretPos(): int setCaretPos(pos:int) removeCharacter(pos:int) insertCharacter(ch:char)ruboutCharacter()
getCaretPos(): int setCaretPos(pos:int) getMaximumLength(): intgetLength(): intsetLengthsetLength(l:int)(l:int)getCharacter(pos:int): chargetCharactergetCharacter(): char(): charsetCharactersetCharacter(pos:int, ch: char)(pos:int, ch: char)setCharactersetCharacter(ch: char)(ch: char)insertCharacter(pos:int, ch:char) insertCharacter(ch:char) removeCharacter(pos:int) removeCharacterremoveCharacter()()ruboutCharacter()
![Page 16: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/16.jpg)
16
TextText+caret position: int {rw} +maximum length: (...)+length: int+character: Buffer<100,char> {rw}
+get character(pos:int= caret position): char+insert character(pos:int= caret position, ch:char) +remove character(pos:int= caret position) +rubout character()
Buffer<n, element:T> +get element(position:int): T +set element(position :int, element: T) +insert element(position:int, element:T) +remove element(position :int)
![Page 17: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/17.jpg)
17
+caret position: int+character: Buffer<100,char, position=caret position> {rw}
+rubout character()
Buffer<n, element:T> +maximum length: (n) +length: int +get element(position: int): T +set element(position: int, element: T) +insert element(position: int, element:T) +remove element(position:int)
![Page 18: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/18.jpg)
18
UMLUML Unified Modeling LanguageUnified Modeling Language
szabványosszabványos objektumorientáltobjektumorientált vizuálisvizuális modellező nyelvmodellező nyelv
![Page 19: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/19.jpg)
19
UML komponens-elvű kiterjesztéseUML komponens-elvű kiterjesztése TulajdonságokTulajdonságok
/d: double // számított/d: double // számított x: double // lekérdezhető, de nem beállíthatóx: double // lekérdezhető, de nem beállítható y: doubley: double // lekérdezhető és beállítható // lekérdezhető és beállítható z: doublez: double // beállítható, de nem lekérdezhető // beállítható, de nem lekérdezhető
Időtartam+/óra: int+/perc: int+/másodperc: int+összesMásodperc: int
![Page 20: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/20.jpg)
20
+xx: double+xx: double
private double xx; // ha nem származtatottprivate double xx; // ha nem származtatottpublic double getXx() {return xx;} // ha olvashatópublic double getXx() {return xx;} // ha olvashatópublic void setXx(double xx_) {xx=xx_;} // ha írhatópublic void setXx(double xx_) {xx=xx_;} // ha írható
Téglalap+a: double+b: double+/kerület: double {2*(a+b)}+/terület: double {a*b}
![Page 21: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/21.jpg)
21
public class Téglalappublic class Téglalap
private double a; private double a; public double getA() { return a; }public double getA() { return a; } public void setA(double a_) { a=a_; } public void setA(double a_) { a=a_; } private double b; private double b; public double getB() { return b; }public double getB() { return b; } public void setB(double b_) { b=b_; }public void setB(double b_) { b=b_; } public double getKerület() { return 2*(a+b); }public double getKerület() { return 2*(a+b); } public double getTerület() { return a*b; }public double getTerület() { return a*b; }
![Page 22: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/22.jpg)
22
Kör+sugár: double+/kerület: double {2*sugár*}+/terület: double {sugár2*}
![Page 23: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/23.jpg)
23
TulajdonságokTulajdonságok
Könyv példány
+raktári szám: Int-státusz: Int+/kölcsönözhető?+/kölcsönzött?+/előjegyzett? +/polcon?+visszahozzák()
Könyv példány
-raktári szám: Int-státusz: Int-kölcsönözhető: Bool
+setKölcsönzött()+setElőjegyzett()+setPolcon()+visszahozzák()+isKölcsönzött(): Bool+isElőjegyzett(): Bool+isPolcon(): Bool+isKölcsönözhető(): Bool+getRktSzám(): Int
![Page 24: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/24.jpg)
24
Tárolt származtatott attribútumTárolt származtatott attribútum
+/size: Size {cached}+/size: Size {cached}
-size: Size-size: Size-validSize: Bool-validSize: Bool+computeSize(): Size +computeSize(): Size +invalidSize() { validSize=false; }+invalidSize() { validSize=false; }+getSize(): Size {+getSize(): Size { if(!validSize) { size=computeSize(); validSize=true; }if(!validSize) { size=computeSize(); validSize=true; } return size;return size; } }
![Page 25: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/25.jpg)
25
Asszociáció (1 és 0..1)Asszociáció (1 és 0..1)
-alkalmazó: Cég -- ha nem származtatott -alkalmazó: Cég -- ha nem származtatott +getAlkalmazó(): Cég -- ha olvasható+getAlkalmazó(): Cég -- ha olvasható+setAlkalmazó(alkalmazó_: Cég) -- ha írható+setAlkalmazó(alkalmazó_: Cég) -- ha írható
+hasAlkalmazó()? -- ha olvasható+hasAlkalmazó()? -- ha olvasható+removeAlkalmazó() -- ha törölhető+removeAlkalmazó() -- ha törölhető
Cég Személy*alkalmazottalkalmazóAlkalmazás
![Page 26: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/26.jpg)
26
Asszociáció ( * )Asszociáció ( * )
-alkalmazott :Set<Személy> -alkalmazott :Set<Személy> +hasAlkalmazott()?+hasAlkalmazott()?+hasAlkalmazott(alkalmazott_: Személy)?+hasAlkalmazott(alkalmazott_: Személy)?+everyAlkalmazott(): Every<Személy> +everyAlkalmazott(): Every<Személy> +addAlkalmazott(alkalmazott_: Személy)+addAlkalmazott(alkalmazott_: Személy)+removeAlkalmazott(alkalmazott_: Személy)+removeAlkalmazott(alkalmazott_: Személy)+removeAllAlkalmazott()+removeAllAlkalmazott()
Cég Személy*alkalmazottalkalmazóAlkalmazás
alkalmazott: Set< Személy>
![Page 27: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/27.jpg)
27
MinősítőMinősítő
könyv[ISBN: Int]: Könyvkönyv[ISBN: Int]: Könyv
+hasKönyv(ISBN: Int)? -- ha olvasható+hasKönyv(ISBN: Int)? -- ha olvasható+getKönyv(ISBN: Int): Könyv -- ha olvasható+getKönyv(ISBN: Int): Könyv -- ha olvasható+setKönyv(ISBN: Int, könyv_: Könyv) -- ha új felvihető+setKönyv(ISBN: Int, könyv_: Könyv) -- ha új felvihető+removeKönyv(ISBN: Int) +removeKönyv(ISBN: Int) -- ha törölhető -- ha törölhető+everyKönyvISBN(): Every<Int> -- ha olvasható+everyKönyvISBN(): Every<Int> -- ha olvasható
KönyvtárKönyv*
0ISBN: Code
![Page 28: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/28.jpg)
28
Strukturális terhelésStrukturális terhelés A generikus szerkezet csak lehetőségeket ad megA generikus szerkezet csak lehetőségeket ad meg
Automatikus választás a szerkezetek közülAutomatikus választás a szerkezetek közül A tényleges funkciók a használat („terhelés”) alapján A tényleges funkciók a használat („terhelés”) alapján
lesznek összeválogatvalesznek összeválogatva teszt/példateszt/példa
OptimalizálásOptimalizálás
Jövő („a konzerv felnyitása”):Jövő („a konzerv felnyitása”): Dinamikus terhelésDinamikus terhelés közvetlenül újrafelhasználható szaktudásközvetlenül újrafelhasználható szaktudás
![Page 29: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/29.jpg)
29
Komponens-elvű alkalmazásfejlesztésKomponens-elvű alkalmazásfejlesztés Komponens elv alkalmazása az analízisbenKomponens elv alkalmazása az analízisben
a használat előtérbe helyezésea használat előtérbe helyezése–használati esetekhasználati esetek– felhasználó követelményeifelhasználó követelményei– felhasználói felületekfelhasználói felületek
belső szerkezet felderítésebelső szerkezet felderítése–belső architektúrával kapcsolatos követelményekbelső architektúrával kapcsolatos követelmények–CRC kártyákCRC kártyák–komponensekkomponensek
RDDRDD
![Page 30: Komponens-elvű alkalmazásfejlesztés](https://reader035.vdocuments.pub/reader035/viewer/2022062816/568146cf550346895db40767/html5/thumbnails/30.jpg)
30
IrodalomIrodalom C. Szyperski.C. Szyperski. Component Software. Beyond Object-Component Software. Beyond Object-
oriented programming.oriented programming. Addison-Wesley.Addison-Wesley.(elméleti áttekintés, alapelvek, technológiák áttekintése)(elméleti áttekintés, alapelvek, technológiák áttekintése)
Vég Cs., dr. Juhász I.Vég Cs., dr. Juhász I. Java - Java - start!start! Logos 2000., 1999. Logos 2000., 1999. nov.nov.(alapfokú Java és programozás-tankönyv; OO és kompo-nens-elv (alapfokú Java és programozás-tankönyv; OO és kompo-nens-elv alapismeretei, vázlat vizuális jelölésekkel) alapismeretei, vázlat vizuális jelölésekkel)
Vég Cs. Vég Cs. Alkalmazásfejlesztés Alkalmazásfejlesztés a Unified Modeling Language szabványos a Unified Modeling Language szabványos jelöléseivel.jelöléseivel. Logos 2000., 1999. máj.Logos 2000., 1999. máj.(UML ismertetése, OO szemlélet, UML komponens-elvű (UML ismertetése, OO szemlélet, UML komponens-elvű kiterjesztése, RDD alkalmazásfejlesztési módszer)kiterjesztése, RDD alkalmazásfejlesztési módszer)
<www.logos2000.hu><www.logos2000.hu>