SzoftTechVizsga100608

A VIK Wikiből
A lap korábbi változatát látod, amilyen Ferrero (vitalap | szerkesztései) 2013. február 6., 08:45-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)
Ugrás a navigációhoz Ugrás a kereséshez

1. Felügyelt környezetek

a) Ismertesse a fordítási és a végrehajtási (futtatás) lépéseit .NET környezetben. Ennek során adja meg mit értünk IL (Intermediate Language) kód alatt! (6 p) IL = köztes kód, amit a forrás kódból a nyelvi fordító állít elő, és ebből a JIT fordító állítja elő a natív kódot. A köztes kód és a metaadatok teszik ki együttesen a szerelvényt.

Fordítás: Forrás kód (.cs... stb) ->[Nyelvi Fordító] -> IL kód

Köztes rész: IL + metaadatok => szerelvény

Végrehajtás: Szerelvény -> [JIT fordító] -> Nativ Kód

JIT fordító a telepítéskor vagy a metódus első meghívásakor fordítja le a kódot.



b) Adja meg a futtatókörnyezetek alkalmazásának három fontos előnyét! (6 p)

Hordozhatóság: IL segítségével n+m translatorra van szükség n nyelv, m platformra implementálásához.

Kompaktság: Az IL kód kompaktabb is lehet, mint az eredeti kód.

Hatékonyság: Nem kell az új platformok sajátosságait használni, mindig újra tanulni.

(Az alábbi előny már nem éri meg a 6 pontot) Biztonság: Adat és kód ellenőrzése Együttműködés több nyelvel, hisz minden forrásból gyártható IL. Rugalmasság: metaprograming, dynamic code generation

2. Modern nyelvi eszközök

Ismertesse a C# nyelv property fogalmát! Kódrészlettel illusztrálja válaszát! (12 p)

Property: osztályok tagváltózóihoz férünk hozzá szintaktikailag hasonló módon, mint ha egy hagyományos tagváltozót érnénk el. Metódus szerűen implementáljuk a változó elérésének módját, így private tagváltozókat elérünk publikus get(x), set(x) jelleggel és ez nyelvi szinten támogatott.

Előnyök: tagváltozó elrejtése, származtatott érték, hozzáférés szabályozás.

public class Valami{
	private int A;
	public Valami(int a){
	this.A=a;
	}

	public A{
	get { return A;}
	set { if(A>=< value)
			throw new ArgumentException("Bad Argument");
			else 
			A=value;
	 }
  }
}

3. Eseményvezérelt programozás és grafikus megjelenítés

a) Ismertesse röviden a Windows Forms saját vezérlők készítésének a lehetőségét! (6 p)

Control osztályból származtatás: akkor használjuk, ha egy teljesen új vezérlő elemet szeretnénk létrehozni. Csak minden Controlra közös tulajdonságokat és műveleteket kapjuk meg. Adhatunk hozzá új tulajdonságokat, eseményeket és a rajzolás a mi feladatunk.

Adott Control osztályból való származtatás: egy már meglévő vezérlőelemhez hasonló elemet szeretnénk alkotni. Csak az új / módosított speciális viselkedést kell megírnunk, a többi működés megmarad. Persze bővíthetjük új tulajdonságokkal, eseményekkel.

User Control osztályból származtatás: Vizuálisan elkészíthetjük az összetett vezérlőelemeinket, mint ahogy egy Form-ot készítenénk. A tartalmazott vezérlőelemeknek private a láthatóságuk. Tipikusan az összetett felhasználói felület megalkotásának eszköze.

b) Írjon olyan C# nyelvű alkalmazásrészletet, amely a (10,20) koordinátában megjelenít egy piros színnel kitöltött 50 pixel oldalhosszúságú négyzetet. A négyzet színe minden egérkattintáskor legyen egyre sötétebb piros (végül fekete). A megjelenítés a GDI-re épüljön (nem használhatja a Label, TextBox, stb. vezérlőket)! Csak a megoldáshoz szorosan hozzátartozó kódrészletet adja meg! (8 p)

	 public partial class Form1 : Form
	 {
		  public Form1()
		  {
				InitializeComponent();
		  }

		  protected override void OnMouseDown(MouseEventArgs e)
		  {
				base.OnMouseDown(e);
				if (i>0) i -= 5;
				Invalidate();
		  }

		  private Brush brush1;
		  private int i = 255;

		  protected override void OnPaint(PaintEventArgs e)
		  {
				base.OnPaint(e);

				using( brush1 = new SolidBrush(Color.FromArgb(i, 0, 0) ) )
				{
					 e.Graphics.FillRectangle(brush1, 10, 20, 50, 50);
				}
		  }
	 }

