Design patterns
SOLID Principles
Un poco de historia
Antes...
- 1997
- Bertrand meyer
¿ Como diseñar aplicaciones pensado en el futuro?
Esto acerca de tu Código!
¿ Como luce un código sin principios, sin patrones ?
Así luce
Tu aplicación va a cambiar
¿ Como prevenir el desastre ?
Un buen diseño te puede salvar
Principio abierto-cerrado
Las clases deben ser capaces de extenderse sin modificar su contenido.
Abierto para extensión
Cerrado para modificación
¿Cómo se consigue eso ?
A través de interfaces o clases abstractas de las que depende una implementación concreta.
- La clase abstracta debe ser genérica
- Tiene el constructor base
- Puede tener métodos (abstractos)*
*Los métodos abstractos se crean cuando se instancia de la clase abstracta.
Diseño en UML
Ejemplo clases abstractas en JAVA
Demo
public abstract class Animal {
private String nombre;
public Animal(){} // Constructor
public void comer(){
System.out.println("El " + nombre + "esta comiendo");
}
public abstract void moverse(); // Metodo abstracto sin implementación
// Se implementa cuando se instancia o en la clase que hereda.
public void setNombre(String s){
nombre = s;
}
public String getNombre(){
return nombre;
}
}
Defninición de una clase abstracta
public class Vaca extends Animal {
public Vaca(){
super(); // Ejecuta constructor de la clase abstracta heredada.
setNombre("Vaca");
}
public void moverse(){
System.out.println("La vaca esta caminado. Tiene 4 patas");
}
}
Herencia de una clase abstracta
public class Ave extends Animal {
public Ave(){
super(); // Ejecuta constructor de la clase abstracta heredada.
setNombre("Ave");
}
public void moverse(){
System.out.println("El Ave esta volando. Tiene 2 patas");
}
}
public class Main {
public static void main(String[] args){
//Animal v = new Vaca(); Polimorfismo variables abstractas
// Animal como referencias para las variables que hereden de él.
Vaca v = new Vaca();
v.comer();
v.moverse();
//Animal a = new Ave();
Ave a = new Ave();
a.comer();
a.moverse();
}
}
Instancias, variables abstractas y polimorfismo
¿ Que es una clase abstracta ?
¿ Cuando una clase es abstracta?
¿ Para que utilizo un clase abstracta?
Preguntas de parcial
- No se puede instanciar
- Se usa para definir subclases
- Cuando uno de los metodos no tiene implementacion
- Cuando se usa la palabra reservada abstract
- Para utilizar polimorfismo
- Abstracción de objetos de diferentes tipos
Concluciones
Preguntas ?
SOLID: Princio Abierto cerrado
By Julio César
SOLID: Princio Abierto cerrado
Patrones de diseño de software
- 1,407