1 / 30

Komponens-elvű alkalmazásfejlesztés

Komponens-elvű alkalmazásfejlesztés. Vég Csaba <vega@dragon.klte.hu>. 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,

sbelinda
Download Presentation

Komponens-elvű alkalmazásfejlesztés

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Komponens-elvű alkalmazásfejlesztés Vég Csaba<vega@dragon.klte.hu> KLTE

  2. A kezdetek • ‘60-as évek végeszoftver-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, • tervezési és implementációs mód

  3. OO fejlesztés • OO előnyök: • flexibilitás • áttekinthetőség • módosíthatóság • OO fejlesztés kockázata: • nagyobb szaktudás • kevesebb tapasztalat • nincs elméleti háttere

  4. OO vs. components • Sikeres OO fejlesztés: • komponens-elv alkalmazása • „Object orientation has failed but component software is succeeding.” (Udell, ‘94) • sw. komponens a rendszer izolálható része • Objektum: állapot és viselkedés egységbezárása, polimorfizmus és öröklés • nincs: függetlenség (independence) és későikompozíció (late composition) • “The OO techniques are too flexible, they allow too much dependencies”

  5. „de működik...” • OO fejlesztés: • példák • „kevés elmélet sok gyakorlattal” • Stratégia: architektúrális és tervezési tapasztalat • Kipróbált tervezési módszerek újrafelhasználása • Komponens: „szaktudás-konzerv”

  6. Sw. komponens “A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A sw. component can be deployed independently and is subject to compositionby third parties”(‘96 ECOOP workshop) Nomen est omen: “components are for composition”

  7. Szempontok • Technológiai szempont: • late integration • komponens-architektúra (wiring) • Komponens-elv: • a használat előtérbe helyeződése(funkcionális-csomópontok) • az elemek funkciókon keresztül kezelhetők (nem pedig közvetlenül)

  8. Komponens-elv (absztrakció) • Komponens-elv a tervezésben és programozásban • adott (nem tetszőleges) módon programozunk • attribútumok helyett tulajdonságok (property)(olvasó/író metódusok) • elnevezések • elemek elrendezése • „szabvány” szerinti forma, tapasztalat közvetlen megszerzése • könnyebben értelmezhető, struktúrája könnyebben azonosítható • könnyebben módosítható

  9. 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():int getMásodperc():int getÖsszesMásodperc():int setÖsszesMásodperc(mp: int)

  10. 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 text int length() { return used; } // read character at position pos char read(int pos) { return text[pos]; } // insert or append ch at position pos void 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 position int caretPos() { return caret; } // set caret position void setCaret(int pos) { caret = pos; } // delete character at position pos void 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 pos void type(char ch) { int pos = caretPos(); write(pos, ch); setCaret(pos + 1); } // rubout char before current caret pos void rubout() { int pos = caretPos(); delete(pos - 1); setCaret(pos - 1); }

  11. abstract class Text max(): int length(): int read(pos:int) write(pos: int, ch: char) caretPos(): int setCaret(pos:int) delete(pos:int) type(ch:char) rubout()

  12. 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 text int length() { return used; } // read character at position pos char read(int pos) { return text[pos]; } // insert or append ch at position pos void 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 position int 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; }

  13. abstract class Text // set caret position void setCaret(int pos) { caret = pos; } // delete character at position pos void 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 pos void type(char ch) { int pos = caretPos(); write(pos, ch); setCaret(pos + 1); } //rubout char before current caret pos void 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()); }

  14. abstract class Text max(): int length(): int read(pos:int) write(pos: int, ch: char) caretPos(): int setCaret(pos:int) delete(pos:int) type(ch:char) rubout() getMaximumLength(): int getLength(): int getCharacter(pos:int): char insertCharacter(pos:int, ch:char) getCaretPos(): int setCaretPos(pos:int) removeCharacter(pos:int) insertCharacter(ch:char) ruboutCharacter()

  15. abstract class Text getMaximumLength(): int getLength(): int getCharacter(pos:int): char insertCharacter(p:int, c:char) getCaretPos(): int setCaretPos(pos:int) removeCharacter(pos:int) insertCharacter(ch:char) ruboutCharacter() getCaretPos(): int setCaretPos(pos:int) getMaximumLength(): int getLength(): int setLength(l:int) getCharacter(pos:int): char getCharacter(): char setCharacter(pos:int, ch: char) setCharacter(ch: char) insertCharacter(pos:int, ch:char) insertCharacter(ch:char) removeCharacter(pos:int) removeCharacter() ruboutCharacter()

  16. Text +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)

  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)

  18. UML • Unified Modeling Language • szabványos • objektumorientált • vizuális • modellező nyelv

  19. UML komponens-elvű kiterjesztése • Tulajdonságok • /d: double // számított • x: double // lekérdezhető, de nem beállítható • y: double // lekérdezhető és beállítható • z: double // beállítható, de nem lekérdezhető

  20. +xx: double private double xx; // ha nem származtatott public double getXx() {return xx;} // ha olvasható public void setXx(double xx_) {xx=xx_;} // ha írható

  21. public class Téglalap private double a; public double getA() { return a; } public void setA(double a_) { a=a_; } private double b; public double getB() { return b; } public void setB(double b_) { b=b_; } public double getKerület() { return 2*(a+b); } public double getTerület() { return a*b; }

  22. Tulajdonságok

  23. Tárolt származtatott attribútum +/size: Size {cached} -size: Size -validSize: Bool +computeSize(): Size +invalidSize() { validSize=false; } +getSize(): Size { if(!validSize) { size=computeSize(); validSize=true; } return size; }

  24. Asszociáció (1 és 0..1) -alkalmazó: Cég -- ha nem származtatott +getAlkalmazó(): Cég -- ha olvasható +setAlkalmazó(alkalmazó_: Cég) -- ha írható +hasAlkalmazó()? -- ha olvasható +removeAlkalmazó() -- ha törölhető

  25. Asszociáció ( * ) -alkalmazott :Set<Személy> +hasAlkalmazott()? +hasAlkalmazott(alkalmazott_: Személy)? +everyAlkalmazott(): Every<Személy> +addAlkalmazott(alkalmazott_: Személy) +removeAlkalmazott(alkalmazott_: Személy) +removeAllAlkalmazott() alkalmazott: Set< Személy>

  26. Minősítő könyv[ISBN: Int]: Könyv +hasKönyv(ISBN: Int)? -- ha olvasható +getKönyv(ISBN: Int): Könyv -- ha olvasható +setKönyv(ISBN: Int, könyv_: Könyv) -- ha új felvihető +removeKönyv(ISBN: Int) -- ha törölhető +everyKönyvISBN(): Every<Int> -- ha olvasható

  27. Strukturális terhelés • A generikus szerkezet csak lehetőségeket ad meg • Automatikus választás a szerkezetek közül • A tényleges funkciók a használat („terhelés”) alapján lesznek összeválogatva • teszt/példa • Optimalizálás • Jövő („a konzerv felnyitása”): • Dinamikus terhelés • közvetlenül újrafelhasználható szaktudás

  28. Komponens-elvű alkalmazásfejlesztés • Komponens elv alkalmazása az analízisben • a használat előtérbe helyezése • használati esetek • felhasználó követelményei • felhasználói felületek • belső szerkezet felderítése • belső architektúrával kapcsolatos követelmények • CRC kártyák • komponensek • RDD

  29. Irodalom • C. Szyperski.Component Software. Beyond Object-oriented programming.Addison-Wesley.(elméleti áttekintés, alapelvek, technológiák áttekintése) • Vég Cs., dr. Juhász I.Java - start!Logos 2000., 1999. nov.(alapfokú Java és programozás-tankönyv; OO és kompo-nens-elv alapismeretei, vázlat vizuális jelölésekkel) • Vég Cs. Alkalmazásfejlesztés a Unified Modeling Language szabványos jelöléseivel.Logos 2000., 1999. máj.(UML ismertetése, OO szemlélet, UML komponens-elvű kiterjesztése, RDD alkalmazásfejlesztési módszer) <www.logos2000.hu>

More Related