Está en la página 1de 44

UNIVERSIDAD NACIONALMAYOR

DE SAN MARCOS
Facultad de Ingeniería de Sistemas e
Informatica
Herencia
Agenda
1. Introducción
2. Tipos
3. Jerarquías
4. Ventajas y Desventajas
5. Herencia en Java
6. La clase Genérica Object
7. Organización de las Clases
8. Referencias
1. Introducción
Es un mecanismo de la POO que permite construir una clase
incorporando de manera implícita todas las características de
una clase existente:
Modelado de la realidad. En el mundo real son frecuentes las relaciones
de generalización/especialización entre las entidades.
Evitar redundancias. Evita la repetición de código entre clases
semejantes
Facilitar la reutilización. Permiten reutilizar código agregando
características deseadas
Soporte al polimorfismo
1. Introducción. Definicion
• Herencia. La herencia permite definir clases (subclases)
a partir de otra clase mas genérica (superclase)
• La subclase reúne todas las propiedades de la
superclase, además de las suyas propias, añadiendo o
redefiniendo atributos y comportamiento.
• La herencia potencia la reutilización de código, genera
código mas fiable y robusto y reduce el costo de
mantenimiento.
• Es uno de los aspectos que distingue al paradigma OO
de otros paradigmas.
1. Introducción: Diagrama de clases
Persona
dni
Persona Nombre
direccion
Persona()
getDni()
Alumno getNombre()
Getdireccion()

Diagrama de clase de Alumno


dominio código
nota
Diagrama de clase de Alumno()
análisis getCodigo()
getNota()
1. Introducción: Implementación
public class Persona{ Persona
String dni; dni
String nombre; Nombre
String direccion; direccion
public Persona(){}
public String getDni(){…} Persona()
public String getNombre(){…} getDni()
public String getDireccion(){…} getNombre()
} getDireccion()

public class Alumno extends Persona{


String codigo; Alumno
double nota; código
public Alumno(){} nota
public String getCodigo(){…}
public String getNota(){…} Alumno()
} getCodigo()
getNota()
1. Introducción: Herencia
• Una clase hereda todos los atributos y
métodos.
Persona
• EXCEPTO:
− Constructores (no se heredan pero si
se ejecutan)
Alumno − Atributos y métodos privados.

• Cuando creamos un objeto de una


subclase, el constructor de la clase padre o
superclase también se ejecuta.
1. Introducción: Constructores
public class Persona{
Persona
String dni;
String nombre; dni
String direccion; Nombre
public Persona(String vdni, String nom, String dir){ direccion
dni = vdni; Persona()
nombre = nom; getDni()
direccion = dir; getNombre()
} getDireccion()
public String getDireccion(){…}
}
public class Alumno extends Persona{
Alumno
String codigo;
double nota; código
public Alumno(String vdni, String nom, String dir, nota
String cod, double vnota){ Alumno()
super(vdni, nom, dir); getCodigo()
codigo = cod; nota = vnota; getNota()
}
}
1. Introducción
•Herencia. La herencia es uno de los pilares de la POO.
consiste en que una clase puede heredar sus variables y
métodos a varias subclases (la clase que hereda es
llamada superclase o clase padre).
• Esto significa que una subclase, aparte de los atributos
y métodos propios, tiene incorporados los atributos y
métodos heredados de la superclase. .
• De esta manera se crea una jerarquía de herencia.
• Una de las principales ventajas que aporta el uso de
una estructura superclase/subclase es que resulta más
fácil reutilizar código similar entre diversas clases
1. Introducción, definición
• Adición, Sobre escritura y Anulación. La herencia
permite adaptar los miembros heredados en la subclase.
• Adición. La subclase puede anadir nuevos atributos y
metodos a los recibidos a traves de la herencia
• Sobre escritura o Redefinición. Es posble cambiar
el tipo de dato de un atributo heredado, redefinir la
implementación de una operacion heredada para
adaptarla a las caracteristicas de la subclase
• Anulación. Cuando un atributo u metodo heredados
no tiene utilidad en la subclase pueden ser anulados
para impedir su utilización
1. Introducción
A
•Sean las clases: a1
a2
a3
m1
m2
Adición de m3
Sobre escritura
atributos y de atributos y
métodos métodos

B C
a4 a3

