„SzoftTechPZH20130510” változatai közötti eltérés

A VIK Wikiből
Nincs szerkesztési összefoglaló
Nincs szerkesztési összefoglaló
130. sor: 130. sor:
'''c) natív C++ template-ek 3 negatív tulajdonsága, mely C#-ból eltűnt (3p)'''
'''c) natív C++ template-ek 3 negatív tulajdonsága, mely C#-ból eltűnt (3p)'''


a c# generikus típusai nem olyan rugalmasak mint a c++ templatek. pl nem lehet benne aritmetikai utasításokat használni, de lehet benne user-defined operátor.
* 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.
* c# se explicit se partial specializációt nem támogat.
* A sablon önmagában, a paraméterek megkötése nélkül is lefordul. A forráskód védelme megoldott.
* c# nem engedi a típusos paramétereknek a default típust.
* c# nem engedi a nem típusos template paramétereket (pl.: template C<int i> {})


'''5.: Szálkezelés:'''
'''5.: Szálkezelés:'''
146. sor: 144. sor:
'''b) Itt el kellett indítgatni két szálat meg megállítani őket..'''
'''b) Itt el kellett indítgatni két szálat meg megállítani őket..'''


'''c) Mely esetbe használunk ill nem használunk statikus blokkot (3p)'''
'''c) Mely esetben használunk ill nem használunk statikus blokkot (3p)'''


'''6.: Csővezeték architektúra'''
'''6.: Csővezeték architektúra'''

A lap 2014. április 13., 20:32-kori változata

1.: a) UML (6p)

b) (csonk) Nagy projektekben c# nyelvű környezetben a feladatunk egy Document-View architektúrájú alkalmazás alapjainak elkészeí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űveleteikl (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 esü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édszedhető 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önsé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 desktruktorá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)

  1. jobb processzor kihasználtság
  2. nem növekvő átlagos válaszidő (interaktivitás – pl. nem akad le a GUI, szerveralkalmazások)
  3. 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értelt csővezeték architektúra ismeretése szekvenciadiagrammal (8p)

b) (írj) Pszeudo-kódot szűrő (filter) komponens megvalósításához adatnyelő által vezértelt 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!