Clases Abstractas e Interfaces

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 30

PROGRAMACIÓN

ORIENTADA A
OBJETOS

ÁNGEL AGUILAR GARCÍA


Octubre 2021
-Composición y
herencia

-Clases
abstractas

-Interfaces
Herencia VS Composición

El 95% de las veces que usas herencia, si no te planteas las


preguntas correctas, la vas a usar mal.
Herencia VS Persona
Composición Cédula

Nombre

Apellidos

Ciudad

Estudiante

Semestre

Carrera
Herencia VS Composición
Herencia VS Composición
public class Persona {
private String nombre;
Herencia VS private int edad;
private Direccion dirección;

Composición public Persona(String nombre, int edad) {


this.nombre = nombre;
this.edad = edad;
}
public Direccion getDirección() {
return dirección;
}
public void setDirección(Direccion dirección) {
this.dirección = dirección;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
}
Herencia VS Composición
public class Empresa {
private String cif;
private Direccion dirección;
public Direccion getDirección() {
return dirección;
}
public void setDirección(Direccion dirección) {
this.dirección = dirección;
}
public String getCif() {
return cif;
}
public void setCif(String cif) {
this.cif = cif;
}
}
Herencia VS
public class Direccion {
Composición private String calle;
private int numero;
public String getCalle() {
return calle;
}
public void setCalle(String calle) {
this.calle = calle;
}
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public Direccion(String calle, int numero) {
this.calle = calle;
this.numero = numero;
}
}
Herencia VS Composición

public class Principal {


public static void main(String[] args) {
Direccion d1= new Direccion("calle A",3);
Direccion d2= new Direccion("calle B",7);
Persona p= new Persona("pepe",20);
p.setDirección(d1);
Empresa e= new Empresa();
e.setCif("1A");
e.setDirección(d2);
System.out.println(p.getDirección().getCalle());
System.out.println(e.getDirección().getCalle());
}
}
Clases Abstractas
+Una clase que declara la existencia de métodos pero no la
implementación de dichos métodos (o sea, las llaves { } y las
sentencias entre ellas.

+Son llamadas también superclases o clases base.

+Permiten declarar prototipos de métodos comunes en una sola clase


sin tener que implementar su código.

+Para declarar una clase o un método como abstractos, se utiliza la


palabra reservada abstract.
Clases Abstractas

abstract class Drawing


{
abstract void miMetodo(int var1, int var2);
String miOtroMetodo( )
{
...
}
}
Clases Abstractas
+Una clase abstracta no se puede instanciar pero sí se puede
heredar y las clases hijas serán las encargadas de agregar la
funcionalidad a los métodos abstractos.
+Los métodos abstractos contienen sólo su declaración o
prototipo (nombre y parámetros).
+No es posible crear instancias (objetos) de una clase abstracta.
Sin embargo, es posible crear referencias.
Clases Abstractas
Clases Abstractas
Clases Abstractas
Interfaces
+Una interface es una variante de una clase abstracta con la
condición de que todos sus métodos deben ser asbtractos.

+Con el uso de interfaces se puede "simular" la herencia múltiple


que Java no soporta.
Interfaces
+Si la interface va a tener atributos, éstos deben llevar las
palabras reservadas static final y con un valor inicial ya que
funcionan como constantes.
+Además, se puede declarar constantes con visibilidad public,
con su respectiva inicialización de datos.
interface Nomina
{
public static final String EMPRESA = "Patito, S. A.";
public void detalleDeEmpleado(Nomina obj);
}
Interfaces
+Una clase, a diferencia de la herencia, puede implementar una
o varias interfaces separadas por una coma“,”

public class Circulo extends Figura implements Dibuja, Mueve {



}
Interfaces
class Empleado implements Nomina
{
...
}

En este ejemplo, la clase Empleado tiene


una clase padre llamada Object
(implícitamente) e implementa a la
interface Nomina, quedando el diagrama
de clases de la siguiente manera:
Interfaces

La clase que implementa una interface tiene dos opciones:

1) Implementar todos los métodos de la interface.

2) Implementar sólo algunos de los métodos de la interface pero esa


clase debe ser una clase abstracta (debe declararse con la
palabra abstract).
Interfaces

+Todos los métodos de la interface no tienen definición de su


código, mientras que en la clase abstracta al menos un método
es abstracto sin definición de código.
+Los métodos de una interface son públicos y abstractos por
defecto.
+Los datos sólo pueden ser constantes públicas, estáticas y
finales.
+Las interfaces no declaran métodos constructores, debido a
que sólo se declaran constantes
Interfaces
+También es posible aplicar el polimorfismo de forma similar a
como se aplica en herencia de clases.
+Una clase pude tener herencia múltiple de interfaces no así con
superclases que solo es posible herencia simple.
Interfaces
Interfaces
Interfaces
Interfaces
Interfaces
Diferencias entre Interfaces y clases
abstractas
Clases abstractas (superclases) Interfaces
Se utiliza la palabra abstract en Se usa la palabra interface sólo en
clases y métodos clase. La clase que deriva, utiliza
implements
Heredan o extienden cualquier clase solamente puede extender o
(independientemente de que esta sea implementar otras interfaces
abstracta o no)
Puede heredar de una sola clase puede extender varias interfaces de
(abstracta o no) una misma vez.
puede tener métodos que sean sólo y exclusivamente pueden definir
abstractos o que no lo sean métodos abstractos.
los métodos abstractos pueden solamente puede haber métodos
ser public o protected públicos
pueden existir sólo puedes tener constantes (public
variables static, final o static final con static final).
cualquier modificador de acceso
(public, private, protected o default)
+ Ángel Aguilar García
+ aaguilarg@ipn.mx
+ angelaguilargarcia@outlook.com

También podría gustarte