Sunteți pe pagina 1din 4

Curs 10 POO Calc. 2, 14.12.

2021

Interfete.
Intr-o interfata, toate metodele declarate nu au implementare.
O interfata poate sa declare si constante.
O clasa ce implementeaza o interfata trebuie sa dea implementarea
la TOATE metodele declarate in interfata.
O clasa ce implementeaza o anumita interfata specifica prin cuvantul cheie
implements.
Interfata generalizeaza conceptul de clasa abstracta.
Nu are nicio legatura cu interfata grafica !
Ex:
interfata ActionListener folosita in programarea grafica in Java, declara
o singura metoda: public void actionPerformed(ActionEvent ev)
O clasa ce implementeaza interfata ActionListener , obligatoriu va da implementarea
metodei actionPerformed().
Putem defini o interfata folosind cuvantul cheie interface.

Exemplu
Definim interfata Forma in care declaram doua semnaturi de metode: perimetru() si
arie()
interface Forma{
public double perimetru();
public double arie();
}

class Patrat implements Forma{


private double a;
public Patrat(int a){
this.a=a;}
public double get(){ return a;}
public void set(int a){this.a=a;}
public double perimetru(){return 4*a;}
public double arie(){return a*a;}
//...
}
class Cerc implements Forma{
private double r;
public Cerc(int a){
r=a;}
public double get(){ return r;}
public void set(int a){r=a;}
public double perimetru(){return 2*Math.PI*r;}
public double arie(){return Math.PI*r*r;}
//...
}

class Test{
public static void main(String args[]){
Patrat p=new Patrat(9);
System.out.println("arie="+p.arie());
Cerc c=new Cerc(7);
System.out.println("arie cerc="+c.arie());
}
}

COLECTII
O colectie este un obiect , grup pentru alte obiecte.
La vectori (vectorii intrinseci), o data stabilita dimensiunea, NU
o putem depasi.
Ex:
int a[]=new int[3];
a[0]=1; a[1]=0; a[2]=6;
a[3]=7;//EROARE !
La o colectie (grup de obiecte) nu se stabileste de la inceput dimensiunea
grupului, deci putem
adauga ulterior cate obiecte sunt necesare.

O alta diferenta intre vectori si colectii : vectorul poate contine obiecte , dar
sunt si vectori ce contin date de tipuri primitive (int, double,...)
Colectiile nu pot contine date de tripuri primitive, doar obiecte.
Daca o colectie de date de tipul int ? Nu se poate asa, dar, putem folosi
obiecte din clasa Integer (o clasa wrapper -"ambalaj" pentru tipul int).
ex:
int nr=7;
Integer obj=new Integer(7);

In limbajul Java colectiile sunt tratate unitar (acelesi nume de metode:


ex: get(),add(), etc..) prin implementarea interfetelor.
Avem legate de colectii interfetele:
Collection
List
Set

Interfata Collection
Este cea mai generala interfata pt colectii. Ea modeleaza
un grup de obiecte (elemente).
Cateva metode declarate in interfata Collection:
public int size()
Returneaza nr de elemente din colectie

public boolean add(Object obj)


adauga un element in colectie

Iterator iterator()
returneaza un obiect de tip Iterator folosit pt parcurgerea colectiei.

etc.
Nicio clasa din JDK nu implementeaza aceasta interfata.
Interfata Collection este folosita pt a fi mostenita de interfata List si Set.

Interfata List
- extinde interfata Collection
Este folosita pt a modela un grup de elemente indexate.
In grup , obiectele se pot repeta
Metode din interfta List:
Object get(int index)
returneaza obiectul de pe pozitia index din grup

void set(int index, Object element)


modifica obiectul de pe pozitia index

Object remove(int index)


Scoate din colectie elementul de pe pozitia index

Interfata List este implementata de mai multe clase:


ArrayList
LinkedList
Vector

Interfata Set
modeleaza o multime de obiecte ( nu pot aparea dubluri)

PARCURGEREA COLECTIILOR
Cea mai generala parcurgere: parcurgerea cu iteratori.
Interfata Iterator declara 3 metode:
boolean hasNext()
Object next()
Returneaza obiectul urmator din colectie
void remove()
pt eliminarea unui obiect din colectie
....

Vom folosi colectii indexate si acestea se parcurg mai simplu cu


metoda get()

Exista mai multi algoritmi folositi pt prelucrarea colectiilor (ex: daca vrem sa
sortam ).
Acestia sunt metode statice in clasa Collections.
Ex:
public static void sort(Collection c)

Ex:
public static void shuffle(Collection c)
amesteca aleator elementele colectiei

Vom folosi in principal colectii de elemente indexate (clasa ArrayList) .


In general intr-o colectie putem introduce obiecte si din clase diferite.
Putem folosi colectii parametrizate, pt care, se specifica tipul de obiecte
din colectia respectiva. daca vrem sa introducem intr-o colectie parametrizata
un obiect de alt tip, avem eroare la compilare.
Compilatorul face niste verificari suplimentare pt colectiile parametrizate.

Ex: o colectie neparametrizata in care vom introduce obiecte Integer si String:

ArrayList al=new ArrayList();


al.add(new Integer(3));
al.add(new Integer(5));
al.add("ABCD");

Ex: O colectie parametyrizata ce contine doar obiecte Integer:


ArrayList<Integer> al=new ArrayList<Integer>();
al.add(3);
al.add(5);
al.add("ABCD");//EROARE la compilare

Generam numere aleatoare cuprinse intre 0 si 99 pana se genereaza numarul aleator


99, cand ne vom primi.
Sa afisam daca sunt toate diferite intre ele sau nu.

- algo toate diferite presupunem sa memoram toate numerele


- In ce le memoram ? In vector ? Nu stim ce dimensiune sa dam !
Le memoram intr-o colectie ArrayList

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class Main {

public static void main(String[] args) {


ArrayList<Integer> al=new ArrayList<Integer>();
Random r=new Random();
for(;;) {
int nr=r.nextInt(100);//0..99
if(nr==99)break;
al.add(nr);
}
int i;
Collections.sort(al);
for(i=0;i<al.size();i++)
System.out.println(al.get(i));
boolean rez=toateDiferite(al);
Sysytem.out.println(rez);
}
static boolean toateDiferite(ArrayList<Integer> al){
int N=al.size();
int i, j;
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(al.get(i)==al.get(j))return false;
return true;
}
}

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