SlideShare una empresa de Scribd logo
1 de 16
Principio de Diseño Abierto-
Cerrado
Open/Close
Arquitectura de Software
Ernesto Maya.
Erick Voltres.
Hugo Hernández.
Historia
● Open/Closed Principle, fue planteado por el Dr. Bertrand Meyer en el libro
"Object Oriented Software Construction“ en 1988.
● Se popularizó junto con el resto de principios S.O.L.I.D. en el libro
“Refactoring: Improving the Design of Existing Code” en 1999 por Martin
Fowler.
Definición
Las entidades de software (clases, módulos, funciones…etc), deberían ser
abiertas para la extensión pero cerradas para la modificación.
Robert C. Martin Software Agile Development
Características del principio Abierto-Cerrado OCP
● Se refiere a un “buen” diseño Orientado a Objetos
● “Es abierto para la extensión”, se refiere a que si en algún momento los
requisitos van necesitando adaptarse es importante tener un módulo abierto
para tal motivo (según el modelo de negocio, el módulo es extendido)
● “Es cerrado para la modificación”, en caso de ser una aplicación bien
definida, si es abierto sólo se debe entender que se extiende por lo cual el
código original seguirá intacto (cerrado)
● Se resuelve en algunos casos con polimorfismo
Principio Abierto / Cerrado OCP
● Las clases que cumplen con OCP tienen dos características:
○ Son abiertas para la extensión.
○ Son cerradas para la modificación.
● El término “extender” no se limita solo a la herencia (extends) en Java,
tambien de puede utilizar polimorfismo para invocar un comportamiento (en
tiempo de ejecución.
Principio Abierto / Cerrado OCP
● Finalidad:
○ Conseguir cambios añadiendo nuevo código sin afectar al resto de elementos del diseño.
● Ambigüedad:
○ La dependencia “uno a uno” se transforma en una dependencia de “uno a muchos”.
● Ventajas:
○ Evita que cambios en un módulo afecten a otros módulos.
○ Ayuda a eliminar el riesgo y contener costos.
Principio Abierto / Cerrado OCP
● Están abiertos para su extensión.
○ Eso implica que el comportamiento de los módulos puede ser extendido.
● Están cerrados para su modificación.
○ El código fuente del módulo es inalterable.
Principio Abierto / Cerrado OCP
Principio Abierto / Cerrado OCP
Principio Abierto / Cerrado OCP
Principio Abierto / Cerrado OCP
Toriyama nos pide un programa para
dibujar a goku
public class DragonBallDrawer {
public void draw (Goku goku){
print("Goku draw");
}
}
public class Goku {
int amigos;
int aventuras;
...
}
Principio Abierto / Cerrado OCP
Toriyama le gusta y pide más diseños con forme pasa el anime
Class
Gokuniño
Class
Gokuadolecente
Class
Gokuadulto
Class
Gokumaestro
Principio Abierto / Cerrado OCP
Para estas modificaciones algo lógico sería pensar en modificar la clase principal y dibujar los diferentes
tipos de personajes con sus características
public class DragonBallDrawer{
public void draw(Object[] dragonball) {
foreach (Object dragonball : dragonball) {
if(dragonball instanceof Gokuniño){
System.out.println("Goku niño ");
}else if(dragonball instanceof Gokuadolecente){
System.out.println("Goku adolecente ");
}else if(dragonball instanceof Gokuadulto){
System.out.println("Goku adulto ");
}else if(dragonball instanceof Gokuamaestro){
System.out.println("Goku maestro ");
}
}
}
}
Principio Abierto / Cerrado OCP
Entonces se debe seguir con la solución de un código cerrado pero abierto a
modificaciones
abstract
class anime
public abstract class Anime {
public abstract void draw();
}
Class
Gokuniño
Class
Gokuadolecente
Class
Gokuadulto
Class
Gokumaestro
Principio Abierto / Cerrado OCP
La solución es más simple y se presta a que este código sea cerrado y que las
futuras modificaciones no afecten, además de estar abierto a modificaciones.
public class DragonBallDrawer{
public void draw(Anime[] dragonball){
foreach(Anime anime : dragonball){
anime.draw();
}
}
}
Gracias

Más contenido relacionado

La actualidad más candente

Diagramas de estado
Diagramas de estadoDiagramas de estado
Diagramas de estadogmjuan
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Rubi Veronica Chimal Cuxin
 
Mapa Mental de Java
Mapa Mental de JavaMapa Mental de Java
Mapa Mental de JavaMario578
 
8b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 18b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 1Clara Patricia Avella Ibañez
 
Prototype (patron de disenio)
Prototype (patron de disenio)Prototype (patron de disenio)
Prototype (patron de disenio)Jhonny Zaruma
 
Programación orientada al objeto
Programación orientada al objetoProgramación orientada al objeto
Programación orientada al objetoboncastell
 
MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)Yadith Miranda Silva
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Josue Lara Reyes
 
