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

A VIK Wikiből
(SzoftTechVizsga070530 szócikkből átirányítva)

1. Egy egyszerű statikus struktúrából csinálj kódot C++ / C# / Java nyelven!

(???)

struct Point{
	double X;
	double Y;
	void MoveBy(double dX, double dY){
		X+=dX; Y+=dY;
	}
}
public static Point p;
p.X = 1.2f;
p.Y = 3.4f;

Generikus struktúra:
public struct Point<T>{
	public T X;
	public T Y;
}
public static Point<float> point;
p.X = 1.2f;
p.Y = 3.4f;

2. C# Event + példaprogram

Eseményvezérelt alkalmazások --> az alkalmazás bizonyos elemei eseményeket váltanak ki bizonyos sorrendben --> az alkalmazás más részei reagálnak. (A program futása tehát nem szekvenciális.) Tetszőleges osztály publikálhatja eseményeknek egy csoportját, amelyekre tetszőleges más osztályok előfizethetnek. Amikor a publikáló osztály elsüti az eseményt, az összes feliratkozott osztály értesítést kap erről. .NET-ben az eseménykezelés hátterében a delegátok állnak. Az eseményt publikáló osztály tulajdonképpen egy multicast delegátot definiál, amely a feliratkozott osztályok egy-egy metódusára mutat. Amikor az esemény elsül, a feliratkozott osztályok megfelelő metódusai a delegáton keresztül meghívódnak. A feliratkozott osztályok azon metódusait, amelyekkel az egyes eseményekre reagálnak, eseménykezelő metódusoknak nevezzük. Minden eseménynek van egy típusa és van egy neve. A típusa annak a delegátnak a típusa, amelyik tulajdonképpen megfelel magának az eseménynek.

Deklarálás:

	public delegate void ClickHandler( object sender, Eventargs e );
	event ClickHandler onClicked;

Elsütés:

	onClicked( this, pointerLocation); //elsütés

Eseményre beregisztrálás (a myClickHandle az előfizető egy művelete):

	Button.onClicked += myClickHandler;

Event publikáló és előfizető kódja:

Összefoglalva:

  • nyelvbe épített esemély modell, a delegátokra épül
  • publisher/subscriber minta
  • eseményt hívni és deklarálni csak a tulajdonos (publikáló) osztályból lehet
  • eseményre beregisztrálás kezelőfüggvény hozzáadásával az előfizető objektumnál

-- Olthyer - 2008.05.29.

3. Eseményvezérelt programozás

a) Írj egy Form alapu programot, ami MessageBox-ban megjeleníti a leütött billentyűt!

public partial class MainForm : Form
{
	public MainForm()
	{
		InitializeComponent();
		this.KeyDown += new KeyEventHandler(this.MainForm_KeyDown);
	}

	protected override void OnKeyDown(KeyEventArgs e)
	{
		base.OnKeyDown(e);
		MessageBox.Show("A billentyű (virt. fv.): " + e.KeyCode.ToString());
	}

	private void MainForm_KeyDown(object sender, KeyEventArgs e)
	{
		MessageBox.Show("A billentyű (eseménykez.): " + e.KeyCode.ToString());
	}
...
}

b) Hogyan kezeli az OS a bill.leütést, hogy adja át a felügyelt környezetnek?

A fenti kód esetén bekövetkező történések:

-- Olthyer - 2008.05.29

4. Szálkezelés

a) Példa szál indítására.

A parancssori argumentumok számától függően paraméteres, ill. paraméter nélküli szálat indítunk:

class ThreadTestClass
{
	 public static void Main(string[] args)
	 {
		  Thread t = null;
		  if (args.Length == 0)
		  {
				t = new Thread(new ThreadStart(ThreadMethod1));
				t.Start();
		  }
		  else
		  {
				t = new Thread(new ParameterizedThreadStart(ThreadMethod2));
				t.Start(args[0]);
		  }
	 }
	 public static void ThreadMethod1()
	 {
		  Console.WriteLine("Thread without parameter.");
	 }

	 public static void ThreadMethod2(object param)
	 {
		  Console.WriteLine("Thread with parameter: {0}", param.ToString());
	 }
}

-- Olthyer - 2008.05.30.

b) AutoResetEvent ismertetése+példakód

A megértést segítő leírás: Abban az esetben, ha két szálat szeretnénk szinkronizálni (például, ha az egyik végzett, csak utána induljon a másik), hasznos dolog az EventWaitHandle két alosztályának a használata. Ezek az AutoResetEvent és ManualResetEvent (mindkettő a System.Threading névtérben van). Az AutoResetEvent úgy működik mint egy forgóajtó, melyen csak érvényes jeggyel lehet bemenni. Az Auto azt jelenti az osztály nevében, hogy a forgóajtó automatikusan bezáródik, amikor valaki áthalad rajta. Egy szál a WaitOne metódus hívásával várakozhat a forgóajtónál addig, amíg újra ki nem nyílik. A Set metódus hívásával nyílik ki az ajtó, így adva lehetőséget azoknak a szálaknak, amelyek WaitOne-nál várakoznak. Példa AutoResetEvent-re

  • Esemény, egy fajta szinkronizációs eszköz.
  • Írása és olvasása az ütemező által nem megszakítható.
  • 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.)

Példa (előtérszál leállítása eseményre történő várakozással):

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))
		  {
				...
		  }
	 }
}

