Giter VIP home page Giter VIP logo

object-oriented-design-and-programming's Introduction

Object-oriented Design and Programming

Projects of object-oriented programming course at Universidad de los Andes.

object-oriented-design-and-programming's People

Contributors

crola1702 avatar jocrisarry avatar zejiran avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

object-oriented-design-and-programming's Issues

T4&5PE: Entrega

  1. Comprima la carpeta de trabajo y entréguela como un archivo .zip con nombre taller4_j.arroyo_j.alegria.zip.
  2. Entregue el archivo comprimido a través de Brightspace en la actividad designada como “Taller 4”

T2P4: Reflexión

Resuelva las siguientes preguntas con base en lo que aprendió en el taller.

Herencia

  1. Con base en lo que aprendió durante el desarrollo del taller, ¿cuándo tiene sentido usar interfaces y cuándo clases abstractas?
  2. Java soporta cuatro tipos de visibilidad para los elementos de una clase: public, private, protected y default (en blanco). ¿Cuándo tiene sentido utilizar la visibilidad protected para un atributo en lugar de private?

Polimorfismo

  1. ¿En qué lugares del taller utilizó el polimorfismo y qué ventajas o desventajas le trajo?

Genericidad

  1. ¿Dónde utilizó la genericidad en el taller?
  2. ¿Qué ventajas y qué desventajas trajo el uso de la genericidad?

Java Collections

  1. ¿En qué casos tiene sentido usar cada una de las interfaces Set, List, Map y Collection?

Iteradores

  1. En una frase, ¿cuál es la principal ventaja de usar iteradores para recorrer estructuras de datos?

P1E2: Diseño e Implementación

Teniendo en cuenta el análisis realizado en la primera entrega del proyecto, para la segunda entrega debe realizar
el diseño detallado del sistema y su implementación.

Actividades

  1. Realice el diseño de su sistema de manejo del pénsum y construya un documento de diseño donde presente
    el diseño con las justificaciones para las decisiones clave que hayan tomado. El documento debe incluir,
    obligatoriamente, los siguientes elementos:
    a. Un diagrama de clases que incluya todas las clases del sistema, incluyendo sus las relaciones, atributos
    y métodos.
    b. Un diagrama de clases de alto nivel, que incluya todas las clases del sistema y sus relaciones.
    c. Diagramas de secuencia para las siguientes funcionalidades:

    1. Inscripción de materias
    2. Verificación de requisitos de un conjunto de materias a cursar en un semestre.
    3. Dar el conjunto promedio de materias que los estudiantes han visto en un semestre dado.
      Estos elementos NO son los únicos que debe incluir su documento. Con seguridad hay muchos más elementos
      que ustedes considerarán relevantes sobre su diseño.
  2. Implemente el sistema que diseñó. Tenga en cuenta que los detalles de la implementación deben ser
    coherentes tanto con el modelo de clases, como con los diagramas de secuencia. La interacción con los
    usuarios debe ser a través de una consola.

T3PE: Entrega

Entrega

  1. Comprima la carpeta de trabajo y entréguela como un archivo .zip con nombre taller3_j.arroyo_j.alegria.zip El archivo .zip debe incluir tanto el archivo fuente de diagrama de clases como una imagen con el diagrama que se pueda leer con facilidad.
  2. Entregue el archivo comprimido a través de Brightspace en la actividad designada como "Taller 3".

T1PE: Entrega

Comprima la carpeta de trabajo y entréguela como un archivo .zip con nombre
‘taller1_login1_login2_login3.zip’. El archivo .zip debe incluir el proyecto de Eclipse con todos sus
componentes – excepto la carpeta ‘data’. El archivo .zip también debe incluir un documento donde se
respondan las preguntas de la última parte del taller, ubicado dentro de la carpeta docs.

Por favor, NO INCLUYA LA CARPETA DATA: se le reducirán puntos en la calificación si incluye esta carpeta.

Entregue el archivo comprimido a través de Brightspace en la actividad designada como “Taller 1”. Sólo se
debe hacer una entrega por grupo.

T2P2: El framework de Contenedores

En esta parte del taller usted tendrá que diseñar e implementar una estructura que le permita representar contenedores de productos con las características y restricciones que presentaremos a continuación. Esa estructura podría incluir no sólo clases concretas sino también clases abstractas e interfaces.

La implementación que usted hará en esta parte debe cumplir con las siguientes restricciones: cualquier estructura de datos que usted utilice debe estar basada en el framework de colecciones (Java Collections) y cualquier recorrido de estas estructuras debe realizarse por medio de un iterador.

Descripción de los contenedores

En el contexto de nuestro taller, un contenedor es un gran recipiente metálico que permite transportar productos. Los productos dentro de un contenedor están agrupados en cargamentos. Cada cargamento tiene un propietario,
un identificador único y contiene una cierta cantidad de unidades de un mismo producto. Por ejemplo, un contenedor podría estar compuesto por un cargamento con 50.000 unidades del producto ‘Chocolate’ y un
cargamento compuesto por una unidad del producto ‘Nevera’, ambos propiedad de ‘Exito.com’.

