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

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 21., 21:22-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoalap|SzoftTechVizsga070530}} __TOC__ ==1. Egy egyszerű statikus struktúrából csinálj kódot C++ / C# / Java nyelven!== (???) <pre> struct P…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Ez az oldal a korábbi SCH wikiről lett áthozva.

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. 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:

Ezen a helyen volt linkelve a event.GIF nevű kép a régi wiki ezen oldaláról. (Kérlek hozd át ezt a képet ide, különben idővel el fog tűnni a régi wikivel együtt)


Ö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:

Ezen a helyen volt linkelve a billentyuLe.GIF nevű kép a régi wiki ezen oldaláról. (Kérlek hozd át ezt a képet ide, különben idővel el fog tűnni a régi wikivel együtt)


-- 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

Ezen a helyen volt linkelve a adatb1.png nevű kép a régi wiki ezen oldaláról. (Kérlek hozd át ezt a képet ide, különben idővel el fog tűnni a régi wikivel együtt)


Ezen a helyen volt linkelve a adatb2.png nevű kép a régi wiki ezen oldaláról. (Kérlek hozd át ezt a képet ide, különben idővel el fog tűnni a régi wikivel együtt)


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.