1. Bemutatkozás

A mai leckét a kapszulázásnak szeretnénk szentelni . Ön már tudja, mi ez általánosságban.

Egységbezárás

Milyen előnyei vannak a kapszulázásnak? Elég sok van belőlük, de négyet kiemelek, amelyek véleményem szerint a legfontosabbak:


2. Érvényes belső állapot

A programokban gyakran előfordulnak olyan helyzetek, amikor egy objektum több más osztállyal is kölcsönhatásba lép. Az objektummal való ilyen interakciók megsérthetik az objektumon belüli adatokat, és lehetetlenné teszik az objektum számára a várt módon történő működést.

Ennek eredményeként az objektumnak nyomon kell követnie a belső adataiban bekövetkezett változásokat, vagy ami még jobb, magának kell elvégeznie a változtatásokat.

Ha nem akarjuk, hogy egy változót más osztályok módosítsanak, akkor privátnak nyilvánítjuk. Ha ezt megtesszük, csak a saját osztályának metódusai férhetnek hozzá. public getterHa azt szeretnénk, hogy a változók csak olvashatóak legyenek, akkor a releváns változókhoz a-t kell hozzáadnunk .

Tegyük fel például, hogy azt szeretnénk, hogy mindenki tudhassa a gyűjteményünk elemeinek számát, de nem akarjuk, hogy engedélyünk nélkül módosíthassa a gyűjteményt. Ezután deklarálunk egy private int countváltozót és egy public getCount()metódust.

A beágyazás megfelelő használata biztosítja, hogy egyetlen osztály sem férhessen hozzá közvetlenül osztályunk belső adataihoz, ami így megakadályozza a rajtunk kívül álló változtatásokat. Ezek a változtatások csak a módosítandó változókkal azonos osztályba tartozó metódusok meghívásával lehetségesek.

A legjobb azt feltételezni, hogy más programozók mindig a számukra legkényelmesebb módon fogják használni az osztályokat, nem pedig az Ön számára (az osztálya számára) legbiztonságosabb módon. Ez a viselkedés mind a hibák forrása, mind a megelőzésükre tett kísérletek.


3. Metódus argumentumok érvényesítése

Néha érvényesíteni kell a módszereinknek átadott érveket. Tegyük fel például, hogy van egy osztályunk, amely egy személyt ábrázol, és lehetővé teszi a születési dátum beállítását. Ellenőriznünk kell az összes bemeneti adatot, hogy megbizonyosodjunk arról, hogy a program logikája és az osztályunk logikája szerint értelmesek. Például a születési dátum letiltása 13. hónapban vagy február 30-án, és így tovább.

Miért tüntetné fel valaki február 30-át a születési dátumaként? Először is, ez felhasználói hiba lehet az adatok megadásakor. Másodszor, egy programban sok hiba lehet, mielőtt elkezdené futni, mint a karikacsapás. Például a következő helyzet lehetséges.

Egy programozó ír egy programot, amely azonosítja azokat az embereket, akiknek születésnapja holnapután van. Tegyük fel például, hogy ma március 3. A program hozzáadja a 2-es számot a hónap aktuális napjához, és mindenkit megkeres, aki március 5-én született. Úgy tűnik, minden rendben van.

De amikor eljön március 30, a program nem talál senkit, mert a naptárban nincs március 32. Egy programnak sokkal kevesebb a hibája, ha ellenőrizzük a metódusoknak átadott adatokat.

Emlékszel, amikor tanulmányoztuk ArrayListés elemeztük a kódját? Láttuk, hogy a getés setmetódusok ellenőrizték, hogy indexnagyobb-e vagy egyenlő-e nullával és kisebb-e, mint a tömb hossza. Ráadásul ezek a módszerek kivételt jelentenek, ha az index kívül esik a tömb határain. Ez a bemenet érvényesítésének klasszikus példája.


4. A hibák minimálisra csökkentése a kód megváltoztatásakor

Tegyük fel, hogy írtunk egy szuper hasznos órát, amikor részt vettünk egy nagy projektben. Mindenkinek annyira tetszett, hogy más programozók több száz helyen kezdték használni a kódjukban.

Az óra annyira hasznos volt, hogy úgy döntöttél, javítasz rajta. De ha eltávolít bármilyen metódust az osztályból, akkor több tucat ember kódja leáll. Mindent át kell írniuk. És minél több változtatást hajt végre, annál több hibát fog okozni. Sok szerelvényt összetörsz, és gyűlölni fognak.

De amikor megváltoztatjuk a privátként deklarált metódusokat, tudjuk, hogy nincs egyetlen másik osztály sehol, amely meghívhatná ezeket a metódusokat. Átírhatjuk őket, módosíthatjuk a paraméterek számát és típusát, és minden függő külső kód tovább működik. Nos, legalább összeáll.


5. Eldöntjük, hogy tárgyunk hogyan kölcsönhatásba lép a külső tárgyakkal

Az objektumunkkal végrehajtható műveletek egy részét korlátozhatjuk. Tegyük fel például, hogy egy objektumot csak egyszer szeretnénk példányosítani. Még akkor is, ha a projektben több helyen is létrejön. Ezt pedig a kapszulázásnak köszönhetően tehetjük meg.

Tokozás 2

A beágyazás lehetővé teszi további korlátozások hozzáadását, amelyeket további előnyökké alakíthatunk . Például az osztály megváltoztathatatlanString objektumként van megvalósítva . Az osztály egyik tárgya létrehozása pillanatától halála pillanatáig megváltoztathatatlan. A ( , , ... osztály összes metódusa ) egy új karakterláncot ad vissza anélkül, hogy bármit is módosítana azon az objektumon, amelyen meghívásra kerültek.StringStringremovesubstring

A kapszulázás nagyon érdekes dolog.