programare orientata obiect

18
07/20/22 Curs 6 1 Programare Orientata Obiect Curs 6 Conversii de date Clase si metode abstracte

Upload: sacha-vazquez

Post on 02-Jan-2016

20 views

Category:

Documents


0 download

DESCRIPTION

Programare Orientata Obiect. Curs 6 Conversii de date Clase si metode abstracte. Continutul cursului. Introducere Platforma Java, Clase si Obiecte Modificatori, Constructori Pachete. Incapsularea datelor Mostenirea / Extinderea claselor Conversii de date. Clase si metode abstracte. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programare Orientata Obiect

04/20/23 Curs 6 1

Programare Orientata Obiect

Curs 6Conversii de date

Clase si metode abstracte

Page 2: Programare Orientata Obiect

04/20/23 Curs 6 2

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Conversii de date. Clase si metode abstracte

Page 3: Programare Orientata Obiect

04/20/23 Curs 6 3

Curs 6

1. Conversii de date2. Clase si metode abstracte

2.1 Definitii2.2 Metode abstracte2.3 Mostenirea claselor abstracte2.4 De ce sa folosim clase abstracte?2.5 Exemplu de implementare (1)2.6 Exemplu de implementare (2)

Page 4: Programare Orientata Obiect

C6. Conversii de date1. Conversii de date

– Ierarhia de clase (vezi cursul 5)– Tipurile de date (obiectele) aflate mai sus in

ierarhie sunt considerate ca fiind mai generale, iar cele de jos mai specifice

– Conversii:– Conversia unui subtip in supertip (poate fi

verificata la compilare)– Conversia unui supertip in subtip (conversia

trebuie sa fie explicita)

Page 5: Programare Orientata Obiect

C6. Conversii de date1. Conversii de date

– Conversie explicita: numele tipului de data (clasa) trebuie specificat in momentul conversiei– Exemple:

1) String str = “test”;Object obj1 = (Object)str; Object obj2 = str;

2) String str1 = “test”;Object obj = str1; String str2 = (String)obj;Double num = (Double)obj;

– Daca compilatorul nu poate sa isi dea seama daca o conversie este invalida, atunci va afisa o eroare in momentul compilarii

– Daca compilatorul nu poate sa isi dea seama daca o conversie este posibila sau nu, atunci nu va da eroare de compilare, dar programul se va intrerupe la executie daca conversia nu se poate realiza.

Page 6: Programare Orientata Obiect

Exemplu: Student mosteneste Person

public class typeTest { static Person[] p = new

Person[10];

public static void main (String args[]) {

for (int i = 0; i < 10; i++) { if(i<5)

p[i] = new Student(); else

p[i] = new Person(); }

Person o1 = (Person)p[0];Person o2 = p[0];Student o3 = p[0];Student o4 =

(Student)p[0];Student o5 = p[9];Student o6 =

(Student)p[9];int x = p[0].getStudentNumber();

}}

%> javac typeTest.java

typeTest.java:17 incompatible typesfound : Personrequired : Student Student o3 = p[0]; ^

typeTest.java:19 incompatible typesfound : Personrequired : Student Student o5 = p[9]; ^

typeTest.java:21: cannot resolve symbolsymbol : method getStudentNumber ()location: class Person int x = p[0].getStudentNumber(); ^3 errors

Dupa ce se comenteaza liniile cu erori:

%> java typeTestException in thread “main”

java.lang.ClassCastException: Person at typeTest.main(typeTest.java:20)

C6. Conversii de date

Page 7: Programare Orientata Obiect

C6. Conversii de date1. Conversii de date

– Tipul unui obiect poate fi aflat in momentul executiei programului folosind operatorul instanceof

if ( obj instanceof String){

String str2 = (String)obj;}

Page 8: Programare Orientata Obiect

2.1 Definitie– O clasa abstracta este o clasa care nu poate fi

instantiata– O clasa abstracta poate fi doar mostenita– Declararea unei clase abstracte se face astfel:

