Universitatea Babeş-Bolyai Cluj-Napoca
Facultatea de Matematică şi Informatică
Ciclul de studii: Licenţă
Domeniul: Matematică
Programul de studii: Matematică informatică - linia de studiu maghiară
Limba de predare: Maghiară

SYLLABUS

I. Általános adatok
Kód	Tantárgy neve	
MID0002	Objektumorientált programozás 
(Programare orientată obiect)	

Félév	Órák: C+S+L	Kategória	Típus	
2	2+0+2	alapképzés	kötelező	

II. Foállásban az  Egyetem  oktatói
Név	Tudományos	Oktatói	Tanszék	Tevékenység	
	fokozat	státus		E	Sz	L	
DARVAY Zsolt	Dr.	Lect.	Programozási nyelvek és módszerek	*			

Társult oktatók
Név	Tudományos	Intézmény	Állás	Tevékenység 	
	fokozat		típusa	E	Sz	L	

III. A tantárgy célkituzései
-	Az objektumorientált programozás alapvető fogalmainak és elveinek bemutatása.
-	A programok objektumorientált tervezésére vonatkozó képesség kialakítása.
-	A C++ programozási nyelv megtanulása.
-	Adatszerkezetek megvalósítása C++-ban objektumorientált programozással.
-	Az UML nyelv alapelemeinek az elsajátítása.
A tárgy sikeres teljesítése esetén a diákok képesek kell legyenek arra hogy:
-	kisebb, vagy közepes méretű, feladatokat oldjanak meg C++-ban objektumorientált programozással;
-	felismerjék a hagyományos és az objektumorientált tervezés közti különbségeket és kihangsúlyozzák az utóbbi előnyeit;
-	megértsék az öröklés, a polimorfizmus, a dinamikus kötés és a sablonok használatát, újrafelhasználható kód fejlesztése érdekében;
-	mások által megírt osztályokat használjanak fel egy feladat megoldására;
-	megmagyarázzák és használják a kivételkezelést tartalmazó programozási stratégiákat;
-	UML diagramokat készítsenek a programtervezési folyamat során;
-	Az alapvető adatszerkezeteket objektumorientáltan valósítsák meg.	

IV. A tantárgy tartalma
-	Az objektumorientált programozás alapjai.
-	A C++ programozási nyelv.
-	A C++ nyelv objektumorientált sajtátosságai.	

