Skip navigation

Osztályok és objektumok

Osztályok

A C# nyelv a programozásnak egy nagyon elterjedt megközelítését, az objektumorientált programozást valósítja meg. Ennek lényege, hogy a megoldandó feladatunkban megjelenő résztvevőket objektumokkal reprezentáljuk 

Az objektumok a probléma egyes entitásainak absztrakt leírása. A formális definíció helyett viszont hasznosabb egy példa.

Tegyük fel, hogy a problémánkban embereket kell nyilvántartanunk. Az emberek leírásához létrehozunk egy embereket leíró osztályt.

namespace Osztaly
{
    class Ember
    {
        public string nev;
        public int elektor;
        public int magassag;

        public void bemutatkozik()
        {
            Console.WriteLine("Jó napot, " + nev + " vagyok.");
        }
    }
}

Az osztály leírja az ember tulajdonságait, és képességeit.

Az osztály tulajdonságait úgynevezett adattagokkal adjuk meg, amik az osztályon belül definált változók. Az emberhez meg lehet adni például a nevét, életkozár és a magasságát.

Az ember képességeit pedig beépített függvények adják meg. Ezek a függvények egy-egy szolgáltatást adnak, amire az ember képes. A bemutatkozik() függvénnyel például be tud mutatkozni az emberónk.

Objektumok

Fontos viszont észben tartni, hogy az osztály még ad meg létző egyedeket. Inkább úgy kell gondolni rájuk, mint tervrajzokra, amikből később le lehet gyártani a végső tárgyat.

A fenti Ember osztály fényében az azt jelenti, hogy az osztály még csak megadja, hogy milyen tulajdonságai és képességei vannak egy-egy embernek (a feladatunk szempontjából). Ahhoz viszont, hogy legyen egy emberünk az osztályt példányosítani kell. A példányt objektumnak nevezzük, és ennek már meg tuzdjuk adni a tulajdonságait, és el tudjuk indítani a viselkedéseit.

    class Ember
    {
        public string nev;
        public int eletkor;
        public int magassag;

        public void bemutatkozik()
        {
            Console.WriteLine("Jó napot, " + nev + " vagyok.");
        }

        static void Main(string[] args)
        {
            Ember e = new Ember();

            e.nev = "Béla";
            e.eletkor = 20;
            e.magassag = 176;

            e.bemutatkozik();
        }

    }

A fenti kódban az ember létrehozása a Main() függvényben van. Az objektum létrehozásához a new parancsot tudjuk haszználni, ami léterhozza az új emberünket.

Innentől kezdve az ember létezik, meg lehet adni a nevét, életkorát mgassáágát, és be is tud mutatkozni.

Az osztály-objektum konstrukcióra azért van szükség, mert amikor egy osztályt megtervetünk, akkor megadjuk, hogy egy-egy ember hogyan fog kinézni. Ezek után viszont a programunkban sok objektum készülhet ugyanabból az osztályból, több emberünk is lehet akiknek külön neve, életkora, magassága van, amiket már külön kell kezelni, külön objektum ként.

Vagyis az osztály közös, de az objektumok önálló külön életet élnek.

Statikus adatok, és függvények

Végül fontos megjegyezni, hogy az osztályoknak lehetnek statikus adataik és függvényeik is. Az ilyen adatokat a static kulcsszóval tudjuk megadni.

class Ember
    {
        public string nev;
        public int eletkor;
        public int magassag;

        public static int atlagmagassag = 172;

        public void bemutatkozik()
        {
            Console.WriteLine("Jó napot, " + nev + " vagyok.");
        }

        public static void mennyiazaltagmagassag()
        {
            Console.WriteLine("Az emberek átlag magassága: " + atlagmagassag + " cm.");
        }

        static void Main(string[] args)
        {
            Ember.mennyiazaltagmagassag();

            Ember e = new Ember();

            e.nev = "Béla";
            e.eletkor = 20;
            e.magassag = 176;

            e.bemutatkozik();
        }

    }

Az ilyen esetben a statikus adatok és függvények az osztályhoz fognak tartozni, nem pedig az objektumokhoz. Ennek több következménye is van.

Az egyik, hogy a statikus adatokat úgy is tudjuk használni, hogy nem hozunk létre objektumot. A fenti példában látszik, hogy a Main() függvényben meghívtuk közvetlenül az Ember osztály mennyiazaltagmagassag() függvényét mielőtt bármilyen objektum létrejött volna. Ezt a bemutatkozik() függvénnyel nem tudtuk volna megtenni, hiszen bemutatkozni, csak létező ember (objektum) tud.

Itt meg kell jegyezni azt is, hogy a Main függvény is egy statikus függvény. Azért is tudja a programunk elindítani, mielőtt létrejött volna ember objektum.

A másik fontos tulajdonsága a statiksu adatoknak, hogy közösek. Vagyis ha az eygik objektumon keresztül megváltoztatjuk az értékeküek, akkor utána az összes objektum az új értéket fogja látni.

Egészítsük ki egy kicsit a kódot.

        ...

        public static int atlagmagassag = 172;

        public void bemutatkozik()
        {
            Console.WriteLine("Jó napot, " + nev + " vagyok.");
            Console.WriteLine("Béla szerint az emberek átlag magassága: " + atlagmagassag + " cm.");
        }

        ...

        static void Main(string[] args)
        {
            Ember bela = new Ember();

            bela.nev = "Béla";
            bela.eletkor = 20;
            bela.magassag = 176;

            bela.bemutatkozik();

            Ember.atlagmagassag = 168;

            bela.bemutatkozik();
        }

A program új változatában az emberünk bemutatkozáskor azt is megmondja, hogy szerinte mennyi az emberek átlag magassága. Majd a Main függvényben kétszer muatkozik be az ember objektumunk.

Először bemutatkozik és kíirja, hogy az ebmerek átlagmagassága 172 cm. Majd megváltoztatjuk az Ember osztály átlagmagasság értékét. Ezért a második bemutatkozáskor Béla már az új értéket modnja.