You are on page 1of 28

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 -


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 -

You might also like