Professional Documents
Culture Documents
CLASES ABSTRACTAS
Animal
Concepto de Herencia.
emitir_sonido();
Sobreescritura y sobrecarga de mtodos.
Ocultamiento de variables
La palabra "super".
Perro
Gato
Constructores en Clases Extendidas
emitir_sonido();
emitir_sonido();
Herencia y redefinicin de miembros
Especificadores de acceso.
Mtodos y clases "final".
Concepto de Delegacin
Herencia vs. Delegacin.
Clases y mtodos abstractos.
Diseando una clase para que sea extensible.
La clase Object: mtodo toString.
NO!!
Concepto de Herencia
El concepto de herencia refiere al hecho de trasmitir algo desde un
organismo a otro.
Supongamos que Mara tiene un hijo entonces esperamos que el hijo de
Mara, herede cosas de ella.
Qu cosas esperamos que herede?
Color de Piel
Rasgos Fsicos
Nacionalidad
Color de Ojos
Apellido
2
Concepto de Herencia
La programacin orientada a objetos permite a las clases expresar
similitudes entre objetos que tienen algunas caractersticas y
comportamiento comn. Estas similitudes pueden expresarse usando
herencia. El trmino herencia se refiere al hecho de que una clase
hereda las caractersticas (atributos, variables) y el comportamiento
(mtodos) de otra clase.
Concepto de Herencia
Si tenemos que modelar una clase TELFONO
Cmo la modelaramos?
- Cules seran sus atributos?
- Cules sera su comportamiento?
TELEFONO
TELEFONO
nmero
nmero
marca
marca
sonar()
sonar()
llamar()
llamar()
4
Concepto de Herencia
Si tenemos que modelar una clase TELFONO CELULAR
Cmo la modelaramos?
- Cules seran sus atributos?
- Cules sera su comportamiento?
TELEFONO
TELEFONOCELULAR
CELULAR
nmero
nmero
marca
marca
antena
antena
sonar()
sonar()
llamar()
llamar()
enviarMensajes()
enviarMensajes()
5
Concepto de Herencia
Si tenemos que modelar una clase TELFONO PBLICO
Cmo la modelaramos?
- Cules seran sus atributos?
- Cules sera su comportamiento?
??
TELEFONO
TELEFONOPUBLICO
PUBLICO
nmero
nmero
marca
marca
ubicacion
ubicacion
llamar()
llamar()
sonar()
sonar()
recibirCredito()
recibirCredito()
controlarCredito()
controlarCredito()
Concepto de Herencia
TELEFONO
TELEFONO
nmero
nmero
marca
marca
sonar()
sonar()
llamar()
llamar()
TELEFONO
TELEFONOCELULAR
CELULAR
nmero
nmero
marca
marca
antena
antena
sonar()
sonar()
llamar()
llamar()
enviarMensajes()
enviarMensajes()
TELEFONO
TELEFONOPUBLICO
PUBLICO
nmero
nmero
marca
marca
ubicacin
ubicacin
llamar()
llamar()
sonar()
sonar()
recibirCredito()
recibirCredito()
controlarCredito()
controlarCredito()
Concepto de Herencia
TELEFONO
TELEFONO
nmero
nmero
marca
marca
sonar()
sonar()
llamar()
llamar()
TELEFONO
TELEFONOCELULAR
CELULAR
nmero
nmero
marca
marca
antena
antena
sonar()
sonar()
llamar()
llamar()
enviarMensajes()
enviarMensajes()
TELEFONO
TELEFONOPUBLICO
PUBLICO
nmero
nmero
marca
marca
ubicacin
ubicacin
llamar()
llamar()
sonar()
sonar()
recibirCredito()
recibirCredito()
controlarCredito()
controlarCredito()
Concepto de Herencia
La herencia es, despus de la agregacin o
composicin, el mecanismo ms utilizado para
alcanzar algunos de los objetivos ms preciados en el
desarrollo de software como lo son la reutilizacin y la
extensibilidad. A travs de ella los diseadores pueden
crear nuevas clases partiendo de una clase o de
una jerarqua de clases preexistente (ya
comprobadas y verificadas) evitando con ello el
rediseo, la modificacin y verificacin de la parte ya
implementada. La herencia facilita la creacin de
objetos a partir de otros ya existentes e implica que
una subclase obtiene todo el comportamiento
(mtodos) y eventualmente los atributos (variables) de
su superclase.
9
Herencia de implementacin:
10
Ejemplo
Una subclase puede agregar
caractersticas y comportamiento
a su superclase y reemplazar o
modificar el comportamiento
heredado.
Automticamente, las subclases los
atributos y mtodos de las
superclases.
Ojo con el acceso !
11
Extends
Cmo indicamos la relacin de herencia
en el cdigo fuente Java? Con la
palabra clave extends
12
Object
La clase Java.lang.Object es la raz de la
jerarqua de clases en Java. Cualquier clase que
no especifique un padre directo, ser subclase
directa de Object.
13
Sobreescribiendo Mtodos
La herencia nos permite concebir una nueva clase de objetos como un refinamiento
de otra clase de objetos ya existente, conservando las similitudes entre las clases de
objetos y especificando solamente las diferencias de la nueva clase de objetos.
14
Sobreescribiendo Mtodos
15
Sobreescribiendo Mtodos
Sobreescribiendo Mtodos
La sobreescritura permite definir un mtodo en una
subclase, que tenga exactamente la misma firma que un
mtodo de la superclase.
Objeto:
Gaturro es una
instancia de la clase
Gato
cazarRatn()
dormir()
maullar()
El objetivo de sobreescribir un mtodo es
cambiar su implementacin.
17
Ocultamiento de variables
Qu pasa si en una subclase se define una variable de instancia del
mismo tipo y nombre que la definida en la superclase?
Oculta la variable
de instancia
18
19
SUPER !
20
Auto
21
Especificadores de acceso
Los mtodos que redefinen a otros poseen
sus propios especificadores de acceso.
Una subclase puede modificar el acceso
de los mtodos de la superclase,
pero slo para hacerlos ms accesibles.
Al hacer un mtodo menos accesible
que en la superclase se violara el contrato de la
superclase, ya que una instancia de
la subclase no se podra utilizar en
lugar de una instancia
de la superclase.
redefinirse
Padre
Igual o mayor accesibilidad
Hijo
22
El operador FINAL
En ocasiones es conveniente que un mtodo no sea redefinido en una clase derivada o
incluso que una clase completa no pueda ser extendida. Para esto est la clusula final,
que tiene significados levemente distintos segn se aplique a un dato miembro, a un
mtodo o a una clase.
23
Clase FINAL
Para una clase, final significa que la clase no puede
extenderse.
Es, por tanto el punto final de la cadena de clases
derivadas.
finalclassTelefono
{
intnmero;
Stringmarca;
final
finalTELEFONO
TELEFONO
nmero
nmero
marca
marca
sonar()
sonar()
llamar()
llamar()
No se puede
TELEFONO
TELEFONOCELULAR
CELULAR
nmero
nmero
marca
marca
antena
antena
sonar()
sonar()
llamar()
llamar()
enviarMensajes()
enviarMensajes()
24
Mtodo FINAL
Para un mtodo, final significa que no puede
redefinirse en una clase derivada. Por ejemplo si
declaramos:
class Telefono
{
. . .
public final void sonar()
{...}
}
TELEFONO
TELEFONO
nmero
nmero
marca
marca
final
final
sonar()
final
sonar()
finalsonar()
sonar()
llamar()
llamar()
No se puede
TELEFONO
TELEFONOCELULAR
CELULAR
nmero
nmero
marca
marca
antena
antena
sonar()
sonar()
llamar()
llamar()
enviarMensajes()
enviarMensajes()
25
Atributo FINAL
Para un dato miembro, final significa tambin que no puede ser redefinido en una clase
derivada, y que su valor no puede ser cambiado en ningn sitio; es decir el modificador
final sirve tambin para definir valores constantes. Por ejemplo:
classCirculo
{
publicfinalstaticfloatPI=3.141592;
}
Al declarar una variable como final, se previene que su contenido sea modificado. No
obstante, Java permite separar la definicin de la inicializacin. Esta ltima se puede
hacer ms tarde, en tiempo de ejecucin, llamando a mtodos o en funcin de otros
datos.
La variable final as definida, es constante pero no tiene porqu tener el mismo valor en
todas las ejecuciones del programa, pues depende de cmo haya sido inicializada. Esto
es lo ms parecido a las constantes de otros lenguajes de programacin.
26
Concepto de Delegacin
Se llama delegacin a la situacin en la que una
clase contiene (como atributos) una o ms
instancias de otra clase, a las que delegar
parte de sus funcionalidades. Esta relacin entre
clases suele ser la ms indicada cuando es
necesaria una asociacin entre las clases pero
el principio de Liskov no se cumple. Tambin
puede verse como la relacin entre clases "S
contiene a T". Por ejemplo, Vehculo contiene un
Motor, pero Alumno no contiene a Persona, sino
que es una Persona.
Ver Clase 2 La relacin de asociacin:
agregacin y composicin
Vehiculo
Persona
Alumno
Motor
Herencia
Delegacin
27
Vehiculo
A
?
Motor
B
Delegacin
B
Herencia
Clases Abstractas
En algunas circunstancias es posible definir clases que
representan un concepto abstracto y como tal no deberan
ser instanciadas.
Pensemos en un ejemplo del mundo real: la comida.
Definimos una clase llamada Comida
Clases Abstractas
Supongamos que la respuesta es SI.
@#!!
Qu forma tiene?
Qu color? Qu sabor?
Qu temperatura?
No es posible
determinarlo!!!
30
Clases Abstractas
Supongamos que la respuesta es NO.
???
la comida, es
una clase
abstracta !
31
Clases Concretas
32
Clases Abstractas
El objetivo de una clase
abstracta es ser extendida
por clases concretas y
definir una interface de
comportamiento comn de
los
objetos
de
sus
subclases.
Comida
Pollo
Hamburguesa
Frutilla
34
35
36
37
38
CuentaUniversitaria
CuentaCorriente
39
Generalizacin
Especializacin
B
40
42
43
44
45
46
47
48
SOLID
Solid es un acrnimo inventado por Robert C.
Martin para establecer los cinco principios
bsicos de la programacin orientada a objetos y
diseo. Este acrnimo tiene bastante relacin
con los patrones de diseo, en especial, con la
alta cohesin y el bajo acoplamiento.
El objetivo de tener un buen diseo de programacin es abarcar la fase
de mantenimiento de una manera ms legible y sencilla as como
conseguir crear nuevas funcionalidades sin tener que modificar en gran
medida cdigo antiguo.
49
SOLID
50
53
54
56