[public] abstract class ClasaAbstracta [extends Superclasa]{// Declaratii uzuale// Declaratii de metode abstracte}

– O clasa abstracta poate contine aceleasi elemente membre ca o clasa obisnuita, la care se adauga declaratii de metode abstracte (fara nici o implementare).

C6. Clase abstracte

Page 9: Programare Orientata Obiect

2.2 Metode abstracte– O clasa abstracta poate contine metode fara corp

(fara implementare). Acestea trebuie implementate in subclase.

– Toate metodele care nu au corp dintr-o clasa abstracta trebuie declarate, la randul lor, ca fiind abstracte

– Orice clasa care contine cel putin o metoda abstracta trebuie declarata abstracta

abstract class ClasaAbstracta {abstract void metodaAbstracta(); // Corectvoid metoda(); // Eroare

}

C6. Clase abstracte

Page 10: Programare Orientata Obiect

2.3 Mostenirea claselor abstracteabstract class Person {

protected String name;. . .public abstract String getDescription();. . .

}

class Student extends Person {private String major;. . .public String getDescription() {

return “a student major in “ + major;}. . .

}

class Employee extends Person {private float salary;. . .public String getDescription() {

return “an employee with a salary of $ “ + salary;}. . .

}

C6. Clase abstracte

Person

Employee Student

Page 11: Programare Orientata Obiect

2.4 De ce sa folosim clase abstracte?– In proiectarea unei aplicatii este uneori necesar

sa reprezentam concepte abstracte care sa nu poata fi instantiate si care sa foloseasca doar la dezvoltarea ulterioara a altor clase.

– O clasa abstracta poate pune la dispozitia subclaselor sale un model complet pe care trebuie sa-l implementeze, furnizand chiar implementarea unor metode comune tuturor claselor si lasand explicitarea altora fiecarei subclase in parte.

– Reprezinta o metoda de constrangere.

C6. Clase abstracte

Page 12: Programare Orientata Obiect

2.5 Exemplu de implementare (1)– Descrierea obiectelor grafice intr-o maniera orientata-

obiect.• Obiecte grafice: linii, dreptunghiuri, cercuri, curbe Bezier, etc• Stari comune: pozitia(originea), dimensiunea, culoarea, etc• Comportament: mutare, redimensionare, desenare, colorare, etc.

– Descrierea obiectelor grafice intr-o maniera orientata-obiect.

– Pentru a folosi starile si comportamentele comune declaram o clasa generica GraphicObject care sa fie superclasa pentru celelalte clase.

– Metodele abstracte sunt folosite pentru implementarea comportamentului specific fiecarui obiect, cum ar fi desenarea iar cele obisnuite pentru comportamentul comun tuturor, cum ar fi schimbarea originii

C6. Clase abstracte

Page 13: Programare Orientata Obiect

2.5 Exemplu de implementare (1)– Implementarea clasei GraphicObject

abstract class GraphicObject {// Stari comuneprivate int x, y;private Color color = Color.black;...// Metode comunepublic void setX(int x) {

this.x = x;}

public void setY(int y) {this.y = y;

}public void setColor(Color color) {

this.color = color;}...// Metode abstracteabstract void draw();...

}

C6. Clase abstracte

Page 14: Programare Orientata Obiect

2.5 Exemplu de implementare (1)– Implementarea claselor pentru obiecte grafice ar putea fi:

class Circle extends GraphicObject {void draw() {// Obligatoriu de implementat...}

}class Rectangle extends GraphicObject {

void draw() {// Obligatoriu de implementat...}

}

C6. Clase abstracte

Page 15: Programare Orientata Obiect

2.6 Exemplu de implementare (2)– Problema:

– Studentii sunt de trei tipuri (Undergraduate, PhD sau MsC). Fiecare obiect instantiat trebuie sa fie din unul din cele trei tipuri.

– Nu trebuie sa se instantieze niciun obiect din clasa Student

– Solutie:– Clasa Student se declara abstracta– Clasa Student este necesara pentru a cuprinde

aspectele comune tuturor studentilor.

C6. Clase abstracte

Page 16: Programare Orientata Obiect

2.6 Exemplu de implementare (2)– Diagrama de clase:

C6. Clase abstracte

PhdStudent MscStudentUndergrad

Page 17: Programare Orientata Obiect

2.6 Exemplu de implementare (2)

C6. Clase abstracte

public abstract class Student { protected String login, department, name;

public Student() {login = “”; department = “”; name = “”;

}

public void setLogin(String login) { this.login = new String(login);

}

public String getLogin() { return new String(login);

}}

public class PhdStudent extends Student{

private String supervisor;

public void setSupervisor(String login) {

...

Page 18: Programare Orientata Obiect

04/20/23 Curs 6 18

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Conversii de date. Clase abstracte7. Interfete