Cada contenedor tiene una capacidad volumétrica (en metros cúbicos) y una capacidad por peso (en toneladas). La carga de un contenedor no puede exceder su capacidad, y el sistema debería verificar que se respeten estos límites cada vez que se intente agregar un cargamento a un contenedor.

Algunos contenedores son exclusivos para un tipo de producto. Es decir que, aunque pueden tener varios cargamentos, todos deben tener el mismo tipo de producto. Si se intenta agregar el cargamento equivocado a uno de estos contenedores, el sistema debería darse cuenta y evitarlo.

Cada contenedor debe ser capaz de generar su propio manifiesto. El manifiesto es un documento (cadena de caracteres) que describe cada uno de los cargamentos y tiene un resumen final de la carga. Este resumen debe incluir el peso y volumen total de la carga, así como las condiciones que se deben respetar (refrigeración requerida o no, temperatura máxima, si contiene productos tóxicos) teniendo en cuenta los cargamentos que lleve.

La restricción más importante con respecto a los cargamentos de un contenedor es que no pueden mezclarse productos tóxicos con productos perecederos. Adicionalmente, no pueden transportarse en el mismo contenedor productos que requieran temperaturas inferiores a 0 grados con productos no perecederos.

El orden en que se agreguen los cargamentos a un contenedor es importante y debe mantenerse. Es posible retirar un cargamento de un contenedor utilizando el identificador para señalarlo.

Finalmente, cualquier contenedor debe tener una implementación del método toString que permita conocer todas sus características.

Actividades

  1. Diseñe un conjunto de clases e interfaces para representar contenedores con las características recién descritas. Identifique con claridad los atributos y métodos de cada una.
  2. Implemente su modelo dentro del proyecto en Eclipse. Ubique todos los elementos dentro del paquete uniandes.dpoo.taller2.contenedores.modelo.
  3. Construya un diagrama de clases de UML que muestre todos los elementos de su diseño de la forma más clara posible. El diagrama de clases debe incluir atributos y métodos, y debe dejar claro cuáles elementos son clases
    concretas, cuáles abstractas y cuáles son interfaces.

Validación

Construya una nueva clase dentro del paquete uniandes.dpoo.taller2.contenedores.test y agregue un
método main a esa clase. Dentro de ese método main construya productos y contenedores y muestre en la consola sus características. Asegúrese de que su programa de prueba involucre todos los elementos de su framework de
contenedores y que sirva para demostrar las características interesantes de su diseño.

Posiblemente sea buena idea construir métodos auxiliares que se concentren en demostrar o probar características particulares de su diseño y que le permitan simplificar el método main. Para que pueda llamar a
esos métodos auxiliares desde el main, ellos también tienen que estar definidos como static.

Es normal que su proceso sea iterativo y tenga que hacer cambios al diseño de las clases e interfaces debido a detalles que haya encontrado durante la implementación. Incluso, es posible que tenga que hacer cambios al
diseño del framework de productos. Cuando eso pase, intente reflexionar sobre la razón para el cambio y la razón para que usted no hubiera diseñado las cosas así desde el inicio.

T2PE: Entrega

Upload here confirmation email screenshot and close issue.

  1. Comprima la carpeta de trabajo y entréguela como un archivo .zip con nombre ‘taller2_login1_login2_login3.zip’. El archivo .zip debe incluir el proyecto de Eclipse con todos sus componentes. El archivo .zip también debe incluir, dentro de la carpeta docs, un documento donde se respondan las preguntas de la última parte del taller y los diagramas de clases correspondientes a cada una de las partes del taller.
  2. Entregue el archivo comprimido a través de Brightspace en la actividad designada como “Taller 2”. Sólo se debe hacer una entrega por grupo.

T1P5.2: Reflexión y revisión

Resuelva las siguientes preguntas con base en lo que aprendió en el taller y deje sus respuestas en un archivo
dentro de la carpeta docs del proyecto.

Arreglos y listas

  1. ¿Cuál es la principal restricción de un arreglo con respecto a las listas?
  2. ¿Cómo se especifica el tipo de una lista de números enteros?
  3. Haga una lista de los métodos de los arreglos que le hayan sido de utilidad para este taller. ¿Algún comentario?
  4. Haga una lista de los métodos de las listas que le hayan sido de utilidad para este taller. ¿Algún comentario?

Instrucciones iterativas en Java

  1. ¿Qué diferencias hay entre las tres estructuras para construir instrucciones iterativas? (while, for y for-each)

P3: Requirements

Contexto del proyecto