V. Könyvészet
1.	Alexandrescu, Programarea modernă in C++. Programare generică si modele de proiectare aplicate, Editura Teora, 2002.(Könyvtár).
2.	R. Andonie, I. Garbacea, Algoritmi fundamentali. O perspectiva C++, Editura Libris, Cluj_Napoca, 1995 (Könyvtár).
3.	Eckel, Thinking in C++, (second edition), vol. 1 & 2, [www.bruceeckel.com]
4.	Milewski, C++ in Action, [http://www.relisoft.com/book/], 1997.
5.	L. Negrescu, Limbajul C++, Ed. Albastra,Cluj-Napoca 1996(Könyvtár).
6.	Vasile Cioban, Zsolt Darvay, Metode evoluate de programare, UBB-Mate_Info, 1999 (Könyvtár).
7.	M. Frenţiu, B. Pârv, Elaborarea programelor. Metode şi tehnici moderne, Ed. Promedia, Cluj-Napoca, 1994. (Könyvtár).	

VI. Az oktatói tevékenység heti tematikája
(E1-E14 előadások, L1-L14 laboratóriumok)

1.	A C++ nyelv alapelemei. (E1)
-	Lexikális egységek. Operátorok. Konverzió.
-	Adattípusok. Változók. Állandók. 
-	Változók láthatósága és élettartama.
-	Névterek.
(L1- egyszerű C++ programok)

2.	Utasítások és C++ függvények. (E2)
-	C++ utasítások.
-	Függvénydeklaráció és definíció a C++-ban.
-	Függvények túlterhelése.
-	Inline függvények.
(L2 – strukturált C++ programok)

3.	Az alaptípusoknál összetettebb típusok és a dinamikus memóriakiosztás a C++-ban. (E3)
-	Tömb és struktúra.
-	Mutató és referencia típus. 
-	Memóriaterület lefoglalása és felszabadítása.
-	Függvényekre hivatkozó mutatók és void függvények.
(L3 – dinamikus módon tárolt struktúrák C++-ban)

4.	Moduláris programozás C++-ban.(E4)
-	Fejállományok. Könyvtárak.
-	Absztrakt adattípusok moduláris megvalósítása.
-	A void típusra hivatkozó mutatók használata az általánosság érdekében.
 (L4- absztrakt adattípusok megvalósítása moduláris programozással (Halmaz, Kollekció) )

5.	Objektumorientált programozás C++-ban. (E5)
-	Osztályok és objektumok.
-	Egy osztály tagjai. Hozzáférésmódosítók.
-	Konstruktorok és destruktorok
-	UML osztálydiagramok (tagok, hozzáférés).
-	Ismeretség és aggregáció megadása UML diagramban
(L5- a RacionálisSzám és Polinom absztrakt adattípusok objektumorientált megvalósítása)

6.	Operátorok túlterhelése. Statikus tagok. Barát függvények és osztályok. (E6)
-	A Láncolt_Lista osztály és a hozzá tartozó bejáró (Iterátor osztály).
(L6- a Lista absztrakt adattípus objektumorientált megvalósítása)
 
7.	Öröklés  (E7)
-	Származtatott osztályok. Egyszeres öröklés.
-	Helyettesítési elv.
-	Metódusok felülírása.
-	Többszörös öröklés.
-	Osztályok közti specializálási/általánosítási kapcsolat megadása UML-ben.
(L7- láncolt listák megvalósítása)

8.	Polimorfizmus.  (E8)
-	Virtuális tagfüggvények.
-	Dinamikus kötés. 
-	Virtuális öröklés.
-	Kód újrafelhasználás (öröklés/összetétel).
-	Konverzió (upcast/downcast).

9.	Objektumorientált tervezés és interfészre alapozott tervezés. (E9)
-	Absztrakt osztály, interfész.
-	Az interfész megadása UML –ben.
-	Egy adatszerkezetekből álló könyvtár objektumorientált tervezése.
 (L8, L9- adatszerkezetekből álló könyvtár megvalósítása)

10.	Bemeneti/kiviteli műveletek.  (E10)
-	Adatfolyamok. Bemeneti/kiviteli osztályhierarchiák.
-	Formátumozott bemenet/kimenet. Módosítók.
-	Állománykezelés.
(L10 – különböző b/k műveletek megvalósítása)

11.	Sablonok. (E11)
-	Függvénysablonok.
-	Osztálysablonok. 
-	Kód újrafelhasználás.
(L11 - a Lista absztrakt adattípus megvalósítása sablonokkal)

12.	A szabványos C++ könyvtár (STL) (E12)
-	Tárolók és bejárók.
-	 A szabványos könyvtár algoritmusai.
(L12 – a szabványos könyvtár rendezési algoritmusai)

13.	Kivételkezelés. (E13)
-	A kivétel fogalma.
-	Kivételek kiváltása és kezelése C++-ban.
(L13- a Verem és VárakozásiSor absztrakt adattípusok megvalósítása kivételkezeléssel)

14.	A Visual C++ fejlesztési környezet. (E14)
-	A grafikus felhasználói felület elemei. 
-	Eseményvezérelt programozás.
  (L14- egyszerű Visual C++ program grafikus interfésszel)	

VII. Alkalmazott didaktikai módszerek
Előadás, gyakorlati projekt, feladat, egyéni munka, párbeszéd	

VIII. Értékelés
A végleges jegyet az alábbi összetevők alapján határozzuk meg:
J1: Tevékenység az órákon = 40%
      Ebből :
       - laboratórium 25%
       - ellenőrző kérdések előadáson 15%
J2. Írásbeli vizsga = 25%
J3. Teszt = 20%
J4. Gyakorlat = 15%
A gyakorlatra az utolsó tanítási héten, az írásbeli vizsgára és a tesztre pedig a vizsgaidőszakban kerül sor. Az írásbeli és a teszt alapvetően elméleti jellegű, de feladatrészleteket is tartalmazhat. A gyakorlat megoldása számítógépen történik.
A J1 jegy a tanítási időszakban véglegesítődik. Későbbi módosításra nincs lehetőség. A vizsgára való jelentkezés feltétele J1 >= 5, a pótvizsgára pedig J1 >= 3.
A gyakorlati vizsga (J4) a pótvizsga időszakban megismételhető.
Végleges jegy: JEGY=(J1*40+J2*25+J3*20+J4*15)/100	

IX. Kiegészíto könyvészet
1.	B. Stroustrup, The C++ Programming Language, Addison Wesley, 1997 http://public.research.att.com/~bs/3rd.html. 
2.	B. Stroustrup: The C++ Programming Language Special Edition, AT&T, 2000.
3.	Peter Müller: Introduction to Object-Oriented Programming Using C++, Globewide Network Academy (GNA), www.gnacademy.org/ August 31, 1997 http://www.zib.de/visual/people/mueller/Course/Tutorial/tutorial.html
4.	Mark J. Sebern: STL Iterator Classes, Version 1.2 (1/4/1998), http://www.msoe.edu/eecs/ce/courseinfo/stl/iterator.htm
5.	C++ Standard Template Library, http://www.cppreference.com/cppstl.html
6.	John Copp: C++ Programming Tutorial, http://cplus.about.com/od/beginnerctutorial/l/blcplustut.htm
7.	B. Parv, A. Vancea, Fundamentele limbajelor de programare, Microinformatica, Cluj-Napoca, 1996 (Könyvtár).	

	Dátum,						Eloadás felelose,
		2007.05.12						Lect. Dr. DARVAY Zsolt