180 likes | 282 Views
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.
E N D
Programare Orientata Obiect Curs6 Conversii de date Clase si metode abstracte Curs 6
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori • Pachete. Incapsularea datelor • Mostenirea / Extinderea claselor • Conversii de date. Clase si metode abstracte Curs 6
Curs 6 • Conversii de date • Clasesimetodeabstracte 2.1 Definitii 2.2 Metodeabstracte 2.3Mostenireaclaselorabstracte 2.4 De cesafolosimclaseabstracte? 2.5 Exemplu de implementare (1) 2.6 Exemplu de implementare (2) Curs 6
C6. Conversii de date • 1.Conversii de date • Ierarhia de clase(vezicursul 5) • Tipurile de date (obiectele) aflatemaisus in ierarhiesunt considerate ca fiindmaigenerale, iarcele de josmaispecifice • Conversii: • Conversiaunuisubtip in supertip (poatefiverificata la compilare) • Conversiaunuisupertip in subtip (conversiatrebuiesa fie explicita)
C6. Conversii de date • 1.Conversii de date • Conversieexplicita:numeletipului de data (clasa) trebuiespecificat in momentulconversiei • 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; • Dacacompilatorul nu poatesaisideaseamadaca o conversieesteinvalida, atuncivaafisa o eroare in momentulcompilarii • Dacacompilatorul nu poatesaisideaseamadaca o conversieesteposibilasau nu, atunci nu vadaeroare de compilare, darprogramul se vaintrerupe la executiedacaconversia nu se poaterealiza.
C6. Conversii de date %> javac typeTest.java typeTest.java:17 incompatible types found : Person required : Student Student o3 = p[0]; ^ typeTest.java:19 incompatible types found : Person required : Student Student o5 = p[9]; ^ typeTest.java:21: cannot resolve symbol symbol : method getStudentNumber () location: class Person int x = p[0].getStudentNumber(); ^ 3 errors Dupa ce se comenteaza liniile cu erori: %> java typeTest Exception in thread “main” java.lang.ClassCastException: Person at typeTest.main(typeTest.java:20) 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(); } }
C6. Conversii de date • 1.Conversii de date • Tipulunuiobiectpoatefiaflat in momentulexecutieiprogramuluifolosindoperatorulinstanceof • if ( objinstanceof String) • { • String str2 = (String)obj; • }
C6. Clase abstracte • 2.1 Definitie • O clasaabstractaeste o clasa care nu poatefiinstantiata • O clasaabstractapoatefidoarmostenita • Declarareauneiclaseabstracte se face astfel: • [public] abstract classClasaAbstracta [extends Superclasa] • { • // Declaratii uzuale • // Declaratii de metode abstracte • } • O clasa abstracta poate contineaceleasi elemente membre ca o clasa obisnuita, la care se adaugadeclaratii de metode abstracte (fara nici o implementare).
C6. Clase abstracte • 2.2 Metodeabstracte • O clasaabstractapoatecontinemetodefaracorp (faraimplementare). Acesteatrebuieimplementate in subclase. • Toatemetodele care nu au corpdintr-o clasaabstractatrebuiedeclarate, la randullor, ca fiindabstracte • Oriceclasa care continecelputin o metodaabstractatrebuiedeclarataabstracta • abstract classClasaAbstracta { • abstract voidmetodaAbstracta(); // Corect • void metoda(); // Eroare • }
Person Employee Student C6. Clase abstracte • 2.3 Mostenireaclaselorabstracte • abstract 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 • 2.4 De cesafolosimclaseabstracte? • In proiectarea unei aplicatii este uneorinecesar sa reprezentam concepte abstracte care sa nu poata fi instantiate si care sa foloseasca doar la dezvoltarea ulterioara a altor clase. • Oclasa 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 • 2.5 Exemplu de implementare (1) • Descriereaobiectelor 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 declaramo 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 schimbareaoriginii
C6. Clase abstracte • 2.5 Exemplu de implementare (1) • ImplementareaclaseiGraphicObject • abstract classGraphicObject { • // Stari comune • private int x, y; • private Color color = Color.black; • ... • // Metode comune • public voidsetX(int x) { • this.x = x; • } • public voidsetY(int y) { • this.y = y; • } • public voidsetColor(Color color) { • this.color = color; • } • ... • // Metode abstracte • abstract voiddraw(); • ... • }
C6. Clase abstracte • 2.5 Exemplu de implementare (1) • Implementarea claselorpentru obiecte graficearputeafi: • classCircleextendsGraphicObject { • voiddraw() { • // Obligatoriu de implementat • ... • } • } • classRectangleextendsGraphicObject { • voiddraw() { • // Obligatoriu de implementat • ... • } • }
C6. Clase abstracte • 2.6 Exemplu de implementare (2) • Problema: • Studentiisunt de treitipuri (Undergraduate, PhDsauMsC). Fiecareobiectinstantiattrebuiesa fie din unul din celetreitipuri. • Nu trebuiesa se instantiezeniciunobiect din clasaStudent • Solutie: • ClasaStudent se declaraabstracta • ClasaStudentestenecesarapentru a cuprindeaspectelecomunetuturorstudentilor.
Student getLogin() setLogin(String) C6. Clase abstracte • 2.6 Exemplu de implementare (2) • Diagrama de clase: Undergrad PhdStudent MscStudent
C6. Clase abstracte • 2.6 Exemplu de implementare (2) 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) { ...
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori • Pachete. Incapsularea datelor • Mostenirea / Extinderea claselor • Conversii de date. Clase abstracte • Interfete Curs 6