Documente Academic
Documente Profesional
Documente Cultură
OBIECT
Limbajul şi platforma Java
Programare II. C3
Motto
2
Capitolul 3
POLIMORFISM şi GENERICITATE
Principii OO: Polimorfism și Genericitate
Agenda: Principii OO și programare funcțională
❏ 1. Polimorfismul obiectelor
❏ Interfețe și egalitatea obiectelor
❏ Forme polimorfice cu structuri obiectuale
❏ 2. Genericitate
❏ Parametrizarea tipurilor
❏ Comparabilitatea obiectelor
4
1. Polimorfism (en. polymorphism)
● Poli-morfism-ul desemnează manifestări/forme/semnificaţii
diferite pornind de la acelaşi nume (sau simbol):
○ acelaşi nume de operaţie cu mai multe implementări;
○ acelaşi nume de variabilă (aceeași variabilă) prin care se
accesează referinţe către obiecte (din clase) diferite;
○ acelaşi nume de variabilă prin care sunt invocate operaţii
cu acelaşi nume către obiecte din clase diferite.
● Polimorfismul reprezintă o formă de genericitate.
○ Prin genericitate se poate înțelege declararea(inducția)
unei forme generalizabile și utilizarea concretă a unor
forme specifice(deducția).
○ Baza manifestărilor polimorfice provine din supra-
încărcare, dar mai ales din supra-scriere.
5
Forme de polimorfism
● Polimorfismul unei operaţii – se referă la (acoperă)
setul de clase în definiţia cărora este definită
respectiva operaţie.
● Polimorfismul unei variabile – se referă la (acoperă)
setul de clase ale căror instanţe pot fi
manevrate/referenţiate prin intermediul aceleiași
variabile, ca urmare a inferenţei tipului asociat
variabilei.
● Polimorfismul mesajelor (sau adresabilităţii) – se
referă la (acoperă) combinarea domeniilor celor două
forme de polimorfism anterior.
6
Interfețe și polimorfism
7
Exemplu Polimorfism :: org.polimorfism
● Model: moștenire “multiplă” cu interfețe
○ Interfețe:
■ ICerinteTeamService
■ ITasksTeamService
○ Clasa de implementare
■ CerinteTeamServiceImpl_Strategia1
● Test funcțional TestPolimorfismInterfete: Strategii
implementare serviciu ICerinteTeamService
○ polimorfism operatie -
■ getCerinteResponsabil(Membru membru,
List<Cerinta> cerinte)
○ Ierarhie implementare
■ CerinteTeamServiceImpl_Strategia1
■ CerinteTeamServiceImpl_Strategia2
* 8
Exemplu(2) Polimorfism :: org.polimorfism
● Model:
○ Ierarhie Membru: polimorfism operație -
● suprascriere: setCompetente() în Membru,
LiderEchipa;
● supraîncarcare: setCompetente() în
LiderEchipa;
○ Ierarhie Cerinta: polimorfism operație -
● suprascriere: setCategorie()
● TestPolimorfismEquals
○ polimorfism variabilă -
■ var membru și responsabil în clasa Test;
○ polimorfism mesaj (apel) -
■ var membru apel setCompetente();
* 9
Egalitate între obiecte:
Egalitate între instanţe ale clasei Object
● Operatorul == verifică de fapt “conţinutul” concret al
variabilelor care stochează referinţe, adică verifică referinţele
stocate ca valori ale variabilelor.
● Verificarea echivalenței obiectelor (la care se face referire
prin variabile) în sensul “identităţii” presupune verificarea
stării interne a acestora, sau, cel puţin, a atributelor care pot
diferenţia obiectele între ele.
● În Java – în vârful tuturor ierahiilor de moştenire se găseşte
clasa Object de la care toate clasele vor moşteni metoda
equals(Object) ce va putea fi supra-scrisă în sensul codificării
identităţii drept principiu de egalitate.
* 10
* 11
Exemplu(3) Polymorphism :: org.app.scrum
● Ierarhie Membru - ManagerProiect
○ equals() - criterii:
■ id și rol;
● TestPolimorfismEquals
* 12
2. Genericitate: Java GENERICS
Polimorfism prin parametrizarea tipurilor
● Clasele și metodele Java generice permit:
○ specificarea unui set de comportamente asociate, prin
declarația unei singure metode;
○ specificarea unui set de tipuri asociate, prin declarația unei
singure clase.
● Studiu de caz genericitate:
○ declararea unei metode de sortare a unui tablou de obiecte;
○ folosirea aceleași metode pentru sortarea:
■ unui tablou de valori/instanțe String;
■ unui tablou de valori/instanțe Integer;
■ unui tablou de valori/instanțe java.util.Date etc.;
13
Metodelor generice
14
Exemplu Generics :: org.generics.defs
● Class: ManipulareSerieGenerica
● TestGenericsManipulareTablou
* 15
Clase generice
17
Inițializare/Utilizare tipuri generice
19
Exemplu: GenericsAndLambdas ::
org.numeric.generics
● Class: SerieNumericaBounded<E extends Number>
● TestGenericsManipulareTablou
* 20
Colecțiile Java netipizate
22
Interfaţe generice: Comparable<T>
* 23
Interfaţe generice: Comparator<T>
* 24
Exemplu interfețe generice Generics ::
org.generics.interfaces
● Model Ierarhie Membru
○ Comparable<T> - criterii:
■ numePrenume;
● TestComparable
* 25
Referințe și tutoriale on-line
● Generics
○ http://tutorials.jenkov.com/java-generics/index.html
○ http://www.javacodegeeks.com/2011/04/java-generics-quick-tutorial.html
○ https://howtodoinjava.com/core-java/generics/complete-java-generics-tutorial/
○ https://dzone.com/articles/how-do-generic-subtypes-work
26
Referințe și tutoriale on-line
● Methods References
○ https://www.tutorialspoint.com/java8/java8_method_references.
htm
○ https://www.javatpoint.com/java-8-method-reference
● Optionals
○ https://www.baeldung.com/java-optional
○ https://www.oracle.com/technetwork/articles/java/java8-optional
-2175753.html
○ https://www.journaldev.com/16709/java-optional
○ https://examples.javacodegeeks.com/core-java/util/optional/java-
8-optional-example/
27