Szoftvertechnikák vizsga, 2007. május 30.
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.