A várakozás implementációját a WaitHandle osztály tartalmazza, ezt használják az esemény osztályok is. Használatával lehetséges egy vagy több eseményre várakozni.

-- Olthyer - 2008.05.29.

5. Rajzolj fel példát 1:1, 1:n, m:n relációkra, és írd fel, milyen táblákba képezed le őket

6. A 3 rétegű architektúra ismertetése

Háromrétegű architektúra

  • Külső séma - alkalmazás.
  • _Alkalmazáslogikai alréteg_: opcionális. Ez egy interfész (homlokzat) a tartománymodellhez. Az interfész illeszkedik a GUI vezérlőelemeihez. A tartomány típusairól logikai típussá konvertál.
  • Koncepcionális séma - tartomány (üzleti logika).
  • Belső séma - adatbázis.
  • Felépítés:
Alkalmazás Tartomány Adatbázis

Előnyök:

  • Az alkalmazás kevésbé függ a fizikai adatszerkezettől.
  • A referenciális integritás alkalmazásfüggetlenül kezelhető.
  • Az adatbázis átszervezhető az alkalmazástól függetlenül.
  • Tranzakciókezelés a DBMS feladata – ne nekünk kelljen implementálni.
  • Ipari támogatottság (Microsoft, Sun).

Hátrányok:

  • Kevesen használják.
  • Nagyobb erőforrásigény.
  • Többletmunka.
  • Az objektumorientált adatbázisok jó felhasználási területe, de ezek teljesítőképessége kétséges.

-- Olthyer - 2008.05.29

Bónuszként ide másolom a kétrétegűt is, hátha legközelebb azt kérdezik! :)

Kétrétegű architektúra

  • Megosztott adatbázis (file-ok, DBMS)
  • Alkalmazások (hagymányos vagy 4GL nyelven)
  • Felépítés:
Alkalmazás Megosztott adatbázis

Előnyök:

  • Az adatkarbantartás elkülöníthető az alkalmazásoktól.
  • A már meglévő adatokat több szempontból (nézetből) is megjeleníthetjük.

Hátrányok:

  • Az adatok integritása jól csak az adatbázis szintjén megoldható – ha nincs lehetőség tárolt eljárásokra, akkor ez problematikussá válhat.
  • Ha az adatintegritás kezelését „bedrótozzuk” az alkalmazásba, nem lehet megváltoztatni a régi alkalmazásokkal való kompatibilitás miatt.
  • Optimalizálás denormalizálással.
  • Az alkalmazás az adatbázis fizikai felépítését is figyelembe kell vegye, pedig neki csak a szemantikát kellene.

-- Olthyer - 2008.05.29.

7. Tervezési minták

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

A tervezési minta gyakran elforduló problémát ír le; annak környezetét és a megoldás magját, amit alkalmazva számos gyakorlati eset hatékonyan megoldható. (Lazább értelemben véve akár az interfészek is tekinthetőek tervezési mintának.) A fejlesztés tervezés fázisában nagy segítség. Programozási nyelvtől független.

Négy alapelem:

  • minta neve
  • probléma és környezet bemutatása (gyakran konkrét példán keresztül)
  • absztrakt leírás (a megoldásban szereplő elemek, kapcsolatuk, az egyes elemek felelőssége, együttműködése)
  • következmények, tapasztalatok
A tervezési minták a fejlesztés tervezés fázisában segítenek (az analízis minták az analízis fázisában)
Ezekben segítenek a patternek:
	I. Megfelel objektumokat megtalálni, definiálni
		Objektumok számának, méretének meghatározása
		Objektum interfészek definiálása
		Objektum implementálása
  II. Újrafelhasználás (design for reuse)
 III. Változtathatóság, kiterjeszthetség (design for change)

-- Olthyer - 2008.05.29.

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

  • Olyankor alkalmazható, mikor két objektum között rész-egész viszony van.
  • fastruktúrába rendezhetők vele különböző objektumok
  • előnye, hogy elemi és összetett objektumokat egységesen lehet vele kezelni
  • pl. grafikus megjelenítő, mely "ábra"-kat tartalmaz(ábra az absztrakt ősosztály rajzol metódussal):

egyszerű objektum pl. vonal, pont, stb.
összetett objektum pl. négyzet, rombusz, stb.
ha azonban bármelyiket ki szeretnénk rajzolni, elég meghívni az abra.rajzol - t, így minden objektum ki tudja rajzolni magát, és a felhasználónak nem kell tudnia h az egyszerű v összetett objektum volt-e -- Gery - 2008.06.01.

8. Milyen előnyei és hátrányai vannak a webes alkalmazásoknak? Írj 5 előnyt és 5 hátrányt!

Előnyök:
- egyszerű telepítés
- frissítés és javítás
- nyitottság
- szabványos távoli kommunikáció
- olcsóbb az üzemeltetés és hosszú távon a fejlesztés is
- mobil és nem mobil oldali klinesek egyaránt
- kliens oldali platformfüggetlenség
- távoli adminisztráció
- szabványos authentikáció használható

Hátrányok:
- kritikus válaszidő
- grafika erős támogatása (pl:GDI+)
- http és html korlátozottsága
- a védelem kritikus
- lokális erőforrások kezelése
- felhasználói hozzáállás
- infrastruktúra
- privát adatok hozzáférése
- adatok kezelése

-- Dragooon - 2008.05.29.