m4 m3
1. Introducción, definición
• Protección y herencia. Niveles de protección.
• Miembros públicos. Son accesibles desde la sub
clase,s y se heredan como públicos.
• Miembros privados. No son accesibles desde la sub
clases
• Miembros con acceso a nivel de paquete. Son
accesibles desde la subclase siempre y cuando
pertenezcan al mismo paquete que la clase padre. Se
heredan con el mismo nivel de protección
• Miembros protegido. Un miembro protegido es
accesible unicamente desde la sub clase
1. Introducción
• La herencia modifica el mecanismo de paso de
mensajes.
• Cuando un objeto de la una clase C se le pasa un
mensaje M, se busca un método M en la clase C.
• Si existe un método M en la clase C, se ejecuta ese método y termina
el proceso.
• Si en la clase C no hay ningún método M, se busca este en la
superclase de C.
• Si en la super clase de C existe un método M, se ejecuta ese método
y termina el proceso.
• Si en la superclase de C no hay ningún método M, se busca en las
super clases de la superclase hasta que o bien se encuentra y se
ejecuta o no se encuentra en ninguna de las superclases, de forma
que el objeto no entiende ese mensaje M, dando como resultado
ERROR.
2. Tipos
•Herencia Simple. . A

• Una clase puede heredar de


una única clase E B
• Ejemplo Java, C#, C++,
Python
D C

•Herencia Múltiple.
D E
• Una clase puede heredar de
varias clases
• Ejemplo; C++, Python, Eiffel C
2. Introducción
Persona Persona

Docente Alumno Docente Alumno

Prof.Ayudante

H, Simple H. Múltiple
Una clase base Varias clase base
3. Jerarquías
•Especialización
• La clase debe relacionar mediante herencia con la
clase B si B es un A, entonces:
A Animal Mamífero Vehículo Figura

B Pájaro Ratón Auto Triangulo

Un pájaro Un ratón Un auto Un triangulo


es un es un es un es una
animal Mamífero Vehículo Figura
3. Jerarquías
•Generalización
• Se detectan clases con un comportamiento común
• Ej. Libro y Diarios son Publicaciones
•Especialización
• Se detecta que una clase es un caso especial de otra
• Ej. Alumno es una Persona
4. Ventajas
Algunas ventajas:
• Mediante la clasificación Jerárquica permite gestionar en
forma sencilla la Abstracción.
Alumno

PostGrado PreGrado

Maestro Doctor PosDoct Egresado Graduado


4. Ventajas
Algunas ventajas:
• La herencia es un mecanismo de reutilización de código
y diseño.
• Ayuda a los programadores ahorrar código y tiempo

• Permite aprovechar semejanzas de los elementos del


mundo y eliminar las redundancias que existen en el
modelo de análisis.
• Los objetos pueden ser construir a partir de otros similares
• La clase derivada puede heredar código y datos de la clase base.
• Las clases que heredan propiedades de otra clase pueden servir como
clase base de otras
4. Desventajas
• La propagación de los cambios puede parecer una
virtud de la herencia, pero realmente es una desventaja:
• Cualquier clase puede ser padre (Súper Clase) sin
saberlo no hay referencia a ellos. La búsqueda es
laboriosa sobre todo si no se tiene la documentación
actualizada.
• Cualquier cambio afecta a quienes utilizan esa clase
y localizar a los afectados es una tarea mucho mas
difícil de realizar
• Mientras mas descendientes mayor será el problema:
“epidemia de cambios y fallos”.
• Introduce una fuerte dependencia en la sub clase
respecto de la super clases.
5. Herencia en Java
• Con esto decimos que la clase Alumno es una subclase
de la Persona y luego definimos los atributos/métodos
particulares de la subclase. Ej.

Persona
class Alumno extends Persona{
...
}

Alumno
5. Herencia en Java
Persona
Diagrama de clase

AlumnoPre

1
THerencia
create>>
<<

1, 5
Curso
5. Herencia en Java
Se tiene la clase Persona, véase ejemplo:

class Persona{
private String nombre;
private String direccion;
private String fono;

public Persona (String nom, String dir, String f){


nombre = nom;
direccion = dir;
fono = f;
}
public String getNombre(){
}

}
5. Herencia en Java
Se tiene la clase AlumnoPre que hereda de Persona, véase ejemplo:

class AlumnoPre extends Persona{


private Curso[ ] cursos;
private int cantidadCursos;
private int maximaCantidadCursos;

public AlumnoPre(String nom, String dir, String f){


super(nom, dir, f); //Llama al constructor de la Super clase
cantidadCursos = 0;
maximaCantidadCursos = 6;
cursos = new Curso[maximaCantidadCursos];
}

}
El Constructor esta definiendo los datos específicos
de un alumno, pero alumno también contiene datos de
Persona y lo hace con super
5. Herencia en Java
Se tiene la clase AlumnoPre que hereda de Persona, llama a método de la
superclase a partir de la subclase, véase ejemplo:

