Sunteți pe pagina 1din 27

1

Prezentare 3:
Pachete;
Modificatori de
acces;
Reutilizare;
PROGRAMARE ORIENTATA Modificatorul
final
OBIECT
2020
Pachete si clase built-in

 Java are clase built-in


 Nu trebuie compilate

 Dar trebuie importate


Un pachet contine un grup de
 Clasele built-in sunt organizate in
clase, organizate sub un singur
pachete
spatiu de nume
 Pentru a le importa:

 import <package>.<nume_clasa>;

 import <package>.*;

 importa orice din pachet

15.10.2020 POO 2
Propriul pachet

Pentru a crea propriul pachet:


package <nume_clasa>; Prima instructiune din fisier

package exemplu; import exemplu.*;


public class Oclasa { public class ClasaImport {
… public static void main(String[] args)
} {
OClasa m = new Oclasa();
}
}

Se pot crea structuri ierarhice de pachete

15.10.2020 POO 3
Pachete - Coliziuni de nume

import exemple.*; Ambele biblioteci contin


import java.util.*; definitia clasei Vector

Vector v = new Vector(); Compilatorul nu stie ce


definitie sa aleaga

java.util.Vector = new java.util.Vector();

15.10.2020 POO 4
Modificatori de acces

 Pot fi plasati in fata membrilor (campuri sau metode) unei clase:


public – accesibil din orice clasa
protected – pachet + subclase
default – pachet
private – doar in clasa in care au fost declarati

 Pot prefixa o definitie de clasa:


public
default

15.10.2020 POO 5
Reutilizare

 Utilizare
 Compunere
 Mostenire

15.10.2020 POO 6
Reutilizare
Pizza
has_a OForma
- double: pret
- OForma: forma + double: detArie()

+ Pizza(double p, OForma f) is_a


+ double: getPret()
+ double: detArie() Cerc Dreptunghi
+ String: toString() - double: lat
- double: raza
- double: lung
+ Cerc(double r)
+ Dreptunghi(double lt, double lg)
+ double: detArie()
uses + double: detArie()
+ String: toString()
+ String: toString()

PizzaClient

+ void: main(String[] args)

15.10.2020 POO 7
Utilizare

Se utilizeaza o instanta a clasei:

public static void main(String[] args)


{
Pizza pizzaCirc = new Pizza(4.69, new Cerc(2.5));

}

15.10.2020 POO 8
Compunere – “has-a”

Se pun referinte la alte obiecte in noua clasa:

public class Pizza


{
private double pret;
private OForma forma;

}

15.10.2020 POO 9
Mostenire – “is-a”

O clasa poate specializa o alta clasa:

public class Cerc extends OForma


{

}

15.10.2020 POO 10
Clasa Object

Orice clasa care nu extinde o alta clasa


extinde clasa Object. Adica,
M@af
public class M {…} Object
toString()
Este echivalent cu equals(Object) hashCode()
public class M extends Object {…} nume M
“Ana”
idol null
Omitem specificarea, dar stim
ca exista. M(…) getNume()
getIdol() setIdol(M)

15.10.2020 POO 11
Metoda toString()
toString() in Object intoarce numele obiectului: M@af

Conventie Java: Definim toString() in


fiecare clasa pentru a intoarce o
x M@af
reprezentare a obiectului, oferind M@af
informatie despre valorile din campuri. Object
toString() …
Noua definitie a lui toString() suprascrie
definitia din Object.toString() M
nume “Ana”
In anumite contexte, expresia x este
transformata automat in x.toString()
idol null

x.toString() apeleaza metoda toString() …