Para este proyecto, su aplicación tendrá que ser capaz de soportar los requerimientos adicionales y restricciones
que se describirán a continuación. Debe seguir teniendo una interfaz gráfica para soportar todas las
funcionalidades. Además, su aplicación tiene que seguir soportando todos los requerimientos que estaba
soportando en las iteraciones anteriores del proyecto.

Cambios y restricciones adicionales

  • A partir de ahora, podrá haber cursos con cantidades de créditos que no sean números enteros. De hecho, hasta
    hace pocos semestres los cursos de deporte tenían una carga equivalente de 0.5 créditos.
  • A partir de ahora, su aplicación debe ser capaz de manejar programas que tengan cualquier duración (número de
    semestres). Por ejemplo, debería soportar programas que tengan una duración de 4 semestres (como las
    maestrías), y programas con una duración de 14 semestres.
  • A partir de ahora, su aplicación tiene que dar la posibilidad de extracreditación para los estudiantes que cumplan
    el requisito mínimo de su promedio ponderado, de acuerdo con lo establecido en el reglamento general de
    estudiantes de la Universidad. Los estudiantes que no cumplan ese requisito mínimo no podrán extracreditarse.
  • Recuerde que las monitorías y cualquier otra actividad con carga de créditos entra dentro del límite de créditos.
  • La aplicación debe poder registrar cursos que se hayan visto en el periodo inter-semestral o que se hayan visto
    como cursos de verano (los cursos de vacaciones o cursos del periodo inter-semestral tienen una duración de 7
    semanas y son equivalentes a los cursos que se verían durante un semestre regular; los cursos de verano pueden
    ser más cortos y usualmente son cursos que se dictan una sola vez).
  • La aplicación debe poder cargar la “cartelera” por semestre. La cartelera es un archivo, generado por el sistema
    Banner, con la información de todas las secciones disponibles en la Universidad para un semestre dado. Anexo a
    este enunciado encontrará una muestra del archivo para el semestre 2021-10. Cuando un estudiante quiera
    registrar un curso para un semestre, el sistema debe garantizar que sea uno de los cursos disponibles en la
    cartelera de ese semestre.

Cambios curriculares

  • El sistema debe ser capaz de apoyar a los estudiantes que se vean envueltos en un cambio curricular.
    En estos casos, el sistema debe permitir que se cargue un programa reformado y un archivo con las reglas de
    transición que especifican cosas como las siguientes:
  • A quienes hayan visto el curso ISIS-1206 antes del semestre 2020-20 se les homologará el curso ISIS-1226
    en el nuevo pénsum.
  • A quienes hayan visto los cursos ISIS-1101 y ISIS-1102 se les homologará el curso ISIS-1104 en el nuevo
    pénsum.
  • Las homologaciones son excepciones a las reglas. Las restricciones del pensum no se deben evaluar para
    las homologaciones. Esto quiere decir que no se deben revisar cosas como la restricción de no ver cursos
    de nivel 3 antes de terminar los cursos de nivel 1, y no se deben revisar los prerrequisitos de las materias
    homologadas.
  • Ustedes deben definir el formato del archivo de reglas de transición.
  • El estudiante podrá comparar su avance en el programa original con el avance en el programa reformado para
    tomar la decisión de si se acoge o no al nuevo currículo.
  • Las funcionalidades relacionadas con cambios curriculares sólo deben estar disponibles para los estudiantes (no
    para los coordinadores).

Logs de errores

  • Todos los problemas que se presenten durante la ejecución de la aplicación deben quedar registrados en un
    archivo de texto (archivo de log) en el que debe quedar suficiente información como para poder diagnosticar y
    eventualmente corregir los errores.

Entrega: Diseño, implementación y análisis del proceso

Esta entrega incluye tres elementos fundamentales:

  • 1. El documento de diseño para el proyecto 3, teniendo en cuenta todas las recomendaciones dadas en clase
    para estos documentos e incluyendo el diseño de los posibles errores.
  • 2. La implementación completa del sistema. Esta implementación debe incluir archivos con datos para poder
    probar todas las funcionalidades de la aplicación.
  • 3. Un documento donde cada grupo analice el proceso completo que siguió durante los tres proyectos (Proyecto
    1, Proyecto 2 y Proyecto 3). Con este documento se busca que ustedes reflexionen sobre el proceso de diseño
    en el contexto de su propia aplicación: ¿Qué cosas salieron bien y qué cosas salieron mal? ¿Qué decisiones
    resultaron acertadas y qué decisiones fueron problemáticas? ¿Qué tipo de problemas tuvieron durante el
    desarrollo de los proyectos y a qué se debieron? En este último punto, sería conveniente discutir aspectos
    como los problemas con las estimaciones del trabajo necesario debido al desconocimiento de la tecnología,
    los problemas realizando el análisis del dominio, o la dificultad de diseñar en un entorno incierto. La estructura
    de este documento es libre, pero será evaluada con respecto a su calidad general (está bien escrita, las ideas
    son claras, ilustra correctamente las situaciones con ejemplos puntuales), a la visión crítica que presenten
    (qué tan críticos son con respecto a su propio trabajo, identifican las partes problemáticas del proceso, pero
    también identifican los aspectos positivos) y a qué tan útil sería este documento para alguien que fuera a
    realizar los mismos 3 proyectos.

