You are on page 1of 29

Object Oriented Programming 2

1. Abstract class
2. Interfaces
3. Polymorphism
4. Nested classes
5. Nested classes in methods
6. Casting objects and primitive data
7. Comparison of objects.

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

Class ====== Abstract class ======= Interfaces


Reducing of information in implementation
Abstract classes can be used for:
extension inheritance
nested classes
polymorphism
call of implemented methods
data

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

1. Abstract Classes
public abstract class NumeClasaAbstracta {
// corpul clasei
abstract void numeMetoda(Type x, Type y);//nu are implementarea aici
// Pot fi introduse si metode cu implementari
}
<<abstract>>
Circle

Abstract classes may have constructors.

+center: Point
+radious: float

Abstract classes cannot be instantiated.

Wheel
+rotate()

<<abstract>>
SteeringWheel
+rotate()

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

2. Interfaces
An interface is a collection of method names (declaration) without implementation and fields.
They have only the methods signature.
An interface is a contract between a class and the outside world.
The objects created with a class that implements an interface have the behavior given by the
methods declared in interface.
An interface defines a communication protocol between objects.
Interfaces dont belong to class hierarchies.
dynamic binding postpone the taking of decisions of object membership.

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

Interface reasons: To obtain objects with similar features (static variables, methods with
the same signatures).
The interfaces can be used to refer defined methods without taking into account their
localization.
It is used for the collaboration with objects constructed with different classes.
Ex.: A method that sends object through a communication channel the method knows
the classes used to construct the objects only during the runtime.
Dynamic binding (legare dinamic)
Methods, that that have as parameters new object types, do not need recompilations
of the entire program.
Interfaces can be used to refer different types of objects.

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

Interfeele maximizeaz utilizarea legrii dinamice permind obiectelor s fie accesate


independent de detaliile lor de implementare.
De exemplu, se pot utiliza n metode parametrii formali care sunt definii ca tipuri de
interfee.
Interfeele susin motenirea selectiv prin faptul c pot fi preluate din clase subseturi de
trsturi ale altor clase, deoarece clasele pot implementa mai multe interfee.
O interfa poate avea ca membrii: clase, interfee, cmpuri i metode.
Acetia sunt
fie declarai n interfa, fie sunt motenii.
Ca i la clase, o interfa poate avea mai multe cmpuri cu acelai nume motenite din
interfee diferite, dar referirea lor ca nume simple este semnalat ca eroare de compilator.
Variabilele declarate ntr-o interfa sunt disponibile ca i constante n clasele care o
implementeaz. Ele sunt implicit static i final.
Interfeele nu sunt afectate de schimbrile din unele clase particulare sau de modificri ale
ierarhiei de clase.
O clas care nu este abstract trebuie s implementeze toate metodele interfeei care
nu sunt implementate n superclasa ei (dac aceasta este abstract).
Interfeele pot fi definite n fiiere surs (cu extensia java) ca i clasele normale. La
compilare se obine fiiere cu extensia class.
Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

Nu se poate instania o interfa, dar se pot crea metode care returneaz obiecte ce provin
din clase care implementeaz interfaa. Interfeele sunt doar implementate, specificare care se
face ca n exemplul de mai jos:

public class NumeClasa implements NumeInterfata {


.................
}
Clasa NumeClasa va avea obligatoriu toate metodele descrise n interfaa NumeInterfata.
Dup ce o clas implementeaz o interfa (completnd secvenele de cod care reprezint
metodele acesteia), subclasele ei le motenesc pe toate fr a mai fi necesar suprascrierea (sau
implementarea) lor.
n subclas nu mai este nevoie s se menioneze c implementeaz interfaa implementat
de superclas.
n Java se permite implementarea (multipl) mai multor interfee de ctre o clas. Se
poate da o list de interfee.
Interfeele nu fac parte din ierarhia de clase!
Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

E.g.: methodName(InterfaceType objRef)


public class NumeClasa implements NumeInterfata {
.................
}
Java accepts that a class implements a list of interfaces.

I2

I1

I3

ClassX

public class NumeClasa implements Inter1 Inter2 Inter3 {


.................
}

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

E.g. of implementation:
public interface NumeInterfata {
..............
public void numeMetoda();
public void altaMetoda();
}

interface I {}
class Y implements I{}
class X extends Y {}
class Z extends Y {}

class NumeClasa implements NumeInterfata { ..... }


It is accepted:
NumeInterfata obiectExecutabil=new NumeClasa(); //???

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

