SOLID      Los principios básicos de la OOP




@fernandoescolar
fer.escolar@gmail.com
Programación Orientada a
Objetos
   •   Abstracción
   •   Encapsulamiento
   •   Herencia
   •   Cohesión
   •   Polimorfismo
Refactorización de código
    •   Código duplicado
    •   Métodos largos
    •   Clases largas
    •   Atributos temporales
    •   Código espagueti
    •   Jerarquías de herencia paralelas
Código que huele(Code Smells)
   •   Rigidez
   •   Fragilidad
   •   Inmovilidad
   •   Viscosidad
   •   Complejidad innecesaria
   •   Repetitividad
   •   Opacidad
SOLID

•   Single responsibility
•   Open-closed
•   Liskov substitution
•   Interface segregation
•   Dependency inversion
Single Responsibility Principle


      Una clase debe tener una, y solo
      una, razón para cambiar
Single Responsibility Principle
Demo
Open-Closed Principle


     Debes ser capaz de extender el
     comportamiento de una clase sin
     necesidad de modificarla
     (abierto a extensión, cerrado a modificación)
Strategy Pattern
Demo
Liskov Substitution Principle


      Las clases derivadas, deben poder
      ser sustituidas por su clases base
Liskov Substitution Principle
Demo
Interface Segregation Principle


      Desgranar las interfaces lo más
      fino posible, para que sean lo más
      específicas posible
Interface Segregation Principle
Demo
Demo
Dependency Inversion Principle


     Depender de las abstracciones no
     de las concreciones
Dependency Injection
Demo
Keep It Simple, Stupid!


      Simple no es lo mismo que
      programar poco
DRY: Don’t Repeat Yoursef


     for(int i = 0; i< 100; i++)
         Console.WriteLine(“I’ll not repeat myself”);
YAGNI


    Tenemos que ser capaces de
    adaptarnos rápidamente al cambio,
    no preverlo
Don’t reinvent the wheel


      Si ya existe, se adapta a nuestras
      necesidades, esta probado y
      funciona… ¿por qué no utilizarlo?
Cuando programes: SOLID

Piensa en el objetivo de
cada principio y si lo
estás cumpliendo en
todo momento.
Preguntas
Bibliografía
¡Muchas gracias!


@fernandoescolar
fer.escolar@gmail.com

SOLID para CatDotNet