Entrega

  1. Comprima la carpeta de trabajo y entréguela como un archivo .zip con nombre
    ‘proyecto3_j.alegria.zip’. El archivo .zip debe incluir todos los elementos descritos (implementación
    y dos documentos).
  2. Entregue el archivo comprimido a través de Brightspace en la actividad designada como “Proyecto 3: Entrega 1”.

P2.2 Interface Design Document

Realice el diseño de su sistema de manejo del pénsum actualizado y construya un documento de diseño donde
presente el diseño con las justificaciones para las decisiones clave que hayan tomado. El documento debe
incluir por lo menos los siguientes elementos:

  • Al menos un diagrama de clases que incluya todas las clases del sistema, incluyendo sus relaciones, atributos y métodos. Los diagramas deben cubrir tanto la interfaz como la parte del diseño dedicado a la lógica de dominio.
  • Un diagrama de clases de alto nivel, que incluya todas las clases del sistema y sus relaciones.
  • Un diagrama de clases de alto nivel de la interfaz, que muestre qué elementos se incluyen y cómo se relacionan con los elementos del dominio.

Estos elementos NO son los únicos que debe incluir su documento. Con seguridad hay muchos más elementos
que ustedes considerarán relevantes sobre su diseño.

T1P1: Asociación Libro – Imagen (portada)

La multiplicidad de la asociación ‘portada’ entre las clases Libro e Imagen es 0..1 en el diagrama de clases, lo
cual indica que un libro podría tener, o no, una imagen de portada. En esta parte del taller usted va a completar
la clase Libro para establecer esta asociación, teniendo cuidado de manejar los casos en que un libro NO tenga
una imagen asociada y el atributo de la clase tenga el valor null.

Actividades y ayuda

Complete todos los lugares marcados como TODO Parte 1 dentro de la clase Libro.
Para saber si un atributo o una variable tiene el valor nulo, sólo necesita compararlo con null:

if (variable == null)
{
 // variable tiene el valor nulo
}

T1P2: Asociación Libreria – Categoria (categorias)

Entre las clases Librería y Categoría existe una asociación llamada categorías que vamos a representar como
un arreglo de objetos de la clase Categoría. En esta parte del taller, usted va a completar la clase Librería para
representar esta relación y para practicar algorítmica sobre arreglos.

Actividades y ayuda

Complete todos los lugares marcados como TODO Parte 2 dentro de la clase Libreria.
El tipo para un arreglo de objetos de tipo Categoria se expresa como: Categoria[ ]
Puede recorrer un arreglo usando las estructuras while, for o for-each. Los siguientes bloques muestran cómo
recorrer un arreglo llamado palabras usando cada una de estas estructuras.

int i = 0;
while (i < palabras.length)
{
System.out.println(palabras[i]);
i++;
}
for (int j = 0; j < palabras.length; j++)
{
System.out.println(palabras[j]);
}
for (String palabra : palabras)
{
System.out.println(palabra);
}

T4&5P1: Análisis del mundo del problema

Haga un análisis del mundo del problema, identificando todos los conceptos relevantes.
La entrega debe ser un diagrama de clases con el modelo del mundo del problema.

T3P0: Create new path

Objetivos específicos del taller

Durante el desarrollo de este taller se buscará el desarrollo de las siguientes habilidades:

  1. Identificar y abstraer entidades en un dominio particular, así como sus características y relaciones
  2. Construir modelos de domino
  3. Construir diagramas de clase UML

T2P3: Validación del diseño: extensiones

En esta parte del taller vamos a introducir algunos cambios a las características de los productos y los contenedores para obligarlo a usted a hacer cambios sobre el diseño y la implementación: si su diseño era inicialmente un buen diseño, posiblemente los cambios serán sencillos y naturales de realizar. Si el diseño no era tan bueno, posiblemente los cambios requerirán un poco más de esfuerzo.

Descripción de la extensión

Los siguientes son las nuevas características de los productos y los contenedores que su solución tiene que ser
capaz de soportar.

  1. Todos los productos ahora podrían ser inflamables. Es decir, cada producto debe ser capaz de responder si es o no inflamable.
  2. Dentro de los productos perecederos, tenemos que ser capaces de distinguir cuáles son medicinas, cuáles son alimentos y cuáles son de algún otro tipo.
  3. Los productos perecederos tienen una fecha de vencimiento.
  4. El manifiesto de un contenedor tiene que indicar la fecha de vencimiento de los productos perecederos.
  5. Ahora tenemos un nuevo tipo de contenedor: los contenedores LIFO (last-in-first-out), en los cuales sólo se puede sacar el último cargamento que se haya agregado.
  6. También tenemos un nuevo tipo de contenedor llamado contenedor TOP-SECRET. En estos contenedores el manifiesto debe mostrar toda la información normal, pero no puede mostrar ni el dueño del cargamento ni
    el producto.

