A tantárgy adatlapja
1. A képzési program adatai
1.1 Felsőoktatási intézmény	Babeș–Bolyai Tudományegyetem	
1.2 Kar 	Matematika és Informatika Kar	
1.3  Intézet	Magyar Matematika és Informatika Intézet	
1.4 Szakterület	Informatika	
1.5 Képzési szint	Alapképzés	
1.6 Szak / Képesítés	Információmérnöki	

2. A tantárgy adatai
2.1 A tantárgy neve	Tervezési és programozási környezetek	
2.2 Az előadásért felelős tanár neve	dr. Simon Károly	
2.3 A szemináriumért felelős tanár neve	dr. Jakab Hunor	
2.4 Tanulmányi év	3	2.5 Félév	2	2.6. Értékelés módja	vizsga	2.7 Tantárgy típusa	kötelező – szak	

3. Teljes becsült idő (az oktatási tevékenység féléves óraszáma)
3.1 Heti óraszám	4	melyből: 3.2 előadás	2	3.3 szeminárium/labor	0/2	
3.4 Tantervben szereplő össz-óraszám	56	melyből: 3.5 előadás	24	3.6 szeminárium/labor	0/24	
A tanulmányi idő elosztása:	óra	
A tankönyv, a jegyzet, a szakirodalom vagy saját jegyzetek tanulmányozása	24	
Könyvtárban, elektronikus adatbázisokban vagy terepen való további tájékozódás	24	
Szemináriumok / laborok, házi feladatok, portofóliók, referátumok, esszék kidolgozása	50	
Egyéni készségfejlesztés (tutorálás)	0	
Vizsgák	4	
Más tevékenységek: ..................	0	
3.7 Egyéni munka össz-óraszáma	102	
3.8 A félév össz-óraszáma	158	
3.9 Kreditszám	6	

4. Előfeltételek (ha vannak)
4.1 Tantervi	•	Nincs	
4.2 Kompetenciabeli	•	Fejlett programozási módszerek és környezetek, software engineering, adatbázisok	

5. Feltételek (ha vannak)
5.1 Az előadás lebonyolításának feltételei	•	Videoprojektorral és táblával felszerelt előadóterem	
5.2 A szeminárium / labor lebonyolításának feltételei	•	Számítógépekkel felszerelt laborterem, a gépeken a megfelelő szoftverekkel, illetve hozzáférés a megfelelő szerverekhez (Java, Eclipse + PDE + megfelelő beépülő modulok, MySQL, MyBatis, Hibernate, AspectJ) 	

6. Elsajátítandó jellemző kompetenciák
Szakmai kompetenciák	•	Haladó programozási módszerek ismerete
•	Fejlett programozási környezetek működésének és felépítésének ismerete
•	Perzisztenciával kapcsolatos magasabb szintű keretrendszerek ismerete és használata
•	Komponens-alapú, szolgáltatás orientált, illetve dinamikus komponens modelleken alapuló rendszerek fejlesztésének elsajátítása
•	Az aspektusorientált paradigma ismerete
•	Vállalati rendszerek fejlesztéséhez alkalmazott platformokkal kapcsolatos alapismeretek elsajátítása	
Transzverzális kompetenciák 	•	Önálló tanulás, kritikus gondolkodás, problémabeazonosítás és feladatmegoldás
•	Az új paradigmák megismerése által újfajta szemléletmód kialakítása, rálátás összetett rendszerek működésére	

