VII. Limbajul JAVA – Polimorfism.Colectii
1. Polimorfism
Permite folosirea unui obiect în locul altui obiect (o unei subclase în locul unei superclase)
Permite scrierea de cod eficient cu costuri de întreţinere reduse
Este susţinut doar de limbajele care permit “legarea întârziată”la apelul metodelor.
Exemplu:
Gasca poate implementa move() prin apelulul metodei proprii zboară()
Pinguinul poate implementa move() prin apelulul metodei proprii înoată()
Polimorfismul se utilizeazădes pentru a trata unitar colecţii de obiecte diferite. Ex. Un tablou de Aparate:
Aparat aparate[] = new Aparat[6]; aparate[0] = new Fax(1440, 230); aparate[1] = new Calculator(1200, 256, 350); aparate[2] = new Monitor(17, 130); aparate[3] = new Radio("Panasonic", 80); aparate[4] = new Bec(200); aparate[5] = new Radiator(2000); for (i=0; i<aparate.length; i++) aparate[i].porneste();
2. Colectii
Aproape toate programele reale utilizeazăcolecţii de obiecte.
Pentru gestionarea acestor colecţii limbajul Java pune la dispoziţie în pachetul java.util două ierarhii principial diferite:
- Collection (mulţimi de obiecte)
- Map (seturi tip cheie->valoare )
Clasa Collectionare douătipuri de clase derivate:
- List(permite duplicate, defineste o ordonare a elementelor)
- Set(nu permite duplicate)
Clasa Map are de asemenea doua tipuri:
- HashMap(cheile nu sunt ordonate)
- TreeMap(cheile sunt ordonate in ordine ascendenta -> viteza mai mica)
Metode definite de interfata Collection:
- add,addAll-adauga la colectie obiectul transmis, respectiv toate elementele colectiei transmise
- clear goleşte colecţia
- contains,containsAll-verificădacăîn colecţie se găseşte obiectul transmis, respectiv dacăîn colecţie este inclusăcolecţia transmisă
- remove-elimină obiectul dat ca şi parametru
- toArray creazăun tablou conţinând elementele colecţiei
- size–returnează numărul de elemente al colecţiei
Metode definite de interfaţa List:
- addFirst– adauga un element la inceputul listei
- addLast– adauga un element la sfarsitul listei
- getFirst()– intoarce primul element din lista
- getLast()– intoarce ultimul element din lista
- removeFirst()– sterge primul element din lista
- removeLast()– sterge ultimul element din lista
Clasele care implementează această interfaţă sunt:
- ArrayList (pt. acces aleator),
- LinkedList (pt. acces secvential la elementele listei),
- Vector (un tablou dinamic – setSize())
Exemplu de utilizare liste pentru limplementarea unei stive (LIFO):
LinkedList stiva = new LinkedList(); stiva.addFirst(new Integer(3)); stiva.addFirst(new Integer(5)); stiva.addFirst(new Integer(2)); System.out.println(stiva); Integer i = (Integer)stiva.removeFirst(); //se extrage ultimul adaugat System.out.println(stiva);
Metode definite de interfaţa Set:
- add –adaugă un element la mulţime (dacă nu există)
- addAll–adaugă o colecţie de elemente la mulţime
- contains()–verifică apartenenţa unui element la mulţime
- isEmpty()–true dacă mulţimea este vidă
- remove ()– şterge elementul specificat, dacă există
- removeAll()– şterge o colecţie de elemente din mulţime
Clasele care implementeaza aceasta interfata sunt
- HashSet (implementare rapida)
- TreeSet (pt. acces ordonat la elementele multimii)
Exemplu de utilizare mulţimi:
Set multimeAnimale = new HashSet(); multimeAnimale.add(“Cerb"); multimeAnimale.add(“Rinocer"); multimeAnimale.add(“Lup"); multimeAnimale.add(“Bizon"); System.out.println(multimeAnimale); Set multimeOrdonata = new TreeSet(multimeAnimale); System.out.println(multimeOrdonata);
Metode definite de interfaţa Map:
- clear –goleşte mulţimea
- put–adaugă un obiect asociat unei chei
- containsKey()–verifică existenţa unei chei
- containsValue()– verifică existenţa unui obiect
- get()–returnează obiectul asociat unei chei
- isEmpty()–true dacă mulţimea este vidă
- remove ()– şterge cheia specificată
- size()– returnează numărul de elemente
Clasele care implementează aceastăinterfaţă sunt:
- HashMap (implementare rapidă, fără ordonare)
- TreeMap (cheile ordonate crescător)