komponens elv alkalmaz sfejleszt s n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Komponens-elvű alkalmazásfejlesztés PowerPoint Presentation
Download Presentation
Komponens-elvű alkalmazásfejlesztés

Loading in 2 Seconds...

play fullscreen
1 / 30

Komponens-elvű alkalmazásfejlesztés - PowerPoint PPT Presentation


  • 67 Views
  • Uploaded on

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,

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Komponens-elvű alkalmazásfejlesztés' - hye


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
komponens elv alkalmaz sfejleszt s

Komponens-elvű alkalmazásfejlesztés

Vég Csaba<vega@dragon.klte.hu>

KLTE

a kezdetek
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
oo fejleszt s
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
oo vs components
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”
de m k dik
„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”
sw komponens
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”

szempontok
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)
komponens elv absztrakci
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ó
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():int

getMásodperc():int

getÖsszesMásodperc():int

setÖsszesMásodperc(mp: int)

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 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);

}

abstract class text1
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()

abstract class text2
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; }

abstract class text3
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());

}

abstract class text4
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()

abstract class text5
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()

slide16
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)

slide17
+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)

slide18
UML
  • Unified Modeling Language
    • szabványos
    • objektumorientált
    • vizuális
    • modellező nyelv
uml komponens elv kiterjeszt se
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ő
slide20
+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ó

public class t glalap
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; }

t rolt sz rmaztatott attrib tum
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;

}

asszoci ci 1 s 0 1
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ő

asszoci ci
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>

min s t
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ó

struktur lis terhel s
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
komponens elv alkalmaz sfejleszt s1
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
irodalom
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>