7. A tantárgy célkitűzései (az elsajátítandó jellemző kompetenciák alapján)
7.1 A tantárgy általános célkitűzése	•	a szoftverrendszerek tervezésével és megvalósításával kapcsolatos ismeretek elmélyítése, rendszerezése
•	bonyolultabb szoftverrendszerek fejlesztésénél alkalmazható tervezési minták elsajátítása
•	osztott rendszerek fejlesztésével kapcsolatos ismeretek elsajátítása, távoli metódushívásokon, valamint üzenetküldéseken alapuló kliens-szerver alkalmazások fejlesztése
•	különböző programozási nyelvek által biztosított csomagok és függvénykönyvtárak egy részének áttanulmányozása
•	különböző tervezési és programozási környezetek megismerése (a biztosított funkcionalitásokon kívül beleértve azok felépítését is)
•	komponensorientált szoftverarchitektúrák megismerése, plug-in alapú rendszerek fejlesztése, keretrendszerek alkalmazása 
•	többrétegű alkalmazások fejlesztése, szolgáltatás orientált architektúrák tervezése
•	néhány, a modern szoftverfejlesztésben alkalmazott paradigma, modell és technológia bemutatása, alkalmazása (aspektusorientált programozás, ORM, web alkalmazások fejlesztésénél alkalmazott keretrendszerek, stb.)	
7.2 A tantárgy sajátos célkitűzései

	•	Haladó programozási módszerekkel kapcsolatos ismeretek kiegészítése, rendszerezése: szinkronizáció, naplózás, adatbázisok elérése, biztonság, nemzetköziesítés, reflection, XML feldolgozás stb. (log4j, JDBC, Java Reflection API stb.)
•	Perzisztenciával kapcsolatos tervezési minták és magasabb szintű technológiák megismerése: többrétegű szoftverarchitektúrák, kapcsolódó tervezési minták, ORM (Object Relational Mapping), keretrendszerek (MyBatis, Hibernate stb.)
•	Távoli metódushíváson alapuló kliens-szerver alkalmazások (CORBA, RMI)
•	Plug-in alapú rendszerek, dinamikus komponens modellek, vonatkozó standardok, keretrendszerek megismerése (OSGi, Equinox)
•	RCP (Rich Client Platform) alkalmazások fejlesztésének elsajátítása (SWT, JFace, Eclipse RCP)
•	Az aspektusorientált programozás alapjainak elsajátítása (AspectJ)
•	A Java EE platform felépítésének megismerése	