Concepto y extensiones de negocio de Eriksson Penker
Concepto y extensiones de negocio de Eriksson PenkerConcepto y extensiones de negocio de Eriksson Penker
Concepto y extensiones de negocio de Eriksson PenkerMarcos Omar Cruz Ortrega
 
CIRCUITOS DIGITALES COMBINACIONALES 04. CRONOGRAMAS
CIRCUITOS DIGITALES COMBINACIONALES 04. CRONOGRAMASCIRCUITOS DIGITALES COMBINACIONALES 04. CRONOGRAMAS
CIRCUITOS DIGITALES COMBINACIONALES 04. CRONOGRAMASFdeT Formación
 
Ejercicios resueltos
Ejercicios resueltosEjercicios resueltos
Ejercicios resueltosfermodcor
 

La actualidad más candente (20)

Diagramas de estado
Diagramas de estadoDiagramas de estado
Diagramas de estado
 
Metamodelo UML
Metamodelo UMLMetamodelo UML
Metamodelo UML
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y Colas
 
Unidad 2 clases y objetos
Unidad 2 clases y objetosUnidad 2 clases y objetos
Unidad 2 clases y objetos
 
Utilizando Metodologia Rup Parte1
Utilizando Metodologia Rup Parte1Utilizando Metodologia Rup Parte1
Utilizando Metodologia Rup Parte1
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
Mapa Mental de Java
Mapa Mental de JavaMapa Mental de Java
Mapa Mental de Java
 
8b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 18b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 1
 
Prototype (patron de disenio)
Prototype (patron de disenio)Prototype (patron de disenio)
Prototype (patron de disenio)
 
Programación orientada al objeto
Programación orientada al objetoProgramación orientada al objeto
Programación orientada al objeto
 
MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)
 
Conceptos poo (presentación1)
Conceptos poo (presentación1)Conceptos poo (presentación1)
Conceptos poo (presentación1)
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)
 
Concepto y extensiones de negocio de Eriksson Penker
Concepto y extensiones de negocio de Eriksson PenkerConcepto y extensiones de negocio de Eriksson Penker
Concepto y extensiones de negocio de Eriksson Penker
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
 
Clase math.java
Clase math.javaClase math.java
Clase math.java
 
CIRCUITOS DIGITALES COMBINACIONALES 04. CRONOGRAMAS
CIRCUITOS DIGITALES COMBINACIONALES 04. CRONOGRAMASCIRCUITOS DIGITALES COMBINACIONALES 04. CRONOGRAMAS
CIRCUITOS DIGITALES COMBINACIONALES 04. CRONOGRAMAS
 
Ejercicios resueltos
Ejercicios resueltosEjercicios resueltos
Ejercicios resueltos
 
Modelos de dominio
Modelos de dominioModelos de dominio
Modelos de dominio
 

Similar a Arquitectura de Software Principio Abierto- Cerrado Open/Close

Frases Motivadoras GLD (engargolado)
Frases Motivadoras GLD (engargolado)Frases Motivadoras GLD (engargolado)
Frases Motivadoras GLD (engargolado)DianaMorales3296
 
Manejo de Proyecto con Lego EV3
Manejo de Proyecto con Lego EV3Manejo de Proyecto con Lego EV3
Manejo de Proyecto con Lego EV3OmarUlloa6
 
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
 
I Talc Expoproyecto 2007
I Talc   Expoproyecto 2007I Talc   Expoproyecto 2007
I Talc Expoproyecto 2007al34n1x
 
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
 
Tutorial de prolog
Tutorial de prologTutorial de prolog
Tutorial de prologPedro Vera
 
Aspect Oriented Programming introduction
Aspect Oriented Programming introductionAspect Oriented Programming introduction
Aspect Oriented Programming introductionMiguel Pastor
 
