28
EKF – Számítástudományi tanszék OOP_FOLIA_1 - 1 - 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

Objektum orientált programozás (Object Oriented ...szikszai/oop/folia.pdf · Objektum orientált programozás ... • Egyes nyelvekben minden metódus virtuális (pl.: Java) •

  • Upload
    lamtram

  • View
    228

  • Download
    4

Embed Size (px)

Citation preview

EKF – Számítástudományi tanszék OOP_FOLIA_1 - 1 -

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

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 - 3 -

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 - 4 -

Ú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 - 5 -

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 - 6 -

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

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

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 - 9 -

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 - 10 -

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 - 11 -

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 - 12 -

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

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 - 14 -

EKF – Számítástudományi tanszék OOP_FOLIA_1 - 15 -

Á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 - 16 -

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 - 17 -

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 - 18 -

Ö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 - 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 -

EKF – Számítástudományi tanszék OOP_FOLIA_1 - 22 -

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 - 23 -

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 - 24 -

Ü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 - 25 -

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 - 26 -

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 - 27 -

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 - 28 -

• 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)