Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TRABAJOS
UNIDAD TRES
1. Laboratorio3.- Principio de responsabilidad única.
2. TAA3.- Tres trabajos de aprendizaje autónomo.
3. TAG3.- Trabajo de aprendizaje grupal 3.
4. Foro3.- Patrones de diseño de comportamiento de template.
5. Prueba3.-Presentacion del proyecto.
6. Evaluación3.- Exposición del Proyecto.
“Laboratorio sobre principio de
responsabilidad única”
Nota: 16,5/20
Nota promediada: 2,46/3
1. TEMA: PRINCIPIO DE RESPONSABILIDAD ÚNICA
2. OBJETIVOS:
2.1. OBJETIVO GENERAL:
Analizar y conocer el principio de responsabilidad única en la programación orientada a objetos mediante
el uso de información sobre este tema de la mano de ejercicios con los que se puedan entender correctamente
este principio de responsabilidad única para la implementación en la práctica del laboratorio.
2.2. OBJETIVOS ESPECÍFICOS:
• Identificar el concepto básico del principio de responsabilidad única mediante el uso de
fuentes confiables para ampliar el conocimiento sobre este tema.
• Comprender y desarrollar un ejemplo de la aplicación del primer principio de SOLID en las
prácticas de programación orientada a objetos.
3. DESARROLLO:
3.1. MARCO TEÓRICO
El principio de responsabilidad única es el primero del SOLID, una serie de directrices que facilitan a los
desarrolladores crear programas eficaces y entendibles. Este principio indica que una clase, debe ser
responsable de una sola cosa. (Martin, 2019)
Este principio indica si tiene mas de una responsabilidad, asume dos motivos por lo cual puede ser
modificada. (Torres, 2011)
Siempre en la presentación de programas no se puede decir esta clase hace “esto” y “esto” por que puede
ser un indicador del no uso de este principio.
Luego generamos el programa principal donde ejecutamos el programa llamando a la clase coche y dándole
los objetos a ejecutar, pero está mal dado que el mismo objeto tiene también las operaciones.
Figura 2
En cambio, si generamos la clase coche únicamente con sus atributos y métodos respectivos sin generar las
operaciones que se realizan estamos usando el principio
Figura 3
Aquí colocamos el programa principal en el que se llama otro objeto de otra distinta clase por lo cual si
estamos usando la responsabilidad única.
Figura 4
Aquí podemos ver el programa del que se llama un objeto de esta en el programa principal usadso con
responsabilidad única, en el que podemos ver las operaciones la cual es guardar el coche pero y está en otra
clase de un solo propósito usando el principio
Figura 5
Nota: Programa GestionBDD con uso principio responsabilidad única este se genera al usar la
responsabilidad única generando otro programa con una sola tarea
Con este programa podemos ver que tenemos la responsabilidad única usada, dando una responsabilidad a
cada clase y permite que trabajemos mejor y eficazmente siendo cohesivo.
4. CONCLUSIONES:
• En conclusión, el principio de responsabilidad única es una herramienta indispensable para proteger
el código frente a cambios, ya que este quiere decir que un objeto debe realizar una única cosa por
lo tanto este implica que solo debería haber un motivo por el que modificar una clase.
• Al realizar el ejercicio sobre el principio de responsabilidad única comprendimos cómo usarlo y se
llegó a la conclusión que este principio funcionara de manera correcta siempre y cuando este realice
una sola cosa es decir que no se tenga varios import, ni muchos métodos públicos en la clase, ni
muchas líneas ya que quiere decir que no se esta trabajando en una sola cosa, si no que esta
involucrada en varias operaciones.
5. RECOMENDACIONES:
• Se recomienda investigar muchas fuentes bibliográficas para obtener más información sobre el
principio de responsabilidad única y así poder aplicarlo en la creación de varios programas sin
cometer errores ya que mediante la investigación y la práctica se puede dominar el tema y crear
programas de manera correcta.
• Si en un clase va incluido varios import, métodos públicos y demasiadas líneas de programación
nos esta indicando que se esta incumpliendo el principio de responsabilidad única, ya que se estaría
realizando más de una acción en el programa, por lo que se recomienda hacer una revisión del
código para detectar estos errores que se aplican generalmente en la aplicación de este principio ya
que el uso principal de este principio es facilitar la creación del código para que no se haga tan
extenso y se pueda manejar cada clase sin problemas.
6. BIBLIOGRAFIA
Leiva, A. (2016). Principio de responsabilidad única (SOLID 1ª parte). Obtenido de devexperto:
https://devexperto.com/principio-responsabilidad-unica/
Martin, C. M. (03 de Abril de 2019). Principios SOLID. Obtenido de En mi local funciona. Technical
thoughts, stories and ideas: https://enmilocalfunciona.io/principios-solid/
RESPONSABLES:
Figura 1
Principios SOLID
Nota: En la siguiente imagen se puede observar cada uno de los principios SOLID, los cuales son usados
en le ambiente de la programación. Tomada de (Marco, TRIBALYTE, 2020)
A continuación, se detalla cada uno de los principios SOLID.
3.1 Principios SOLID
3.1.1 Single Responsibility
Este principio nos dice que un módulo tiene una única razón para cambiar, lo que nos quiere decir que el
principio de responsabilidad única se cumple cuando una clase solo hace una cosa.
Figura 2
Ejemplo de responsabilidad única
Nota: Este código cumple con el principio de responsabilidad única, ya que está haciendo una cosa.
Tomada de (Gustabo, 2021)
3.1.2 Open/Closed
Este principio nos dice que una entidad de software debería estar abierta a extensión, pero cerrada a
modificación. ¿Qué quiere decir esto? Que tenemos que ser capaces de extender el comportamiento de
nuestras clases sin necesidad de modificar su código. Esto nos ayuda a seguir añadiendo funcionalidad
con la seguridad de que no afectará al código existente. Nuevas funcionalidades implicarán añadir nuevas
clases y métodos, pero en general no debería suponer modificar lo que ya ha sido escrito.
Figura 3
Ejemplo del principio Abierto/Cerrado
Nota: En la imagen se muestra la clase RaceCar que extiende Car aplicando de esa manera el principio
open/close. Tomada de (Gustabo, 2021)
3.1.3 Liskov substitution
El principio de sustitución de Liskov nos dice que, si en alguna parte de nuestro código estamos usando
una clase, y esta clase es extendida, tenemos que poder utilizar cualquiera de las clases hijas y que el
programa siga siendo válido. Esto nos obliga a asegurarnos de que cuando extendemos una clase no
estamos alterando el comportamiento de la madre. Este principio viene a desmentir la idea preconcebida
de que las clases son una forma directa de modelar la realidad.
Figura 4
Ejemplo del principio sustitución de Liskov
Nota: En la siguiente imagen se aplica el principio de sustitución. Para acelerar el auto no se necesita
conocer el tipo de clase. Tomada de (Gustabo, 2021)
3.1.4 Interface segregation
El principio de segregación de interfaces viene a decir que ninguna clase debería depender de métodos
que no usa. Por tanto, cuando creemos interfaces que definan comportamientos, es importante estar
seguros de que todas las clases que implemente esas interfaces vayan a necesitar y ser capaces de agregar
comportamientos a todos los métodos. En caso contrario, es mejor tener varias interfaces más pequeñas,
las interfaces nos ayudan a desacoplar módulos entre sí.
Figura 5
Ejemplo del principio segregación de interfaces
Nota: EN la imagen se muestra un ejemplo de inversión de dependencia ya que ola clase Cash utiliza la
interfaz y desconoce su implementación. Tomada de (Gustabo, 2021)
3.2 Ventajas de los Principios SOLID
• Software más flexible, mejoran la cohesión disminuyendo el acoplamiento.
• Te van hacer entender de mejor manera las arquitecturas y para esto es necesario entender
correctamente los conceptos de los principios SOLID.
• Simplifica la creación de tests es decir si se tiene un código desacoplado y una
arquitectura, los tests van a ser mucho más sencillos.
Los principios SOLID están interrelacionados lo que quiere decir que si unos principios no pueden existir
sin los otros
4. CONCLUSIONES
• En conclusión, tener un buen conocimiento sobre los principios SOLID ayuda a tener un buen
desempeño en la programación ya que esta va a permitir tener un buen control del programa, así
mismo se puede solucionar errores de manera rápida ya que el código no se verá muy extensa y es
difícil confundirse.
• Se concluye que los principios SOLID son muy importantes para la programación ya que estos
principios van facilitando la creación del código y estos van enlazados entre ellos por lo tanto uno
se ayuda de otro ya que en una clase se puede aplicar un principio, pero la otra necesariamente va
a necesitar otra aplicación de otro principio y de ese modo el código funcionara de mejor manera
5. RECOMENDACIONES
• Al indagar sobre el tema de los principios SOLID puede resultar un poco confuso al inicio, pero si
se lo investiga más a fondo será más fácil aprender sobre estos principios por lo que se recomienda
buscar en varias fuentes bibliográficas y ver videos en YouTube para ir ampliando el conocimiento
sobre estos principios y aplicarlo en la programación.
• Se recomienda usar bien los conceptos de cada principio SOLID cuando se esté aplicando en un
programa, ya que el mal uso de estos puede generar que se incumpla uno de estos principios, por
lo tanto, realizar más programas aplicando estos principios para tener un mejor dominio del tema.
6. BIBLIOGRAFÍA
jetivo%20de%20localizar%20errores%20de%20software.
UNIVERSIDAD DE LAS FUERZAS ARMADAS “ESPE”
CARRERA DE INGENIERÍA ELECTRONICA
Y AUTOMATIZACION
Nota: En la imagen se puede observar los tipos de patrones de diseño, los cuales se estudiarán con más
detalle a continuación. Tomada de (Canelo, 2020)
3.2.1 Patrones Creacionales
Los patrones de creación proporcionan diversos mecanismos de creación de objetos, que aumentan la
flexibilidad y la reutilización del código existente de una manera adecuada a la situación. Esto le da al
programa más flexibilidad para decidir que objetos deben crearse para un caso de uso dado.
Los patrones creacionales dividen en:
Abstract Factory en este patrón, una interfaz crea conjuntos o familias de objetos relacionados sin
especificar el nombre de la clase.
Figura 2
Ejemplo del patrón Abstract Factory
Nota: En la imagen se puede observar cómo debe ser implementado el patrón Abstract Factory. Tomada
de (Shvtes, 2018)
Builder Patterns Permite producir diferentes tipos y representaciones de un objeto utilizando el mismo
código de construcción. Se utiliza para la creación etapa por etapa de un objeto complejo
combinando objetos simples. La creación final de objetos depende de las etapas del proceso
creativo, pero es independiente de otros objetos.
Figura 3
Ejemplo de Builder Patterns
Nota: En la imagen se muestra como debe ser implementado el patrón Builder Patterns. Tomada de
(Parilli, 2020)
Prototype Permite copiar objetos existentes sin hacer que su código dependa de sus clases. Se
utiliza para restringir las operaciones de memoria/base de datos manteniendo la modificación al
mínimo utilizando copias de objetos.
Figura 4
Ejemplo del patrón Prototype
Nota: En la imagen se representa como debe ser implementado el patrón Prototype. Tomada de
(Parilli, 2020)
Singleton Este patrón de diseño restringe la creación de instancias de una clase a un único objeto.
Figura 5
Ejemplo del patrón Singleton
Nota: La imagen mostrada representa como debe ser implementado el patrón Singleton. Tomada de
(Canelo, 2020)
3.2.2 Patrones Estructurales
Como su nombre indica, estos patrones vienen a solucionar o facilitar las tareas de creación o
instanciación de objetos. Estos patrones hacen hincapié en el encapsulamiento de la lógica de la
instanciación ocultando los detalles concretos de cada objeto y permitiéndonos trabajar con abstracciones
Adapter se utiliza para vincular dos interfaces que no son compatibles y utilizan sus funcionalidades. El
adaptador permite que las clases trabajen juntas de otra manera que no podría al ser interfaces
incompatibles.
Figura 6
Ejemplo del patrón Adapter
Nota: Imagen que muestra cómo debe implementarse el patrón Adapter en una clase. Tomada de (Shvtes,
2018)
Brigde En este patrón hay una alteración estructural en las clases principales y de implementador
de interfaz sin tener ningún efecto entre ellas. Estas dos clases pueden desarrollarse de manera
independiente y solo se conectan utilizando una interfaz como puente.
Figura 7
Ejemplo del patrón Bridge
Nota: En la imagen se puede visualizar como es que el patrón Brigde debe ser implementado en una clase.
Tomada de (Shvtes, 2018)
Composite se usa para agrupar objetos como un solo objeto. Permite componer objetos en estructuras de
árbol y luego trabajar con estas estructuras como si fueran objetos individuales.
Figura 8
Ejemplo del patrón Composite
Nota: En la imagen se muestra la estructura que usa el patrón Bridge para poder agrupar objetos como un
solo objeto. Tomada de (Parilli, 2020)
Decorator Este patrón restringe la alteración de la estructura del objeto mientras se le agrega una
nueva funcionalidad. La clase inicial permanece inalterada mientras que una clase decorator
proporciona capacidades adicionales.
Figura 9
Ejemplo del patrón Decorator
Nota: La imagen representa como debe ser la implementación del patrón Decorator para que cumpla con
su rol. Tomada de (Parilli, 2020)
Facade proporciona una interfaz simplificada para una biblioteca, un marco o cualquier otro
conjunto complejo de clases.
Figura 10
Ejemplo del patrón Facade
Nota: La imagen muestra cómo se estructura el patrón Facade. Tomada de (Parilli, 2020)
Flyweight el patrón Flyweight se usa para reducir el uso de memoria y mejorar el rendimiento al
reducir la creación de objetos. El patrón busca objetos similares que ya existen para reutilizarlo en
lugar de crear otros nuevos que sean similares.
Figura 11
Ejemplo del patrón Flyweight
Nota: Esta imagen representa como debe ser implementado el patrón Flyweight y como es que
esta tiene su estructura. Tomada de (Parilli, 2020)
Proxy se utiliza para crear objetos que pueden representar funciones de otras clases u objetos y la
interfaz se utiliza para acceder a estas funcionalidades.
Figura 12
Ejemplo del patrón Proxy
Nota: En la imagen se observa como es el funcionamiento del patrón Proxi cuando se implementa en una
clase. (Parilli, 2020)
Nota: En la imagen se muestra al patrón Iterator y como esta debe ser implementada. Tomada de
(Hernández, 2016)
Mediator Este patrón proporciona una comunicación fácil a través de su clase que permite la
comunicación para varias clases.
’
Nota: La imagen muestra cómo se compone el patrón Mediator para realizar una comunicación
fácil a través de su clase. Tomada de (Hernández, 2016)
4. CONCLUSIONES:
• Los patrones de diseño ayudan al usuario a dar una identidad a su sistema y a resolver errores el
cual se presentan al desarrollar la idea que se plantea por ello se desfragmenta en tres aspectos de
los cuales se debe tener muy en claro para su uso.
• Los tipos de patrones de diseño son muchos y aunque en cada uno de ellos resalta uno solo se debe
tener un concepto de cada uno de ellos ya que cada uno de ellos soluciona un tipo de problema,
pero lo que más llama la atención al usuario es saber como se deben usar cada uno.
5. RECOMENDACIONES
• El aprendizaje de los patrones de diseño es un poco confuso ya que muchos de ellos se usan en la
estructuración de los programas se recomiendan al usuario consultar acerca de ello para que no
exista confusiones y que con ello conlleve errores.
• Los subtipos de los tipos patrones de diseño tiene una manera de ayudar al usuario a resolver los
problemas, pero como usarlos y cuando usarlos depende de la imaginación y proyección de usuario
en su meta ayudarse de videos que expliquen como poder solventar estas dudas.
6. BIBLIOGRAFÍA
8.2.OBJETIVOS ESPECÍFICOS:
• Elaborar el cuestionario formulando preguntas con los aspectos más importantes de los temas vistos ya
en clases y guiándose correctamente de los apuntes para no poner respuestas incorrectas.
• Realizar cada pregunta del cuestionario con lógica y en base a cada tema visto, para que las
preguntas sean entendibles y no exista confusiones en el momento en que estas sean
respondidas.
• Comprender cada uno de los temas estudiados, para realizar preguntas con la información a
disposición de acuerdo a lo que corresponde a la POO.
9. DESARROLLO:
9.1. SOLID PRINCIPLES.
9.2. MODULARIDAD.
12. ¿Cuál es una de las ventajas que brindan los patrones de diseño?
A) Hacer que el desarrollo de un programa sea muy complicado.
B) Construir un programa complejo y muy difícil de entender.
C) La optimización del programa ya que se evitarán errores recurrentes de diseño.
D) Ninguna de las anteriores
Respuesta: C)
13. ¿Los patrones de diseño son lo mismo que algoritmos para solventar un problema?
A) Si, ya que se requiere solventar un error de diseño y se tienen que seguir una serie de procesos
para corregir dichos errores.
B) No, puesto que un patrón de diseño es una concepción para solventar un error de diseño.
Respuesta: B)
6. BIBLIOGRAFÍA
Díaz, A. (2010, 04 12). high scalability. Retrieved from high scalability:
https://highscalability.wordpress.com/2010/04/12/patrones%C2%A0estructurales/#:~:text=Los
%20patrones%20estructurales%20se%20enfocan%20en%20como%20las,es%20imposible%20co
n%20una%20composici%C3%B3n%20de%20clases%20est%C3%A1ticas.