3. Herencia:
La herencia en programación orientada a objetos es un concepto fundamental
que permite la creación de clases nuevas basadas en clases existentes. En
términos simples, una clase puede heredar atributos y métodos de otra clase, lo
que facilita la reutilización del código y la organización de la jerarquía de clases.
Cuando una clase hereda de otra, la clase que hereda se llama subclase o clase
derivada, y la clase de la que hereda se llama superclase o clase base. La
subclase hereda todos los atributos y métodos de la superclase y puede agregar
nuevos atributos y métodos, o modificar los existentes.
La herencia facilita la creación de un código más modular y fácil de mantener.
Además, permite la aplicación del principio de sustitución de Liskov, que
establece que un objeto de una subclase puede ser usado en cualquier lugar
donde se espera un objeto de la superclase, sin alterar el comportamiento del
programa.
4. Ejemplo de herencia en Python:
En este ejemplo, la clase ‘Animal’ es la superclase, y
las clases ‘Perro’ y ‘Gato’ son subclases que heredan
de ‘Animal’. Cada subclase redefine el método
‘hacer_sonido’, proporcionando su propia
implementación específica.
5. Terminología importante:
• Superclase: la clase cuyas características se heredan se conoce como
superclase (o una clase base o una clase principal).
• Subclase: la clase que hereda la otra clase se conoce como subclase (o
una clase derivada, clase extendida o clase hija). La subclase puede
agregar sus propios campos y métodos, además de los campos y
métodos de la superclase.
• Reutilización: la herencia respalda el concepto de “reutilización”, es
decir, cuando queremos crear una clase nueva y ya hay una clase que
incluye parte del código que queremos, podemos derivar nuestra nueva
clase de la clase existente. Al hacer esto, estamos reutilizando los
campos/atributos y métodos de la clase existente.
6. Herencia en Java:
• Todas las clases son descendientes de la clase Object
• La cláusula extends especifica el ancestro inmediato de la clase
• Una subclase o clase derivada hereda todos los campos y métodos de la
superclase o clase base
• Java soporta herencia simple (sólo una clase base)
"hereda de"
"extiende"
"is a"
ancestro
superclase
clase base
descendientes
subclases
clases derivadas
7. Ejemplo herencia en Java:
class Figura {
int x, y;
public void print() { ... }
public void setX(int x) { this.x = x; }
public void setY(int y) { this.y = y; }
}
class Rectangulo extends Figura {
int largo, ancho;
public void setLargo(int largo) { this.largo = largo; }
public void setAncho(int ancho) { this.ancho = ancho; }
}
class App {
void f() {
Rectangulo r = new Rectangulo();
r.setX(10); r.setY(20);
r.setAncho(100); r.setLargo(300);
}
}
La clase Circulo es derivada de la
clase base Figura
La clase Circulo hereda métodos
setX y setY de clase base Figura
8. Encapsulamiento:
• Una clase derivada tiene acceso a los miembros public y protected de
una clase base, aunque pertenezcan a paquetes diferentes
• Una clase derivada tiene acceso a los miembros package de una clase
base si ambas clases pertenecen al mismo paquete
• Una clase derivada no tiene acceso a los miembros private de una clase
base
9. Polimorfismo:
El polimorfismo es otro concepto clave en la programación orientada a
objetos que se basa en la capacidad de los objetos de diferentes clases de
responder al mismo mensaje de manera distinta. En esencia, el
polimorfismo permite tratar objetos de diferentes clases de manera
uniforme si tienen una interfaz común.
10. Ejemplo de polimorfismo en Python:
En este ejemplo, la función ‘hacer_ruido’ puede
recibir objetos de cualquier subclase de ‘Animal’,
pero la implementación específica del método
‘hacer_sonido’ que se llama depende del tipo real
del objeto pasado. Esto demuestra cómo el
polimorfismo permite tratar objetos de diferentes
clases de manera uniforme.
11. ¿Para que sirve el Polimorfismo:
Vamos a explicarlo para ello partiremos de un ejemplo en el cual tenemos
las siguientes clases:
• Persona
• Deportista
• Informatico.
12. ¿Para que sirve el Polimorfismo:
Estas clases están organizadas en una jerarquía de herencia en la cual la
clase Persona es la clase padre y el resto heredan de ella.
El método correr de la clase Persona es un método abstracto y no tiene
implementación . Por el contrario los métodos de la clases hijas tienen
sobrecargado el método correr. El deportista correrá a 7 hm/hora y el
Informatico a 2km/h