„Szoftvertechnikák vizsga, 2007. május 30.” változatai közötti eltérés
autoedit v2: fájlhivatkozások egységesítése, az új közvetlenül az adott fájlra mutat |
|||
| (3 közbenső módosítás, amit 2 másik szerkesztő végzett, nincs mutatva) | |||
| 1. sor: | 1. sor: | ||
==1. Egy egyszerű statikus struktúrából csinálj kódot C++ / C# / Java nyelven!== | ==1. Egy egyszerű statikus struktúrából csinálj kódot C++ / C# / Java nyelven!== | ||
(???) | (???) | ||
| 45. sor: | 43. sor: | ||
Event publikáló és előfizető kódja: <br /> | Event publikáló és előfizető kódja: <br /> | ||
[[ | [[File:sznikak_vizsga_20070530_event.GIF]] | ||
Összefoglalva: | Összefoglalva: | ||
| 83. sor: | 81. sor: | ||
A fenti kód esetén bekövetkező történések: <br /> | A fenti kód esetén bekövetkező történések: <br /> | ||
[[ | [[File:sznikak_vizsga_20070530_billentyuLe.GIF]] | ||
-- [[KissAnett|Olthyer]] - 2008.05.29 | -- [[KissAnett|Olthyer]] - 2008.05.29 | ||
| 125. sor: | 123. sor: | ||
A megértést segítő leírás: | 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 | 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. | * Esemény, egy fajta szinkronizációs eszköz. | ||
| 157. sor: | 155. sor: | ||
==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== | ==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== | ||
[[File:sznikak_vizsga_20070530_adatb1.png]] | |||
[[File:sznikak_vizsga_20070530_adatb2.png]] | |||
==6. A 3 rétegű architektúra ismertetése== | ==6. A 3 rétegű architektúra ismertetése== | ||
| 269. sor: | 267. sor: | ||
- privát adatok hozzáférése<br> | - privát adatok hozzáférése<br> | ||
- adatok kezelése<br> | - adatok kezelése<br> | ||
-- [[FrangTamas|Dragooon]] - 2008.05.29. | -- [[FrangTamas|Dragooon]] - 2008.05.29. | ||
[[Category:Infoalap]] | [[Category:Infoalap]] | ||
A lap jelenlegi, 2017. július 12., 15:23-kori változata
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.