Persona p1 = new Persona("Adan", "Av. Wilson 1800", "019939123");


AlumnoPre a1 = new AlumnoPre("Edith", "Paseo Colon 234", "019922124");

System.out.println (“Direc. Persona :”+p1.getDireccion());


System.out.println (“Direc. Alumno : ”+a1.getDireccion());

Direc Persona :Av. Wilson 1800


Direc Alumno :Paseo Colon 234

Note: AlumnoPre no define explícitamente el método


getDireccion() pero un objeto puede llamarlo porque
éste hereda de Persona
5. Herencia en Java
Se tiene la clase AlumnoPre que hereda de Persona, véase ejemplo:

class Persona{
String nombre;
private String direccion;
private String fono;
...
public String mostrarInfo(){
return "nombre : " + nombre +
“\n direccion : " + dirección +
"\n telefono : " + fono;
}
}

Veamos como una Subclase puede redefinir un


método definido en la superclase
5. Herencia en Java
Se tiene la clase AlumnoPre que hereda de Persona, redefine métodos,
véase ejemplo:

class AlumnoPre extends Persona{


private Curso[] cursos;
private int cantidadCursos;
private int maximaCantidadCursos;
...
public String mostrarInfo(){
return super.mostrarInfo() +
"\n Num cursos : " + cantidadCursos+
"\n Num creditos : " + cantidadTotalCreditos();
}
}
AlumnoPre redefine el método mostrarInfo(), con super
podemos llamar el método del la superclase
5. Herencia en Java
Se tiene la clase AlumnoPre que hereda dePersona, véase ejemplo:

Persona p1 = new Persona("Adan", "Av. Wilson 1800", "019939123");


AlumnoPre a1 = new AlumnoPre("Edith", "Paseo Colon 234", "019922124");

p1.mostrarInfo(); a1.mostrarInfo();

nombre : Adan nombre : Edith


direccion : Av. Wilson 1800 direccion : Paseo Colon 234
telefono : 019939123 telefono : 019922124
Num cursos : 3
Num creditos : 15

Note: mostrarInfo() de persona muestra los datos de


persona, mientras que mostrarInfo() de AlumnoPre
muestra los atributos de persona mas cantidad de
cursos y créditos del alumno.
5. Herencia en Java
Up-casting
Interpretar un objeto de una subclase como del
mismo tipo que la clase base.
Por ejemplo se da cuando se crea un objeto de
AlumnoPre que se asigna a una referencia de tipo
Persona:
• Persona p=new AlumnoPre();
• Tener presente para la referencia p no existen los
miembros de la clase AlumnoPre
• Con p se puede accesar a los metodos de la clase
Persona
5. Herencia en Java
Down-casting
Interpretar un objeto de una clase base como del
mismo tipo que una subclase suya. Se hace
precediendo al objeto a convertir con el nuevo tipo
entre parentesis.
Se da por ejemplo si se desea accesar a los
métodos de la clase derivada teniendo una
referencia de la super clase, veamos :

• Persona p=new AlumnoPre();


• AlumnoPre ap=(AlumnoPre) p ; // es una operacion cast
5. Herencia en Java
Sobre escritura de un método en Java
Cada vez que se tiene una clase que hereda un método de
una superclase, se tiene la oportunidad de sobre escribir el
método
• El beneficio clave al sobre escribir un método heredado
es la habilidad de definir un comportamiento específico
para los objetos de la subclase
• La signatura de un método viene dada por su nombre y el
tipo de dato y número de los parámetros
5. Herencia en Java
Reglas Sobrescritura de método en Java
• La lista de argumentos del método debe ser exactamente la misma.
• El tipo de retorno debe de ser el mismo o un subtipo del tipo de retorno
declarado originalmente.
• El nivel de acceso no debe de ser más restrictivo.
• El nivel de acceso puede ser menos restrictivo.
• Los métodos de instancia pueden ser sobreescritos solamente si han
sido heredados por la subclase.
• Los métodos sobreescritos pueden arrojar cualquier excepción no
verificada(de tiempo de ejecución) por el compilador.
• Los métodos sobreescritos NO pueden arrojar excepciones verificadas
por el compilador.
• No se puede sobreescibir un método marcado como final.
• No se puede sobreescibir un método marcado como estático (static).
• Si un método no puede ser heredado, no puede ser sobreescrito.
5. Herencia en Java
This :es una referencia que referencia al objeto sobre
el que se ejecuta el método, esto es, el objeto actual.
• Permite parámetros con igual nombre que los atributos
• Posibilita la llamada a otros constructores: su formato
this (lista de parámetros) y debe ser la primera
instrucción

