Babeş–Bolyai Tudományegyetem, Kolozsvár
Matematikai és Informatikai Kar
Tanév: 2006-2007
II. félév

I.	A tantárgy adatai

A tárgy neve: Objektumorientált programozás
Kód: MID0002
Kreditszám:7
Hol tartják? :
Mikor tartják? :

II.	Az oktatók adatai

Előadás, szeminárium, laboratórium
Név, tudományos cím: Darvay Zsolt, dr.
Elérhetőség (e-mail, telefon): darvay@cs.ubbcluj.ro
Fogadóóra : 

III.	A tantárgy leírása: 

Tartalom
-	Az objektumorientált programozás alapjai.
-	A C++ programozási nyelv.
-	A C++ nyelv objektumorientált sajtátosságai.
 Célok
-	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.
Képességek 
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.
Módszerek
Előadás, gyakorlati projekt, feladat, egyéni munka, párbeszéd

IV.	Kötelező 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).

V.	Az oktatásban használt eszközök: 
A  laboratóriumi gyakorlatok alatt az egyetem számítógéphálózatát  veszik igénybe a diákok. A témára vonatkozó egyéb anyagok (könyvek, cikkek, az interneten elérhető erőforrások) használatára is sor kerül.

VI.	A tevékenységek és ellenőrzések/részleges vizsgák órarendje:

Az előadások, szemináriumok és labóratóriumok tervezése 
(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)
 (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.	Értékelés módja:
A végleges jegyet az alábbi összetevők alapján határozzuk meg:
J1: Tevékenység az órákon (laboratórium, ellenőrző kérdések előadáson) = 20% 
J2. Írásbeli vizsga = 40%
J3. Teszt = 20%
J4. Gyakorlat = 20%
Az írásbeli vizsgára, a tesztre és a gyakorlatra 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.
Végleges jegy: JEGY=(J1*20+J2*40+J3*20+J4*20)/100

VIII.	Szervezési kérdések, a különleges esetek kezelése:
A vizsgára való jelentkezés feltétele J1 >= 5. Sikeres a vizsga, ha az összes jegy >= 5.

IX.	Ajánlott, de nem kötelező 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).