Want to make creations as awesome as this one?

Transcript

4.9 Diseño de clases

Para ver la información, da clic en la imagen.

El diseño de clases es esencial en la ingeniería de software y se inicia entendiendo el problema o el dominio de la aplicación. Este proceso, que incluye la abstracción y el encapsulamiento de datos y comportamientos en entidades que simulan elementos del mundo real, mejora la reutilización del código, la mantenibilidad y la escalabilidad del software, contribuyendo a su modularidad. Los diagramas de clases son herramientas clave en este diseño, ofreciendo una representación visual de la estructura del sistema, incluyendo clases, sus propiedades, comportamientos y relaciones como herencia y asociación. Ventajas del uso de diagramas de clases
  • Claridad: ofrecen una visión clara y concisa de la estructura de clases de un sistema, haciendo más fácil identificar cómo interactúan las diferentes partes del sistema entre sí.
  • Comunicación: sirven como una herramienta de comunicación efectiva entre los miembros del equipo de desarrollo y, potencialmente, con partes interesadas no técnicas, permitiendo una comprensión común de la arquitectura del sistema.
  • Documentación: proporcionan una forma de documentar el diseño del sistema, lo cual es útil tanto para el desarrollo actual como para el mantenimiento y la expansión futura del sistema.
  • Detección de problemas: permiten identificar problemas de diseño, como dependencias innecesarias entre clases o mal uso de patrones de diseño, en una etapa temprana del desarrollo.

Unidad 4. Conceptos de Programación Orientada a Objetos (POO)

Elementos principales en un diagrama de clases
  • Clases: representadas por rectángulos que incluyen tres partes: el nombre de la clase, los atributos (campos o propiedades) y los métodos (funciones o comportamientos). Las clases abstractas o interfaces también pueden ser representadas con notaciones específicas, como cursivas o estereotipos.
  • Relaciones: las líneas que conectan las clases indican las diferentes relaciones:
  • Herencia: una línea con una punta de flecha vacía indica que una clase (subclase) hereda de otra (superclase).
  • Asociación: una línea simple que conecta dos clases indica que estas tienen una relación, con marcadores opcionales para mostrar multiplicidad (por ejemplo, 1..* para indicar "uno a muchos").
  • Agregación y composición: representan relaciones todo-parte con notaciones específicas (un diamante vacío para agregación y uno relleno para composición) indicando que una clase está compuesta por una o más instancias de otras clases.
  • Interfaces: se muestran a menudo con una línea punteada que conecta a las clases que las implementan, usando también una punta de flecha vacía.

4.9 Diseño de clases

Para ver la información, da clic en la imagen.

Unidad 4. Conceptos de Programación Orientada a Objetos (POO)

4.9.1 Uso de clases derivadas
El uso de clases derivadas se refiere a la capacidad de crear nuevas clases basadas en otras ya existentes. Este proceso se conoce como herencia, permitiendo que las clases derivadas (o subclases) hereden atributos y métodos de las clases base (o superclases), y a la vez introduzcan sus propias características únicas o modifiquen las existentes. La herencia facilita la reutilización de código y la creación de una jerarquía de clases organizada, lo que contribuye significativamente a la eficiencia del diseño y desarrollo de software.

4.9 Diseño de clases

Para ver la información, da clic en las imágenes.

Unidad 4. Conceptos de Programación Orientada a Objetos (POO)

4.9.2 Recolección de objetos
La recolección de objetos (Garbage Collection, GC) es el proceso de liberar automáticamente la memoria ocupada por objetos que ya no son accesibles en el programa. En muchos lenguajes de programación modernos orientados a objetos, como Java y .NET, el recolector de basura se encarga de esta tarea, eliminando la necesidad de que los desarrolladores liberen manualmente la memoria, lo que reduce los errores comunes como fugas de memoria y corrupción de memoria. El diseño de clases, el uso efectivo de clases derivadas y la gestión adecuada de la recolección de objetos son aspectos fundamentales en el desarrollo de software robusto, eficiente y mantenible en la POO.

4.9 Diseño de clases

Para ver la información, , da clic en la imagen.

Unidad 4. Conceptos de Programación Orientada a Objetos (POO)

Funcionamiento:
  • Rastreo de alcance: el GC identifica objetos que ya no son alcanzables desde las raíces del programa (variables en el stack, registros, etc.) y considera que estos objetos son elegibles para la recolección.
  • Recuperación de memoria: la memoria ocupada por objetos no alcanzables se recupera y se hace disponible para futuras asignaciones.
Beneficios:
  • Seguridad: reduce la probabilidad de errores relacionados con la gestión de memoria, como fugas de memoria y doble liberación.
  • Eficiencia: permite una gestión de memoria más eficiente en aplicaciones complejas.
Para profundizar en el diseño de clases y mejorar tu comprensión del tema, te recomendamos la lectura del siguiente artículo: Pavón, J. (2007). Diseño de clases [PDF]. Facultad de Informática de la Universidad Complutense de Madrid. https://www.fdi.ucm.es/profesor/jpavon/poo/1.7.Diseno%20de%20clases.pdf
class Mascota { protected String nombre; protected String tipo; public Mascota(String nombre, String tipo) { this.nombre = nombre; this.tipo = tipo; } public void mostrarDetalles() { System.out.println(nombre + " es un(a) " + tipo); } } class Perro extends Mascota { private String raza; public Perro(String nombre, String raza) { super(nombre, "perro"); this.raza = raza; } public void mostrarDetalles() { super.mostrarDetalles(); System.out.println("y es de la raza " + raza); } }
Ejemplo en Java:.
Implementación y recomendaciones Al implementar clases derivadas, es crucial considerar los principios de diseño como el Liskov Substitution Principle (LSP), que sugiere que objetos de una clase base debe poder ser reemplazados con objetos de clases derivadas sin afectar la integridad del programa. Además, es importante distinguir entre herencia y composición, eligiendo la herencia sólo cuando es claro que existe una relación de tipo "es un" entre la clase base y la clase derivada. En muchos casos, la composición (donde una clase incluye objetos de otra clase) puede ser una alternativa más flexible y menos acoplada para compartir funcionalidades entre clases.
Reproduce el siguiente material audiovisual, aprenderás a usar herramientas web para crear un diagrama de clases: Saber Programas (2022, 15 de noviembre) Cómo hacer un DIAGRAMA de CLASES UML [ fácil y profesional ] [video] YouTube https://www.youtube.com/watch?v=zMpr6RIePf8
Cómo utilizar diagramas de clases para el diseño de clases
  • Identificar clases: comienza por identificar las entidades principales del dominio del problema que se está modelando.
  • Definir atributos y métodos: para cada clase identificada, define los atributos y métodos relevantes.
  • Establecer relaciones: determina cómo se relacionan las clases entre sí y representa estas relaciones en el diagrama.
  • Refinamiento: usa el diagrama para revisar y refinar el diseño, asegurándote de que el sistema esté bien estructurado y sea coherente.
Los diagramas de clases son una herramienta básica en las fases de análisis y diseño de sistemas orientados a objetos, ayudando a visualizar y planificar la estructura y comportamiento del sistema de manera efectiva antes de proceder con la implementación detallada del código.
Explicación del códigoEn este ejemplo, Perro se define como una clase derivada de Mascota, heredando sus atributos y métodos. Se introduce un nuevo atributo, raza, y se sobrescribe el método mostrarDetalles para incluir información específica de perros. Esto ilustra la eficacia de las clases derivadas en la extensión y especialización de las clases base, permitiendo al sistema representar de manera diferenciada diversos tipos de mascotas.