Actividades

  1. Cree un nuevo paquete en su proyecto de Eclipse llamado uniandes.dpoo.taller2.extension.modelo y copie en este paquete todos los elementos que había creado para las dos primeras partes del taller.
  2. Diseñe los cambios a su estructura de clases e interfaces para acomodar las extensiones.
  3. Implemente los cambios.
  4. Construya una nueva clase dentro del paquete uniandes.dpoo.taller2.extension.test y agregue un método main a esa clase. Dentro de ese método main construya productos y contenedores para mostrar que las extensiones están correctamente soportadas por su diseño y ya son parte de la implementación.
  5. Construya el diagrama de clases UML que muestre la estructura actualizada. Haga evidente cuáles son las cosas que cambiaron o se agregaron para soportar las extensiones. Puede utilizar colores o anotaciones para indicar los elementos nuevos o modificados.

T4&5P4: Reflexión

Escriba un breve documento de reflexión sobre el desarrollo del taller. El documento tiene que incluir dos
elementos principales:
o Reflexión sobre el diseño, en el cual se discutan las ventajas, desventajas y tradeoffs del diseño propuesto,
haciendo explícito el tipo de cambios que el diseño propuesto soportaría sin mayor problema.
o Reflexión sobre el proceso de diseño, en el cual se analice el proceso que siguieron para construir el diseño
y discutan particularmente los elementos que fueron problemáticos. Piense que esta parte debería
servirles a ustedes para que la siguiente experiencia de diseño sea mucho más sencilla.

T4&5P2: Diseño de motor

Haga el diseño para el motor del juego, el cual únicamente tiene que implementar una funcionalidad: dado el
estado de la ciudad en un día dado, y las decisiones que haya tomado el alcalde para ejecutar ese día, el motor
debe calcular cuál será el estado de la ciudad al final del día. Es decir, esta funcionalidad servirá para avanzar un
día en la simulación.

La entrega de esta parte del taller debe ser un documento donde se vean los diferentes elementos de la solución,
organizadas de forma que se pueda ver que se siguió la metodología presentada en clase. El documento debe
incluir todos los elementos necesarios para entender la solución planteada, incluyendo diagramas (estáticos y
dinámicos) y documentación adicional con explicaciones.

T1P5.1: Reflexión y revisión

Resuelva las siguientes preguntas con base en lo que aprendió en el taller y deje sus respuestas en un archivo
dentro de la carpeta docs del proyecto.

Tipos básicos de Java

  1. ¿Cuáles tipos básicos de Java se utilizaron en el taller y qué se puede representar con cada uno

null

  1. ¿A qué elemento de Python se parece el valor null de Java?
  2. ¿Qué diferencias hay entre el valor null de Java y el valor que respondió para la pregunta anterior?

Arreglos y listas

  1. ¿Cómo puede averiguar el tamaño de un arreglo?
  2. ¿Cómo puede averiguar el tamaño de una lista?

T1P4: Asociación Librería – Libro (catalogo)

Entre las clases Librería y Libro existe una asociación llamada catalogo que vamos a representar como una
lista objetos de la clase Libro. En esta parte del taller, usted va a completar la clase Librería para representar
esta relación y para seguir practicando algorítmica sobre listas.

Actividades

Complete todos los lugares marcados como TODO Parte 4 dentro de la clase Libreria.

P2E1

