User Tools

Site Tools


Problem constructing authldap
laboratoare:organizare-acces
Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
laboratoare:organizare-acces [2013/09/24 19:33]
daniel.ciocirlan
laboratoare:organizare-acces [2013/10/23 12:30]
Adriana Draghici
Line 42: Line 42:
 * **(default)** - în cazul în care nu este utilizat explicit nici unul din specificatorii de acces de mai sus, accesul este permis doar în cadrul //​pachetului//​ (package private). Atenţie, nu confundaţi specificatorul default (= lipsa unui specificator explicit) cu ''​protected''​! * **(default)** - în cazul în care nu este utilizat explicit nici unul din specificatorii de acces de mai sus, accesul este permis doar în cadrul //​pachetului//​ (package private). Atenţie, nu confundaţi specificatorul default (= lipsa unui specificator explicit) cu ''​protected''​!
  
-Utilizarea ​specificatorilor contribuie la realizarea //​**încapsulării**//​. Amintim, din primul laborator, că încapsularea se referă la acumularea atributelor şi metodelor caracteristice unei anumite categorii de obiecte într-o clasă. //Pe de altă parte, acest concept denotă şi ascunderea informaţiei de stare internă a unui obiect, reprezentată de atributele acestuia, alături de valorile aferente, şi asigurarea comunicării strict prin intermediul metodelor// (= //​interfata//​ clasei). Acest lucru conduce la izolarea modului de implementare a unei clase (= atributele acesteia şi cum sunt manipulate) de utilizarea acesteia. Utilizatorii unei clase pot conta pe functionalitatea expusa ​de aceasta, indiferent de modalitatea in care ea este implementata,​ aceasta putandu-se ​chiar modifica ​in timp. Accesul utilizatorilor ​la implementarea ​unei clase ar conduce ​la imposibilitatea modificarii acesteia ​din urmafara declansa actualizari ale portiunilor ​ce utilizeaza clasa respectiva.+**Important**:​ utilizarea ​specificatorilor contribuie la realizarea //​**încapsulării**//​. Amintim, din primul laborator, că încapsularea se referă la acumularea atributelor şi metodelor caracteristice unei anumite categorii de obiecte într-o clasă. //Pe de altă parte, acest concept denotă şi ascunderea informaţiei de stare internă a unui obiect, reprezentată de atributele acestuia, alături de valorile aferente, şi asigurarea comunicării strict prin intermediul metodelor// (= //​interfata//​ clasei). Acest lucru conduce la izolarea modului de implementare a unei clase (= atributele acesteia şi cum sunt manipulate) de utilizarea acesteia. Utilizatorii unei clase pot conta pe funcţionalitatea expusă ​de aceasta, ​**indiferent de implementarea ei internă** (chiar şi dacă se poate modifica ​în timp)Dacă utilizatorii ar avea acces la modul efectiv de implementare a unei clasear fi imposibilă modificarea implementării ei (necesitate care apare des în practică) fără un impact lateral asupra utilizatorului. 
 + 
 + 
 +== Exerciţii == 
 + 
 +  - (5p) Implementaţi o clasă //​MyArrayList//,​ care va reprezenta un vector de numere reale, cu posibilitatea redimensionării automate. Ea va fi definită în pachetul //arrays//. Clasa va conţine următoarele metode: 
 +    * un constructor fără parametri, care creează intern un vector cu 10 elemente 
 +    * un constructor cu un parametru de tipul întreg, care creează un vector de dimensiune egală cu parametrul primit 
 +    * o metodă numită ''​add(float value)'',​ care adaugă valoarea ''​value'' ​la finalul vectorului. Dacă se depăşeşte capacitatea vectorului, acesta se va redimensiona la o capacitate dublă 
 +      * //​Atenţie!//​ Există o diferenţă între capacitatea vectorului (dimensiunea cu care a fost iniţializat) şi numărul de elemente memorate efectiv în el (care este cel mult capacitatea). 
 +    * o metodă numită ''​contains(float value)''​ care returnează ''​true''​ dacă ''​value''​ există în cadrul vectorului 
 +    * o metodă numită ''​remove(int index)''​ care elimină valoarea aflată în vector la poziţia specificată de ''​index''​ (numerotarea incepând de la 0); se va da un mesaj dacă indexul este invalid 
 +    * o metodă numită ''​get(int index)''​ care va returna elementul aflat în poziţia ''​index''​ 
 +    * o metodă numită ''​size()''​ care returnează numarul de elemente ​din vector 
 +    * o metodă declarată ''​public String toString()''​ care va returna o reprezentare a tuturor valorilor vectorului ca un şir de caractere 
 +  - (1p) Scrieţi o clasă de //test// separată pentru clasa //​MyArrayList//​populând lista cu 3 elemente şi verificând că valorile întoarse de metoda //get// corespund, într-adevăr,​ poziţiilor aferente din vectorul intern clasei. Ce condiţii trebuie îndeplinite pentru atingerea scopului propus? 
 +  - (2p) Scrieţi un scenariu de utilizare ​clasei //​MyArrayList//,​ astfel: 
 +    * iniţializând-o cu o capacitate de 5 de elemente iar apoi inserând 10 elemente aleatoare utilizând doar metoda //add// 
 +    * cautând 5 valori aleatoare în vector 
 +    * eliminând 5 valori aleatoare din vector 
 +  - (3p) De multe ori este bine ca programarea unor aplicaţii mari să se faca modular, un modul fiind gestionat de o anumită clasă. De asemenea, în cadrul acestor aplicaţii, puteţi avea situaţii în care o metodă are nevoie să utilizeze mai multe module, deci să primească referinţele mai multor clase, fapt ce poate deveni dificil de gestionatDe aceea, aceste clase se pot implementa limitând accesul la //o singură instanţă statică//, ceea ce permite accesarea acesteia doar pe baza //clasei//, fară a mai fi necesară trimiterea ei ca parametru in metode. Aşa descoperim un prim //design pattern// orientat-obiect;​ el se numeşte **Singleton** şi puteţi afla câteva despre el [[http://​example.com|aici]]. Ne propunem să implementăm o variantă simplă. Creaţi clasa //​Singleton//,​ care să  
 +    * aibă intern o singură instanţă //​statică//​ 
 +    * aibă un constructor //privat// (de ce e nevoie?) 
 +    * expună o metodă //​publică//​ de acces la instanţă (un getter) 
 +  
 + 
 + 
laboratoare/organizare-acces.txt · Last modified: 2019/09/04 18:41 by Adriana Draghici