Transcript Document

4/25/2020

Programare Orientata Obiect

Curs 7

Interfete Curs 6 1

Continutul cursului

1. Introducere 2. Platforma Java, Clase si Obiecte 3. Modificatori, Constructori 4. Pachete. Incapsularea datelor 5. Mostenirea / Extinderea claselor 6. Conversii de date. Clase si metode abstracte 7. Interfete 4/25/2020 Curs 7 2

Curs 7

1. Interfete 1.1 Definitie 1.2 Membrii unei interfete 1.3 Implementarea unei interfete 1.4 Extinderea interfetelor 1.5 Utilitatea interfetelor 1.6 Exemple 1.7 Interfete vs clase abstracte 4/25/2020 Curs 7 3

C7. Interfete 1.1. Definitie

– O sa interfata faca reprezinta o modalitate de a arata ce trebuie clasele, fara a specifica cum trebuie sa faca.

– O interfata nu este o clasa, doar o serie de cerinte pentru clasele care vor sa fie conforme cu aceasta interfata – Definirea unei interfete se face prin intermediul cuvantului cheie interface: interface NumeInterfata [extends SuperInterfata1, SuperInterfata2...] { /* Corpul interfetei: Declaratii de constante Declaratii de metode abstracte */ }

C7. Interfete 1.1. Definitie

– Exemplu: public interface Comparable { int compareTo(Object otherObject); } – Interfata Comparable doreste sa fie conforma cu aceasta interfata trebuie sa contina o metoda arata ca orice clasa care compareTo cu un parametru de tip Object si care intoarca o valoarea de tip intreg.

C7. Interfete 1.2. Membrii unei interfete