Requisitos sobre el pensum

  • Un curso tiene un nombre, un código, una cantidad de créditos, un tipo y una duración en semanas (8 o 16). Por ejemplo, el curso "Introducción a Ingeniería de Sistemas" tiene código ISIS-1001, 3 créditos y una duración de 16
    semanas.
  • Hay cursos con nota numérica (1.5 a 5.0) y otros con nota cualitativa (A o R). Adicionalmente cualquier curso
    puede tener una nota provisional (P o PE) o definitiva I.
  • Un curso que aparezca en el pensum tiene un semestre sugerido y un nivel: el nivel depende del primer dígito del
    código del curso (un curso son código 1226 es de nivel 1 mientras que el curso con código 4105 es de nivel 4).
  • Hay cursos con prerrequisitos (física 2 tiene física 1 como prerrequisito).
  • Los prerrequisitos entre cursos no tienen nada que ver con un pénsum particular: es decir que física 1 es
    prerrequisito de física 2 independientemente del programa en el que esté inscrito un estudiante.
  • Hay cursos con correquisitos (física experimental 1 tiene física 1 como correquisito, pero no al contrario).
  • Hay cursos con alternativas (ejemplo APO1 - ISIS-1205 - e IP - ISIS-1221- son válidas para satisfacer el mismo
    requisito del primer curso de programación).
  • Hay curso con prerrequisitos que son alterativas (para ver Sistemas Transaccionales necesitan haber visto antes
    Estructuras de Datos o Diseño y Programación Orientada a Objetos).
  • Hay cursos obligatorios que se tienen que ver con los cursos que aparecen en el pensum (ISIS-1001, Constitución
    y Democracia, etc.)
  • Hay cursos que tienen como prerrequisitos restricciones que no son necesariamente cursos (por ejemplo, haber
    aprobado el requisito de lectura de inglés).
  • Hay electivas reguladas, es decir electivas en las que sólo hay unas pocas opciones disponibles (por ejemplo las
    electivas en ingeniería, para las cuales hay una lista de cursos permitidos).
  • El pénsum incluye créditos de electivas profesionales que pueden cubrirse con cursos que son de nivel 3 o 4, pero
    no necesariamente tienen que ser 3 cursos: en el caso de Ingeniería de Sistemas, deben ser 9 créditos. Las electivas
    profesionales no son cualquier curso: también hay una lista de cursos permitidos.
  • El pénsum incluye créditos CBU que tienen que cubrirse con cursos tipo CBU: existe una lista de cursos tipo CBU
    que pueden utilizarse para cubrir los créditos requeridos.
    Los cursos tipo CBU tiene un tipo (Colombia, Pensamiento Científico, Cultura Artes y Humanidades) y hay
    requisitos con respecto a la cantidad de cursos de cada tipo que tienen que verse.
  • El pénsum incluye créditos CLE (Curso de Libre Elección) que pueden cubrirse con cualquier tipo de curso
    (incluyendo CBU, deportes, cursos de maestría, etc.). Al igual que con las electivas profesionales, no importa la
    cantidad de cursos sino la cantidad de créditos.
  • Hay un requisito de lectura de inglés que se cubre con un examen o con un curso.
  • Hay un requisito de segunda lengua que se cubre con un certificado de un examen o con un curso (el último curso
    de ingles) .
  • Hay un requisito mínimo de cursos tipo E que se deben ver: no todas las secciones del mismo curso siempre son
    tipo E.
  • Hay un requisito mínimo de cursos tipo Épsilon que se deben ver.
  • Existe la opción de hacer práctica (existe también el curso de práctica que se registra para los estudiantes que
    toman esta opción).

Registro de cursos de un estudiante

  • Cuando se registra la información de un curso que tomó un estudiante, se debe indicar el curso que tomó, en qué
    semestre lo tomó y cuál fue el resultado que obtuvo. Si la sección tenía características especiales (tipo E) también
    se debe registrar esto.
  • Para cada curso registrado se le debe asignar un elemento del pensum: en muchos casos es automático (por
    ejemplo si se trata de un curso obligatorio), pero hay cursos en los que esto no se puede deducir (el mismo curso
    podría ser una electiva en ingeniería o un CLE, por ejemplo).
  • Un estudiante puede registrar cursos que haya tomado pero que no le vayan a servir para cumplir ningún requisito
    del pénsum: esos cursos se tienen en cuenta para el cálculo del promedio.
  • Un estudiante puede tener cursos inscritos para los que no se tenga resultado aún (los cursos que está viendo
    este semestre).
  • La nota en un curso debe ser un número entre 1.5 y 5.0 para cursos con nota numérica, debe ser Aprobado o
    Reprobado para cursos con esa modalidad. Para cualquier curso la nota también puede ser Pendiente o
    Incompleto.
  • Un estudiante puede retirar un curso.
  • Un estudiante puede tener cursos homologados con nota A/R (por ejemplo cursos que haya tomado en otra
    universidad)

Requerimientos funcionales

  • Un estudiante o un coordinador pueden cargar un archivo con la especificación del pénsum. Esto incluye también
    la información de los cursos ofrecidos en uno o en varios semestres. Opcionalmente, la carga del pénsum y la
    carga de los cursos ofrecidos podrían ser operaciones separadas.
  • Un estudiante puede registrar la información de un curso que haya tomado, esté tomando, o que esté planeando
    tomar en un semestre (o ciclo) futuro. El sistema debe avisarle al estudiante si hay alguna inconsistencia (violación
    de una restricción) en los cursos que ha tomado o que planea tomar.
  • Un estudiante puede registrar la información de un curso que haya retirado.
  • Un estudiante puede actualizar el resultado final de un curso que tuviera inscrito.
  • Un estudiante puede tener varios escenarios futuros en los cuales almacene hipótesis de cursos tomados en
    semestres futuros (planeación de cursos).
  • Un estudiante puede ver cuál es su avance actual en el pénsum: qué requisitos ya cumplió y qué le hace falta para
    poder ser candidato a grado.
  • Un estudiante puede ver cuál es su promedio actual.
  • Un estudiante puede generar su reporte de notas para un semestre particular o para toda la carrera.
  • Un coordinador puede cargar la información de las materias vistas por un estudiante a partir de un archivo de
    texto. Para los cursos que sean dudosos, el coordinador le asignará un elemento del pénsum.
  • Un coordinador puede seleccionar entre varios estudiantes para los que haya cargado información y revisar el
    avance en el pénsum, generar reportes de notas, o construir escenarios futuros.

