ID actividad: 2324_PRO_u4u5u6_libre
Agrupamiento de la actividad: Individual
La actividad consiste en el desarrollo de un proyecto software en Kotlin, permitiendo al estudiante elegir la temática. Este proyecto debe demostrar la comprensión y aplicación de los conceptos de programación orientada a objetos (POO), incluyendo la definición y uso de clases, herencia, interfaces, genericos, principios SOLID y el uso de librerías externas.
Objetivo:
- Demostrar comprensión de los fundamentos de POO mediante la instanciación y uso de objetos.
- Aplicar conceptos avanzados de POO como herencia, clases abstractas, e interfaces.
- Crear y usar clases que hagan uso de genéricos.
- Aplicar principios SOLID.
- Integrar y utilizar librerías de clases externas para extender la funcionalidad del proyecto.
- Documentar y presentar el código de manera clara y comprensible.
Trabajo a realizar:
-
Selección de la Temática: Elige un tema de tu interés que pueda ser abordado mediante una aplicación software. Esto podría ser desde una aplicación de gestión para una pequeña empresa, una herramienta para ayudar en la educación, hasta un juego simple. Define claramente el problema que tu aplicación pretende resolver.
-
Planificación: Documenta brevemente cómo tu aplicación solucionará el problema seleccionado, incluyendo las funcionalidades principales que desarrollarás.
-
Desarrollo:
- Instancia de Objetos: Tu aplicación debe crear y utilizar objetos, demostrando tu comprensión de la instanciación y el uso de constructores, métodos, y propiedades.
- Métodos Estáticos: Define y utiliza al menos un método estático, explicando por qué es necesario en tu aplicación.
- Uso de IDE: Desarrolla tu proyecto utilizando un IDE, aprovechando sus herramientas para escribir, compilar, y probar tu código.
- Definición de Clases: Crea clases personalizadas con sus respectivas propiedades, métodos, y constructores.
- Clases con genéricos: Define y utiliza al menos una clase que haga uso de genéricos en tu aplicación.
- Herencia y Polimorfismo: Implementa herencia y/o interfaces en tu proyecto para demostrar la reutilización de código y la flexibilidad de tu diseño. Usa los principios SOLID: Ten presente durante el desarrollo los principios SOLID y úsalos durante el diseño para mejorar tu aplicación.
- Librerías de Clases: Integra y utiliza una o más librerías externas que enriquezcan la funcionalidad de tu aplicación.
- Documentación: Comenta tu código de manera efectiva, facilitando su comprensión y mantenimiento.
-
Prueba y Depuración: Realiza pruebas para asegurarte de que tu aplicación funciona como se espera y depura cualquier error encontrado.
-
Contesta a las preguntas ver el punto Preguntas para la Evaluación
- Apuntes dados en clase sobre programación orientada a objetos, Kotlin, uso de IDEs, y manejo de librerías.
- Recursos vistos en clase, incluyendo ejemplos de código, documentación de Kotlin, y guías de uso de librerías.
RA y CE evaluados: Resultados de Aprendizaje 2, 4, 6, 7 y Criterios de Evaluación asociados.
Conlleva presentación: SI
Rubrica: Mas adelante se mostrará la rubrica.
La entrega tiene que cumplir las condiciones de entrega para poder ser calificada. En caso de no cumplirlas podría calificarse como no entregada.
- Conlleva la entrega de URL a repositorio: El contenido se entregará en un repositorio GitHub.
- Respuestas a las preguntas: Deben contestarse en este fichero, README.md
Este conjunto de preguntas está diseñado para ayudarte a reflexionar sobre cómo has aplicado los criterios de evaluación en tu proyecto. Al responderlas, asegúrate de hacer referencia y enlazar al código relevante en tu README.md
, facilitando así la evaluación de tu trabajo.
- (2.a, 2.b, 2.c, 2.d, 2.f, 2.h, 4.f, 4.a): Describe cómo has instanciado y utilizado objetos en tu proyecto. ¿Cómo has aplicado los constructores y pasado parámetros a los métodos? Proporciona ejemplos específicos de tu código.
He instanciado objetos en mi proyecto en la clase main.kt
creando una variable y más abajo llamándola, acompañada de un método.
Los constructores que he realizado han sido primarios, añadiendo las propiedades a la clase. Los parámetros los he pasado añadiéndolos en los paréntesis de los métodos.
Un ejemplo podría ser la instancia del menú en main, donde se crea la variable y posteriormente se llama al método .mostrarMenu,
.
- (4.i): ¿Has definido algún método/propiedad estático en tu proyecto? ¿Cuál era el objetivo y por qué consideraste que debía ser estático en lugar de un método/propiedad de instancia?
- (2.e): ¿En qué parte del código se llama a un método estático o se utiliza la propiedad estática?
No he definido ningún método estático en mi proyecto. En todo caso, sería un Companion object como método común a todas las instancias de la clase, pero no lo he considerado necesario.
- (2.i): ¿Cómo utilizaste el IDE para el desarrollo de tu proyecto? Describe el proceso de creación, compilación, y prueba de tu programa.
El IDE que he empleado ha sido IntelliJ IDEA, que me ha facilitado la creación de clases, la compilación y la prueba de mi programa. En este caso, la creación de clases ha sido muy sencilla, ya que con un clic derecho en la carpeta src/main/kotlin he podido crear una nueva clase. La compilación ha sido automática, y la prueba de mi programa ha sido tarea sencilla, ya que tenemos la opción de ejecutar el programa en la parte superior derecha de la pantalla.
- (4.b, 4.c, 4.d, 4.g): Explica sobre un ejemplo de tu código, cómo definiste las clases en tu proyecto, es decir como identificaste las de propiedades, métodos y constructores y modificadores del control de acceso a métodos y propiedades, para representar al objeto del mundo real. ¿Cómo contribuyen estas clases a la solución del problema que tu aplicación aborda?
Las clases las he definido en mi proyecto con propiedades, métodos y constructores. Las propiedades son las características de cada clase, los métodos son las acciones que pueden realizar y los constructores son los métodos que se ejecutan al instanciar la clase.
Contribuyen a la solución del problema que mi aplicación aborda, ya que, gracias a las clases, puedo crear objetos que representen elementos del mundo real y que tengan sus propias características y métodos.
- (4.h, 4.j, 7.a, 7.b, 7.c): Describe sobre tu código cómo has implementado la herencia o utilizado interfaces en tu proyecto. ¿Por qué elegiste este enfoque y cómo beneficia a la estructura de tu aplicación? ¿De qué manera has utilizado los principios SOLID para mejorar el diseño de tu proyecto? ¿Mostrando tu código, contesta a qué principios has utilizado y qué beneficio has obtenido?
He implementado dos abstract class, que son las clases padre y de ahi heredan clases derivadas, de las que se instanciará. He elegido ese enfoque para poder hacer varios tipos de un elemento y que cada uno tenga sus propias características.
He usado los principios SOLID para mejorar el diseño de mi proyecto, en concreto el principio de responsabilidad única, ya que cada clase tiene una única responsabilidad.
- (7.d, 7.e, 7.f, 7.g): Presenta la jerarquía de clases que diseñaste. ¿Cómo probaste y depuraste esta jerarquía para asegurar su correcto funcionamiento? ¿Qué tipo de herencia has utilizado: Especificación, Especialización, Extensión, Construcción?
Para asegurarme del correcto funcionamiento de las jerarquías, he tratado de añadir funcionalidades diferentes a las clases derivadas para que se vea que cada una tiene sus propias características. He dividido la gestión sobre cada una para que se vea que cada una tiene su propia responsabilidad.
- (2.g, 4.k): Describe cualquier librería externa que hayas incorporado en tu proyecto. Explica cómo y por qué las elegiste, y cómo las incorporaste en tu proyecto. ¿Cómo extendió la funcionalidad de tu aplicación? Proporciona ejemplos específicos de su uso en tu proyecto.
No he incorporado ninguna librería externa en mi proyecto.
- (7.h): Muestra ejemplos de cómo has documentado y comentado tu código. ¿Que herramientas has utilizado? ¿Cómo aseguras que tu documentación aporte valor para la comprensión, mantenimiento y depuración del código?
He utilizado la herramienta de documentación de Kotlin, que es KDoc.
La documentación aporta valor para la comprensión del programa porque especifica con detalle qué hace cada método y qué tipo de parámetros recibe. Además, aporta valor para el mantenimiento y depuración del código porque si, en un futuro quiero modificar y mejorar el código, se podrá entender más fácilmente.
- (6.f): Muestra ejemplos de tu código sobre cómo has implementado una clase con genéricos. ¿Qué beneficio has obtenido?
No he empleado genéricos en mi proyecto.