Kezdőoldal » Számítástechnika » Programozás » Mire való a setter metódus?

Mire való a setter metódus?

Figyelt kérdés
Mire való a metódus? és tudnátok egy teljesen kifejtett példát mondani getter-setter metódusra? (lehetőleg egyszerűt)

2017. nov. 28. 12:11
 1/7 Piert ***** válasza:
27%
Van egy kisregény típusod, aminek van egy int adattagja az oldalszám tárolására. Ha ez kívülről elérhető, akkor beállíthatod értéknek a 100000-et, ami bőven benne van egy int értelmezési tartományában, ugyanakkor meglehetősen életszerűtlen egy 100000 oldalas kisregény. A getter/setter függvényekkel az üzleti logikádat védheted, hiszen ezeken keresztül csak ellenőrzötten lehet beállítani és lekérdezni az értékeket.
2017. nov. 28. 13:47
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
+ C#-ban erre Propertyk vannak, nem csak függvények, amik sokkal kényelmesebben használhatóak.
2017. nov. 28. 14:01
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
100%

NAGYON leegyszerűsítve:


Ugye vannak az osztályok, mint például a Kutya.

Egy osztálynak vannak jellemzői - például a Kutya osztálynak van Neve vagy Fajtaja.


A metódus arra szolgál, hogy egy objektum "csináljon" valamit. Például a Kutya osztálynak van Ugat metódusa, ami azt adja vissza, hogy "Vau!".


A getter és a setter is egy ilyen metódus: a getter az adott osztály egy jellemzőjét kérdi le, a setter meg állítja be (mert nem szokás az osztály jellemzőit direkt módosítani).


Például ha a Kutya osztálynak van egy Ehseg jellemzője (hogy mennyire éhes a kutya) azt egy EhesE metódussal lekérdezhetjük (ha this.Ehseg > 75 akkor True, különben False), és egy Etet metódussal csökkenthetjük az értékét (this.Ehseg--).

2017. nov. 28. 14:02
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

"csökkenthetjük az értékét (this.Ehseg--)"

Pontosítva: Ha this.ehseg > 0 akkor this.ehseg--

2017. nov. 28. 14:04
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:
100%

Az egyes jól leírta a lényeget.


Ha publikus az oldalszam, akkor bárki módosíthatja, a

kisregeny.oldalszam = valami

beírásával.


Ha van az oldalszámhoz setter, akkor ugyanúgy bárki módosíthatja:


kisregeny.setOldalszam(valami)


A fő különbség, hogy a setOldalszam függvénybe beteheted, hogy ha a kapott oldalszam<0, akkor dobjon egy kivételt.

Ha közvetlenül elérhetővé teszed, akkor ezt nem teheted meg.



Egy másik példa.

Van egy változód, ami int[].


A jóhiszemű programozó azt csinálja, hogy létrehozol egy példányt az osztályból, átadja neki ezt a tömböt.

Utána ugyanebbe a tömbbe új értékeket rak, majd létrehoz egy új példányt és annak is átadja a tömböt.


Mi történik ekkor az első példánnyal? Ő csak referenciát kapott a tömbre, tehát ha a hívó utána megváltoztatja, akkor ott is változik.

Így a két példány hiába lett különböző tömbbel létrehozva, ugyanaz az érték lesz benne végül.


De ha van egy setter metódus a közvetlen beállítás helyett, akkor a setterben átmásolhatod az értékekekt a tömbből, és a lemásolt tömböt rakod el magadnak. Így az első példány védve van attól, hogy bárki véletlenül vagy direkt megváltoztassa a benne tárolt értékeket.

2017. nov. 28. 15:00
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

#2: Nem egészen. A proeprty-k mögött a CLI kódban bizony ott vannak a get/set metódusok - az egy más kérdés, hogy még a CIL is vezeti a fejlesztő kezét azzal, hogy összekapcsolja ezeket neked egy entitásnak.


A többiek egyébként többé-kevésbé jól leírták.


Annyit tenék hozzá, hogy az OO programozás egyik fontos elve az adatrejtés, ami szaatosan fogalmazva annyit jelent, hogy a külfilágnak semmi köze egy objektum belső állapotához, ezért arra törekszik a fejlesztő, hogy minden adattagot elrejtsen a külvilág elől.


Sok esetben ez nem lehetséges, mert adott egy könyv, aminek be kell állítani az árát, vagy egy képernyőn megjelenő komponensnek mondjuk a színét. Ilyen esetben csak bele kell nyúlni az objektum állapotába - ekkor hasznos a "setter" metódus.


A metódusban ugyanis kontrollált módon tudod beállítani a tlajdonságot. A könyves példánál maradva tudsz dobni ordas nagy hibaüzenetet, ha negatív árat akarnak megadni, vagy a képernyős komponensnél ha színt állítanak, akkor újra tudod rajzolni a képernyőt.

2017. nov. 29. 09:45
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

"#2: Nem egészen. A proeprty-k mögött a CLI kódban bizony ott vannak a get/set metódusok - az egy más kérdés, hogy még a CIL is vezeti a fejlesztő kezét azzal, hogy összekapcsolja ezeket neked egy entitásnak."


Ne pusztíts el ezzel a baromsággal légyszi. Amögött meg egyesek és nullák vannak, amögött meg a turbina pörög az erőműben.

És kit érdekel ez?

A modern programozás lényege az absztrakció.

2017. nov. 29. 09:51
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!