8. A tantárgy tartalma
8.1 Előadás	Didaktikai módszerek	Megjegyzések	
1. Integrált fejlesztői környezetek
-	általános bevezető, történeti áttekintés, fontosabb irányvonalak
-	általános funkcionalitások
-	különböző környezetek rövid összehasonlítása
-	az Eclipse bemutatása (bevezető)
o	közösség, projektek, történeti áttekintő
o	az Eclipse IDE bemutatása	magyarázat, vetítés, konverzáció, példák		
2. Programozási nyelvekkel kapcsolatos ismeretek rendszerezése, ismétlés és kiegészítések
-	ismétlés: natív kód és bájtkód, AOT és JIT fordítók, programozási nyelvek összehasonlító elemzése (C++, C#, Java), a .NET keretrendszer és a Java platform
-	ismétlés: Java SE
-	a Java biztonsági mechanizmusa
-	kivételkezelés és naplózás, kapcsolódó tervezési minták	magyarázat, vetítés, konverzáció, példák		
3. Programozási módszerekkel kapcsolatos ismétlés, ismeretek kiegészítése
-	szálak szinkronizálása, kapcsolódó problémák
-	egyszerű hálózati alkalmazások
-	Nemzetköziesítés és lokalizáció
o	általános tudnivalók (i18n és L10n)
o	nemzetköziesítés és lokalizáció megvalósítása Java-ban
-	Reflection
o	általános tudnivalók
o	megvalósítás Java-ban
o	alkalmazási lehetőségek, biztonsággal kapcsolatos kérdések	magyarázat, vetítés, konverzáció, példák		
4. Programozási módszerekkel, technológiákkal kapcsolatos ismétlés, ismeretek kiegészítése
-	Serialization
o	általános tudnivalók
o	szerializáció Java-ban
o	protokollok, kapcsolódó fogalmak
o	alkalmazás, példák
-	XML feldolgozás
o	DTD, XSD
o	DOM, SAX
o	JAXP, JDOM	magyarázat, vetítés, konverzáció, példák		
5. Adatbázisok elérése, kapcsolódó tervezési minták
-	a JDBC API
-	többrétegű szoftverarchitektúrák 
-	az Abstract DAO Factory tervezési minta 
-	szolgáltatás réteg bevezetése
-	kapcsolódó tervezési/fejlesztési eszközök	magyarázat, vetítés, konverzáció, példák		
6. Objektumorientált programozás és relációs adatbázisok
-	ORM (Object Relational Mapping): motiváció, általános tudnivalók
-	A MyBatis keretrendszer
-	A Hibernate keretrendszer
-	Példák	magyarázat, vetítés, konverzáció, példák		
7. Osztott rendszerek és távolsági metódushívásokon alapuló kliens-szerver alkalmazások
-	erőforrások beazonosítása (JNDI)
-	az általános modell (egy Distributed Object Application általános modellje, távoli interfészek, objektumok, metódusok)
-	CORBA (Common Object Request Broker Architecture)
o	általános bevezető, OMG
o	CORBA összetevők (a kliens és a szerver oldal)
o	az IDL (Interface Definition Language), IDL-Java leképezés
o	CORBA alapú alkalmazások fejlesztése (példa)
-	RMI (Remote Method Invocation)
o	a Java RMI API
o	RMI alapú alkalmazások fejlesztése (a fejlesztés lépései, a szerver és kliens létrehozása)
o	RMI alapú alkalmazások futtatása
-	biztonsági mechanizmusok: class loaders, security managers, protection domains, kriptográfiai algoritmusok és a JCE (Java Criptography Extension), digitális aláírások	magyarázat, vetítés, konverzáció, példák		
8.  Plug-in alapú, dinamikus komponens modelleken alapuló rendszerek fejlesztése
-	plug-in alapú fejlesztés: motiváció, általános jellemzők, keretrendszerek
-	az OSGi keretrendszer
o	OSGi bundle
o	OSGi szolgáltatások
o	OSGi alapú fejlesztések
-	az Equinox
-	Plug-in alapú fejlesztés Eclipse-ben
o	az Eclipse felépítése, az Eclipse Workbench felépítése
o	Eclipse plug-in 
o	Eclipse plug-in készítése	magyarázat, vetítés, konverzáció, példák		
9. RCP (Rich Client Platform) alkalmazások fejlesztése
-	Thin Client és Rich Client alkalmazások
-	az SWT grafikus csomag
-	a JFace grafikus eszköztár
-	Eclipse RCP alkalmazások fejlesztése (a fejlesztés lépései, példa)	magyarázat, vetítés, konverzáció, példák		
10. Aspektus-orientált programozás
-	az AOP (Aspect Oriented Programming) paradigma
o	motiváció, történet, általános jellemzők
o	aspektus orientált szoftverfejlesztés (AOSD – Aspect Oriented Software Development)
o	összehasonlítás más paradigmákkal
-	Join-point modellek (a join-point, pointcut, aspect fogalmak tárgyalása)
-	az AspectJ projekt	magyarázat, vetítés, konverzáció, példák		
11. Vállalati rendszerek fejlesztésénél használt platformok, technológiák
-	vállalati rendszerek
-	alkalmazásszerverek
-	a Java EE platform
-	Java web programozással kapcsolatos ismeretek felfrissítése (Java Servlet API, JSP, JSTL)	magyarázat, vetítés, konverzáció, példák		
12. EJB alapok
-	EJB
-	erőforrás menedzsment
-	technológiák és szolgáltatások áttekintése (JTA, JMS, biztonság stb.)
-	JPA alapok	magyarázat, vetítés, konverzáció, példák		
Könyvészet
1.	Simon K., Kenyerünk Java, Egyetemi Kiadó, Kolozsvár, 2010.
2.	Rubinger A.L., Burke B., Enterprise Java Beans 3.1, 6th edition, O’Reilly, 2010.
3.	Fowler, M., Patterns of Enterprise Application Architecture, Addison-Wesley, 2002.
4.	***, The Java Tutorial, Sun Microsystems, Inc, 2004. http://java.sun.com/docs/books/tutorial/index.html
5.	***, Eclipse Documentation, Eclipse Foundation, 2009.
http://www.eclipse.org/documentation/
6.	***, CORBA/IIOP Specifications, OMG, http://www.omg.org/technology/documents/corba_spec_catalog.htm
7.	***, RMI Tutorial, Sun Microsystems, 2008.
http://java.sun.com/docs/books/tutorial/rmi/index.html
8.	***, JDBC Tutorial, Sun Microsystems, 2008.
http://java.sun.com/docs/books/tutorial/jdbc/index.html
9.	***, Hibernate Documentation,
http://www.hibernate.org
10.	***, MyBatis Documentation,
http://www.mybatis.org
11.	***, AspectJ Documentation, Eclipse Foundation, 
http://www.eclipse.org/aspectj/docs.php
12.	***, Java Servlet Technology Documentation, Sun Microsystems,
    http://java.sun.com/products/servlet/docs.html	
8.2 Szeminárium / Labor	Didaktikai módszerek	Megjegyzések	
Szeminárium:			
Nincs			
Labor + projekt:			
1.	A Java programozási nyelv alapjainak ismétlését és az Eclipse környezet megismerését célzó feladatok (L1, L2)
2.	A JDBC API alkalmazása: egy többrétegű alkalmazás megírása relációs adatbázisban tárolt adatok feldolgozására, a megfelelő tervezési minták alkalmazása, grafikus felszín készítése (L3, L4)
3.	Az előzőekben (2.-es pont) megírt alkalmazás átírása, ORM alkalmazása (javasolt keretrendszerek: MyBatis, Hibernate) (L5, L6)
4.	OSGi alapú szolgáltatásorientált alkalmazás létrehozása (L7)
5.	Eclipse RCP alkalmazás kifejlesztése (2-es laborfeladat felhasználói felületének lecserélése) (L9,L10)
6.	EJB és JPA alkalmazása, távoli metódushívásokon alapuló alkalmazás fejlesztése (a 5-ös laborfeladat szerver oldali részének lecserélése) (L11, L12)
			
Könyvészet	
1.	***, The Java Tutorial, Sun Microsystems, Inc, 2004. http://java.sun.com/docs/books/tutorial/index.html
2.	***, Eclipse Documentation, Eclipse Foundation, 2009.
http://www.eclipse.org/documentation/
3.	***, CORBA/IIOP Specifications, OMG, http://www.omg.org/technology/documents/corba_spec_catalog.htm
4.	***, RMI Tutorial, Sun Microsystems, 2008.
http://java.sun.com/docs/books/tutorial/rmi/index.html
5.	***, JDBC Tutorial, Sun Microsystems, 2008.
http://java.sun.com/docs/books/tutorial/jdbc/index.html
6.	***, Hibernate Documentation,
http://www.hibernate.org
7.	***, MyBatis Documentation,
http://www.mybatis.org	

9. Az episztemikus közösségek képviselői, a szakmai egyesületek és a szakterület reprezentatív munkáltatói elvárásainak összhangba hozása a tantárgy tartalmával.
•	A tantárgy tematikája nagy átfedést mutat az egyetemi oktatásban a fontosabb egyetemeken oktatott hasonló tematikájú tantárgyak tartalmával.
•	A tananyagok kidolgozása a nemzetközileg legelismertebb szerzők munkái alapján történt, az ajánlott könyvészet szintén a terület legrelevánsabb munkái alapján van összeállítva.
•	A tantárgy keretein belül oktatott témák szükségesek a szoftverfejlesztői iparban történő elhelyezkedéshez, a cégek elvárják az ilyen jellegű ismereteket.	

10. Értékelés
Tevékenység típusa	10.1 Értékelési kritériumok	10.2 Értékelési módszerek	10.3 Aránya a végső jegyben	
10.4 Előadás 	Vizsgafeladatok, bemutatott technológiák ismerete	Írásbeli vizsga	40%	
				
10.5 Szeminárium / Labor	Laborfeladatok	A megoldás pontozása	40%	
	Gyakorlati vizsga	A megoldás pontozása	20%	
10.6 A teljesítmény minimumkövetelményei	
Az átmenő jegy feltételei:
•	A végső jegyet meghatározó minden komponens esetén kötelező az átmenő jegy (min. 5-ös).
•	A végső jegy minimálisan 5-ös.	

Kitöltés dátuma			Előadás felelőse			Szeminárium felelőse
2012.09.25				dr. Simon Károly			dr. Jakab Hunor
Az intézeti jóváhagyás dátuma				Intézetigazgató	
..........................						dr. Szenkovits Ferenc