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ő nyelveket
eljárásorientált 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 -
Az OOP alapelvei Egységbezárás (encapsulation): • 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 -