SlideShare une entreprise Scribd logo
1  sur  43
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

Contenu connexe

En vedette

Presentación uso del video educativo
Presentación uso del video educativoPresentación uso del video educativo
Presentación uso del video educativoVladimir Juarez
 
Relación entre la guerra fría y la historia
Relación entre la guerra fría y  la historiaRelación entre la guerra fría y  la historia
Relación entre la guerra fría y la historiaSebas Cortes
 
гдз английский язык Enjoy english 2 класс биболетова
гдз английский язык Enjoy english 2 класс биболетовагдз английский язык Enjoy english 2 класс биболетова
гдз английский язык Enjoy english 2 класс биболетоваkov89
 
El bloque pacie o bloque 0
El bloque pacie o bloque 0El bloque pacie o bloque 0
El bloque pacie o bloque 0patyvizuete
 
Colegio de bachilleres palntel 8
Colegio de bachilleres palntel 8Colegio de bachilleres palntel 8
Colegio de bachilleres palntel 8llaverito16
 
Extractivismo en América Latina: Impacto en la vida de las mujeres y propuest...
Extractivismo en América Latina: Impacto en la vida de las mujeres y propuest...Extractivismo en América Latina: Impacto en la vida de las mujeres y propuest...
Extractivismo en América Latina: Impacto en la vida de las mujeres y propuest...Crónicas del despojo
 
Identificación de peligros y evaluación de riesgos
Identificación de peligros y evaluación de riesgosIdentificación de peligros y evaluación de riesgos
Identificación de peligros y evaluación de riesgosCristianCRojas28
 
Online travel web site and digital strategy
Online travel web site and digital strategyOnline travel web site and digital strategy
Online travel web site and digital strategyBegum Eser
 
Comunicación y tecnología educativa
Comunicación y tecnología educativaComunicación y tecnología educativa
Comunicación y tecnología educativaMojgan Hashemi
 
bc-report-ch1-digital_0
bc-report-ch1-digital_0bc-report-ch1-digital_0
bc-report-ch1-digital_0Erad Kawsar
 

En vedette (20)

Presentación uso del video educativo
Presentación uso del video educativoPresentación uso del video educativo
Presentación uso del video educativo
 
Practicas
PracticasPracticas
Practicas
 
Relación entre la guerra fría y la historia
Relación entre la guerra fría y  la historiaRelación entre la guerra fría y  la historia
Relación entre la guerra fría y la historia
 
Katy simbaña
Katy simbañaKaty simbaña
Katy simbaña
 
Feliz Nawruz
Feliz NawruzFeliz Nawruz
Feliz Nawruz
 
Programariinstalacio
ProgramariinstalacioProgramariinstalacio
Programariinstalacio
 
TIC Transformacion Escuela
TIC Transformacion EscuelaTIC Transformacion Escuela
TIC Transformacion Escuela
 
гдз английский язык Enjoy english 2 класс биболетова
гдз английский язык Enjoy english 2 класс биболетовагдз английский язык Enjoy english 2 класс биболетова
гдз английский язык Enjoy english 2 класс биболетова
 
El bloque pacie o bloque 0
El bloque pacie o bloque 0El bloque pacie o bloque 0
El bloque pacie o bloque 0
 
Colegio de bachilleres palntel 8
Colegio de bachilleres palntel 8Colegio de bachilleres palntel 8
Colegio de bachilleres palntel 8
 
Extractivismo en América Latina: Impacto en la vida de las mujeres y propuest...
Extractivismo en América Latina: Impacto en la vida de las mujeres y propuest...Extractivismo en América Latina: Impacto en la vida de las mujeres y propuest...
Extractivismo en América Latina: Impacto en la vida de las mujeres y propuest...
 
Examen
ExamenExamen
Examen
 
Identificación de peligros y evaluación de riesgos
Identificación de peligros y evaluación de riesgosIdentificación de peligros y evaluación de riesgos
Identificación de peligros y evaluación de riesgos
 
Online travel web site and digital strategy
Online travel web site and digital strategyOnline travel web site and digital strategy
Online travel web site and digital strategy
 
Comunicación y tecnología educativa
Comunicación y tecnología educativaComunicación y tecnología educativa
Comunicación y tecnología educativa
 
Peru
PeruPeru
Peru
 
bc-report-ch1-digital_0
bc-report-ch1-digital_0bc-report-ch1-digital_0
bc-report-ch1-digital_0
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Enf. virales
Enf. viralesEnf. virales
Enf. virales
 
Parte II
Parte IIParte II
Parte II
 

Similaire à SOLID para CatDotNet

Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDLuis Alexander Aldazabal Gil
 
¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfatoRubén Bernárdez
 
Principios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosPrincipios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosJose E. Rodriguez Huerta
 
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial   6 Polimorfismo, AbstraccióN E InterfacesCurso Java Inicial   6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial 6 Polimorfismo, AbstraccióN E InterfacesEmilio Aviles Avila
 
El lenguaje Ceylon y sus ventajas sobre Java
El lenguaje Ceylon y sus ventajas sobre JavaEl lenguaje Ceylon y sus ventajas sobre Java
El lenguaje Ceylon y sus ventajas sobre JavaSoftware Guru
 
Presentacion progra
Presentacion prograPresentacion progra
Presentacion prograzeta2015
 
