Objektum orientált programozás (Object Oriented Programming = OOP)

Hasonló dokumentumok
OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Objektum orientált programozás (Object Oriented Programming = OOP)

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

JAVA PROGRAMOZÁS 2.ELŐADÁS

OOP #14 (referencia-elv)

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

OOP #7 (init, done) v :45:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás III. - NGB_IN001_3

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Programozás módszertan p.1/46

Java programozási nyelv 4. rész Osztályok II.

Programozási alapismeretek 4.

C++ programozási nyelv Struktúrák a C++ nyelvben

Objektumorientált szoftverfejlesztés alapjai

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Osztálytervezés és implementációs ajánlások

Már megismert fogalmak áttekintése

Osztálytervezés és implementációs ajánlások

Objektum Orientált Programozás v0.7a

OOP. Alapelvek Elek Tibor

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Java programozási nyelv 5. rész Osztályok III.

BME MOGI Gépészeti informatika 8.

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

Bevezetés a Python programozási nyelvbe

Objektum orientált programozás Bevezetés

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Pénzügyi algoritmusok

Adatstruktúrák, algoritmusok, objektumok

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Objektumelvű programozás

Objektumorientált programozás C# nyelven

OOP. #6 (VMT és DMT) v :33:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Osztályok. 4. gyakorlat

III. OOP (objektumok, osztályok)

Öröklés és Polimorfizmus

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

C++ programozási nyelv

C++ programozási nyelv

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java és web programozás

Objektumorientált programozás C# nyelven

és az instanceof operátor

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

ELTE SAP Excellence Center Oktatóanyag 1

C++ programozási nyelv

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Objektumorientált paradigma

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Programozási nyelvek Java

Abstract osztályok és interface-ek. 7-dik gyakorlat

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

PROGRAMOZÁSMÓDSZERTAN II

Objektum-orientált programozás

Java programozási nyelv

OOP: Java 8.Gy: Abstract osztályok, interfészek

Osztály öröklődés. Öröklődés és polimorfizmus. Programozás II. előadás. Szénási Sándor.

Interfészek. PPT 2007/2008 tavasz.

SZOFTVERFEJLESZTÉSI TECHNOLÓGIÁK

Adatszerkezetek 2. Dr. Iványi Péter

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

I. Objektumorientált programozás

Programozási nyelvek Java

PROGRAMOZÁS III. 11. évfolyam Informatikai rendszerüzemeltető 2018.

AZ OOP KÓDOLÁSI ALAPJAI

Programozás C++ -ban

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Elemi Alkalmazások Fejlesztése II.

Osztály és objektum fogalma

OOP és UML Áttekintés

Bevezetés, a C++ osztályok. Pere László

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

A C# programozási nyelv alapjai

Szoftver-technológia II. Modulok és OOP. Irodalom

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

C#, OOP. Osztályok tervezése C#-ban

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

JAVA PROGRAMOZÁS 3.ELŐADÁS

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Objektumorientált programozás C# nyelven

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Származtatási mechanizmus a C++ nyelvben

Programozás alapjai. 7. előadás

Átírás:

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

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

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

Struktúrált programozás: 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.

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

Nyelvek osztályozása: Hagyományos nyelvek (C) OOP támogató nyelvek (Pascal, Delphi, C++) Tisztán OOP nyelvek (C#, Java)

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

Egységbezárás (encapsulation): 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. type TVerem = class VM : integer; T : array [1..100] of integer; procedure Berak(X:integer); function Kivesz:integer; function Ures:boolean; function Tele:boolean; procedure Init;

Ö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

Öröklés (inheritance) : 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 type TFejlettVerem = class(tverem)...

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

Sokalakúság (polymorphism) : type TElso = object... procedure B; virtual; type TMasodik = class(telso)... procedure B; virtual;

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. Üzenet/kérelem Az objektumokat üzeneteken keresztül kérjük meg különböző feladatok elvégzésére. 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 (objektumváltozó deklarálása)

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

Objektum-osztály definiálása: (adatmezők + metódusok ) type THallgato = class Neve: string; Eletkora: integer; procedure Beiratkozik(Ev,Felev:word);... type THallgato = object Neve: string; Eletkora: integer; procedure Beiratkozik(Ev,Felev:word);...

Objektum-osztály definiálása: (metódusok kidolgozása) procedure THallgato.Beiratkozik; {param?} var Neptun:THalozatiKapcsolat; begin Neptun.Connect; Neptun.Login( hernyak, jelszo ); Neptun.SendCommand( beiratk,ev, Felev); Neptun.Close;

Példányosítás (object): Var Pisti:THallgato; BEGIN Pisti.Nev := Gonosz Pistike ; Pisti.Beiratkozik(2004,1); END. Példányosítás (class): Var Pisti:THallgato; BEGIN Pisti := THallgato.Create; // e nélkül hiba lesz! Pisti.Nev := Gonosz Pistike ; Pisti.Beiratkozik(2004,1); END.

Távolságok: Belvilág: Az objektum belvilága -- a saját metódusai. Külvilág (minden más) Közeli külvilág: az osztály leszármazottjai, s azok metódusai Távoli külvilág: a példányokat készítő programmodulok (pl. főprogram)

Adatrejtés (egységbezárás alproblémája) (attributum): 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)

Adatrejtés (metódusok): 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: 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)