T2P1: El framework de Productos

En esta parte del taller usted tendrá que diseñar e implementar una estructura que le permita representar productos con las características y restricciones que presentaremos a continuación. Esa estructura podría incluir no sólo clases concretas sino también clases abstractas e interfaces.

Descripción de los productos

Queremos construir una aplicación que permitirá controlar el transporte de un conjunto variado de productos. Para cada producto conoceremos su nombre, el peso en gramos por cada unidad, y el volumen en centímetros cúbicos por unidad. Algunos productos serán perecederos, mientras que otros serán no-perecederos. Entre los no-perecederos, algunos estarán clasificados como tóxicos y tendrán un determinado nivel de toxicidad (un número entre 1 y 5). Todos los productos no perecederos tienen una temperatura máxima de almacenamiento de 50 grados centígrados.

Entre los productos perecederos hay algunos que requieren refrigeración y otros que no. En el segundo grupo, hay algunos que pueden resistir calor (por ejemplo, el arroz) mientras que otros se arruinarían si no se tratan con
un mínimo de cuidado (por ejemplo, chocolates o cerveza). Para cada producto refrigerado se debe saber cuál es la temperatura máxima a la cual se puede almacenar: para los quesos sería 4 grados mientras que para los helados la temperatura sería 0 grados.

Finalmente, cualquier producto debe poderse comparar con otro producto usando el método equals y debe tener una implementación del método toString que permita conocer todas sus características.

Actividades

  1. Diseñe un conjunto de clases e interfaces para representar productos con las características recién descritas. Identifique con claridad los atributos y métodos de cada una.
  2. Implemente su modelo dentro del proyecto en Eclipse. Ubique todos los elementos dentro del paquete uniandes.dpoo.taller2.productos.modelo.
  3. Construya un diagrama de clases de UML que muestre todos los elementos de su diseño de la forma más clara
    posible. El diagrama de clases debe incluir atributos y métodos, y debe dejar claro cuáles elementos son clases concretas, cuáles abstractas y cuáles son interfaces.

Validación

Construya una nueva clase dentro del paquete uniandes.dpoo.taller2.productos.test y agregue un método
main a esa clase. Dentro de ese método main construya productos y muestre en la consola sus características. Asegúrese de que su programa de prueba involucre todos los elementos de su framework de productos y que
sirva para demostrar las características interesantes de su diseño.

Es normal que su proceso sea iterativo y tenga que hacer cambios al diseño de las clases e interfaces debido a detalles que haya encontrado durante la implementación. Cuando eso pase, intente reflexionar sobre la razón
para el cambio y la razón para que usted no hubiera diseñado las cosas así desde el inicio.

T3P1: Actividades

Descripción del caso: Hotel de los Alpes

El Hotel de los Alpes (HLA) es un nuevo hotel ubicado en la ciudad de Bogotá que ofrece servicios tanto a
particulares como a empresas. Como base de su oferta para empresas, el hotel cuenta con un centro de
convenciones que incluye salones múltiples (pueden unirse o configurarse de diferentes tamaños de acuerdo con
las necesidades del evento), un foyer, salones pequeños (30 personas) y salas de reuniones (10 personas). Esta
oferta se complementa con un servicio de cathering para café y almuerzos. Evidentemente, cuando alguien
organiza un evento en HLA, se espera que una parte importante de los asistentes se aloje también en el hotel,
razón por la cual la empresa ofrece unas atractivas promociones. HLA también tiene acuerdos con firmas
especializadas en el desarrollo de eventos, las cuales se encargan de ubicar a los posibles compradores (empresas,
asociaciones, etc.) y de venderles los servicios de HLA. Estas firmas trabajan por comisión y tienen acceso al PMS
a través de una interfaz que les permite consultar la disponibilidad de salones y habitaciones.

Para clientes particulares, HLA también tiene una amplia oferta con habitaciones de múltiples tamaños,
incluyendo habitaciones familiares. Además, ofrece piscina, gimnasio, servicio a la habitación y desayuno tipo
buffet. Tal vez la inversión más importante que hizo HLA fue construir un SPA de última generación: su uso está
incluido sólo en los paquetes VIP, pero es la principal herramienta de mercadeo del hotel (cualquier cliente puede
acceder al servicio pagando un recargo). Los cálculos de HLA son que la capacidad del SPA no estará copada por
los huéspedes del hotel, motivo por el cual también están ofreciendo sus servicios a terceros que no estén alojados
ahí. Los huéspedes particulares del hotel tienen varios canales para reservar una habitación. Pueden hacer una
reserva telefónica o a través del sitio web, hasta con 3 meses de anticipación. También hay personas que llegan
al hotel buscando una habitación para esa noche: en ese caso las tarifas son mayores y se hace la reserva y el pago
directamente en la recepción del hotel. Finalmente, es posible reservar una habitación a través de booking.com y
expedia.com, aunque esta es la opción menos interesante para HLA.