Principios de diseño SOLID
Principios de diseño SOLIDPrincipios de diseño SOLID
Principios de diseño SOLIDManuel Zapata
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11540deg
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 

Similaire à SOLID para CatDotNet (20)

Solid
SolidSolid
Solid
 
Principios SOLID
Principios SOLIDPrincipios SOLID
Principios SOLID
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLID
 
¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato
 
[Xamarin] Principio Open/Closed (O)
[Xamarin] Principio Open/Closed (O)[Xamarin] Principio Open/Closed (O)
[Xamarin] Principio Open/Closed (O)
 
Principios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosPrincipios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a Objetos
 
Seminario SOLID-TDD
Seminario SOLID-TDDSeminario SOLID-TDD
Seminario SOLID-TDD
 
Introducción a Ceylon
Introducción a CeylonIntroducción a Ceylon
Introducción a Ceylon
 
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial   6 Polimorfismo, AbstraccióN E InterfacesCurso Java Inicial   6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
 
Solid con typescript
Solid con typescriptSolid con typescript
Solid con typescript
 
El lenguaje Ceylon y sus ventajas sobre Java
El lenguaje Ceylon y sus ventajas sobre JavaEl lenguaje Ceylon y sus ventajas sobre Java
El lenguaje Ceylon y sus ventajas sobre Java
 
Principios SOLID
Principios SOLIDPrincipios SOLID
Principios SOLID
 
Presentacion progra
Presentacion prograPresentacion progra
Presentacion progra
 
Principios de diseño SOLID
Principios de diseño SOLIDPrincipios de diseño SOLID
Principios de diseño SOLID
 
SOLID
SOLIDSOLID
SOLID
 
Poo
PooPoo
Poo
 
[Xamarin] Principio de Responsabilidad Única (S)
[Xamarin] Principio de Responsabilidad Única (S)[Xamarin] Principio de Responsabilidad Única (S)
[Xamarin] Principio de Responsabilidad Única (S)
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
¿Qué es una interface en java?
¿Qué es una interface en java?¿Qué es una interface en java?
¿Qué es una interface en java?
 

Plus de Fernando Escolar Martínez-Berganza

Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016Fernando Escolar Martínez-Berganza
 

Plus de Fernando Escolar Martínez-Berganza (20)

Por qué todo lo que subo a azure esta mal
Por qué todo lo que subo a azure esta malPor qué todo lo que subo a azure esta mal
Por qué todo lo que subo a azure esta mal
 
Gapand - por qué odio git?
Gapand - por qué odio git?Gapand - por qué odio git?
Gapand - por qué odio git?
 
Betabeers - continuous deployment
Betabeers - continuous deploymentBetabeers - continuous deployment
Betabeers - continuous deployment
 
Devops RoadShow: load testing and autoscale
Devops RoadShow: load testing and autoscaleDevops RoadShow: load testing and autoscale
Devops RoadShow: load testing and autoscale
 
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
 
Reconnect 2015 - ALM VSTS
Reconnect 2015 - ALM VSTSReconnect 2015 - ALM VSTS
Reconnect 2015 - ALM VSTS
 
Codemotion 2015 - Unit Testing
Codemotion 2015 - Unit TestingCodemotion 2015 - Unit Testing
Codemotion 2015 - Unit Testing
 
Unit testing en Windows 10
Unit testing en Windows 10Unit testing en Windows 10
Unit testing en Windows 10
 
Las cronicas de redis
Las cronicas de redisLas cronicas de redis
Las cronicas de redis
 
Redis: no solo una caché
Redis: no solo una cachéRedis: no solo una caché
Redis: no solo una caché
 
DotNet Conference: code smells
DotNet Conference: code smellsDotNet Conference: code smells
DotNet Conference: code smells
 
Foro de Arquitectos: caché en azure a fondo
Foro de Arquitectos: caché en azure a fondoForo de Arquitectos: caché en azure a fondo
Foro de Arquitectos: caché en azure a fondo
 
Codemotion: descubriendo las cachés
Codemotion: descubriendo las cachésCodemotion: descubriendo las cachés
Codemotion: descubriendo las cachés
 
Unit tesing y el mito de los 0 bugs
Unit tesing y el mito de los 0 bugsUnit tesing y el mito de los 0 bugs
Unit tesing y el mito de los 0 bugs
 
We Love Js 6 - Knockout js (with Marc Rubiño)
We Love Js 6 - Knockout js (with Marc Rubiño)We Love Js 6 - Knockout js (with Marc Rubiño)
We Love Js 6 - Knockout js (with Marc Rubiño)
 
Mobile services by @quiqu3
Mobile services by @quiqu3Mobile services by @quiqu3
Mobile services by @quiqu3
 
Javascript no es vietnam
Javascript no es vietnamJavascript no es vietnam
Javascript no es vietnam
 
Where is my beer?
Where is my beer?Where is my beer?
Where is my beer?
 
Coding kihon + Zombie Code Survival Guide
Coding kihon + Zombie Code Survival GuideCoding kihon + Zombie Code Survival Guide
Coding kihon + Zombie Code Survival Guide
 
Level up your skills
Level up your skillsLevel up your skills
Level up your skills
 

SOLID para CatDotNet