Objektum orientált programozás (Object Oriented Programming = OOP) Ajánlott irodalom: Angster Erzsébet: Az objektumorientált tervezés és programozás alapjai Dr. Kondorosi Károly, Dr. László Zoltán, Dr. Szirmay-Kalos László: Objektumorientált szoftverfejlesztés EKF Számítástudományi tanszék OOP_FOLIA_1-1 -
A szoftverkrízis: a szoftverfejlesztés válsága, miszerint egy hagyományos módszer már nem képes az igényeknek megfelelő, minőségi szoftver előállítására. Szoftver minőség Helyesség A szoftver helyes, ha az pontosan a feladat specifikációjában előírt feladatot látja el. Ez elsődleges minőségi követelmény. EKF Számítástudományi tanszék OOP_FOLIA_1-2 -
Hibatűrés A szoftver hibatűrő, ha az abnormális esetekben is a lehetőségekhez képest normálisan működik. A feladat specifikációja például általában nem taglalja a teendőket kevés memória esetére. Ez azonban nem jelentheti azt, hogy ha nincs elég memória, akkor a program minden figyelmeztetés nélkül egyszerűen abortál, félbehagyva az adatfelvitelt és egyéb fontos teendőket Karbantarthatóság, bővíthetőség Egy szoftver karbantartható, ha az könnyen javítható, illetve módosítható. Egy szoftver bővíthető, ha azon az Újabb felhasználói igények könnyen átvezethetők. Rosszul megtervezett program esetén előfordulhat, hogy a program egyik részén elvégzett változtatás követhetetlenül befolyásolja a program egyéb részeit. Csak a könnyen áttekinthető programot tudjuk könnyedén karbantartani, illetve továbbfejleszteni. EKF Számítástudományi tanszék OOP_FOLIA_1-3 -
Újrafelhasználhatóság Egy szoftver újrafelhasználható, ha az, vagy annak részei újabb szoftverekben hasznosíthatók. A fejlesztőknek sokszor kell olyan feladatot megoldaniuk, melyet már egyszer pontosan úgy, vagy hasonlóképpen megoldottak. Érthető, hogy ezeket a már jól bevált, alaposan tesztelt elemeket újra fel szeretnék használni annak érdekében, hogy az új program egyedi részeire koncentrálhassanak. Kompatibilitás Egy szoftver egy másik szoftverrel kompatíbilis, ha azok könnyedén összeépíthetők. Gondoljunk például a rengeteg File- és képformátumra az egyik szoftver csak akkor tudja használni a másik szoftver által előállított adatokat, ha az adatformátumok megfeleltethetők egymásnak. EKF Számítástudományi tanszék OOP_FOLIA_1-4 -
Felhasználóbarátság A szoftver felhasználóbarát, ha kinézete kellemes, használata kényelmes, egyértelmű, logikus, s minden lehetséges módon segíti a felhasználót. Hordozhatóság Egy szoftver hordozható, ha az könnyedén átvihető más hardver, illetve szoftver környezetbe. Hatékonyság A szoftver hatékony, ha az a rendelkezésre álló hardver és szoftver erőforrásokat maximálisan kihasználja, minimálisra csökkentve ezzel a szoftver által igénybe vett memóriát és időt. Ellenőrizhetőség Egy szoftver ellenőrizhető, ha a tesztelési adatok és eljárások könnyedén összeállíthatók. EKF Számítástudományi tanszék OOP_FOLIA_1-5 -
Integritás (sérthetetlenség) A szoftver sérthetetlen, ha a különböző rendszer hibák nem okoznak helyreállíthatatlan hibákat (adatokban, programokban, számítógépbe stb.). Szabványosság A szabvány valamely egyezmény eredményeképpen létrejött, nyilvánosan elérhető definíció. Egy szoftver szabványos, ha az működésében, kinézetében és dokumentálásában megfelel a szabványnak (például FI-re jön a help, a dialógusablakon OK gomb van, és a felhasználói leírás tartalmazza a meg biztonsági előírásokat). EKF Számítástudományi tanszék OOP_FOLIA_1-6 -
Moduláris programozás A modulokon belüli erős összetartás, a modulok között laza kapcsolat. A modulok szintaktikailag jól elkülöníthetőek Modulok közötti kapcsolatok száma minél kevesebb Kicsi interfésze legyen a moduloknak Az interfész legyen egyértelmű és jól definiált Minél nagyobb része legyen zárt és sérthetetlen EKF Számítástudományi tanszék OOP_FOLIA_1-7 -
Struktúrált programozás: Program = adat + algoritmus 60-as években Böhm és Jacopini sejtése: bármely algoritmus leírható az alábbi 3 vezérlési szerkezet véges sokszori alkalmazásával: szekvencia szelekció iteráció A fenti sejtést Mills bizonyította A legkisebb modul az eljárás Az eljárások adatokon dolgoznak, a zártság érdekében megpróbáljuk a globális adatokat minimalizálni. A lokális adatok elvesznek az eljárásból való kilépéskor, ezért az ilyen zártság nem minden esetben megoldás. EKF Számítástudományi tanszék OOP_FOLIA_1-8 -
Objetum orientált programozás: Alan Kay diplomamunkája 1969 Tervek és elképzelések SmallTalk programozási nyelv megtervezése Meglévő eljárásorientált nyelveket bővítik OOP lehetőségekkel (Pascal, C) Új, tisztán OO nyelveket terveznek (Java, C#) EKF Számítástudományi tanszék OOP_FOLIA_1-9 -
Nyelvek osztályozása: Hagyományos nyelvek (C) OOP támogató nyelvek (Pascal, Delphi, C++) Tisztán OOP nyelvek (C#, Java) EKF Számítástudományi tanszék OOP_FOLIA_1-10 -
A valós világ modellezése Absztrakció A valós világ végtelen és bonyolult. Minél mélyebbre megyünk az elemzésében, annál bonyolultabb. A lebontásban tehát valahol meg kell állnunk, illetve szelektálnunk kell. Az absztrakció egy szemléletmód, mellyel a valós világot leegyszerűsítjük úgy, hogy csak a lényegre koncentrálunk. Az egyes objektumoknak csak azon tulajdonságait vesszük figyelembe. melyek a cél elérése érdekében feltétlenül szükségesek. EKF Számítástudományi tanszék OOP_FOLIA_1-11 -
Megkülönböztetés Rengeteg objektum van körülöttünk, melyek mind-mind külön létező, konkrét, egyedi objektumok. Ezeket az objektumokat a számunkra lényeges tulajdonságok alapján próbáljuk megkülönböztetni (piros labda kék labda; én piros labdám Te piros labdád; élő virág, művirág). Előfordulhat persze, hogy két objektum között képtelenek vagyunk különbséget tenni (két hangya), de ez csak a mi gyengeségünk attól még a hangyák nem ugyanazok. EKF Számítástudományi tanszék OOP_FOLIA_1-12 -
Osztályozás Az ember az objektumokat automatikusan rendszerezi, s azokat a számára fontos tulajdonságok alapján kategóriákba. osztályokba sorolja: Ez az objektum ugyanolyan, mint az, tehát ugyanahhoz az osztályhoz tartoznak. (1.3. ábra). Az egy osztályba sorolható objektumokat az osztály példányainak szokás nevezni: Dorka és Csonti kutyák Dorka és Csonti a Kutya osztály példányai; Ricsi és Ropi papagáj ok Ricsi és Ropi a Papagáj osztály példányai. EKF Számítástudományi tanszék OOP_FOLIA_1-13 -
EKF Számítástudományi tanszék OOP_FOLIA_1-14 -
Általánosítás, specializálás Az ember az objektumok között állandóan keresi a hasonlatosságokat alapján bővebb, illetve szűkebb kategóriákat állít fel Ez az objektum olyan, mint az, de rá ez isjellemző... Ez az objektum egy... de... A kutya az egy háziállat, de olyan, melynek négy lába van.,. Az oroszlán az egy vadállat, de van sörénye, és nagyon aranyos. A kutya, a papagáj és az oroszlán állatok. Elza az egy állat. EKF Számítástudományi tanszék OOP_FOLIA_1-15 -
Kapcsolatok felépítése, részekre bontás Az ember az objektumok között állandóan keresi a kapcsolatokat: A mai ebéd: karfiol leves, rakott káposzta és sütemény. A sütemény alkotóelemei a következők: 50 dkg liszt, 10 tojás,... Jancsi és Juliska ismerik egymást. A kutyának van egy feje, egy teste, négy lába és egy farka. A kutya őrzi a házat. EKF Számítástudományi tanszék OOP_FOLIA_1-16 -
Egységbezárás (encapsulation): Az OOP alapelvei az adatok és a hozzájuk tartozó eljárásokat egyetlen egységben kezeljük (objektum-osztály) Az osztály mezői tárolják az információkat A metódusok kommunikálnak a külvilággal Az osztály változóit csak a metódusokon keresztül változtathatjuk meg A valós világ szemléletesebb leírása A feladatok elvégzésének hogyan -ja az objektum belügye. Az objektum belseje sérthetetlen. Az objektummal csak az interfészen keresztül lehet kommunikálni. EKF Számítástudományi tanszék OOP_FOLIA_1-17 -
Öröklés (inheritance) : az objektum-osztályok továbbfejlesztésének lehetősége. Ennek során a származtatott osztály örökli ősétől azok attribútumait, és metódusait, de ezeket bizonyos szabályok mellett újakkal egészítheti ki, és meg is változtathatja Az eredeti osztályt ősosztálynak nevezzük (szülő) Az új, továbbfejlesztett osztályt származtatott osztálynak (gyerek) Egy ősből több leszármaztatott osztályt is készíthetünk Egy származtatott osztálynak Legfeljebb egy szülője lehet (pl.: Pascal, Java, C#) -- öröklődési fa Több szülője is lehet (pl.: C++) -- öröklődési gráf Metódusok törzsét megváltoztathatjuk Mezők neveit, típusait általában nem változtathatjuk meg Új mezőkkel, és metódusokkal egészíthetjük ki az osztályt EKF Számítástudományi tanszék OOP_FOLIA_1-18 -
EKF Számítástudományi tanszék OOP_FOLIA_1-19 -
EKF Számítástudományi tanszék OOP_FOLIA_1-20 -
EKF Számítástudományi tanszék OOP_FOLIA_1-21 -
Sokalakúság (polymorphism) : Ugyanarra a kérelemre a különböző objektumok különbözőképpen reagálnak. a származtatás során az ős osztályok metódusai képesek legyenek az új átdefiniált metódusok használatára újraírás nélkül is Ezt virtuális metódusokon keresztül érhetjük el Egyes nyelvekben minden metódus virtuális (pl.: Java) A metódusoknál külön jelezni kell, melyik a virtuális (pl.: Delphi, C#, C++) EKF Számítástudományi tanszék OOP_FOLIA_1-22 -
Alapfogalmak Osztály: Egy felhasználó által készített típus, mely összetett adatszerkezet - elvileg tartalmazza az adott objektum adatait, és az azokat kezelő eljárásokat. Az objektum információt tárol, és kérésre feladatokat hajt végre. Az objektum felelős feladatainak korrekt elvégzéséért. Objektum: Egy változó, melynek típusa valamely objektumosztály, vagyis az osztály egy példánya. Objektumorientált program Egy OO program egymással kommunikáló objektumok összessége, melyben minden objektumnak megvan a jól meghatározott feladata. EKF Számítástudományi tanszék OOP_FOLIA_1-23 -
Üzenet/kérelem Az objektumokat üzeneteken keresztül kérjük meg különböző feladatok elvégzésére. EKF Számítástudományi tanszék OOP_FOLIA_1-24 -
Felelősség Minden objektumnak megvan a jól meghatározott feladata. Az objektum felelős feladatai elvégzéséért. Attribútum: Az osztály egy mezője, konkrét adattárolási képességű adattagja. Metódus: Olyan eljárás, mely része valamely objektumosztálynak, így az adott osztály attribútumaival végez valamilyen műveletet. Példányosítás: Egy objektumosztályból konkrét objektum készítése (objektum-változó deklarálása) EKF Számítástudományi tanszék OOP_FOLIA_1-25 -
Inicializálás: az objektum attribútumainak kezdőérték beállítása, általánosabban az objektum-példány alaphelyzetbe állítása Adatrejtés (data hiding) Az adatrejtés az egységbezárás alproblémája. Cél: Az objektum képes legyen adatokat tárolni Azokat a külvilág képes legyen lekérdezni és megváltoztatni De csak ellenőrzött módon! Az objektum belvilága -- a saját metódusai. Külvilág (minden más) Távoli külvilág: a példányokat készítő programmodulok (pl. főprogram) Közeli külvilág: az osztály leszármazottjai, s azok metódusai EKF Számítástudományi tanszék OOP_FOLIA_1-26 -
Attribútumokkal kapcsolatos PUBLIC: olyan attribútumok, melyek jellegüknél fogva nem igényelnek speciális szabályozást, azok megváltoztatása nem okoz, nem okozhat problémát az objektum működésében. PRIVATE: a külvilág nem férhet ezen attribútumukhoz hozzá. Ezek általában segédváltozók, segédmezők. PROTECTED: olyan attribútumok, melyekhez a távoli külvilág nem férhet hozzá (számára private), de a közeli külvilág, leszármazott osztályok metódusai hozzáférhetnek (számára public) Metódusokkal kapcsolatos A metódusokhoz való hozzáférést is a fentiek szerint osztályozzuk, de itt az adott metódus meghívhatóságát jelöli: EKF Számítástudományi tanszék OOP_FOLIA_1-27 -
PUBLIC: ezen metódusokat a távoli külvilág meghívhatja PRIVATE: ezen metódusokat a külvilág nem hívhatja meg, csak az adott osztály metódusai hívhatják meg PROTECTED: olyan metódusok, melyeket a távoli külvilág nem hívhat meg (számára private), de a közeli külvilág, a leszármazott osztályok metódusaiból meghívhatóak (számukra public) EKF Számítástudományi tanszék OOP_FOLIA_1-28 -