Delphi pentru profesioniști. Programarea orientată pe obiecte
Un compromis bun este important în descrierea unei noi clase. Pe de o parte, este necesar să se ascundă de celelalte metode și câmpuri care reprezintă structura internă a clasei (pentru aceasta, proprietățile au fost inventate). Detaliile minore la nivelul utilizatorului utilizatorului vor fi inutile și vor interfera doar cu integritatea percepției.
Pe de altă parte, dacă restrângeți pe cine va produce clasele descendente și nu îi va oferi un set suficient de instrumente și libertatea de manevră, el nu va folosi clasa voastră.
Zonele de vizibilitate definite de primele trei directive sunt următoarele.
- Câmpurile, proprietățile și metodele din secțiunea publică nu au restricții privind vizibilitatea. Ele sunt disponibile din alte funcții și metode obiect, atât în acest modul, cât și în toate celelalte obiecte care îl fac referire.
- Câmpurile, proprietățile și metodele din secțiunea privată sunt disponibile numai în metodele de clasă și în funcțiile conținute în același modul ca și clasa descrisă. Această directivă vă permite să ascundeți complet detaliile implementării interne a clasei. Proprietățile și metodele din secțiunea privată pot fi modificate și acest lucru nu va afecta programele care funcționează cu obiecte din această clasă. Singura modalitate de a le adresa altora este rescrierea modulului nou creat (dacă, desigur, sursele sunt disponibile).
- Câmpurile, proprietățile și metodele secțiunii protejate sunt de asemenea disponibile numai în cadrul modulului cu clasa descrisă. Dar - și acest lucru este important - sunt disponibile în clasele descendente ale acestei clase, inclusiv în alte module. Astfel de elemente sunt necesare în special pentru dezvoltatorii de componente noi - descendenți ai celor existenți. Lăsând libertatea de a moderniza clasa, ele ascund, totuși, detaliile realizării de la cei care folosesc doar obiecte din această clasă.
Să luăm în considerare un exemplu care ilustrează trei variante de domenii.
Listing 1.1. Un exemplu de stabilire a domeniilor metodei
prima unitate; | | unitate secundă;
TFirstObj = clasă TSecondObj = clasa (TFirstObj>
private | procedura Metoda4;
procedura Metoda; | | se încheie;