1 / 25

Gyurkó György

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.

lavada
Télécharger la présentation

Gyurkó György

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. Objektumorientáltelemzés és tervezés Bevezető példaMiért? – Mit? – Hogyan? Gyurkó György

  2. 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?

  3. Funkcionális megoldás Azonos funkció többféle adatstruktúrát is kezel. Adott műveletért semelyik adatstruktúra sem felelős. strB strA fu1 fu2 strC Nincs objektív rendező elv arra, hogy mely műveletek kerüljenek azonos funkcióba. strD fu3

  4. 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. strB strA Itt csak a totalitás képez integritást, a részek nem. fu1 fu2 strC 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.) strD fu3

  5. Objektumorientált megoldás strABC 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. fuA1 strA fuA2 fuA3 strB fuB1 fuABC1 fuC1 strC fuABC2 fuC2

  6. Mi határoz meg egy struktúrát (osztályt)? Az, hogy jellemzően önállóan, más struktúráktól függetlenül (is) előfordulhat. strABC fuA1 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. strA fuA2 fuA3 strB fuB1 fuABC1 fuC1 strC fuABC2 fuC2

  7. Mi tartozhat egy funkcióba? Csak olyan feladat, ami a gazdastruktúra önálló előfordulása esetén felmerülhet. strABC fuA1 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. strA fuA2 fuA3 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. strB fuB1 fuABC1 fuC1 strC fuABC2 fuC2

  8. 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.

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

  10. A program kimenete

  11. Példa: Összegfokozatos (nyomtatott) rendeléslista funkcionális megoldása PROGRAM 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;

  12. Az előbbi megoldás struktúra-funkció kapcsolatai inputVege rendeles azonosVevo kezdeti Teendok ujVevo Teendok egyRendeles Feldolgozas vevoSzakasz VegeTeendok befejezes nyomtatottLista

  13. 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;

  14. Az előbbi megoldás struktúra-funkció kapcsolatai inputKezdetiTeendo nyomtatKezdetiTeendo olvas vevoKezdete nyomtatUjSzakasz vevoFej nyomtaton Lista inputVege rendeles azonosVevo egySortKiir nyomtatandoTetel osszegez nyomtatZaroTeendo vevoOsszSor inputZaroTeendo

  15. Példa: Összegfokozatos rendeléslista objektumorientált megoldása I/1.Osztályok - öröklődés OSZTÁ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 {...}; }

  16. Példa: Összegfokozatos rendeléslista objektumorientált megoldása I/2.Osztályok - öröklődés OSZTÁ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){...}; }

  17. Példa: Összegfokozatos rendeléslista objektumorientált megoldása I/3.A futtatható osztály 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 (NEMrendeles.inputVege) rendeles.vevoKezdete; nyomtatonLista.nyomtatonUjSzakasz(rendeles.vevoFej); CIKLUS AMÍG((NEMrendeles.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; } } 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ó.

  18. Az I. megoldás osztálydiagramja RendelesNyomtatottListahoz NyomtatottLista Rendelésrekord mezői, file neve A nyomtatást/nyomtatót leíró adatok Egyszerű lista előállításához szükséges műveletek Egyszerű, a lapváltást kezelő műveletek. (Ez felelős a nyomtató környezetért.) RendelesOsszegFokozatosListahoz SzakaszoltLista Összegfokozat képzéséhez szükséges plusz mezők 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 Összegfokozat képzéséhez szükséges plusz műveletek Az általánosan megoldott részek OsszegFokozatosRendelesLista A listázó program.

  19. Egy általánosabb megoldás osztálydiagramja BemenetNyomtatottListahoz (Interfész osztály) RendelesTipus NyomtatottLista Csak a rendelésrekord mezőszerkezete Egyszerű lista előállításához szükséges absztrakt műveletek Az általánosan megoldott részek BemenetOsszegFokozatosListahoz (Interfész osztály) SzakaszoltLista Összegfokozat képzéséhez szükséges absztrakt műveletek 1 1 OsszegFokozatosLista RendelesOsszegFokozatosListahoz Összegfokozat képzéséhez szükséges plusz mezők Az általános megoldás program Az interfész osztályoktól örökölt műveletek implementációja (is). OsszegFokozatosRendelesLista Az összeszerelő és futtató program

  20. Az általános megoldás működése OsszegFokozatosRendelesLista (Összeszerelő és futtató alkalmazás) rendeles: RendelesOsszegFokozatosListahoz feldolgozo: OsszegFokozatosLista (Ez oldja meg általánosan a feladatot) BemenetOsszegFokozatosListához RendelesTipus

  21. 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 ; }

  22. 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 ; }

  23. Példa: Összegfokozatos rendeléslista objektumorientált megoldása II.Az általános megoldás felhasználása OSZTÁ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 {...}; }

  24. Példa: Összegfokozatos rendeléslista objektumorientált megoldása II.(folytatás)Az összeszerelő és futtató osztály OSZTÁLY OsszegFokozatosRendelesLista{ OSZTÁLYMŰVELET program { OBJEKTUM rendeles: RendelesOsszegFokozatosListahoz ; OBJEKTUM feldolgozo: OsszegFokozatosLista; rendeles = RendelesOsszegFokozatosListahoz.kezdetiTeendo; feldolgozo = OsszegFokozatosLista.listatKeszit(rendeles); } }

  25. Egy jogszabálykövető rendszer JogSzabalyKovetoRendszer (Összeszerelő és futtató alkalmazás) jogTudo: JogSzabalyFuggoResz vegrehajto: JogSzabalyFuggetlenResz (Ez oldja meg általánosan a feladatot) 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. Illesztő (interfész osztály) Ezt a részt nem kellmódosítani, semtesztelni, ha csak ajogszabályi környe-zet változott.

More Related