25
1 Objektumorientált elemzés és tervezés – Bevezető példa 2009.09.0 1. Gyurkó György Objektumorientált elemzés és tervezés Bevezető példa Miért? – Mit? – Hogyan?

Gyurkó György

Embed Size (px)

DESCRIPTION

Objektumorientált elemzés és tervezés. Bevezető példa Miért? – Mit? – Hogyan?. Gyurkó György. Miért?. Miért (mikor) tervezzünk objektum-orientáltan? Miért éppen ilyen objektumokból (osztályokból) építünk fel egy alkalmazást, miért nem másokból?. Funkcionális megoldás. - PowerPoint PPT Presentation

Citation preview

Page 1: Gyurkó György

1Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Gyurkó György

Objektumorientáltelemzés és tervezés

Bevezető példaMiért? – Mit? – Hogyan?

Page 2: Gyurkó György

2Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Miért?• Miért (mikor) tervezzünk

objektum-orientáltan?

• Miért éppen ilyen objektumokból (osztályokból) építünk fel egy alkalmazást, miért nem másokból?

Page 3: Gyurkó György

3Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

strAstrB

strD

strCfu1 fu2

fu3

Funkcionális megoldásAzonos funkció többféle adatstruktúrát is kezel.

Adott műveletért semelyik adatstruktúra sem felelős.

Nincs objektív rendező elv arra, hogy mely műveletek kerüljenek azonos funkcióba.

Page 4: Gyurkó György

4Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

strAstrB

strD

strCfu1 fu2

fu3

Mi a gond?Az egyes struktúrákat még sok helyen jó lenne felhasználni, de az őket kezelő műveletek nélkül nem képeznek „önjáró” integritást.

Ezek a műveletek viszont hordozhatatlanná teszik a struktúrákat, mert akkor is feltételezik más struktúrák jelenlétét, amikor egy adott struktúrára csak magában volna szükség.

Itt csak a totalitás képez integritást, a részek nem.

Felesleges kötéseket képeztünk egymástól független komponensek között. (Pl. az alkalmazás minden részét jogszabályfüggővé tettük.)

Page 5: Gyurkó György

5Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Objektumorientált megoldás

strA

strB

strC

strABCfuA1

fuA2

fuC2

fuA3

fuB1

fuC1fuABC

1

fuABC2

Minden funkciónak gazdája valamilyen adatstruktúra (egy osztály).

Adott funkció csak a gazdastruktúrával rendelkező (adott osztályú) objektumot kezelhet közvetlenül.

Page 6: Gyurkó György

6Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

strA

strB

strC

strABCfuA1

fuA2

fuC2

fuA3

fuB1

fuC1fuABC

1

fuABC2

Mi határoz meg egy struktúrát (osztályt)?

Az strA, strB, strC egymástól függetlenül is előfordulhatnak.

Amikor speciálisan éppen „találkoznak”, azt egy őket tartalmazó összetettebb struktúra az strABC képviseli.

Az, hogy jellemzően önállóan, más struktúráktól függetlenül (is) előfordulhat.

Page 7: Gyurkó György

7Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

strA

strB

strC

strABCfuA1

fuA2

fuC2

fuA3

fuB1

fuC1fuABC

1

fuABC2

Mi tartozhat egy funkcióba?

A fuA1 csak a magában álló strA struktúrán végezhet műveleteket, csak az strA önálló előfordulásával kapcsolatos problémákat oldhat meg.

Csak olyan feladat, ami a gazdastruktúra önálló előfordulása esetén felmerülhet.

Az strA, strB, strC struktúrák strABC-beli együttműködésével kapcsolatos feladatok megoldása az strABC hatásköre. Erre szolgáló műveleteket a fuABC1 és a fuABC2 tartalmazza.

Page 8: Gyurkó György

8Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Probléma nem megfelelő szinten való kezelése

• A szükségesnél alacsonyabb szinten kezelt probléma: amikor a kompozícióra tartozó feladatot valamelyik komponenssel (komponensekkel) oldatunk meg. Következmény: romlik az újrafelhasználhatóság.

• A szükségesnél magasabb szinten kezelt probléma: amikor valamely komponens(ek)re tartozó feladatot a kompozícióval oldatunk meg. Következmény: romlanak a fejlesztési minőségek, úgy mint az elemezhetőség, a szilárdság (= változtathatóság + stabilitás), tesztelhetőség.

Page 9: Gyurkó György

9Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Vevőkód Vevőnév Cikkszám Érték3200011 AAAAAAAAAA 56400 2380003200011 AAAAAAAAAA 23900 20003200011 AAAAAAAAAA 60100 1700003911111 BBBBBBBBBBBB 10601 605003911111 BBBBBBBBBBBB 10438 1011

