Subido por Argenis Chacon B.

Unidad 4. Herencia y Polimorfismo

Anuncio
1. Definir los conceptos básicos relacionados con herencia en la
programación orientada a objetos, basándose en investigación previa y
discusión en clase.
2. Identificar las superclases y subclases de problemas resueltos
mediante el uso de herencia en programación orientada a objetos.
3. Resolver problemas haciendo uso de herencia para desarrollar
programas orientados a objetos.
4. Definir los conceptos básicos relacionados con polimorfismo en la
programación orientada a objetos basándose en la investigación previa
y discusión en clase.
Es una propiedad que permite que los objetos sean creados
a partir de otros ya existentes, obteniendo características
(métodos y atributos) similares a los ya existentes.
• Se realiza tomando una clase existente y derivando nuevas clases
de ella. La clase derivada hereda las estructuras de datos y
funciones de la clase original, además se pueden añadir nuevos
miembros a las clases derivadas y los miembros heredados
pueden ser modificados.
• Es un modelo de herencia común utilizado por lenguajes de
programación basada en prototipos. Funciona sobre el principio de que
la mayoría de los objetos derivan de otros, objetos más generales, y
sólo se diferencian en una pequeña cantidad de aspectos menores;
mientras que normalmente mantienen una lista interna de punteros a
los objetos de los que provienen.clases derivadas y los miembros
heredados pueden ser modificados.
Hace referencia a una
característica de los
lenguajes de
programación orientada
a objetos en la que una
clase puede heredar
comportamientos y
características de más
de una superclase. Esto
contrasta con la
herencia simple, donde
una clase sólo puede
heredar de una
superclase.
Como permitir a una clase llamada
MusicoEstudiante heredar de una clase llamada
Persona, una clase llamada Músico, y una clase
llamada Trabajador. Esto puede ser abreviado como
MusicoEstudiante: Persona, Músico, Trabajador.
Una clase es un proyecto o prototipo que se puede utilizar
para crear muchos objetos. La implementación de una clase
comprende dos componentes: la declaración y el cuerpo de la
clase.
class NombredeClase{
……………………
}
class Ticket {
Float precio;
String destino;
Date fechaSalida;
void firma(Float dePrecio, String deDestino, Date deFecha) {
precio = dePrecio;
destino = deDestino;
fechaSalida = deFecha;
}
}
El término superclase se refiere a la clase que es el
ancestro más directo, así como a todas las clases
ascendentes.
class NombredeClase extends
NombredeSuperClase{
...
}
Una subclase es una clase que desciende de otra clase. Una
subclase hereda el estado y el comportamiento de todos sus
ancestros.
class SubClase extends SuperClase{
...
}
Regla: “Una subclase hereda todas las variables
miembros de su superclase que puedan ser accesibles
desde la subclase (a menos que la variable miembro esté
oculta en la subclase)”
Esto quiere decir lo siguiente:
Heredan aquellas variables miembros declaradas como public o protected.
Heredan aquellas variables miembros declaradas sin especificador de
acceso (normalmente conocidas como "Amigas") siempre que la subclase
esté en el mismo paquete que la clase.
¨No hereda las variables miembros de la superclase si la subclase declara
una variable miembro que utiliza el mismo nombre. La variable miembro de
la subclase se dice que oculta a la variable miembro de la superclase.
No hereda las variables miembro private.
Regla: “Una subclase hereda todos los métodos de sus
superclase que son accesibles para la subclase (a menos que
el método sea sobre escrito por la subclase)”
Esto quiere decir lo siguiente:
Hereda aquellos métodos declarados como public o protected.
Hereda aquellos métodos sin especificador de acceso, siempre que la
subclase esté en el mismo paquete que la clase.
No hereda un método de la superclase si la subclase declara un
método que utiliza el mismo nombre. Se dice que el método de la
subclase sobrescribe al método de la superclase.
No hereda los métodos private.
La habilidad de una subclase para sobrescribir un método de su
superclase permite a una clase heredar de su superclase aquellos
comportamientos "más cercanos" y luego suplementar o
modificar el comportamiento de la superclase.
Una subclase no puede sobrescribir métodos que hayan sido
declarados como final en la superclase (por definición, los métodos
finales no pueden ser sobrescritos). Si intentamos sobrescribir un
método final, el compilador mostrará un mensaje de error y no
compilará el programa.
Una subclase tampoco puede sobrescribir métodos que se hayan
declarado como static en la superclase. En otras palabras, una
subclase no puede sobrescribir un método de clase.
Las subclases deben sobrescribir aquellos métodos que hayan sido
declarados como abstract en la superclase, o la propia subclase
debe ser abstracta. Escribir Clases y Métodos Abstractos explica
con más detalle los métodos y clases abstractos.
Se puede declarar que una clase sea final; esto es, que la clase no pueda
tener subclases. Existen dos razones por las que se querría hacer esto:
Un mecanismo que los
hackers utilizan para
atacar sistemas es crear
subclases de una clase y
luego sustituirla por el
original.
Se podría pensar que una
clase es "perfecta“, es
decir, la clase no debería
tener subclases
Es la capacidad que tienen los objetos de una clase de
responder al mismo mensaje o evento en función de los
parámetros utilizados durante su invocación.
El polimorfismo se refiere a la posibilidad de definir
múltiples clases con funcionalidad diferente, pero con
métodos o propiedades denominados de forma idéntica.
Buscar un ejemplo mejor
Es aquél en el que el código
no incluye ningún tipo de
especificación sobre el tipo
de datos sobre el que se
trabaja. Así, puede ser
utilizado a todo tipo de datos
compatible
Es aquél en el que los tipos a
los que se aplica el
polimorfismo deben ser
explícitos y declarados uno
por uno antes de poder ser
utilizados
Java permite que
varios métodos
dentro de una
clase se llamen
igual, siempre y
cuando su lista de
parámetros sea
distinta.
/** Por ejemplo, si tuviéramos un
método que sirviera para sumar
números pero sin indicar de qué tipo:*/
public class Sumar {
public float suma(float a, float b){
System.out.println("Estoy sumando
reales");
return a+b;
}
public int suma(int a, int b){
System.out.println("Estoy sumando
enteros");
return a+b;
}
…
es un método
declarado en una
clase para el cual
esa clase no
proporciona la
implementación (el
código).
Los métodos abstractos son útiles cuando
se quiere que cada implementación de la
clase parezca y funcione igual, pero
necesita que se cree una nueva clase para
utilizar los métodos abstractos. Los
interfaces proporcionan un mecanismo
para abstraer los métodos a un nivel
superior, lo que permite simular la
herencia múltiple de otros lenguajes.
…
public
class Mamifero
{public class Perro extends Mamifero
{
private
int patas;
public
Perro(String
nombre){
private String
nombre;
super(nombre, 4);
}
public
void imprimirPatas()
{}
public
class Gato extends Mamifero{
System.out.println(nombre
+ " tiene " + patas +
public
Gato(String
nombre){
" patas");
} super(nombre, 4);
}
public
Mamifero(String nombre, int patas)
{}
public
class CreaPerro
this.nombre
= nombre;{
public static
void main(String [] args) {
this.patas
= patas;
} Perro bobi = new Perro("Bobi");
} … bobi.imprimirPatas(); /*Está en la clase
mamífero*/
}
}
Descargar