4. Szálkezelés

a) Írjon programot, ami egy háttérszálban egy perc alatt elszámol 1-től 60-ig és az aktuális értéket kiírja konzolra. (7 p)

public class Program{
  public static void Main(string[] args){
	 Thread t=new Thread(Szamol);
	 t.Start();
	 t.IsBackground=true;
  }
  public void static Szamol(){
	 private static int szam=0;
	 if(szam<60){
		Sleep(1000);
		szam++;
		Console.WriteLine("A számláló értéke: {0}",szam.ToString());
	 }
  }
}

b) Egészítse ki a programot úgy, hogy egy tetszőleges billentyű leütésével a számolás megszakítható legyen, de a program ne lépjen ki, csak újabb billentyű lenyomásakor (billentyű leütésre várakozni a ReadKey() hívással lehet). (4 p)
A Main függvénybe a t.IsBackground=true; után:

ReadKey();
t.Exit();
t.Join();
Console.WriteLine("A számolás megszakadt.");
ReadKey();

5. Bináris komponensek evolúciója, Adatkezelés

Példán keresztül mutassa be az objektum relációs leképezést, adjon meg egy osztálydiagramot, amely tartalmaz egy-több, több-több kapcsolatot! Képezze le ezeket adatbázistáblába! (12 p)

6. Tervezési minták

a) Adja meg röviden, hogy miben és hogyan segítenek a tervezési minták a tervezés során! (3 p)

A tervezési minták a fejlesztés tervezés fázisában segítenek a megfelelő objektumokat megtalálni, definiálni. Segít meghatározni az objektumok számát, méretét, az interfészeket definiálni és az objektumokat implementálni. Az újrafelhasználható kialakítás eszköze, ami kialakítja a változtatható és kiterjeszthető munkát. b) Jellemezze a "Composite" tervezési mintát! Mire ad megoldást a "Composite" tervezési minta? Mutassa be konkrétan vagy egy példán keresztül a minta működését! Ezen felül rajzolja fel a minta osztálydiagramját, valamint adja meg a mintában szereplő osztályok szerepét! (10 p)

Strukturális tervezési minta, amely a rész-egész viszonyban álló objektumokat fastruktúrába rendezi és a kliensek számára elérhetővé teszi, hogy az egyszerű és a kompozit objektumokat egységesen kezelje.



7.*Ismertesse az MVC (Model-View-Control) vagy a Dokumentum/Nézet (Document-View) architektúrát. Ennek keretében rajzolja fel a minta osztály és szekvenciadiagrammját. Adja meg az egyes osztályok szerepét! (14 p)*

Model _ View _ Controller: Model = applikáció objektum View = megjelenítésért felelős objektum COntroller = a felhasználói interakcióra való reagálásért felelős objektum.

Inicializálás: A főprogram létre hozza a Modell-t, majd a View-t. A View eztán létrehozza a Controllert, majd a Modell magához köti a View-t.

Működés: Eseményt a controller kezeli, és esemény esetén a controller értesíti a modell-t az eseményről. A modell szól a view-nak, hogy változás történt, ezek alapján a View lekéri a modelltől az változást és update-li magát.

Előny: Többféle nézet ugyanahhoz a modellhez és a vezérlő és a nézet függetlenül cserélhető. Szinkronizáltak a nézetek.

Hátrány: Nő a komplexitás, túl sok szükségtelen frissítés, a Modell és a Controller el szigetelve vannak egymástól. ( Legutolsóra megoldás a Document-View).


8. Webalkalmazások (12 p)

a) Ismertesse a webalkalmazások állapotkezelését!
- kliens oldalon: wiew state, rejtett mező, cookie, URL paraméterek
- szerver oldalon: Application objektum, Session objektum, adatbázis, fájl
b) Hogyan használhatók a Session-ök állapotkezelésre?
- A kiszolgáló tárolja, felhasználónként elkülönítve
- Komplex objektumok tárolhatók benne
- Sok erőforrást (memóriát) igényelhet a kiszolgáló oldalon: skálázhatóság
- Nem lehet megosztani a felhasználók között
- Amennyiben nincs feltétlen rá szükség, érdemes kerülni a használatát


-- Main.kir26103id - 2010.06.10. -- waczkor - 2011.