… … … …3911111 BBBBBBBBBBBB 70000 100006700111 CCCCCCCC 71110 50006700111 CCCCCCCC 56400 100000

...

Feladat: Összegfokozatos (nyomtatott) rendeléslista - A program bemenete

Page 10: Gyurkó György

10Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

RENDELÉS LISTA Lapszám: 1

Vevőkód Vevőnév Cikk Érték

3200011 AAAAAAAAAA 56400 238000 23900 2000 60100 170000 Összesen: 410000

3911111 BBBBBBBBBBBB 10601 60500 10438 1011...____________________________________________

RENDELÉS LISTA Lapszám: 2

Vevőkód Vevőnév Cikk Érték3911111 BBBBBBBBBBBB 70000 10000 Összesen: 999999999

6700111 CCCCCCCC 71110 5000 56400 100000...

Lapfejcím sora

Lapfejléc

Vevőfej sor(Szakaszfej sor)

Lapdobás

Ha a lapdobás félbeszakít egy vevő-szakaszt, akkor a következő lapon aszakaszfejsort meg kell ismételni.

A program kimenete

Page 11: Gyurkó György

11Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Példa: Összegfokozatos (nyomtatott) rendeléslista funkcionális megoldásaPROGRAM oszegFokozatosRendelesLista; STRUKTÚRA rendeles: // A rendelések adatai; STRUKTÚRA nyomtatonLista: // A nyomtatást leíró adatok; Eljárásdefiníciók ... ... kezdetiTeendok; CIKLUS AMÍG (NEM inputVege) ujVevoTeendok; CIKLUS AMÍG ((NEM inputVege) ÉS azonosVevo) egyRendelesFeldolgozas; CIKLUS VÉGE; vevoSzakaszVegeTeendok; CIKLUS VÉGE; befejezés;PROGRAM VÉGE;

Page 12: Gyurkó György

12Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Az előbbi megoldás struktúra-funkció kapcsolatai

rendeles

nyomtatottLista

kezdeti Teendok

ujVevo Teendok

egyRendeles

Feldolgozas

vevoSzakasz VegeTeendok

befejezes

inputVege

azonosVevo

Page 13: Gyurkó György

13Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Példa: Összegfokozatos rendeléslista adatorientált megoldása

PROGRAM oszegFokozatosRendelesLista; STRUKTÚRA rendeles: // A rendelések adatai; STRUKTÚRA nyomtatonLista: // A nyomtatást leíró adatok; ... inputKezdetiTeendo; nyomtatKezdetiTeendo(lapFejCimbe, fejLecbe, sorHossz); olvas; CIKLUS AMÍG (NEM inputVege) vevoKezdete; nyomtatonUjSzakasz(vevoFej); CIKLUS AMÍG ((NEM inputVege) ÉS azonosVevo) egySortKiIr(nyomtatandoTetel); osszegez; olvas; CIKLUS VÉGE; egySortKiIr(vevoOsszSor); CIKLUS VÉGE; nyomtatZaroTeendo; inputZaroTeendo;PROGRAM VÉGE;

Page 14: Gyurkó György

14Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Az előbbi megoldás struktúra-funkció kapcsolatai

rendelesnyomtaton

Lista

inputKezdetiTeendo olvas

vevoKezdete

vevoFej

inputVege

azonosVevo

nyomtatandoTetel

osszegez

vevoOsszSorinputZaroTeendo

nyomtatKezdetiTeendo

nyomtatZaroTeendo

nyomtatUjSzakasz

egySortKiir

Page 15: Gyurkó György

15Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Példa: Összegfokozatos rendeléslista objektumorientált megoldása I/1.