Qué es programación modular
Qué es programación modularQué es programación modular
Qué es programación modularAnitaBlen
 
Primeros pasos con java 9
Primeros pasos con java 9Primeros pasos con java 9
Primeros pasos con java 9Eudris Cabrera
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosmilituchinita
 
Introduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a ObjetosIntroduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a Objetosliberaunlibroupeg
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosYulyana López
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosmilituchinita
 

Similar a Arquitectura de Software Principio Abierto- Cerrado Open/Close (20)

Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Principios de diseño
Principios de diseñoPrincipios de diseño
Principios de diseño
 
Frases Motivadoras GLD (engargolado)
Frases Motivadoras GLD (engargolado)Frases Motivadoras GLD (engargolado)
Frases Motivadoras GLD (engargolado)
 
Manejo de Proyecto con Lego EV3
Manejo de Proyecto con Lego EV3Manejo de Proyecto con Lego EV3
Manejo de Proyecto con Lego EV3
 
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
 
I Talc Expoproyecto 2007
I Talc   Expoproyecto 2007I Talc   Expoproyecto 2007
I Talc Expoproyecto 2007
 
Prolog
PrologProlog
Prolog
 
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
 
Modulo 1
Modulo 1Modulo 1
Modulo 1
 
Aprenda c++ avanzado
Aprenda c++ avanzadoAprenda c++ avanzado
Aprenda c++ avanzado
 
Tutorial de prolog
Tutorial de prologTutorial de prolog
Tutorial de prolog
 
Poa Borrador
Poa BorradorPoa Borrador
Poa Borrador
 
Aspect Oriented Programming introduction
Aspect Oriented Programming introductionAspect Oriented Programming introduction
Aspect Oriented Programming introduction
 
Qué es programación modular
Qué es programación modularQué es programación modular
Qué es programación modular
 
Primeros pasos con java 9
Primeros pasos con java 9Primeros pasos con java 9
Primeros pasos con java 9
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetos
 
Introduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a ObjetosIntroduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a Objetos
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetos
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetos
 

Más de Ernesto Maya

Proyecto Administración de Proyectos COMCEL
Proyecto Administración de Proyectos COMCELProyecto Administración de Proyectos COMCEL
Proyecto Administración de Proyectos COMCELErnesto Maya
 
Calidad del Producto
Calidad del ProductoCalidad del Producto
Calidad del ProductoErnesto Maya
 
Diseño de Arquitectura ACDM
Diseño de Arquitectura ACDMDiseño de Arquitectura ACDM
Diseño de Arquitectura ACDMErnesto Maya
 
S8 ernesto maya_power_point
S8 ernesto maya_power_pointS8 ernesto maya_power_point
S8 ernesto maya_power_pointErnesto Maya
 
Midiendo la calidad del software
Midiendo la calidad del softwareMidiendo la calidad del software
Midiendo la calidad del softwareErnesto Maya
 
Enfoque estructuralista
Enfoque estructuralistaEnfoque estructuralista
Enfoque estructuralistaErnesto Maya
 
Aplicación móvil educativa
Aplicación móvil educativaAplicación móvil educativa
Aplicación móvil educativaErnesto Maya
 

Más de Ernesto Maya (8)

Proyecto Administración de Proyectos COMCEL
Proyecto Administración de Proyectos COMCELProyecto Administración de Proyectos COMCEL
Proyecto Administración de Proyectos COMCEL
 
Calidad del Producto
Calidad del ProductoCalidad del Producto
Calidad del Producto
 
Diseño de Arquitectura ACDM
Diseño de Arquitectura ACDMDiseño de Arquitectura ACDM
Diseño de Arquitectura ACDM
 
S8 ernesto maya_power_point
S8 ernesto maya_power_pointS8 ernesto maya_power_point
S8 ernesto maya_power_point
 
Midiendo la calidad del software
Midiendo la calidad del softwareMidiendo la calidad del software
Midiendo la calidad del software
 
Metodología GQM
Metodología GQMMetodología GQM
Metodología GQM
 
Enfoque estructuralista
Enfoque estructuralistaEnfoque estructuralista
Enfoque estructuralista
 
Aplicación móvil educativa
Aplicación móvil educativaAplicación móvil educativa
Aplicación móvil educativa
 

