A láthatóság terjedelme
Delphi a szakemberek számára. Objektumorientált programozás
Egy jó kompromisszum fontos egy új osztály leírásában. Egyrészt el kell rejteni másoktól azokat a módszereket és mezőket, amelyek az osztály belső struktúráját képviselik (ehhez a tulajdonságokat kitalálták). Az objektum szintjén lévő kisebb részletek hiábavalóak lesznek, és csak az észlelés integritását zavarják.
Másrészt, ha Ön is korlátozza, ki hozza létre a leszármazott osztályokat, és nem nyújt elegendő eszközt és mozgásteret, akkor nem fogja használni az osztályodat.
Az első három irányelv által meghatározott láthatósági területek a következők.
- A nyilvánosság mezőinek, tulajdonságainak és módszereinek nincsenek korlátozásai a láthatóság tekintetében. Ezek a funkciók más funkcióktól és objektummódszerektől érhetők el, mind ebben a modulban, mind pedig minden más objektumban, amely hivatkozik rá.
- A privát szakasz mezõi, tulajdonságai és módszerei csak az osztálymódszerekben és az ugyanazon modulban található funkciókban állnak rendelkezésre, mint a leírt osztály. Ez az irányelv lehetővé teszi, hogy teljesen elrejtse az osztály belső végrehajtásának részleteit. A magánszekció tulajdonságai és módszerei megváltoztathatók, és ez nem érinti az ezen osztályba tartozó objektumokkal dolgozó programokat. Az egyetlen módja annak, hogy valaki más foglalkozzon velük, az újonnan létrehozott modul újraírása (ha természetesen a források rendelkezésre állnak).
- A védett szakasz mezők, tulajdonságai és módszerei csak a modulon belül elérhetők a leírt osztályban. De - és ez fontos - ezek olyan osztályokban érhetők el, amelyek ebbe az osztályba esnek, beleértve más modulokat is. Ezek az elemek különösen szükségesek az új komponensek - a meglévőek leszármazottai - fejlesztőinek. Ha elhagyják az osztály korszerűsítésének szabadságát, mindazonáltal elrejtik a megvalósítás részleteit azoktól, akik csak ezen osztály tárgyait használják.
Nézzünk egy példát, amely a körök három változatát illusztrálja.
Lista 1.1. Példa a módszer metszeteinek meghatározására
első egység; | | második egység;
TFirstObj = osztály | TSecondObj = osztály (TFirstObj>
magán | eljárás 4. módszer;
eljárás Method1; | | végén;