• Nem Talált Eredményt

VII. Struktúrák és objektumok

N/A
N/A
Protected

Academic year: 2022

Ossza meg "VII. Struktúrák és objektumok"

Copied!
10
0
0

Teljes szövegt

(1)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

Dr. Holló Csaba, SZTE TTIK, Szoftverfejlesztés Tanszék

VII. Struktúrák és objektumok

Programozási alapismeretek kurzus

Olvasási idő:

7 perc

A lecke célja A struktúrák és objektumok hasonlóságának feltá- rása az objektumok technikai kezelésének jobb megértése, illetve a struktúrák fontosságának tudatosítása érdekében.

Tudás Ismeri a struktúrák és az objektumok közötti analógiákat.

Képesség Helyesen használja a struktúrákat és az objektumreferenciákat.

(2)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

2

Struktúra típus C-ben

Különböző típusú összetartozó adatok együttes tárolására,

egyetlen egységként történő kezelésére szolgáló összetett típus.

A struktúrában az értékeket tároló adattagokat egyedi azonosítókkal (nevekkel) látjuk el és hivatkozzuk.

Deklarálhatunk struktúra típusú változókat, illetve mutatókat is.

typedef struct ST { int kor;

char nev[20]; } ST;

int main(){ ST a, *b; b = &a;… }

kor nev

23 Gabi

kor nev

a

b cím

■ További információkat a struktúrákról a Sulinet Tudásbázisban olvashatunk.

ST

(3)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

3

Osztály

■ Metódusok (függvények) és

■ adatok (mezők és jellemzők)

❑ egységbe zárt csoportjának típusa.

➢ Olyan, mint egy struktúra típus, csak metódusok (függvények) is tartoznak hozzá.

➢ Továbbá az adattoknak korlátozható az elérése (például az osztályhoz tartozó függvényekre).

Objektum

■ Technikailag egy osztály típusú változó, amit

■ többnyire dinamikus változóként hozunk létre,

➢ tehát olyan, mint egy struktúra típusú dinamikus változó.

Oszt

$kor $nev

fgv

$kor $nev

$o1

(4)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

4 Objektumok hivatkozása PHP-ban

■ Többnyire ún. objektumkezelővel (angolul: handle) hivatkozzuk, ami C-ben struktúrára mutató típustalan mutatónak felel meg, és természetesen illeszkedik a változó dinamikus jellegéhez is.

■ Az, hogy az objektumhivatkozás valójában mutató, a változó objektumhoz való hozzárendelésekor szintak- tikailag nem (feltétlen) látszik, ugyanakkor a helyes

használat érdekében fontos ennek tudatában lenni.

❖ A PHP osztályokról, objektumokról, és

objektumkezelőkről bővebben olvashatunk az

ELTE PHP programozás oldalán.

(5)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

5

Mutatók és objektumhivatkozások

Például, ha van két $o1, $o2 objektumhivatkozásunk, akkor:

■ az $o1 = $o2 értékadás azt eredményezi, hogy

■ $o1 és $o2 ugyanarra a közös objektumra fognak mutatni.

Ennek tehát C-ben két, o1 és o2 mutató felel meg, melyek ebben az esetben ST struktúrák címeit tárolnák. C-ben célszerűbb

struktúra típusú mutatókat használni, de ez most a lényegen nem változtat. Az o1 = o2 értékadás után a két mutató

ugyanarra a struktúrára fog mutatni, és ugyanazt módosítják.

$kor $nev

23 Gabi

kor nev

(6)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

6 Mutatók és objektumhivatkozások

ST *o1, *o2, *o3; o1 = (ST*) malloc(sizeof(ST));

o1->kor = 20; strcpy(o1->nev,"Csilla");

o2 = o1; o2->kor = 25;

strcpy(o2->nev,"Gabi");

Ahogyan C-ben az o1 és o2 használatával történő értékadások ugyanazt a struktúrát módosítják,

PHP-ban az $o1=$o2 értékadás után az $o1, illetve $o2

hivatkozásokkal történő értékadások ugyanazt a közös objektumot módosítják.

o1->kor=25, o1->nev=Gabi o2->kor=25, o2->nev=Gabi

❖ További információk mutatókról, objektumkezelőkről és referenciákról.