15.10.2020 POO 12
Metoda toString()
toString() in Object intoarce numele obiectului: M@af
public class M {
x M@af

M@af
/** Intoarce reprezentarea obiectului*/
Object
public String toString() { toString() …
return “Personaj ” + nume
+ (idol == null M
? “” nume “Ana”
: “ si idol ” + idol.getNume());
} idol null

x.toString() apeleaza metoda toString() …


15.10.2020 POO 13
Metoda toString()

/** O instanta reprezinta un punct (x, y) in plan */


public class Punct {
Punct@bc9
private int x; // coordonata-x
private int y; // coordonata-y Punct
… x 19 y 4

/** = repr. punctului in forma “(x, y)” */


public String toString() { (19, 4)
return “(” + x + “, ” + y + “)”;
}
} Functia toString trebuie sa reprezinte valorile
din campuri intr-un format care sa aiba sens
pentru clasa
15.10.2020 POO 14
extends: “is-a”
 Extinderea unei clase trebuie sa reflecte modelul
semantic: semnificatia din lumea reala
 A extinde B daca si numai daca A “este un” B
¤ Un elefant este un animal, prin urmare Elefant extends
Animal
¤ O masina este un vehicol, prin urmare Masina extends
Vehicul
¤ O instanta a oricarei clase este un obiect, deci
OClasa extends java.lang.Object

15.10.2020 POO 15
extends: “is-a”
Care dintre urmatoarele variante au sens?
A. Triunghi extends Forma { … }
B. PhDContr extends PhD { … }
C. ContBancar extends Depozit { … }

15.10.2020 POO 16
extends: “is-a”
Care dintre urmatoarele variante au sens?
A. Triunghi extends Forma { … }
A. Da! Un triunghi este un tip de forma.

B. PhDContr extends PhD { … }


A. Nu! Un PhDContr “verifica contractul unui” PhD, dar nu
este un PhD.
C. ContBancar extends Depozit { … }
A. Nu! Un depozit este un tip de cont bancar; putem
scrie:
Depozit extends ContBancar { ... }
15.10.2020 POO 17
super - constructor
public class Student extends Persoana { Student@d0
private String studID; Object
toString()
/** Constructor: Persoana cu studID. */
Persoana
public Student(String p, String n, String id) {
super(p, n); Utilizam super (nu prenume Ion
studID= id; Persoana) pentru a apela
constructorul superclasei. nume Ion
}
toString()
Trebuie sa fie prima
} instructiune din corpul Student
constructorului!
new Student(“Ion”, “Ion”, “cd15”) studID cd15

15.10.2020 POO 18
super - constructor
public class student extends Persoana {
private String studID;

/** Constructor: Persoana cu studID. */


public Student(String p, String n, String id) {

studID= id; Daca prima instructiune din


} constructor nu este apelul
constructorului superclasei, Java
} insereaza super();
� or 👎👎
15.10.2020 ? POO 19
Mai mult despre super

Student@d0 Intr-un obiect al


Object subclasei, super se
toString() refera la partitia
Persoana deasupra celei care
contine super.
prenume “Ion"
nume “Ion" toString() Datorita lui
Student super, apelul
toString se
studID “cd15”
refera la
toString() { return super.toString() partitia
+ “<“ + studID + “>”; } Persoana.
15.10.2020 POO 20
Conversie de tip
clasa Animal Pisica anm1= new Pisica(6);
Caine anm2= new Caine(8);
subclase Pisica si Caine
Punem elementele comune in Animal anm1 a0
Pisica
anm2 a1
Caine
Ierarhia de clase: a0 a1
Object ani 6
Animal
ani 8
Animal

Animal maiBatran(Animal) maiBatran(Animal)

Pisica Caine
Pisica Caine toString() toString()
toarce()

15.10.2020 POO 21
Conversie de tip Object

Cunoastem deja conversiile de tip: Animal


(int) (5.0 / 3.5)
Caine Pisica
(double) 7
anm1 a0
double d= 4; // cast implicit Animal
Se pot utiliza conversii si pentru clase: anm2 a0
a0 Pisica
Animal anm1= new Pisica(6); // cast implicit
ani 6 Animal
Pisica anm2= (Pisica) anm1;
maiBatran(Animal)
Conversia unei clase nu schimba obiectul,
doar cum este vazut! Pisica
toString()
15.10.2020 POO
toarce() 22
Conversie explicita: operator unar prefix
Regula conversie obiecte: La executie, un a0
obiect poate fi convertit la numele unei
Object
partitii din interiorul sau – si numai atat. equals() …
a0 poate fi convertit la Object, Animal,
Pisica. ani 66 Animal
Incercarea de a converti la orice altceva maiBatran(Animal)
genereaza ClassCastException.
(Pisica) c Pisica
toString()
(Object) c toarce()
(Pisica) (Animal) (Pisica) (Object) c
Obiectul nu se schimba. c a0
Doar perceptia lui se schimba. Pisica
16.10.2020 POO 23
Conversie implicita a0
ani 6 Animal
public class Animal {
maiBatran(Animal)
/** = “acest Animal este mai batran
decat h" */ Pisica
public boolean maiBatran(Animal h) { toString()
return ani > h.ani; toarce()
}
Pisica anm1= new Pisica(6); a1
Caine anm2= new Caine(8); 8 Animal
ani
if (anm2.maiBatran(anm1)) {…}
// anm1 este convertit la clasa maiBatran(Animal)
// Animal si memorat in h Caine
h a0 anm1 a0 anm2 a1
Animal Pisica Caine toString()
15.10.2020 POO 24
Referentiere la compilare
Printr-o variabila de tip C, se pot referi doar
metode/campuri care exista in clasa C.

Animal anm1= new Animal(6);


int m = anm1.toarce(); anm1 a0
Animal

ilegal a0
Compilatorul va genera o eroare. Animal
ani 6
Verificarea legalitatii lui anm1.toarce(…): maiBatran(Animal)
Cum anm1 este un Animal, toarce este legal
doar daca este declarat in Animal sau una
dintre superclasele sale.
15.10.2020 POO 25
Quiz: Ce referentieri sunt legale?

h a0 a0
Animal Animal
ani 6
A. h.toString() maiBatran(Animal)
OK — este in partitia Object a clasei
Pisica
B. h.maiBatran(…)
toString()
OK —este in partitia Animal toarce()
C. h.toarce()
ILEGAL —nu este in partitia Animal
sau partitia Object

15.10.2020 POO 26
Modificatorul final

 Date – valori primitive sau referinte constante


 Constante la compilare
 Valori initializate la executie, nemodificabile

 Argumente

 Metode
 Nu pot fi redefinite (suprascrise)
 Clase
DEMO
 Nu pot fi extinse

15.10.2020 POO 27

S-ar putea să vă placă și