type THallgato = class private Neve: string; Eletkora: integer; public procedure Beiratkozik(Ev,Felev:word);... Var Pisti:THallgato; BEGIN Pisti.Nev := Gonosz Pistike ; // nem működik! END.

Adatrejtés előnyei: - a mezőkhöz a hozzáférés szabályozható csak azok számára engedjük a közvetlen hozzáférést (írás/olvasás), akikben megbízunk a felelősség miatt szükséges a szabályozás Adatrejtés hátrányai: - nem szabályozható, hogy csak az írás, vagy csak az olvasást tiltjuk/engedélyezzük. Egy időben lehet mindkét elérést tiltani/engedélyezni.

Adatrejtés hátrányai (nem elrejtés hátránya): type THallgato = class public Eletkora: integer;...... BEGIN Pisti.Eletkora := -489; // hibás érték!!... END.

Adatrejtés hátrányai (elrejtés hátránya): type THallgato = class private Eletkora: integer;...... BEGIN // Pisti.Eletkora := -489; // nem megy!! Writeln(Pisti.Eletkora); // ez sem megy!!... END.

Adatrejtés megoldása (Set és Get metódus): type THallgato = class private Eletkora: integer; public: procedure SetEletkora(ek:integer);... procedure THallgato.SetEletkora; begin if (ek>0) and (ek<100) Eletkora:=ek else... // hiba jelzése!!! Pisti.SetEletkora(-486); // hibajelzés Pisti.SetEletkora( 18 ); // végrehajtva

Adatrejtés megoldása (Set és Get metódus): type THallgato = class private: Eletkora: integer; public: function GetEletkora: integer;... function THallgato.GetEletkora; begin result := Eletkora; Writeln( Pisti.Eletkora ); // nem megy Writeln( Pisti.getEletkora ); // ok

Adatrejtés megoldása (property = virtuális mező): type THallgato = class private: feletkora: integer; procedure SetEletkora(ek:integer); public: property Eletkora:integer read feletkora write SetEletkora;... Pisti.Eletkora:=126; Pisti.SetEletkora(126); Writeln(Pisti.Eletkora); Writeln(Pisti.fEletkora);

Read: utána meg kell adni, ha a virtuális mezőt olvassák mi legyen a teendő: - read után lehet írni egy ugyanolyan típusú fizikai mező nevét - read után lehet írni egy paraméter nélküli, megegyező típusú függvény nevét is

Write: után kell megadni, mi legyen a teendő, ha a virtuális mezőbe új értéket akarnak berakni. - write után lehet írni egy ugyanolyan típusú, fizikai mező nevét - write után lehet írni egy olyan eljárás nevét (ez általában private), amelynek egyetlen paramétere van, amelynek a neve tetszőleges lehet, de a típusa meg kell egyezzen a virtuális mező típusával

Property: nem kötelező megadni mindkét (read,write) módot. Ha csak a read -t adjuk meg -> csak olvasható virtuális mezőt kapunk. Ha csak a write -t adjuk meg -> csak írható virtuális mezőt kapunk. Nem kötelező, hogy a virtuális mező mögött fizikai mező is álljon.

Constructor: Speciális feladatú metódus: az objektum-példány alaphelyzetbe állítását végzi el (ez általában a mezők kezdőérték-beállítását jelenti). A CLASS típusú osztályok példányosításakor kötelező meghívni a konstruktort! Ez a szabály biztosítja, hogy csak már inicializált példánnyal lehessen dolgozni!

type THallgato = class private: feletkora: integer; public: constructor Create; constructor THallgato.Create; begin feletkora := 0;...

Constructor névadása: A constructor eljárás neve általában Create vagy Init. Tetszőleges név választható a constructor-nak. Több constuctor is lehetséges osztályonként. Jellemző, hogy ezeknek más-más a paramétere (egyébként nincs értelme több konstruktort készíteni).

type THallgato = class... constructor Create; constructor Init(Kezdo:integer); var H1,H2:THallgato; begin H1 := THallgato.Create; H2 := THallgato.Init(24);...

Destructor: Speciális feladatú metódus: az objektum-példány megszűnését megelőzően kerül meghívásra. Ekkor még (utolsó pillanat) a példány által lefoglalt erőforrások (memória, file-ok, hálózati kapcsolatok, ) felszabadítása. A destructor eljárást meg kell hívni (explicit módon). A meghívás vagy közvetlenül a destruktor metódus hívásával történik. A másik mód, hogy a Free metódust hívjuk meg, amely meghívja az Destroy nevű, paraméter nélküli destruktort.

type THallgato = class destructor Destroy; destructor Done(param:integer); destructor THallgato.Destroy; begin... var H1:THallgato; begin H1 := THallgato.Create;... H1.Destroy; // H1.Free;

Öröklődés: - közös ős: TObject Create constructor Destory virtuális desktrukto Néhány hasznos metódus (Free, InstanceSize, ) - mezők öröklődése private protected public - ugyanolyan nevű mező bevezetése private (ok) protected (aut. elfedi) public (aut. elfedi) - új mező bevezetése

Öröklődés: - metódus öröklődése private protected public - ugyanolyan nevű metódus bevezetése private (ok) protected (aut. elfedi, param változhat, működés!) public (aut. elfedi, param változhat, működés!) - új metódus bevezetése

Öröklődés: - virtuális metódusok virtual / dynamic override típus és param lista nem változhat! működés! VMT tábla DMT tábla Konstruktor felelőssége Konstruktor virtualitása (nincs) Destruktor virtualitása (van!)