Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Relaciones de composicin y
Herencia
Caractersticas:
Composicin tiene un
Herencia es un
Polimorfismo.
Abstraccin.
Clases y objetos.
Java
Arrays y Cadenas
Java
Composicin
public class
class Punto
Punto {{
public
int xx;;
int
int yy;;
int
public Punto(
Punto(int
int x,
x, int
int y)
y) {{
public
this.x
.x == x;
x;
this
this
.y
=
y;
this .y = y;
}}
public Punto()
Punto() {{
public
// llamada
llamada al
al otro
otro constructor
constructor
//
this(-1,
(-1, --1);
1); }}
this
public
void
mostrar(){
public void mostrar(){
System.out.println(x == ++ xx +
+ yy == ++ y);
y); }}
System.out.println(x
public static
static void
void main
main(String
(String args[])
args[]) {{
public
Punto pun1
pun1 == new
new Punto();
Punto();
Punto
Punto pun2
pun2 == new
new Punto(2,3);
Punto(2,3);
Punto
System.out.println( "visualizar
"visualizar datos
datos del
del punto"
punto" );
);
System.out.println(
pun1.mostrar();
pun1.mostrar();
pun2.mostrar();}}
pun2.mostrar();}}
Java
Arrays y Cadenas
Arrays y Cadenas
public class
class Circulo
Circulo {{
public
Punto origen;
origen;
Punto
int radio;
radio;
int
public Circulo(int
Circulo(int x,
x, int
int y,
y, int
int radio)
radio) {{
public
origen == new
new Punto(x,y);
Punto(x,y);
origen
this.radio
.radio == radio;
radio;
this
}}
public void
void mostrar()
mostrar() {{
public
origen.mostrar();
origen.mostrar();
System.out.println("radio == "" ++ radio);
radio);
System.out.println("radio
}}
public static
static void
void main(
main(String
String args[])
args[]) {{
public
Circulo cir
cir == new
new Circulo(5,
Circulo(5, 5,
5, 9);
9);
Circulo
System.out.println( "visualizar
"visualizar datos
datos del
del circulo"
circulo" );
);
System.out.println(
cir.mostrar();
}}
cir.mostrar();
}}
Java
Arrays y Cadenas
Herencia: La palabra
reservada extends
Tipos de programacin
encapsulacin
Basado en
objetos
+ clases
Basado en
clases
+ herencia
...
Orientado a
Objetos
}
...
}
Java
Arrays y Cadenas
Java
Arrays y Cadenas
Herencia: La palabra
reservada extends
Herencia: La palabra
reservada extends
String nombre;
Date anionac;
String puesto;
int categora; }
public class Jefe extends Empleado {
String departamento;
Arrays y Cadenas}
Empleado [ ] Java
subordinados;
Ejemplo de Herencia
Mamfero
Primate
Canino
Chimpance
Java
Perro
Lobo
Arrays y Cadenas
Los constructores no se
heredan
Java
public class
class Persona
Persona {{
public
String nombre
nombre == "";
"";
String
int edad;
edad;
int
10
Persona
public Persona(String
Persona(String nom
nom,, int
int ed)
ed) {{
public
nombre == nom;
nom;
nombre
edad
=
ed;
edad = ed;
}}
Trabajador
public void
void mostrar()
mostrar() {{
public
System.out.println("Nombre: "+
"+ nombre);
nombre);
System.out.println("Nombre:
System.out.println("Edad:
"+ edad);
edad);
System.out.println("Edad: "+
}}
public static
static void
void main(String
main(String args[])
args[]) {{
public
Persona yo=
yo= new
new Persona(Luis",
Persona(Luis", 32);
32);
Persona
yo.mostrar();
yo.mostrar();
}
}
Arrays y Cadenas
Java
Herencia simple
Animal
Gorila
11
}}
Java
Arrays y Cadenas
12
Herencia: constructores
public class
class Trabajador
Trabajador extends
extends Persona
Persona {{
public
float sueldoHora;
sueldoHora;
float
int numHoras
numHoras;;
int
Persona
Persona
public Trabajador(
Trabajador(String
String nom,
nom, int
int ed
ed,, float
float suel,
suel, int
int num)
num) {{
public
super(nom,
(nom, ed);
ed); //
// llamada
llamada al
al constructor
constructor de
de Persona
Persona
super
sueldoHora == suel
suel;;
sueldoHora
numHoras == num
num;}
;}
numHoras
Trabajador
Trabajador
public double
double sueldo()
sueldo() {{
public
return sueldoHora
sueldoHora ** numHoras;
numHoras; }}
return
public static
static void
void main(
main(String
String args[])
args[]) {{
public
Trabajador yo=
yo= new
new Trabajador(Luis",
Trabajador(Luis", 32,
32, 200.5f,
200.5f, 45);
45);
Trabajador
yo.mostrar(); //
// se
se invoca
invoca al
al metodo
metodo heredado
heredado mostrar
mostrar
yo.mostrar();
double pelas
pelas == yo.sueldo();
yo.sueldo();
double
System.out.println("Cobra:
println("Cobra: "" ++ euros);
euros);
System.out.
}}
Java
Arrays y Cadenas
}}
Bedel
Bedel
13
Reescritura de un mtodo
n
Arrays y Cadenas
Arrays y Cadenas
14
Ejemplo
Java
//En Persona
Persona redefinimos
redefinimos el
el mtodo
mtodo mostrar()
mostrar()
//En
public class
class Trabajador
Trabajador extends
extends Persona
Persona {{
public
float sueldoHora;
sueldoHora;
float
int numHoras;
numHoras;
int
public Trabajador(String
Trabajador(String nom,
nom, int
int ed,
ed, float
float suel,
suel, int
int num)
num) {{
public
super(nom, ed);
ed); //
// llamada
llamada al
al constructor
constructor de
de Persona
Persona
super(nom,
sueldoHora == suel;
suel;
sueldoHora
numHoras == num;}
num;}
numHoras
// sobrecarga
sobrecarga completa
completa de
de mostrar
mostrar
//
//
nombre
y
edad
son
atributos heredados
heredados de
de Persona
Persona
// nombre y edad son atributos
public void
void mostrar()
mostrar() {{
public
System.out.println("Nombre: "+
"+ nombre);
nombre);
System.out.println("Nombre:
System.out.println("Edad: "+
"+ edad);
edad);
System.out.println("Edad:
System.out.println("Sueldo por
por hora:
hora: "+
"+ sueldoHora);
sueldoHora);
System.out.println("Sueldo
System.out.println("Horas trabajadas:
trabajadas: "+
"+ numHoras);}}
numHoras);}}
System.out.println("Horas
15
Sobrecarga de mtodo
Java
Arrays y Cadenas
16
Sobrecarga de mtodo
public class
class Trabajador
Trabajador extends
extends Persona
Persona {{
public
float sueldoHora
sueldoHora;;
float
int numHoras;
numHoras;
int
public Trabajador(String
Trabajador(String nom
nom,, int
int ed,
ed, float
float suel,
suel, int
int
public
num) {{
num)
super(nom, ed
ed);
); //
// llamada
llamada al
al constructor
constructor de
de Persona
Persona
super(nom,
sueldoHora == suel;
suel;
sueldoHora
numHoras == num;}
num;}
numHoras
// sobrecarga
sobrecarga parcial
parcial de
de mostrar
mostrar
//
// nombre
nombre yy edad
edad son
son atributos
atributos heredados
heredados de
de Persona
Persona
//
public
void
mostrar()
{
public void mostrar() {
super.mostrar(); //llamada
//llamada al
al mtodo
mtodo de
de la
la clase
clase padre
padre
super.mostrar();
System.out.println("Sueldo por
por hora:
hora: "+
"+ sueldoHora
sueldoHora);
);
System.out.println("Sueldo
System.out.println("Horas
trabajadas:
"+
numHoras);}
System.out.println("Horas trabajadas: "+ numHoras);}
mtodo de la superclase
}}
Java
Arrays y Cadenas
17
Java
Arrays y Cadenas
18
Java
Arrays y Cadenas
19
Java
Arrays y Cadenas
20
API de Object
Method Summary
toString()
equals()
protected
Object
Object
boolean
protected
void
Class
int
Java
Arrays y Cadenas
21
Ejemplo
clone()
Creates and returns a copy of this object.
equals (Object obj)
Indicates whether some other object is "equal to" this one.
finalize()
Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.
getClass()
Returns the runtime class of an object.
hashCode()
Returns a hash code value for the object.
toString()
Returns a string representation of the object.
Java
Arrays y Cadenas
22
Ejemplo
Java
Arrays y Cadenas
23
Java
Arrays y Cadenas
24
Copias de Objetos
clone( )
23
"abc"
Copia en profundidad:
A
B
23
"abc"
15
42
Java
15
A'
B'
23
"abc"
42
15
C'
42
Arrays y Cadenas
25
clone( )
Java
Arrays y Cadenas
26
clone( )
public class
class ClaseClonable
ClaseClonable
public
implements Cloneable
Cloneable {{
implements
// Otro
Otro cdigo
cdigo de
de la
la clase
clase
//
public Object
Object clone
clone ()
()
public
throws CloneNotSupportedException
CloneNotSupportedException
throws
{{
return super.clone();
super.clone();
return
}}
}}
Java
Arrays y Cadenas
27
clone( )
clone( )
Java
Arrays y Cadenas
29
clone( )
Ejemplo
Reglas generales
n
Arrays y Cadenas
31
Ejemplo (cont.)
public class
class Alumno
Alumno implements
implements Cloneable
Cloneable {{
public
String nombre;
nombre;
String
String
apellidos;
String apellidos;
public Alumno(String
Alumno(String nombre,
nombre, String
String apellidos){
apellidos){
public
this.nombre= nombre;
nombre;
this.nombre=
this.apellidos= apellidos;
apellidos;
this.apellidos=
}}
public
boolean
equals
(Alumno
al){
public boolean equals (Alumno al){
if (apellidos.equals(al.apellidos))return
(apellidos.equals(al.apellidos))return true
true;;
if
else return
return false;
false;
else
}}
public Object
Object clone
clone ()
() throws
throws
public
CloneNotSupportedException{
CloneNotSupportedException{
return super.clone();
super.clone();
return
}}
public String
String toString
toString(){
(){
public
return nombre
nombre
Java
apellidos ++ "" ";
"; 32}}
return
++ ""Arrays
"" ++y Cadenas
apellidos
Referencia esttica
public static
static void
void main(String
main(String args[])
args[]) {{
public
Alumno alum
alum == new
new Alumno("Julian",
Alumno("Julian", ""Fdez");
Fdez");
Alumno
Class tipoObjeto
tipoObjeto == alum.
alum.getClass();
getClass();
Class
System.out.println
.out.println("nombre
("nombre de
de la
la clase:"
clase:" ++tipoObjeto
tipoObjeto.getName());
.getName());
System
Alumno alum2
alum2 == alum;
alum;
Alumno
alum2.apellidos == "Rodriguez";
"Rodriguez";
alum2.apellidos
System.out.println
.out.println("son
("son el
el mismo
mismo objeto?:"+
objeto?:"+ ((alum
alum==alum2));
==alum2));
System
alum2 == new
new Alumno("Antonio",
Alumno("Antonio", "Rodriguez");
"Rodriguez");
alum2
System.out.println
.out.println("son
("son iguales
iguales os
os objetos?:"+
objetos?:"+
System
alum.equals(alum2));
.equals(alum2));
alum
try {{ alum2
alum2 == (Alumno)alum.clone();
(Alumno)alum.clone();
try
}catch (CloneNotSupportedException
(CloneNotSupportedException e){
e){
}catch
System.out.println("no tiene
tiene implementada
implementada la
la clonacion");
clonacion");
System.out.println("no
}}
alum.nombre="Fran";
alum.nombre="Fran";
alum2.nombre="Moises";;
alum2.nombre="Moises"
System.out.println
.out.println("objetos:
("objetos: "+
"+ alum
alum ++ alum2);
alum2);
System
}}
Java
Arrays y Cadenas
33
}}
Referencia dinmica
Java
Arrays y Cadenas
34
Enlace dinmico
Programador es un Empleado
Empleado
e
mit
per
Se
extends
Programador
Arrays y Cadenas
35
Java
Arrays y Cadenas
36
Enlace dinmico
Cuenta
CCorriente
retirar()
CAhorro
retirar()
Enlace dinmico
class Shape{
Shape{ ...
... double
double getArea(){...};}
getArea(){...};}
class
class Rectangle
Rectangle extends
extends Shape{
Shape{ ...
... double
double
class
getArea(){...};}
getArea(){...};}
class Triangle
Triangle extends
extends Shape
Shape{{ ...
... double
double
class
getArea(){...};}
getArea(){...};}
Shape s;
s; Rectangle
Rectangle r;
r; Triangle
Triangle t;
t;
Shape
// ...
...
//
if
(/*...*/)
s
=
r;
else
s
=
t;
if (/*...*/) s = r; else s = t;
double answer
answer == s.getArea();
s.getArea(); //
// Cual
Cual ejecuta?
ejecuta?
double
accArray[i].retirar()
retirar()
enlace dinmico
s; //
// legal?
legal?
rr == s;
Java
Arrays y Cadenas
Enlace dinmico
37
Persona
public static
static void
void main(String
main(String args[])
args[]) {{
Trabajador
public
Persona per;
per;
Persona
Trabajador yo=
yo= new
new Trabajador("Balta",
Trabajador("Balta", 99,
99, 200.5f,
200.5f, 45);
45);
Trabajador
per == yo;
yo;
// Asignacion
Asignacion legal
legal
per
//
// se
se ejecuta
ejecuta el
el mtodo
mtodo mostrar
mostrar de
de Trabajador
Trabajador
//
per.mostrar(); //
// per
per se
se trata
trata como
como cualquier
cualquier Trabajador
Trabajador
per.mostrar();
pelas == per.sueldo();
per.sueldo();
pelas
//
Ilegal
(sueldo
se
define
en
Trabajador)
// Ilegal (sueldo se define en Trabajador)
boolean b1,
b1, b2;
b2;
boolean
b1 == (per
(per instanceof
instanceof Persona);
Persona); //
// True
True
b1
b2 == (per
(per instanceof
instanceof Trabajador);
Trabajador); //
// True
True
b2
System.out.println("b1:
"+
b1
+
"
b2:
"+ b2);
b2);
System.out.println("b1: "+ b1 + " b2: "+
}
}
Java
Arrays y Cadenas
39
Arrays y Cadenas
Arrays y Cadenas
38
Enlace dinmico
Nota:
Nota:
En
En C++
C++ slo
slo hay
hay enlce
enlce dinmico
dinmico
en
en los
los mtodos
mtodos virtual
virtual
En
En Java,
Java, todos
todos los
los mtodos
mtodos son
son
virtuales
virtuales
Java
Arrays y Cadenas
40
Java
Java
41