Upload
gage-macias
View
47
Download
0
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
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?
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?
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.
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.)
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.
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.
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.
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.
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
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
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;
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
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;
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
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 {...};}
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){...};}
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ó.
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
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
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)
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 ;}
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 ;}
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 {...};}
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); }}
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.