Informe 06 Paradigmas de Programacion
Informe 06 Paradigmas de Programacion
Informe 06 Paradigmas de Programacion
PROGRAMA DE ESTUDIO DE
INGENIERIA DE COMPUTACION Y SISTEMAS
DOCENTE:
CASTAÑEDA SALDAÑA, JOSE ARTURO
INTEGRANTES:
CURSO:
PARADIGMAS DE PROGRAMACIÓN
TRUJILLO - PERU
2024
RELACIONES ENTRE CLASES
Definición
Una relación entre clases es una asociación entre dos o más clases que define cómo interactúan y
colaboran entre sí. Estas relaciones se establecen para representar la estructura y el
comportamiento del sistema de software de manera natural y lógica.
Existen diferentes tipos de relaciones entre clases, cada una con sus propias características y
aplicaciones. Entre las más comunes encontramos:
1. Asociación:
Es una relación entre dos clases en la que una clase está relacionada con la otra,
pero cada una puede existir independientemente de la otra. (Booch, G. 1998)
2. Agregación:
Es una relación de "todo-parte" entre dos clases, donde una clase es parte de otra
clase, pero ambas pueden existir de forma independiente. ( Gamma, E. 1994)
3. Composición:
Es una relación de "todo-parte" similar a la agregación, pero con la diferencia de
que la parte no puede existir independientemente del todo. (Fowler, M. 2004)
4. Herencia:
Es una relación en la que una clase (subclase) hereda atributos y métodos de otra
clase (superclase). (Jacobson, I. 1992)
5. Dependencia:
Es una relación en la que un cambio en una clase puede afectar a otra clase.
(Rumbaugh, J. 1991)
Asociación
Darel en 2010 nos dio la siguiente definición “La asociación se refiere a una relación entre las
clases (objetos), en donde una instancia de clase origina un mensaje u orden que hace que otra
instancia de clase ejecute alguna acción en nombre de la primera, esta relación se considera
estructurada, porque solo especifica la conexión entre objetos de un tipo y objetos de otro tipo, lo
cual no representa un comportamiento específico”.
En palabras más coloquiales entre estudiantes de programación se podría decir que las “ordenes”
que son emitidas suelen ser “emitir un mensaje” o “invocar un método”, la invocación de estos
usualmente necesita que el objeto que emite la orden, la realice haciendo uso de referencias o
apuntar a la ubicación de memoria en la que está almacenada el objeto que recibe la orden.
(Jhonatan Azuela2017)
A menudo por convencionalismos entre programadores se distinguen los objetos por los roles
que cumplen, por lo tanto, si el objeto permite que otros lo utilicen, seria con el fin de cumplir el
rol que se le fue asignado, un rol hace alusión a las características públicas de un objeto que se
encuentra en asociación.
Composición
Entonces se puede afirmar que la composición es una técnica de programación usada para que
objetos que posean variables instanciadas hagan referencia a otros objetos.
Esta técnica tiene en común con la herencia, que sirve para reutilizar código con la diferencia de
que esta vez el código es más centralizado en un objeto en particular.
Según Jhonatan Azuela en 2017 dice que “La mayoría de veces se prefiere utilizar composición
en vez de herencia ya que, en herencia, la relación es más estrecha con la clase padre, y si esta
llega a cambiar, el objeto podría tener errores en su comportamiento y tendría que ser modificado
de alguna forma, siendo poco eficiente para los programadores; en cambio con la composición,
el objeto contará con variables instanciadas por otros objetos, con lo cual los demás objetos y el
código no tendría que ser modificado, mientras la interfaz no haya sido alterada”.
Otra de las ventajas de la composición sobre la herencia; es que en la herencia obtiene todas las
partes públicas que tenga la clase padre, sin embargo, en la composición, la clase tiene que hacer
referencia explícitamente a los métodos del objeto en cuestión.
Dependencia
La dependencia de clases, hace alusión al concepto de POO que nos indica la relación que existe
entre dos objetos(Clases), como explícitamente su nombre lo dice , aquí una clase depende de
otra para realizar las funciones que le fueron asignadas. (Zguillez, 2010)
Cuando se trabaja con clases u objetos es normal que realicen una sola función, de esta forma las
clases que deben realizar actividades más complejas son formadas partiendo de una asociación
de clases pequeñas en las que se delegaron funciones. (Zguillez, 2010)
Ejemplo
En el ejemplo visto anteriormente vemos como en la clase “Foro” se delega la actividad del
método “moderar” al objeto de la clase “Zguillez” haciendo que la implementación esté en en
esa clase dejando sin tanto código la clase principal y a su vez más ordenada; este es un claro
ejemplo donde se permite una mejor reutilización de clases.
Generalización
Realización
En una relación de realización, una entidad indica una responsabilidad que no lleva a cabo
directamente, sino que la transfiere a otra entidad que sí la ejecuta. Este tipo de relación es
frecuente en el contexto de interfaces, donde una interfaz establece un conjunto de métodos que
deben ser desarrollados por una clase específica. (Alyssa Walker, 2024)
Por ejemplo, consideremos una interfaz llamada `Imprimible` con un método `imprimir()`. Una
clase denominada `Documento` podría implementar esta interfaz al proporcionar su propia
versión del método `imprimir()`. En este caso, la clase `Documento` realiza la interfaz
`Imprimible`, lo que implica que cumple con la responsabilidad definida por la interfaz de contar
con un método `imprimir()`.(Alyssa Walker, 2024)
En un diagrama UML, la relación de realización se muestra con una línea punteada que va desde
la clase que implementa la interfaz hasta la interfaz misma. Esta representación indica que la
clase satisface la interfaz y, por ende, ofrece una implementación específica de los métodos
definidos en la interfaz.
Figura 6: Realización entre clases
Fuente: InformaticaPC , 2010
Diagrama de Clases
Los diagramas de clases son como mapas que creamos para mostrar las clases en nuestros
códigos y cómo se relacionan entre sí. En estos mapas, cada clase se ve como un rectángulo.
También mostramos cómo las clases se conectan, si una clase hereda de otra, si están asociadas
de alguna manera o si una clase contiene a otra. Estos diagramas nos ayudan a entender mejor la
estructura de nuestro código y cómo las diferentes partes interactúan entre sí. Son una
herramienta muy útil en el diseño y desarrollo de software.
Notación
En una clase podemos representar de forma gráfica, como un rectángulo cortado uniformemente
en tres partes con líneas colocadas horizontalmente.
En la primerea sección, se coloca el nombre de la clase y su estereotipo. En el centro vendría el
nombre de la clase, y se utilizaría cursiva en caso la clase sea abstracta. En caso la clase tuviera
un estereotipo, este vendría a colocarse sobre el nombre, en medio de los símbolos << … >>.
En la segunda sección, se colocaría la lista de características del objeto, o como se conoce
habitualmente, los atributos. Aquí colocamos mas específicamente, el nombre del atributo, el
tipo del atributo, y en caso sea necesario pondríamos también el valor asignado por defecto.
Figura 7: Notación clases
Fuente: Wondershare, 2024
Asociación Unidireccional: Se trata de una dirección única que se muestra con una línea sólida
que tiene una flecha al final.
Figura 8: Asociación
Fuente: Nuria, 2024
Asociación Bidireccional: Es una relación en ambos sentidos que se muestra con una línea recta
sin flecha.
Auto asociación: Se muestra con una línea que forma un bucle, donde la flecha apunta hacia la
misma clase.
Figura 10: Auto asociación
Fuente: Nuria, 2024
Agregación: Se muestra con una línea sólida que tiene un rombo abierto, indicando la parte que
contiene al conjunto.
Composición: Se muestra con una línea sólida que tiene un rombo lleno, indicando la parte que
forma parte del conjunto.
Dependencia: Se muestra con una línea punteada que tiene una flecha que va desde la clase que
usa hacia la clase de la que depende.
Herencia: Se muestra con una línea sólida que tiene una flecha triangular abierta, apuntando
desde la subclase hacia la clase padre.
Figura 14: Herencia
Fuente: Nuria, 2024
Realización: Se muestra con una línea punteada que tiene una flecha triangular abierta,
apuntando desde la clase que realiza hacia la interfaz.
Notación habitual:
Nombre: tipo = valor inicial (valor
inicial)
Usualmente, como convencionalismos, la visibilidad puede ser publica definido con un “+”,
privada definida con un “-”, o protegida definida con un “#”, esto puede cambiar dependiendo
del lenguaje en el que estemos programando.
En la tercera y última sección, se muestran las operaciones que la clase puede ejecutar, estas se
ven presentadas con la notación habitual:
Cardinalidad
Nuria. (15 de enero de 2024). Guía completa para entender el diagrama de clases UML
básico. (boardmix, Productor) Recuperado el 27 de Abril de 2024, de
https://boardmix.com/es/knowledge/class-diagram/
https://www.cristalab.com/tutoriales/programacion-orientada-a-objetos-asociacion-vs-
composicion-c89337l/#google_vignette
https://www.cristalab.com/tutoriales/poo-dependencia-de-clases-y-polimorfismo-
c71290l/
https://informaticapc.com/poo/uml.php
Booch, G., Rumbaugh, J., & Jacobson, I. (1998). Análisis y Diseño Orientado a Objetos
con Aplicaciones.
Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Patrones de diseño: elementos
de software reutilizable orientado a objetos.
Fowler, M. (2004). UML Distilled: Una breve guía del lenguaje estándar de modelado
de objetos (3ª ed.).
Rumbaugh, J., Blaha, M., Premerlani, W., Eddy, F., & Lorensen, W. (1991). Modelado y
Diseño Orientado a Objetos.