SzoftTechPZH20130510
1.: a) UML (6p)
b) (csonk) Nagy projektekben c# nyelvű környezetben a feladatunk egy Document-View architektúrájú alkalmazás alapjainak elkészítése. Az architektúra egyik alapgondolata, hogy a dokumentum(Document) objektum egy listában tartja nyilván a nézeteit(View) különböző típusúak lehetnek (pl DrawingView, Editorview). A nézeteknek vannak tulajdonságaik (pl Size) és műveleteik (pl SetSize). Vannak, amik elérnek. (eddig emlékszem)
2.: A person osztály egy Age nevű, integer típusú publikus tulajdonsággal (property) és egy szintén nyilvános, AgeChanged eseménnyel rendelkezik. Ha Age-t megváltoztatjuk, az elsüti az AgeChanged Eseményt, melynek argumentumaiban megadja az Age tulajdonság korábbi és új értékét is.
Adjuk meg a Person osztály teljes kódját C# nyelven, és írjunk hozzá példakódot a használathoz.
public delegate void ChangedDelegate(int x, int y);
public class Person
{
public event ChangedDelegate AgeChanged;
private int age;
public Person(int age)
{
this.age = age;
}
public int Age
{
get { return age; }
set
{
AgeChanged(age, value);
age = value;
}
}
}
class Program
{
static void Main(string[] args)
{
Person jakab = new Person(25);
jakab.AgeChanged += eventHandler;
jakab.Age = 30;
}
static void eventHandler(int regi, int uj)
{
Console.WriteLine("Age régi értéke: {0}", regi);
Console.WriteLine("Age új értéke: {0}", uj);
}
}
3.: a) Milyen célt szolgál a Partial class?
Segítségével több fájlba szétszedhető az osztály definíciója.
Csak .NET 2.0-tól elérhető nyelvi elem.
A fordító fésüli össze (nem lehetnek a részek külön szerelvényben).
Példa: WinForms használatánál a generált és a kézzel írt kód különválasztása.
b) Component és Control osztályok közti különbség?
- Component (komponens):
Bármilyen, container (pl. designer) által tartalmazható komponens. Nem feltétlenül vizuális (pl. Timer, SerialPort), de fel lehet dobni a designerbe, megadhatók vizuálisan a tulajdonságok és események
- Control (vezérlő):
A Component-ből származik. Minden vezérlő őse. Natív ablak HWND tartozik hozzá (Handle tulajdonság). Összes közös tulajdonság, összes közös művelet, összes közös esemény
c) (10,10)-be zöld színű, 1 px vastag vonallal rajzolt, kitöltetlen, 30px oldalhosszú négyzetet rajzoljunk. A vonal színe 10 mp alatt menjen át fehérbe. 'Interruptolj' az x gombbal. Csak időzítő (Timer) alapú megoldás elfogadható.
public partial class Form1 : Form
{
bool stopped = false;
int cntr = 0;
public Form1()
{
Timer timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
this.KeyDown += new KeyEventHandler(Form1_Keydown);
InitializeComponent();
}
void Form1_Keydown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.X && !stopped)
stopped = true;
}
void timer_Tick(object sender, EventArgs e)
{
if (!stopped)
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Pen pen = new Pen(Color.FromArgb(5 + cntr * 25, 255, 5 + cntr * 25), 1);
e.Graphics.DrawRectangle(pen, 10, 10, 30, 30);
if (cntr == 10)
stopped = true;
if (!stopped)
++cntr;
}
}
4.:a) C# példa Dispose kapcsán using blokk használatára + magyarázat a kódhoz (6p)
using(NativeWrapperPelda nw = new NativeWrapperPelda()) // NativeWrapperPelda implementálja az IDisposeable-t
{
nw.SomeMethod();
///...
}//itt meghívódik az nw.Dispose()
b) Felügyelt .NET környezetben miért ne férjünk egy obj destruktorában a felügyelt tagváltozókhoz? (3p)
A destruktor csak a külső hivatkozásait engedhesse el(pl. nem felügyelt erőforrások) , mert a felügyelteket lehet, hogy felszabadította már a GC.
c) natív C++ template-ek 3 negatív tulajdonsága, mely C#-ból eltűnt (3p)
- Ha nem használunk egy sablont, ki se derülnek a benne levő hibák c++ban.
- Kódburjánzás (code bloat) veszély eltűnt.
- A sablon önmagában, a paraméterek megkötése nélkül is lefordul. A forráskód védelme megoldott.
5.: Szálkezelés:
a) Többszálú alk. előnyei (4p)
- jobb processzor kihasználtság
- nem növekvő átlagos válaszidő (interaktivitás – pl. nem akad le a GUI, szerveralkalmazások)
- időzítés érzékeny feladatok magasabb prioritású szálon futtathatóak
b) Itt el kellett indítgatni két szálat meg megállítani őket..
c) Mely esetben használunk ill nem használunk statikus blokkot (3p)
6.: Csővezeték architektúra
a) Adatnyelő által vezérelt csővezeték architektúra ismertetése szekvenciadiagrammal (8p)
b) (írj) Pszeudo-kódot szűrő (filter) komponens megvalósításához adatnyelő által vezérelt csővezeték architektúrában(6p)
7.: ADO.NET
Írjunk robosztus, hatékony, kapcsolat alapú modellre épülő ADO.NET példakódot, amely kitöröl minden olyan rekordot, melyben létezik a DepartmentID.
Staff(StaffID(kulcs), Name, EMail, DepartmentID). (13p)
SqlConnection conn = null;
try
{
conn = new SqlConnection("...");
SqlCommand command = new SqlCommand("DELETE FROM Staff WHERE DepartmentID IS NOT NULL", conn);
conn.Open();
command.ExecuteNonQuery();
}
catch(EXception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (conn != null) conn.Close();
}
- A szálkezelős feladat ha jól emlékszem hasonló volt a rendes ZH A csoportjának a feladatához: megírt kód elindít két szálat: egyik szál egy long (64bites!!!) változóbe beír egy számot, majd a másik szál kiolvassa és kiírja a konzolra. az egyes szál a beírás után, a kettes szál a kiolvasás után befejezheti a futását. Az nem tételezhető fel hogy az egyes szál előbb indul el mint a kettes!
