CyberPress
közéleti magazin
cyberpress@sopron.hu
2024. április 23., kedd, Bel napja


Irodalmi Kávéház

Intranet Galéria

Apróhirdetések

Képeslapok

Soproni Képindex

Polgármesteri Hivatal

ZÓNÁK
Főoldal
Lapszemle
  Lapszemle
Kultúra
  KultúrVáros
  Lélektől lélekig
  SzínházVilág
  Soproni Ünnepi Hetek
  Borváros
Regionális kulturális programajánló
  Színház
  Kiállítás
  Rendezvények
  Hangverseny-Zene
Cyber Kurír
  Hírek - események
  Szomszédvár - Régió
  Soproni Snassz
Európai Unió
  EU
Cyber hírek
  Közélet
  SopronMedia
  Városháza
  Sport
Szórakozás
  Fesztiválgájd
  HangFal
  Mi1más
  Diákélet - diákszáj
  ViccGödör
Gazdaság
  Kereskedelmi és Iparkamara
Sport - szabadidő
  Sportcentrum
  Száguldó Cirkusz
Tudomány-technika
  Űrvadász
  Egészség
Környezet
  Borostyán
  Egészség

Dr. Bit  

Programozzunk együtt!

Objektum-orientáltság I.

Mit is nevezhetünk objektumnak egy programozási nyelvben? Lényegében adatok és függvények összessége, amit egységbe zárunk. Ha ez így első hallásra túl bonyolult lett volna, akkor gondolj egy egyszerű példára: Pl. grafikus programot írsz, és mondjuk pontokat kell kiraknod a képernyőre. Bizonyára jó lenne, ha mindezt nem külön-külön kellene megírnod, hanem valahogy együtt, hiszen ezek a feladatok szorosan kapcsolódnak egymáshoz. Az objektum-orientáltság pont ezt teszi lehetővé. Mindezeken túl sok más hasznos dologra van lehetőség, mint például:
- Osztálymezők hozzáférésének szabályozása
- Öröklés stb.

Mindezeket a következőkben át fogjuk tekinteni. Kezdjük az alapokkal. Egy objektumot C++-ban a class kulcsszóval definiálhatunk. Nézzünk egy példát:

class objektumnev {
int szam;
int szamol(void);
};


Nos, mint láthatjuk, a dolog meglehetősen hasonlít a sima "C-s" struct -ra. Ez lényegében így is van, azonban a class -szal sok olyan dolgot tehetünk meg, amelyet a struct-tal nem. Ezeket majd a későbbiekben fogom bemutatni. Egyelőre elég annyi, hogy a struct-tal ellentétben a class -ban van lehetőségünk az egyes tagok kívülről történő elérését szabályozni. Erre különböző kulcsszavak vannak, most elég lesz a public, ez lényegében a struct-hoz hasonlóan teljes elérést ad az objektumunk elemeihez. Nézzünk egy példát:

class objektumnev {
public:
int szam;
int szamol(void);
};


Ezzel a szam nevű változó és a szamol nevű függvény is elérhető lesz kívülről. Mint említettem, ezen kívül van más lehetőség, de az egyelőre nem kell nekünk, így azt a későbbiekben fogom tárgyalni.

Néhány dolgot meg kell néznünk, mielőtt gyakorlatban alkalmazhatnánk az OOP-t:

- Egy objektum (class) tartalmazhat az objektum nevével megegyező függvényt, ez azonban speciális feladatot lát el: ez az ún. konstruktor, amelyek az objektumpéldány létrejöttekor hajtódnak végre. Ilyen eset az, amikor a new-val dinamikusan hozunk létre egy objektumot.
- Egy objektum tartalmazhat egy ~osztálynév függvényt, ez is speciális feladatot lát el: ez az ún. dekonstruktor, amelyek az objektumpéldány megszűnésekor - pl. delete-el való memória-felszabadítás - hajtódik végre.
- A konstruktornak és destruktornak nincsen típusa (nem lehet void, int stb.)
- A konstruktornak és destruktornak lehetnek paraméterei.
- Az objektum maga is típus értékű: így egy objektum-mal könnyedén hozhatunk létre további példányokat. A fenti példát felhasználva így hozhatnánk létre egy obj nevű objektumpéldányt:

objektumnev obj;

Hát, lényegében ez volt az elmélet, lássuk a gyakorlatot:

A következő program a beadott paraméternek megfelelően kirak egy pontot a képernyőre, billentyűlenyomás után letörli az, majd kilép, és mindezt az előbb megismert objektum-orientáltság statikus felhasználásával:

// S_OOP1.CPP - Statikus Objektum Orientalt Program Pelda
#include
#include

class tpont
{
public: // Hogy elerhero legyen - lasd kovetkezo 'lecke'
tpont(int x, int y); // Konstruktor prototipousa - nincs tipusa!!
~tpont(); // Destruktor prototipousa - nincs tipusa!!

void rajzol(void); // Tagfüggveny prototipousa
};

tpont::tpont(int x, int y) // Konstruktor
{
gotoxy(x,y); // Kurzor pozicionallas!
}

void tpont::rajzol(void) // Tagfüggveny
{
cout<<".";
}

tpont::~tpont() // Destruktor
{
clrscr();
}



int main(void)
{

int x,y;
cout<<"nX koordinata: "; cin>>x;
cout<<"nY koordinata: "; cin>>y;
clrscr();

tpont pont(x,y); // Most statikusan hozzuk letre az objektumpeldanyt

pont.rajzol(); // Statikusan az 'objektumpeldany.fuggveny();' -modon
// lehet meghivni az objektum tagfuggvenyet!

getch();
// Az objektumpeldany itt szunik meg.
}
// Pelda vege



Hát ez volt az első statikus változat, most pedig nézzük meg ugyanezt dinamikusan, a new és delete -el:

// D_OOP1.CPP - Dinamikus Objektum Orientalt Program Pelda

#include
#include

class tpont
{
public: // Hogy elerhero legyen - lasd kovetkezo 'lecke'
tpont(int x, int y); // Konstruktor prototipusa - nincs tipusa!!
~tpont(); // Destruktor prototipusa - nincs tipusa!!

void rajzol(void); // Tagfuggveny prototipusa
};

tpont::tpont(int x, int y) // Konstruktor
{
gotoxy(x,y); // Kurzor pozicionallas!
}

void tpont::rajzol(void) // Tagfuggveny prototipusa
{
cout<<".";
}

tpont::~tpont() // Destruktor
{
clrscr();
}



int main(void)
{
tpont *pont;
int x,y;
cout<<"nX koordinata: "; cin>>x;
cout<<"nY koordinata: "; cin>>y;
clrscr();

if(!(pont = new tpont(x,y)))
{
cerr<<"Nincs eleg memoria.n";
return(1);
}

pont->rajzol();
getch();

delete pont; // Objektum torlese - memoria felszabaditasa
}

// Pelda vege



Hát mostanra ennyi, a következő alkalommal átnézzük a hozzáférési szinteket az OOP-ban.



2001. jĂşlius 31., kedd 11:46


címlap zóna archívum




© 1999-2007, Internet Sopron Egyesület