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,342