El último aspecto importante para considerar de HLA tiene que ver con la administración y operación del hotel,
que es bastante compleja debido a la variedad de servicios. Como en cualquier otro hotel, el corazón de HLA es el
PMS o Platform Management System: este es el sistema en el cual se administran los servicios, la ocupación de
las habitaciones, el consumo de los huéspedes y el mantenimiento de estas. Las amas de llaves que se encargan
de tareas como tender las sábanas y cambiar las toallas, cuentan con dispositivos NFC que usan para registrar las
actividades que hayan hecho en cada habitación, llevando esa información al PMS. En el PMS también se registran
los consumos del minibar, servicio a la habitación, servicio de restaurante y servicios de telefonía.

Actividades

  1. Lea cuidadosamente la descripción del caso.
  2. Construya un modelo de dominio (diagrama de clases) a partir de la información del caso:
    a. Identifique las entidades que aparecen dentro del caso.
    b. Identifique las características (atributos) de esas entidades.
    c. Establezca las relaciones entre las entidades, incluyendo asociaciones y relaciones de herencia.
  3. Organice el diagrama para que sea fácil de leer

T1P3: Asociación Categoria – Libro (libros)

Entre las clases Categoria y Libro existe una asociación llamada libros que vamos a implementar usando una
lista de libros (un ArrayList de Libro). En esta parte del taller, usted va a completar la clase Categoria para
representar esta relación, practicará la algorítmica sobre listas y tendrá que consultar y aprender a usar algunos
de los métodos que ofrece la clase ArrayList.

Actividades y ayuda

Complete todos los lugares marcados como TODO Parte 3 dentro de la clase Categoria.
El tipo para una lista de objetos de tipo Libro se expresa como: ArrayList
Puede recorrer una lista usando las estructuras while, for o for-each. Los siguientes bloques muestran cómo
recorrer una lista llamada palabras usando cada una de estas estructuras.

int i = 0;
while (i < palabras.size())
{
System.out.println(palabras.get(i));
i++;
}
for (int j = 0; j < palabras.size(); j++)
{
System.out.println(palabras.get(j));
}
for (String palabra : palabras)
{
System.out.println(palabra);
}

P2.1 Interface implementation

Implemente el sistema que diseñó. Tenga en cuenta que los detalles de la implementación deben ser
coherentes tanto con el modelo de clases, como con los diagramas de secuencia que incluya dentro del
documento de diseño.

Comprima la carpeta de trabajo y entréguela como un archivo .zip con nombre
‘proyecto2_j.alegria.zip’.

T4&5P3: Diseño detallado

Haga un diseño detallado de la solución en el cual esté completamente especificada la solución que se va a
construir.

La entrega de esta parte debe ser uno o varios diagramas de clases al nivel de diseño detallado (atributos
completos, métodos con la especificación de parámetros y resultados, detalle sobre las estructuras de datos para
implementar las relaciones).

T2P4.2: Reflexión

Resuelva las siguientes preguntas con base en lo que aprendió en el taller.

Genericidad

  1. ¿Dónde utilizó la genericidad en el taller?
  2. ¿Qué ventajas y qué desventajas trajo el uso de la genericidad?

Java Collections

  1. ¿En qué casos tiene sentido usar cada una de las interfaces Set, List, Map y Collection?

Iteradores

  1. En una frase, ¿cuál es la principal ventaja de usar iteradores para recorrer estructuras de datos?

P1E1: Análisis del proyecto

La primera etapa del proyecto consiste en realizar el análisis del sistema para la administración del pénsum.

Actividades

  1. Construya un modelo de dominio (diagrama de clases) a partir de la información del caso:
    a. Identifique las entidades que aparecen dentro del caso.
    b. Identifique las características (atributos) de esas entidades.
    c. Establezca las relaciones entre las entidades, incluyendo asociaciones y relaciones de herencia.

  2. Construya un documento de análisis para su proyecto. El documento debe incluir:
    a. El modelo de dominio que construyó en el paso anterior.
    b. Una descripción de los requerimientos funcionales que su aplicación soportará. No es necesario que
    haga una descripción formal ni detallada de cada uno de los requerimientos: con una frase sería
    suficiente por cada uno (desde el punto de vista de la evaluación de la entrega) pero le recomendamos
    que ponga suficiente detalle como para que UD sepa qué es lo que va a tener que construir en el resto
    del proyecto.
    c. Una descripción con las restricciones del proyecto.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.