Szoftvertechnikák vizsga, 2008. május 30.

A VIK Wikiből
A lap korábbi változatát látod, amilyen Ferrero (vitalap | szerkesztései) 2013. február 6., 10:12-kor történt szerkesztése után volt.
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

1. Mi az assembly / .NET szerelvény (assembly) fogalma, szerepe, típusai, azonosítása

lásd: 2007. június 13-i vizsga.

2. Mi az a delegate, mire használható. Példakód

lásd: 2007. június 6-i vizsga.

3. Mi az érvénytelen terület

Korábban takarásban levő, újra láthatóvá vált ablakrészek (pl.átméretezés, Z-orderben előbb került az ablak, stb.)

4. Szálkezelés...

a) C# szálvédelmi lehetőségei, szálvédős c# példa

1.) Kritikus szakasz: A kritikus szakaszt egyszerre csak egyetlen szál futtathatja, a többinek ilyenkor várakoznia kell.
Kritikus szakaszt alkalmazó osztályok: Interlocked, Monitor, Mutex, és a ReaderWriterLock
Zárolási konstrukciók: lock (nyelvi elem, Monitorral megegyező működésű), Monitor, Mutex, Semaphore, ReaderWriterLock, Interlocked
Lock példa:

class ThreadSafeClass{

	static bool done; // Közös erőforrás
	static object syncObject = new object();

	static void Main(){
		new Thread(Run).Start();
		new Thread(Run).Start();
	}

	static void Run(){
		lock (syncObject){
			if (!done){
				done = true;
				Console.WriteLine("Done");
			}
		}
	}

}

2.) Esemény: Az esemény olyan szinkronizációs eszköz, melynek írása és olvasása az ütemező által nem
	 megszakítható, és processzortakarékos módon lehet rá várakozni. Az esemény kétféle állapotban lehet,
	 jelzett és jelzetlen állapotban. Tehát az esemény egy speciális logikai változóként képzelhető el.
	 A keretrendszer ezt megvalósító osztályai az AutoResetEvent, és a ManualResetEvent.
A következő példában egy előtérszálat fogunk leállítani eseményre történő várakozással.
AutoReset példa:

class EventTestClass{
	private static AutoResetEvent stopEvent = new AutoResetEvent(false);

	public static void Main(string[] args){
		Thread t = new Thread(new ThreadStart(ThreadMethod));
		t.Start();
	}

	public static void ThreadMethod(){
		while (!stopEvent.WaitOne(0, false)){ ... }
	}

}

3.) Egy osztályt két szinten lehet szálbiztossá tenni: objektum és osztály szinten. 
a.) Az objektumszint esetén azt biztosítjuk, hogy az osztály adott objektuma legyen többszálú környezetben biztonságosan
	 használható. A védelemre egy közönséges tagváltozót használunk (ilyen a private object syncroot = new object();)
b.) Az osztályszint esetén az osztály valamennyi objektumára vonatkozóan biztosítjuk a védelmet. A statikus tagváltozók
	 védelmét pl. csak így lehet megoldani. Ez esetben zárolási objektumként egy statikus tagváltozót kell használni.
	 Pl.: private static object syncroot = new object(); Ez az objektumszintnél korlátozottabb párhuzamosítást engedélyez,
	 hiszen a zárolási objektum (syncroot) az osztály minden objektumára közös.

4.) Formok: A vezérlőelemek alapvetően nem szálvédett objektumok, ami azt jelenti, hogy csak a létrehozó szálból lehet az 
	 állapotukat megváltoztatni. Ha nem a megfelelő szálból próbáljuk a vezérlőelemeink állapotát változtatni, akkor kivétel
	 keletkezik.
	 InvokeRequired: igaz, ha nem a vezérlőelemet létrehozó szálból kérdezzük le az értékét, egyébként hamis
	 Invoke: a vezérlőelemet létrehozó szálon futtatja le a paraméterként megadott metódust

private delegate void SetTextMethod( string text );
private void SetTextBoxText( string text ){
	if (InvokeRequired){
		Invoke(new SetTextMethod(SetTextBoxText), new object[]{text});
	}
	else
		textBox1.Text = text;
}

b) kell-e a következőknél szálvédelmet alkalmazni:

1) Függvények lokális változóira.

nem

2) Dinamikusan a heap-en allokált objektumokra.

igen

5. Linux vagy Windows példa a dinamikus programkönyvtárak betöltésére

lásd: 2007. június 13-i vizsga.

6. Tervezési minták...

a) Miben és hogyan segítenek a tervezési minták?

b) Composite tervezési minta, mi az, mire jó, hogy épül fel, példával vagy konkrétan a működése

lásd: 2007. május 30-i vizsga.

7. MVC vs. Document/View. Jellemzés, leírás, mi a különbség a kettő között, példa az egyikre

lásd: 2007. június 6-i vizsga.

8. Dinamikus webalkalmazások jellemzői (def, kliens oldal, szerver oldal, állapotkezelés)