Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Az objektum orientált programozás alapjai
2
Előzmények: Monolitikus programozás:
A 60-as években a számítógépek elterjedésével megnőtt az igény a programok gyors fejlesztése iránt. Egy programot általában egy ember írt meg, ezért a programozási idő csökkentése miatt nem készítettek használható dokumentációt. A fő probléma: ezeknek a programoknak nem volt átlátható a szerkezete. Kialakult a szoftverkrízis, a programozók nem tudták kielégíteni az igényeket, sem mennyiségben, sem minőségben. Az első időkben problémát jelentett, hogy ilyen programozási stílushoz nem voltak megfelelő eszközök. A Fortran, a PL/I nem biztosított megfelelő lelhetőségeket.
3
Moduláris programozás:
Eljárások, függvények lokális változók megjelenése Részproblémákra lehet osztani a programot. A részproblémákat még apróbb részproblémákra kell osztani, míg végül elérünk egy olyan szintet, amelyen a probléma megoldása már könnyen kódolható Több részproblémán több ember is dolgozhat Egy új feladat a meglévő modulok új kombinációjával megoldható Könnyebbé válik a javítás, módosítás
4
Strukturált programozás
Mills bebizonyítja, hogy minden program felépíthető a 3 vezérlési szerkezet felhasználásával: Szekvencia Szelekció Iteráció A feltétel nélküli vezérlésátadás, a GOTO nem szerepel benne! Így jól áttekinthető, könnyen nyomon követhető programot tudunk írni Wirth a strukturált programozás lekövetésére hozza létre a Pascal-t.
5
Objektumorientált programozás -- OOP
1972-ben Alan Kay megtervezi a SmallTalk programozási nyelvet, amely az első és máig is létező objektumorientált programozási nyelv napjainkban is készülnek újabb és újabb változatai
6
Objektumorientált programozási nyelvek:
1980-as évektől az OOP az aktuális programozási filozófia. Több nyelv is megteremtette a lehetőséget az objektumorientált programozásra. Azonban el kell különíteni a tisztán OOP nyelveket azoktól, amelyekben a szokásos eljárásorientált programozás az alapvető, az objektumorientált programozás csak egy új eszköz, egy lehetőség, amit az alapdolgokon felül lehet használni. Néhány tisztán OOP nyelv: Smalltalk Eiffel
7
Nyelvek OOP eszközökkel kiegészítve:
C++ Turbo Pascal Object Pascal OOP Cobol Objective PL/1 Java Objektumorientált fejlesztőeszközök Delphi VisualAge Visual C++ CLOS JBuilder
8
Az OOP fő fogalmai: Egységbezárás Osztály, objektum Adatrejtés
Öröklődés Többalakúság Korai kötés, késői kötés
9
Az egységbezárás (encapsulation):
Metódusok: Az objektum orientált programozásban az eljárásokat és függvényeket összefoglaló néven metódusoknak nevezzük. Az adatokat, és a hozzájuk tartozó metódusokat egy egységként kezeljük. Ezek együtt képeznek egy objektumot. Egy objektumnak vannak attribútumai: adatelemekből áll, ezek az adatelemek valamilyen szerkezetet alkotnak és meghatározzák az objektum pillanatnyi állapotát (pl: egy ablak mérete, színe), és az objektumnak vannak metódusai, amelyek műveleteket tudnak végezni az objektum adatain (pl.: kattintás egy gombon).
10
Osztály, objektum (class, object):
Az azonos attribútumokkal és metódusokkal rendelkező objektumok együttese az osztály. A programozás során nem az objektumokat (objektum példányokat) hozzuk létre először, hanem az osztályokat definiáljuk, a meglévő osztályokból hozzuk létre az objektumpéldányokat. Tehát az adatok és a metódusok elsődlegesen az osztályhoz kötődnek. Amikor definiálunk egy osztályt, akkor megmondjuk, hogy annak az osztálynak milyen változói lesznek, és ezeket a változókat milyen metódusok kezelik.
11
Ezek után létrehozhatunk ebből az osztályból egy vagy több objektumot (példányt),
ezek mindegyike külön-külön tartalmazni fogja az osztályban deklarált adatszerkezetet és a hozzájuk tartozó metódusokat. Hasonló ehhez a Pascalban a típusdeklaráció és a változódeklaráció. Az osztály feleltethető meg a típusnak, a példány pedig a változónak.
12
Az adatrejtés: A metódusok implementációs része nem látszik kívülről, csak a specifikáció. Sőt, létezhetnek olyan metódusok is, amelyek egyáltalán nem látszódnak kívülről. Az adatok és metódusok lehetnek publikusak- ilyenor egy másik objektumból is tudjuk ezeket kezelni - , vagy lokálisak - ilyenkor csak az adott objektumon belül tudjuk őket elérni. Az utóbbiak el vannak rejtve a külvilág elől.
13
Az öröklődés (inheritance):
Egy definiált osztályból származtathatok egy másik osztályt úgy, hogy a leszármazott osztályban (alosztály) ugyanúgy megtalálható az ősosztály (szülőosztály, szuperosztály) összes attribútuma és metódusa. Az így létrehozott alosztály szintén lehet újabb osztálynak az őse. Örökléssel kapcsolatot teremtünk két osztály között: az alosztály bővebb, mint a szülőosztály, mert az alosztály tartalmaz mindent, amit a szülőosztály és ezen felül még tartalmazhat mást is, amiket ebben az osztályban definiálunk.
14
A programozó feladata annyi,
hogy megkeressük a konkrét probléma megoldásához felhasználható osztályokat, és azokból újakat származtatva kiegészítse a szükséges attribútumokkal és metódusokkal a célnak megfelelően. Ez a kód újrafelhasználhatóságát jelenti, annak egy nagyon hatékony módszere.
15
A többalakúság (polimorphism):
Ha származtatunk egy alosztályt, akkor ez az alosztály örökli az ős összes metódusát. Ezeket a metódusokat megváltoztathatjuk, de a nevük ugyanaz marad: ugyanannak a metódusnak más-más osztályban más a viselkedése. Ha nem akarunk egy metódust megváltoztatni, akkor nem kell az alosztály deklarációjában felsorolni, ebben az esetben ez a metódus ugyanúgy fog viselkedni ebben az osztályban is, mint a szuperosztályban (ős sosztályban).
16
Ha az alosztály egy példányánál hivatkozunk egy metódusra akkor két eset lehetséges:
Ha a metódus szerepel az osztály deklarációjában, akkor egyértelmű, hogy az fog végrehajtódni. Ha a metódus nem szerepel az osztály deklarációjában, akkor ez egy örökölt metódus, az öröklődési gráfban kell visszafelé megkeresni, hogy melyik szuperosztálynál történt a deklaráció, és az ott leírt kódot kell végrehajtani.
17
Korai kötés: Vannak statikus metódusok, amelyek címe már a fordításkor belekerül a lefordított kódba, ezt korai kötésnek hívjuk (early binding). Ebben az esetben az ősosztálynál leírt metódus az ősosztálybeli metódust hívja.
18
Késői kötés: Ha a egy metódust virtuálisnak deklarálunk, akkor a fordító a metódusra való hivatkozáskor nem fordítja a kódba a metódus címét, hanem futásidőben megnézi, hogy melyik osztálytól jutott el az épp aktuális osztály kódjáig, és a hívó (tehát a leszármazott) osztály virtuális metódusát fogja végrehajtani. Ezt, a futásidőben történő összerendelést késői kötésnek vagy késői összerendelésnek (late binding) nevezzük. Ezzel elérhető, hogy egy korábban definiált metódus olyasvalamit fog csinálni, amit csak egy későbbi osztályban írunk meg.
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.