– Similar cu declarea claselor, interfetele pot avea trei tipuri de membrii: – Constante (campuri) – sunt public , static sunt omisi la declarare) si final (modificatorii – – trebuie initializate Metode – sunt implicit abstract si public – – nu sunt permisi alti modificatori de acces – nu pot fi statice Clase si interfete imbricate

C7. Interfete 1.2. Membrii unei interfete

– Exemplu: interface Exemplu { int MAX = 100; // Echivalent cu: // public static int MAX = 100; // int MAX; // Incorect, lipseste initializarea // private int x = 1; // Incorect, modificator nepermis void metoda(); // Echivalent cu: // public void metoda(); // protected void metoda2(); // Incorect, modificator nepermis }

C7. Interfete 1.3. Implementarea unei interfete

– Implementarea unei interfete de catre a clasa se face in doua etape: 1. Clasa trebuie sa declare ce interfata (sau interfete) implementeaza class Employee implements Comparable { . . . } 2. Clasa trebuie sa implementeze toate metodele din interfata public int compareTo(Object otherObject) { Employee other = (Employee) otherObject; if (salary < other.salary) return -1; if (salary > other.salary) return 1; return 0; }

C7. Interfete 1.3. Implementarea unei interfete

– Observatii: – Daca o clasa nu implementeaza toate metodele dintr o interfata atunci clasa trebuie declarata abstracta – O clasa poate implementa mai multe interfete. De exemplu: class Employee implements Comparable, Cloneable {. . .} – Interfetele nu sunt clase si nu pot fi instantiate: public interface Comparable { . . . } Comparable x = new Comparable( );

C7. Interfete 1.3. Implementarea unei interfete

– Observatii: – Este posibil sa se declare variable de tip interfata: Comparable x; dar, li se pot atribui doar obiecte instantiate din clase ce implementeaza acea interfata: class Employee implements Comparable { . . . } x = new Employee( );

C7. Interfete 1.4. Extinderea interfetelor

– Interfetele suporta mostenire multipla , adica o interfata poate extinde mai mult de o interfata – Superinterfete si subinterfete public interface SerializableRunnable extends java.io.Serializable, Runnable { . . .

} – O subinterfata mosteneste toate constantele din superinterfete

C7. Interfete 1.4. Extinderea interfetelor

– Daca o interfata mosteneste una sau mai multe constante cu acelasi nume: – In subinterfata se foloseste numele superinterfetei atunci cand se face referire la constanta interface A { int val = 1; } interface B { int val = 2; } interface C extends A, B { System.out.println(“A.val = “+ A.val); System.out.println(“B.val = “+ B.val); }

C7. Interfete 1.4. Extinderea interfetelor

– Daca o superinterfata si o subinterfata contin doua constante cu acelasi nume, atunci cea din superinterfata este ascunsa : 1. In subinterfata interface X { int val = 1; } interface Y extends X{ int val = 2; int sum = val + X.val; } 2. In afara subinterfetei si a superinterfetei • Ambele constante pot fi accesate prin intermediul interfetelor

C7. Interfete 1.4. Extinderea interfetelor

– Daca o superinterfata si o subinterfata contin doua constante cu acelasi nume si o clasa implementeaza subinterfata: 1. Clasa mosteneste constanta din subinterfata class Z implements Y { } //in clasa System.out.println(“Z.val:“+val); //Z.val = 2 //in afara clasei System.out.println(“Z.val:“+Z.val); //Z.val = 2 2. O instanta a clasei poate fi folosita pentru a accesa constantele Z v = new Z( ); System.out.print( “v.val = “ + v.val +“, ((Y)v).val = “ + ((Y)v).val

+“, ((X)v).val = “ + ((X)v).val );

output:

v.val = 2, ((Y)v).val = 2, ((X)v).val = 1

C7. Interfete 1.5. Utilitatea interfetelor

– Premit declararea de metode pe care una sau mai multe clase trebuie sa le implementeze.

– Permit definirea unor similaritati intre clase independente fara a forta artificial o legatura intre ele. – Permit specificarea metodelor unui obiect fara a deconspira implementarea lor.

– Pefinirea unor grupuri de constante.

C7. Interfete 1.6. Exemple

– Exemplu 1 interface ModelFruct { void stricare(); void stoarcere(); } interface ModelSfera { void aruncare(); void rostogolire(); } class Fructe implements ModelFruct { public void stricare() { System.out.println("Pot sa ma stric"); } public void stoarcere() { System.out.println("Pot fi stors"); } }

C7. Interfete 1.6. Exemple

– Exemplu 1 (continuare) class Sfera implements ModelSfera { public void aruncare() { System.out.println("Pot fi arunacat"); } public void rostogolire() { System.out.println("Pot fi rostogolit"); } } class Portocala extends Fruct{ Portocala() { super(); exotic = true; } void stricare() { System.out.println("Sunt un fruct gingas"); } void stoarcere() { System.out.println(" Suc de portocala"); } }

C7. Interfete 1.6. Exemple

– Exemplu 1 (continuare) class Portocala1 extends Fructe implements ModelSfera { public void aruncare() { System.out.println("Daca vrei poti sa ma arunci"); } } public void rostogolire() { System.out.println("Si eu pot fi rostogolita"); } class Portocala2 extends Sfera implements ModelFruct { public void stricare() { System.out.println("Pot sa ma strici"); } } public void stoarcere() { System.out.println("Chiar vrei sa ma storci ?"); }

C7. Interfete 1.6. Exemple

– Exemplu 2 interface functie { public int executie(int arg); } class Graf { void explorare(functie f) { //...

//if explorarea a ajuns in nodul v f.executie(v.valoare); } } //Definim doua functii class f1 implements functie { public int executie(int arg) { return arg+1; } }

C7. Interfete 1.6. Exemple

– Exemplu 2 (continuare) class f2 implements functie { public int executie(int arg) { return arg*arg; } } public class TestCallBack { public static void main(String args[]) { Graf G = new Graf(); G.explorare(new f1()); G.explorare(new f2()); } }

C7. Interfete 1.7. Interfete vs clase abstracte

– Concepte similare, dar … abstract class Comparable { public abstract int compareTo (Object otherObject); } class Employee extends Comparable { pulibc int compareTo(Object otherObject) { . . . } } ------------ public interface Comparable { int compareTo (Object otherObject) } class Employee implements Comparable { public int compareTo (Object otherObject) { . . . } } – O clasa poate mosteni doar o clasa abstracta, dar poate implementa mai multe interfete – O clasa abstracta poate fi partial implementata (cu metode neabstracte si proprietati), pe cand o interfata poate contine doar constante si metode abstracte

Continutul cursului

1. Introducere 2. Platforma Java, Clase si Obiecte 3. Modificatori, Constructori 4. Pachete. Incapsularea datelor 5. Mostenirea / Extinderea claselor 6. Conversii de date. Clase abstracte 7. Interfete 8. Exceptii 4/25/2020 Curs 7 22