o1 is

módosult

(7)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

7

Klónozás PHP-ban

PHP-ban az objektumok között értelmezett egy másfajta értékadás is, amit klónozásnak neveznek és amelynek a szintaxisa:

$o3 = clone $o1;

Ennek során létrejön egy új objektum

■ melyre $o3 fog mutatni és

■ az $o1 által mutatott objektum tartalma átmásolódik az új,

$o3 által mutatott objektumba

Továbbá meg lehet adni egy függvényt, mely minden klónozáskor lefut (például módosítja az új objektum jellemzőit).

■ A PHP objektumok klónozásáról további tudnivalókat olvashatunk a Sapientia egyetem, illetve a php.net oladalán.

$kor $kor

$nev $nev

(8)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

8

Klónozás

C-ben a klónozásnak az felel meg, mintha

létrehoznánk egy új struktúra típusú változót,

abba átmásolnánk az eddigi tartalmát,

de ez továbbra is két különböző változó lenne.

Osztályok és objektumok

Megemlítendő, hogy az objektumorientáltságnak sok olyan további eleme van, amelyekről ebben a fejezetben nem esett szó, mivel itt kizárólag a struktúrák és objektumok összehasonlítására koncentráltunk.

o3 = (ST*) malloc(sizeof(ST));

*o3 = *o1; o3->kor = 40;

strcpy(o2->nev,"Laci");

o1->kor=25, o1->nev=Gabi o3->kor=40, o3->nev=Laci

o1 nem

módosult

(9)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

9

Kérdések, feladatok

1. $o3 = clone $o1; esetén az $o3 által mutatott objektum módosítása következtében módosulni fog-e az $o1 által mutatott objektum?

2. $o3 = clone $o1; esetén az $o1 által mutatott objektum módosítása következtében módosulni fog-e az $o3 által mutatott objektum?

Megoldások. Mindkét esetben: NEM, mivel a clone következtében

$o1 és $o3 két különböző objektum lesz.

3. Az $o1 = $o2; $o3 = $o2; utasítások után, az $o1 által mutatott objektum módosítása következtében módosulni fog-e az $o3 által mutatott objektum?

Megoldás. Igen, mindkettő az $o2; által mutatott objektumra mutat.

(10)

EFOP-3.4.3-16-2016-00014

AP1 HALLGATÓI DIPLOMA-SZERZÉST SEGÍTŐ SZOLGÁLTATÁSOK

10

AP1 Hallgatói diploma-szerzést segítő szolgáltatások

Jelen tananyag a

Szegedi Tudományegyetemen készült az

Európai Unió támogatásával.

Projekt azonosító:

EFOP-3.4.3-16-2016-00014

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

The O3- arylated galactosides were synthesized using diaryliodonium salts under mild and transition metal free conditions, providing the target products in moderate to good yields..

vehető.3-szor.Világos,hogy ezen mondott Ist- ván t.i.az öregebb fia volt a nemesi levél- ben dicséretekkel emlitett Tömösvári Jánosnak a B.alatt citált Vizsgálati levélnek

Hier haben neben Valéria Bessenyei, Marianna Czóbel, Judit Gergely, Paula Hernádi, Gábor Rácz, Éva Végh und Péter Zsuffa noch zwei Künstler aus Klausenbug (Siebenbürgen),

Nyilvánvaló, hogy a reprezentativitási terület célváltozónként (pl. PM10, PM2.5, SO2, NO2, O3) különböző magyarázó változók (földhasználat, topográfiai

Intrauterin retardációval járó terhességekben leány-, illetve fiúmagzat esetén a lepényi IGF-I és IGFBP-3 gén expressziója nemtől függő érdemi változást nem

The O1 0 oxygen of the same carboxylate acts as an acceptor in hydrogen bonding interactions with the O4 hy- droxy group on a Gluc2 ligand in an adjoining asymmetric unit of the

A személyközi viszony minősége a tárgyi viszony alakulásának alapja - és nem fordítva - , azt megkönnyítheti („facilitáció”) vagy megnehezítheti, azonban

A vektoros térképek esetén minden egyes, a térképen ábrázolásra kerülő objektum minden töréspontjának koordinátáját tároljuk, majd leírjuk, hogy az