This vs super:
• La instrucción super es una facilidad del
lenguaje java para poder ejecutar constructores y
métodos heredados que han sido redefinidos .
• Una clase utiliza super para apuntar a su superclase
• super se utiliza para apuntar a los miembros de la
superclase
5. Herencia en Java
Metodos static de la clase :
• Un método static se puede llamar sin necesidad de una
instancia de la clase a la que pertenecen.
• Con los métodos static no se pueden utilizar el apuntador
this, ya que no se necesitan instancias.
• Los métodos static, solo pueden acceder a sus propios
argumentos y a las variables static.
• El método main() es estatic, porque la aplicación tiene
que acceder a él para ejecutarse, antes de que se realice
cualquier instancia.
• Los metodos static no se pueden sobre escribir.
5. Herencia en Java
Inicializadores static de la clase :
• Se puede utilizar bloques de código static {…}
• Una clase puede tener código static que no exista dentro
del cuerpo de un método ( caso anterior)
• El bloque static se ejecuta solo una vez, esto es, cuando
se carga la clase.
• Los diferentes bloques dentro de una misma clase, se
ejecutan en el orden en que aparecen.
5. Herencia en Java
La palabra clave final :
• Si se aplica esta palabra a una clase, esa clase no puede
tener subclases. Ej La clase java.lang.String, se ha
definido como clase final por motivos de seguridad.
• Los métodos calificados con final no se pueden redefinir
• Los métodos calificados como static o privates son final
automáticamente.
• Si una variable se define como final, se convierte en una
constante. Si se intenta cambiar el valor de cualquier
variable final, se produce un error
5. Herencia en Java
Visibilidad protected:
• En los ejemplos se han utilizado la visibilidad private que
limita a la subclase.
• La declaración protected es visible para la clase, las
clases del paquete y las subclases, estén o no en el
mismo paquete de la superclase.
• Es discutible si conviene o no la visibilidad protected.
• Da acceso a las clases del mismo paquete. Esto
supone un riesgo.
• Otro riesgo es que las subclases puedan hacer un
mal uso de los atributos comprometiendo la integridad
de los objetos.
• Otros dicen, que las clases del paquete y de las
subclases son “de confianza”
5. Herencia en Java
Visibilidad y redefinición:
• En la redefinición de un método podemos cambiar la
visibilidad de la declaración que se hereda.
• El cambio de visibilidad siempre es posible si se relaja la
visibilidad, esto es, de menos a mas.
• El orden de visibilidad es:
• private < package < protected < public
6. Clase G. Object
Todas las clases en Java heredan implícitamente de la
clase Object
• De esta forma, Object es la raíz de la jerarquía de
herencia (de implementación ) en Java
6. Clase Genérica Object
Object define un conjunto de métodos útiles que pueden ser
redefinidos en cada clase, por ejemplo:
• public boolean equals (object ob): Permite definir el
criterio de igualdad utilizando para los objetos de una
determinada clase (el operador == únicamente chequea la
igualdad de referencias). En objects, equals se define
directamente como la identidad de referencias.
• public String toString(): Permite decidir la
representación externa de un objeto como una cadena.
Por defecto es el valor de su referencia etiquetada con el
nombre de la clase.
Investigue y aplique a los objetos de tipo Object
7. Organización de las Clases
La biblioteca estándar de Java
• Incluye cientos de clases organizadas en varias paquetes
(package).

Package Descripción
java.io Clases para realizar operaciones de
entrada/salida

java.lang Incluida por defecto. Para manejos de


numero, cadenas y objetos

java.util Utilidades como, fechas, números


aleatorios, etc.


7. Organización de las Clases
Control de Acceso a miembros de una clase

Modificador Misma Mismo Subclase Universal


Clase Paquete

public SI SI SI SI

protected SI SI SI

default/paquete SI SI

private SI
Referencias
Ceballos Sierra, Francisco Javier. (2000), Java 2. Curso de
Programacion. Alfaomega Grupo Editor S. A. Madrid.
España.
Deitel M. Harvey y Deitel J. Paul .(2008). Java Como
Programar. Prentice Hall. Mexico D. F.
Rumbaugh James, Blaha Michael, Premerlani William,
Eddy Frederick and Lorenson William,(1991) Object-
Oriented Modeling and Design, Prentice Hall

También podría gustarte