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. (→‎2. Modern nyelvi eszközök)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor kérlek javíts rajta egy rövid szerkesztéssel.

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót


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.