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



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

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

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

OOP #14 (referencia-elv)

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

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

.NET (Dot-NET) #1 (Bevezetés)

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

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

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

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

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

Java programozási nyelv

Objektum Orientált Programozás v0.7a

Objektum orientált programozás Bevezetés

AZ OOP KÓDOLÁSI ALAPJAI

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

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

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.

Programozási alapismeretek 4.

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

Programozás módszertan p.1/46

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

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

Programozási nyelvek Java

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

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

OOP. Alapelvek Elek Tibor

Programozás III. - NGB_IN001_3

Osztályok. 4. gyakorlat

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

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

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

Osztály és objektum fogalma

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

Programozási nyelvek Java

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

C++ programozási nyelv

Már megismert fogalmak áttekintése

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

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

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

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

Programozás alapjai II. (3. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

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

Java és web programozás

BME MOGI Gépészeti informatika 8.

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Bevezetés a programozásba előadás: Öröklődés

Programozás alapjai II. (2. ea) C++

Interfészek. PPT 2007/2008 tavasz.

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

SZOFTVERFEJLESZTÉSI TECHNOLÓGIÁK

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

Programfejlesztés. Programozás alapjai II. (3. ea) C++ Néhány programozási módszer. Korai szoftverkészítés jellemzői. Gépi nyelv? Strukturált tervezés

I. Objektumorientált programozás

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Objektumelvű programozás

Objektumorientált paradigma és programfejlesztés Bevezető

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.

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

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Adatstruktúrák, algoritmusok, objektumok

Programozás alapjai II. (2. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

JAVA PROGRAMOZÁS 2.ELŐADÁS

Bevezetés a Python programozási nyelvbe

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

Öröklés és Polimorfizmus

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

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

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

Objektum orientált alapelvek

A C# programozási nyelv alapjai

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

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Adatszerkezetek 2. Dr. Iványi Péter

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Adatszerkezetek és algoritmusok

4. Öröklődés. Programozás II

Algoritmizálás és adatmodellezés tanítása 1. előadás

Objektumorientált paradigma és a programfejlesztés

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

500. AA Megoldó Alfréd AA 500.

Objektumorientált programozás C# nyelven

és az instanceof operátor

AZ OBJEKTUM-ORIENTÁLTSÁG ALAPFOGALMAINAK BEMUTATÁSA A C++ NYELV SEGÍTSÉGÉVEL

C++ programozási nyelv Konstruktorok-destruktorok

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

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

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

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

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

Adatbázis rendszerek. dr. Siki Zoltán

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

Átírás:

OOP #1 (Bevezetés) v1.0 2003.03.07. 18:39:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_01-1 -

E jegyzet másolata nem használható fel szabadon, az előadás anyagának kivonata. Ezen teljes jegyzetről, vagy annak bármely részéről bármely másolat készítéséhez a szerző előzetes írásbeli hozzájárulására van szükség. A másolatnak tartalmaznia kell a sokszorosításra vonatkozó korlátozó kitételt is. A jegyzet kizárólag főiskolai oktatási vagy tanulmányi célra használható! A szerző hozzájárulását adja ahhoz, hogy az EKF számítástechnika tanári, és programozó matematikus szakján, a tárgyat az EKF TO által elfogadott módon felvett hallgatók bármelyike, kizárólag saját maga részére, tanulmányaihoz egyetlen egy példány másolatot készítsen a jegyzetből. A jegyzet e változata még tartalmazhat mind gépelési, mind helyességi hibákat. Az állítások nem mindegyike lett tesztelve teljes körűen. Minden észrevételt, amely valamilyen hibára vonatkozik, örömmel fogadok. Hernyák Zoltán aroan@ektf.hu OOP OOP_01-2 -

OOP története 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 o szekvencia o szelekció o iteráció A fenti sejtést Mills bizonyította OOP története OOP_01-3 -

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) OOP története OOP_01-4 -

OOP alapelvei 1. 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 OOP alapelvei OOP_01-5 -

2. Ö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ály ő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 o Legfeljebb egy szülője lehet (pl.: Pascal, Java, C#) öröklődési fa o 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 OOP alapelvei OOP_01-6 -

3. Sokalakúság (polymorphism) : 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 o Egyes nyelvekben minden metódus virtuális (pl.: Java) o A metódusoknál külön jelezni kell, melyik a virtuális (pl.: Delphi, C#, C++) OOP alapelvei OOP_01-7 -

#include <stdio.h> struct TVerem int vm; float tomb[100]; ; struct TVerem V; void Init() V.vm = 0; void Push(float x) V.tomb[V.vm]=x; V.vm++; 1. Példa (C és C++) (csak egy verem) float Pop() V.vm--; Return V.tomb[V.vm]; int main() Init(); Push(12.5); Push(16.3); Printf( %f\n,pop()); // 16.3 Printf( %f\n,pop()); // 12.5 1. Példa (C és C++) (csak egy verem) OOP_01-8 -

1. Példa (Pascal) (csak egy verem) type TVerem = record vm:integer; tomb: array [1..100] of real; end; var V:TVerem; procedure Init; V.vm := 0; End; procedure Push(x:real); V.tomb[V.vm]:=x; Inc(V.vm); End; function Pop:real; dec(v.vm); Pop := V.tomb[V.vm]; End; BEGIN Init; Push(12.5); Push(16.3); Writeln(Pop); // 16.3 Writeln(Pop); // 12.5 END. 1. Példa (Pascal) (csak egy verem) OOP_01-9 -

#include <stdio.h> struct TVerem int vm; float tomb[100]; ; void Init(TVerem *V) V->vm = 0; 2. Példa (C és C++) (több verem) void Push(TVerem *V, float x) V->tomb[V->vm]=x; V->vm++; float Pop(TVerem *V) V->vm--; Return V->tomb[V.vm]; struct TVerem V1; struct TVerem V2; int main() Init(&V1); Init(&V2); Push(&V1,12.5); Push(&V1,16.3); Push(&V2,11.3); Printf( %f\n,pop(&v1)); Printf( %f\n,pop(&v2)); Printf( %f\n,pop(&v1)); 2. Példa (C és C++) (több verem) OOP_01-10 -

2. Példa (Pascal) (több verem) type TVerem = record vm:integer; tomb:array [1..100] of real; end; procedure Init(var V:TVerem) V.vm = 0; End; procedure Push(var V:TVerem;x:real) V.tomb[V.vm]=x; Inc(V.vm); End; Function Pop(var V:TVerem):real; dec(v.vm); Pop := V.tomb[V.vm]; End; var V1,V2: TVerem; BEGIN Init(V1); Init(V2); Push(V1,12.5); Push(V1,16.3); Push(V2,11.3); Writeln(Pop(V1)); Writeln(Pop(V2)); Writeln(Pop(V1)); END. Hiba! A stílus nem létezik. OOP_01-11 -

#include <stdio.h> class TVerem public: int vm; float tomb[100]; void Init(); void Push(float x); float Pop(); ; void TVerem::Init() vm = 0; void TVerem::Push(float x) tomb[vm]=x; vm++; 3. Példa (C++) (verem osztály) float TVerem::Pop() vm--; return tomb[vm]; int main() TVerem v1; TVerem v2; v1.init(); v2.init(); v1.push(12.5); v2.push(13.4); v1.push(16.3); printf("%f\n",v1.pop()); printf("%f\n",v1.pop()); printf("%f\n",v2.pop()); return 0; 3. Példa (C++) (verem osztály) OOP_01-12 -

type TVerem=object vm:integer; tomb:array [1..100] of real; procedure Init; procedure Push(x:real); function Pop:real; end; procedure TVerem.Init; vm := 0; end; 3. Példa (Pascal) (verem osztály) procedure TVerem.Push(x:real); tomb[vm]:=x; inc(vm); end; function TVerem.Pop:real; inc(vm); Pop := tomb[vm]; End; var V1,V2:TVerem; BEGIN v1.init; v2.init; v1.push(12.5); v2.push(13.4); v1.push(16.3); Writeln(v1.Pop); Writeln(v2.Pop); Writeln(v1.Pop); END. 3. Példa (Pascal) (verem osztály) OOP_01-13 -

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. Objektum: egy változó, melynek típusa valamely objektumosztály, vagyis az osztály egy példánya. Attribútum (adatmező): az osztály egy mezője, konkrét adattárolási képességű adattagja. Alapfogalmak OOP_01-14 -

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) Inicializálás: az objektum attribútumainak kezdőértékbeállítása, általánosabban az objektum-példány alaphelyzetbe állítása Alapfogalmak OOP_01-15 -