Osztályok - öröklődésOSZTÁLY RendelesNyomtatottListahoz { // Szerkezete: vevoKod, vevoNev, cikkSzam, ertek, ... FELÉPÍTŐ MŰVELET kezdetiTeendo {...}; MŰVELET lapFejCimbe: szoveg {...}; MŰVELET fejLecbe : szoveg {...}; MŰVELET sorHossz : szám {...}; MŰVELET olvas {...}; MŰVELET inputVege: logikai {...}; MŰVELET nyomtatandoTetel: szoveg {...}; MŰVELET inputZaroTeendo {...};}OSZTÁLY RendelesOsszegFokozatosListahoz SZÜLŐJE RendelesNyomtatottListahoz { // Szerkezete: elozoVevoKod, vevoOssz, ... FELÉPÍTŐ MŰVELET kezdetiTeendo {...}; MŰVELET vevoKezdete {...}; MŰVELET vevoFej : szoveg {...}; MŰVELET azonosVevo : logikai {...}; MŰVELET osszegez {...}; MŰVELET vevoOsszSor : szoveg {...};}

Page 16: Gyurkó György

16Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Példa: Összegfokozatos rendeléslista objektumorientált megoldása I/2.

Osztályok - öröklődésOSZTÁLY NyomtatottLista { // Szerkezete: laponMaxSor, lapSzamlalo, sorHossz, sorSzamlalo, lapFejCim, fejLec, ... FELÉPÍTŐ MŰVELET kezdetiTeendo(laFeCi: szöveg, feLe: szöveg, soHo: szám){...}; MŰVELET egySortKiIr(szoveg: szöveg){...}; MŰVELET nyomtatZaroTeendo {...};}

OSZTÁLY SzakaszoltLista SZÜLŐJE NyomtatottLista { // Szerkezete: szakaszFej,... FELÉPÍTŐ MŰVELET kezdetiTeendo(laFeCi: szöveg, feLe: szöveg, soHo: szám){...}; MŰVELET nyomtatonUjSzakasz(szoveg: szöveg){...}; MŰVELET egySortKiIr(szoveg: szöveg){...};}

Page 17: Gyurkó György

17Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

OSZTÁLY OsszegFokozatosRendelesLista { OSZTÁLYMŰVELET program { OBJEKTUM rendeles: RendelesOsszegFokozatosListahoz ; OBJEKTUM nyomtatonLista: SzakaszoltLista ; rendeles = RendelesOsszegFokozatosListahoz.kezdetiTeendo; nyomtatonLista = SzakaszoltLista.kezdetiTeendo( rendeles.lapFejCimbe,rendeles.fejLecbe,rendeles.sorHossz); rendeles.olvas; CIKLUS AMÍG (NEM rendeles.inputVege) rendeles.vevoKezdete; nyomtatonLista.nyomtatonUjSzakasz(rendeles.vevoFej); CIKLUS AMÍG((NEM rendeles.inputVege) ÉS rendeles.azonosVevo) nyomtatonLista.egySortKiIr(rendeles.nyomtatandoTetel); rendeles.osszegez; rendeles.olvas; CIKLUS VÉGE; nyomtatonLista.egySortKiIr(rendeles.vevoOsszSor); CIKLUS VÉGE; nyomtatonLista.nyomtatZaroTeendo; rendeles.inputZaroTeendo; }}

Példa: Összegfokozatos rendeléslista objektumorientált megoldása I/3.

A futtatható osztály

Már csak az aláhúzott részek helyett kell valami mást kitalálni, hogy a megoldás ne csak a rendelésekre legyen jó.

Page 18: Gyurkó György

18Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Az I. megoldás osztálydiagramja

RendelesNyomtatottListahoz

Rendelésrekord mezői, file neve

Egyszerű lista előállításához szükséges műveletek

RendelesOsszegFokozatosListahoz

Összegfokozat képzéséhez szükséges plusz mezők

Összegfokozat képzéséhez szükséges plusz műveletek

NyomtatottLista

A nyomtatást/nyomtatót leíró adatok

Egyszerű, a lapváltást kezelő műveletek. (Ez felelős a nyomtató környezetért.)

SzakaszoltLista

Az aktuális szakaszt jellemző plusz mezők (tartalmukat a klienstől kapják.)Összegfokozat képzéséhez szükséges plusz műveletek

OsszegFokozatosRendelesLista

A listázó program.

Az általánosan megoldott részek

Page 19: Gyurkó György

19Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Egy általánosabb megoldás osztálydiagramja

RendelesTipus

Csak a rendelésrekord mezőszerkezete

RendelesOsszegFokozatosListahoz

Összegfokozat képzéséhez szükséges plusz mezők

Az interfész osztályoktól örökölt műveletek implementációja (is).

NyomtatottLista

SzakaszoltLista

OsszegFokozatosRendelesLista

Az összeszerelő és futtató program

BemenetNyomtatottListahoz (Interfész osztály)

Egyszerű lista előállításához szükséges absztrakt műveletek

BemenetOsszegFokozatosListahoz (Interfész osztály)

Összegfokozat képzéséhez szükséges absztrakt műveletek

OsszegFokozatosLista

Az általános megoldás program

1 1

Az általánosan megoldott részek

Page 20: Gyurkó György

20Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Az általános megoldás működése

Bem

enetO

sszegFo

koza

tosLis

tához

RendelesTipus

rendeles: RendelesOsszegFokozatosListahoz

feldolgozo: OsszegFokozatosLista

(Ez oldja meg általánosan a feladatot)

OsszegFokozatosRendelesLista(Összeszerelő és futtató alkalmazás)

Page 21: Gyurkó György

21Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Példa: Összegfokozatos lista általános megoldásaInterfész osztályok (szerepek)

INTERFÉSZ OSZTÁLY BemenetNyomtatottListahoz { MŰVELET lapFejCimbe: szoveg ; MŰVELET fejLecbe : szoveg ; MŰVELET sorHossz : szám ; MŰVELET olvas ; MŰVELET inputVege: logikai ; MŰVELET nyomtatandoTetel: szoveg ; MŰVELET inputZaroTeendo ;}INTERFÉSZ OSZTÁLY BemenetOsszegFokozatosListahoz SZÜLŐJE BemenetNyomtatottListahoz { MŰVELET szakaszKezdete ; MŰVELET szakaszFej : szoveg ; MŰVELET azonosSzakasz : logikai ; MŰVELET osszegez ; MŰVELET szakaszOsszSor : szoveg ;}

Page 22: Gyurkó György

22Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Példa: Összegfokozatos lista általános megoldása (folytatás)Interfész osztályok (szerepek)

INTERFÉSZ OSZTÁLY BemenetNyomtatottListahoz { MŰVELET lapFejCimbe: szoveg ; MŰVELET fejLecbe : szoveg ; MŰVELET sorHossz : szám ; MŰVELET olvas ; MŰVELET inputVege: logikai ; MŰVELET nyomtatandoTetel: szoveg ; MŰVELET inputZaroTeendo ;}INTERFÉSZ OSZTÁLY BemenetOsszegFokozatosListahoz SZÜLŐJE BemenetNyomtatottListahoz { MŰVELET szakaszKezdete ; MŰVELET szakaszFej : szoveg ; MŰVELET azonosSzakasz : logikai ; MŰVELET osszegez ; MŰVELET szakaszOsszSor : szoveg ;}

Page 23: Gyurkó György

23Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Példa: Összegfokozatos rendeléslista objektumorientált megoldása II.

Az általános megoldás felhasználásaOSZTÁLY RendelesTipus { // Szerkezete: vevoKod, vevoNev, cikkSzam, ertek, ...}OSZTÁLY RendelesOsszegFokozatosListahoz SZÜLŐJE RendelesTipus SZEREPE BemenetOsszegFokozatosListahoz { // Szerkezete: elozoVevoKod, vevoOssz, ... FELÉPÍTŐ MŰVELET kezdetiTeendo {...}; MŰVELET lapFejCimbe: szoveg {...}; MŰVELET fejLecbe : szoveg {...}; MŰVELET sorHossz : szám {...}; MŰVELET olvas {...}; MŰVELET inputVege: logikai {...}; MŰVELET nyomtatandoTetel: szoveg {...}; MŰVELET inputZaroTeendo {...}; MŰVELET szakaszKezdete {...}; MŰVELET szakaszFej : szoveg {...}; MŰVELET azonosSzakasz : logikai {...}; MŰVELET osszegez {...}; MŰVELET szakaszOsszSor : szoveg {...};}

Page 24: Gyurkó György

24Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Példa: Összegfokozatos rendeléslista objektumorientált

megoldása II.

(folytatás)

Az összeszerelő és futtató osztályOSZTÁLY OsszegFokozatosRendelesLista{ OSZTÁLYMŰVELET program { OBJEKTUM rendeles: RendelesOsszegFokozatosListahoz ; OBJEKTUM feldolgozo: OsszegFokozatosLista; rendeles = RendelesOsszegFokozatosListahoz.kezdetiTeendo; feldolgozo = OsszegFokozatosLista.listatKeszit(rendeles); }}

Page 25: Gyurkó György

25Objektumorientált elemzés és tervezés – Bevezető példa2009.09.01.

Egy jogszabálykövető rendszer

Illesztő

(inte

rfész o

sztály

)

jogTudo: JogSzabalyFuggoResz vegrehajto:

JogSzabalyFuggetlenResz

(Ez oldja meg általánosan a feladatot)

JogSzabalyKovetoRendszer(Összeszerelő és futtató alkalmazás)

Ezt a részt módosítani kell, valahányszor vál-toznak a vonatkozó jog-szabályok.

Az interfész specifiká-ciója nem módosul, csak az implementációja.

Ezt a részt nem kellmódosítani, semtesztelni, ha csak ajogszabályi környe-zet változott.