Arquitectura de Software Principio Abierto- Cerrado Open/Close

  • 1. Principio de Diseño Abierto- Cerrado Open/Close Arquitectura de Software Ernesto Maya. Erick Voltres. Hugo Hernández.
  • 2. Historia ● Open/Closed Principle, fue planteado por el Dr. Bertrand Meyer en el libro "Object Oriented Software Construction“ en 1988. ● Se popularizó junto con el resto de principios S.O.L.I.D. en el libro “Refactoring: Improving the Design of Existing Code” en 1999 por Martin Fowler.
  • 3. Definición Las entidades de software (clases, módulos, funciones…etc), deberían ser abiertas para la extensión pero cerradas para la modificación. Robert C. Martin Software Agile Development
  • 4. Características del principio Abierto-Cerrado OCP ● Se refiere a un “buen” diseño Orientado a Objetos ● “Es abierto para la extensión”, se refiere a que si en algún momento los requisitos van necesitando adaptarse es importante tener un módulo abierto para tal motivo (según el modelo de negocio, el módulo es extendido) ● “Es cerrado para la modificación”, en caso de ser una aplicación bien definida, si es abierto sólo se debe entender que se extiende por lo cual el código original seguirá intacto (cerrado) ● Se resuelve en algunos casos con polimorfismo
  • 5. Principio Abierto / Cerrado OCP ● Las clases que cumplen con OCP tienen dos características: ○ Son abiertas para la extensión. ○ Son cerradas para la modificación. ● El término “extender” no se limita solo a la herencia (extends) en Java, tambien de puede utilizar polimorfismo para invocar un comportamiento (en tiempo de ejecución.
  • 6. Principio Abierto / Cerrado OCP ● Finalidad: ○ Conseguir cambios añadiendo nuevo código sin afectar al resto de elementos del diseño. ● Ambigüedad: ○ La dependencia “uno a uno” se transforma en una dependencia de “uno a muchos”. ● Ventajas: ○ Evita que cambios en un módulo afecten a otros módulos. ○ Ayuda a eliminar el riesgo y contener costos.
  • 7. Principio Abierto / Cerrado OCP ● Están abiertos para su extensión. ○ Eso implica que el comportamiento de los módulos puede ser extendido. ● Están cerrados para su modificación. ○ El código fuente del módulo es inalterable.
  • 8. Principio Abierto / Cerrado OCP
  • 9. Principio Abierto / Cerrado OCP
  • 10. Principio Abierto / Cerrado OCP
  • 11. Principio Abierto / Cerrado OCP Toriyama nos pide un programa para dibujar a goku public class DragonBallDrawer { public void draw (Goku goku){ print("Goku draw"); } } public class Goku { int amigos; int aventuras; ... }
  • 12. Principio Abierto / Cerrado OCP Toriyama le gusta y pide más diseños con forme pasa el anime Class Gokuniño Class Gokuadolecente Class Gokuadulto Class Gokumaestro
  • 13. Principio Abierto / Cerrado OCP Para estas modificaciones algo lógico sería pensar en modificar la clase principal y dibujar los diferentes tipos de personajes con sus características public class DragonBallDrawer{ public void draw(Object[] dragonball) { foreach (Object dragonball : dragonball) { if(dragonball instanceof Gokuniño){ System.out.println("Goku niño "); }else if(dragonball instanceof Gokuadolecente){ System.out.println("Goku adolecente "); }else if(dragonball instanceof Gokuadulto){ System.out.println("Goku adulto "); }else if(dragonball instanceof Gokuamaestro){ System.out.println("Goku maestro "); } } } }
  • 14. Principio Abierto / Cerrado OCP Entonces se debe seguir con la solución de un código cerrado pero abierto a modificaciones abstract class anime public abstract class Anime { public abstract void draw(); } Class Gokuniño Class Gokuadolecente Class Gokuadulto Class Gokumaestro
  • 15. Principio Abierto / Cerrado OCP La solución es más simple y se presta a que este código sea cerrado y que las futuras modificaciones no afecten, además de estar abierto a modificaciones. public class DragonBallDrawer{ public void draw(Anime[] dragonball){ foreach(Anime anime : dragonball){ anime.draw(); } } }

Notas del editor

  1. Agile Software Development, Principles, Patterns, and Practices
  2. Agile Software Development, Principles, Patterns, and Practices