Exemple
/** Testarea referintelor pentru extinderi si conversii */
public class Class1
{
public static void main (String args[])
{
Class1
Y yRef=new X();
+yRef: I
+yN: I
Y yN=new Z();
+iRef: I
+iN: I
I iRef=new Y();
+i1: I
I iN=new X();
+main()
I i1= (Y) yRef;
}
}

Y
I

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

10

3. Polymorphism
It is the ability of objects belonging to different types to respond to method calls of methods of
the same name, each one according to an appropriate type-specific behaviour.

The programmer (and the program) does not have to know the exact type of the object in
advance, so this behavior can be implemented at run time (this is called late binding or dynamic
binding).
Name binding refers to the association of values with identifiers.
Dynamic during execution

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

11

/** Mostenire si reconversie (upcasting) */


class Baza {
public void metBaza(int x) {
System.out.println("Baza: x="+x);
}
}

public class ClasaPrincipala {


public static void main (String[] args) {
Baza baz=new Baza();
metodaPrinc(baz);
Derivata deriv=new Derivata();
metodaPrinc(deriv);
}
public static void metodaPrinc(Baza b){
b.metBaza(3);
}
}

class Derivata extends Baza {


//redefineste metoda din Baza
int y=3;
public void metBaza(int x) {
System.out.println("Derivata:
x+y="+ (x+y));
}
}

Baza
ClasaPrincipala

+metBaza()

+baz: Baza
+deriv: Derivata
+main()
+metPrinc()

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

Derivata
+i: int
+metBaza()

12

4. Inner Classes and Nested Classes


Exterior classes .
//Define an interface
Example
interface Interfata {
class OuterClass {
int metInterfata();
.............
}
static class NestedClass { //static class= nested class
........................
}
class ClSecund {
class InnerClass {
private class ClInterioara implements Interfata {
..........
private int i=13;
}
public int metInterfata() {
}
return i;
}
Why are they used?
}
public Interfata met() {
return new ClInterioara();
}
}
Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

13

Exemplu
/** Utilizarea unei clase interioare */
public class ClPrinc
{
public static void main (String[] args)
{
ClSecund cls=new ClSecund();
Interfata in=cls.met();
int x=in.metInterfata();
//se putea scrie si: int x=cls.met().metInterfata();
System.out.println("main scrie valoarea
din in adica din " +in+" este: x="+x);
}
}

Interfata <<interface>>

ClInterioara

+metInterfata(): int

+metInterfata(): int
realization

dependency

inner class relation

ClPrinc
+main()

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

ClSecund
+met(): ClInterioara

14

Interfata <<interface>>

ClInterioara

+metInterfata(): int

+metInterfata(): int
realization

dependency

ClPrinc
+main()

inner class relation

ClSecund
+met(): ClInterioara

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

15

5. Inner Classes in Methods


use of Anonymous class

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

16

Exemple /** Testarea unei clase anonime intr-o metoda */


public class Class1 {
// define an interface
//define a method
interface Interfata {
public Interfata met() {
int metInterfata();
System.out.println("Scrie met()");
}
return new Interfata() { //????
private int i=13;
public int metInterfata() {return i;}
};// Are nevoie de ";"!
}
public static void main (String[] args) {
Class1 cl=new Class1();
Class1
Interfata cla=cl.met();
<<Interface>>
cl.met();//merge si asa
+c1: Class1
Interfata
System.out.println(cla.metInterfata());
+cla: Interfata
}
+metInterfata(): int
+main()
}
+met(): Interfata

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

17

It is equivalent to:
class ImplInterfata implements Interfata {
private int i=13;
public int metInterfata () {
return i;
}
return new ImplInterfata();

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

18

6. Objects and primitive data casting


Casting is a procedure to create new values of other types than the source.
For some primitive types:
(NewType) value
Ex:
float x=3.5f;
int y= (int) x;
The compiler doesnt accept: int y=x;

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

19

For objects:
ClasaObiect1 obiect1=new ClasaObiect1();
ClasaObiect2 obiect2; // ClasaObiect2 extinde ClasaObiect1
obiect2=(ClasaObiect2) obiect1; //conversia
the use of cast operator How does it work?

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

20

interface I {
Exemplu /** Testarea conversiei */
void metX();
public class Class1 {
}
public static void main (String[] args) {
X obX=new X();//creeaza un obiect de tip X
Y obY=new Y(); //creeaza un obiect de tip Y class X implements I{
int a=1;
obX.metX();
public void metX() {
obY.metX();
System.out.println("Este
obY.metY();
executata metoda metX;
X obXY=new Y();
a="+a++);
obXY.metX();
}
//nu se accepta obXY.metY();
} extends X {
class Y
//converteste obiectul obY intr-un
int b=20;
//obiect de tip X
public void metY() {
X obYX= (X) obY; //downcasting
System.out.println("Este executata
obYX.metX();
metoda metY; b=" +b++);
//nu mai are metY obYX.metY();
}
obY.metY();//obY exista mai departe
}

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

21

//incearca conversia inversa


Y ob= (Y) obYX; //upcasting
ob.metX();
ob.metY();
//incearca conversia obiectului obX
in obiect de tip Y
Y oby= (Y) obX;//nu merge
//da eroare la executie
oby.metX();
oby.metY();

<<Interface>>
I
+metX()

Class1

//creeaza obiecte de tip intefata


I obI1=new X();
I obI2=new Y();//ambele au numai
metoda metX

+obX: X
+obY: Y
+obI1: I
+obI2: I

X
+a = 1:int
+metX()

+main()

//converteste obiect de tip Y la tipul

Y
+b = 20:int
+metY()

interfata
I obI3= (X) obY;
obI3.metX();//nu are metY
Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

22

}
}
Any Object can be converted into type Object! Why?
Ex:
ClasaX refObiect=new ClasaX();
..............................
Object refNoua=(Object) refObiect;
Wrapper Classes
Boolean, Character, Integer, Long, Double, Float i Number.
String s=new String("123");
int i= (int) s;//da eroare de compilare
float a = (Float.valueOf(12.3) ).floatValue();

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

23

Integer Class
public final class Integer extends Number
java.lang.Objectjava.lang.Numberjava.lang.Integer
Fields: MAX_VALUE, MIN_VALUE i TYPE (clasa obiectului reprezentnd valori de tip
ntreg).
Constructors:
Integer(int) aloc un nou obiect reprezentnd argumentul int
Integer(String) idem dat printr-un ir de caractere
Metodele clasei Integer sunt:
byteValue() returneaz valoarea obiectului Integer ca un byte
decode(String) decodific un ir ca Integer
doubleValue()
equals(Object) - compar acest obiect cu obiectul specificat
floatValue()
getInteger(String) determin valoarea Integer a irului
getInteger(String,int) - idem cu o baz specificat
getInteger(String,Integer)
intValue() returneaz valoarea obiectului ca long
Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

24

intParseInt(String) analizeaz argumentul dat (de tip String) ca un ntreg cu semn i


returneaz un ntreg zecimal reprezentnd argumentul
shortValue()
toOctalString()
toString(int) returneaz un nou obiect String reprezentnd obiectul specificat
valueOf(String) returneaz un nou obiect de tip Integer iniializat cu valoarea irului
specificat (implicit n baza 10)
valueOf(String,int) idem cu baza precizat de int.
Exemplu de utilizare:
Integer numar = new Integer(1234);
int numarNou= numar.intValue();// returneaza 1234
String adresa=12345;
int adr=Integer.parseInt(adresa)//converteste un string intr-un numar intreg

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

25

7. Comparison of objects
The using test "==" what does it provides?
Why should be used the method equals from Object?

Ex.:
Constructors: String(), String(byte[]) etc.
Methods:
charAt(int)
compareTo(String)
copyValueOf(char[])
equals(Object)
equalsIgnoreCase(String)
getBytes()

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

26

Ex:
String str1=Test 1;
String str2=Test 2;
boolean b;
b=str1.equals(str2); // nu au aceiasi valoare deci returneaza false
b=(str1==str2);//rezulta b=false
str1=str2;
b=str1.equals(str2);//au aceiasi valoare deci b=true
b=(str1==str2); // sunt aceleasi deci rezulta b=true
str1= new String(str2);
b=str1.equals(str2);// rezulta b=true
b=(str1==str2);//rezulta b=false

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

27

The name of classes and objects


Class Class methods:
getDeclaredClass() - returneaz un tablou de obiecte Class reflectnd toate clasele i
interfeele membre ale clasei reprezentate de obiectul Class
getModifiers() - returneaz modificatorii clasei sau interfeei
getName() - returneaz numele (calificat) al clasei sau interfeei reprezentate de obiect.
getClass()
getName().
String nume=obj.getClass().getName();
refObiect.getClass().getSuperclass();

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

28

*
****
*********
****
*

Tiberiu Leia: Ingineria sistemelor de programe Programarea orientat pe obiecte II

29

You might also like