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
laboratoare:organizare-acces [2013/09/24 20:18]
daniel.ciocirlan Complet
laboratoare:organizare-acces [2019/09/04 18:41] (current)
Adriana Draghici [Exerciţii]
Line 44: Line 44:
 **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 clase, ar fi imposibilă modificarea implementării ei (necesitate care apare des în practică) fără un impact lateral asupra utilizatorului. **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 clase, ar 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 ăîtreg, 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 a 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 gestionat. De 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.1380043094.txt.gz · Last modified: 2013/09/24 20:18 by daniel.ciocirlan