Ejercicio 1 (35 puntos)



Documentos relacionados
Programación Avanzada SOLUCIÓN EXAMEN FEBRERO 2011

Programación 4 EXAMEN DICIEMBRE SOLUCIÓN

Tecnólogo en Informática Programación Avanzada Curso Examen Febrero 2012

Programación 4 CASO DE ESTUDIO :: ANÁLISIS

FIUBA Algoritmos y programación 3

Clase adicional 2. Estructuras básicas de control. Temas

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Programación 4 EXAMEN JULIO 2008 SOLUCION

Tema 4: Diagramas de Casos de Uso

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Modelos de Software. Ingeniería en Sistemas de Información 2015

Soluciones Ejercicios Tema 3

PLANEACIÓN ESTRATÉGICA

Solución al Examen de Fundamentos de Computadores y Lenguajes

Clases y Objetos en C++

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Introducción a C# y la plataforma.net

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Oracle Express y Toad for Oracle

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

UTN FRBA Algoritmos y Estructura de Datos Examen Final 13/02/2015. Apellido y nombre: Legajo: Cursó con Prof:

Java. Introducción a la Programación Orientada a Objetos

Implementación de las Clases Pila, Cola, Lista y Arbol

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

Tema 7: Polimorfismo. Índice

Introducción a C# y la plataforma.net. Pablo Zaidenvoren 2013

Práctica 11e. Práctica 11e. José M. Ordax

GUIA DE PROCEDIMIENTOS Y FUNCIONES ALMACENADOS EN MYSQL

Ejercicios del tema 7: Clases y objetos

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

/** * Raíz del árbol de contactos presentes en el directorio */ private. /** * Número de contactos en el directorio */ private int numcontactos;

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

Versión 2.0 (Febrero 2014)

Introducción a C# y la plataforma.net. Pablo Zaidenvoren 2010

Análisis Especificación del Comportamiento del Sistema

Sebastián García Galán

Solucion al Examen de Fundamentos de Computadores y Lenguajes

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Identidad, igualdad y equivalencia

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Implementación de las Clases Pila, Cola, Lista y Arbol

Administración Local Soluciones

package uniandes.cupi2.traductor.servidor; import java.io.serializable; import java.util.arraylist;

Clases abstractas e interfaces en Java

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

1. INICIO. Figura 1: Inicio a la aplicación.

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

La sintaxis básica para definir una clase es la que a continuación se muestra:

Instituto Tecnológico de Celaya

Modulo 11. Clases y Objetos en Java

MÓDULO DE CONTABILIDAD. Versión: Última modificación: Febrero 2013

!" # $ Construir mapa conceptual sobre programación. Identifique relaciones entre los siguientes conceptos, conectándolos con flechas nombradas

Definición. Mónica E. García García Feb 07

Introducción a las Bases de Datos y al Modelo Relacional

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Examen escrito de Programación 1

Programación Orientada a Objetos en JAVA

LA CLASE ARRAYLIST DEL API DE JAVA. MÉTODOS ADD, SIZE, ETC. CONCEPTO DE CLASE GENÉRICA O PARAMETRIZADA (CU00665B)

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1).

Unidad II. Metodología para resolver problemas aplicando la POO. Parte 1

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

3. Indicar la salida por pantalla del último for de la función main dado el siguiente código c++: (2 puntos-20 minutos)

SAP Business Workflow

ELO329: Diseño y Programación Orientados a Objetos 29 de Junio 2016

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Construcciones del Lenguaje Java

Ejercicios Prácticos y Teóricos Diagramas de interacción y de UML a código Java

Capítulos 2 y 5: Modelación con UML y Modelo Objeto

N13: DISEÑO BÁSICO DE ESTRUCTURAS DE DATOS

APELLIDOS, Nombre: // Resto de s e r v i c i o s p ú b l i c o s e n t r e l o s que s e e n c u e n t r a n i n s e r t a r y // b o r r a r //...

Examen de Prácticas de Programación Ingeniería Informática

RG 3726 SISTEMA INTEGRAL DE RETENCIONES ELECTRÓNICAS

Implementación Patrones de Diseño

EJEMPLO DE CÓDIGO JAVA BÁSICO. CREAR CLASES CON CAMPOS, CONSTRUCTOR Y MÉTODOS. LA PALABRA CLAVE THIS (CU00652B)

Implementación Generación de Código

Programación 1 Tema 2. Lenguaje de programación y ejecución de un programa

Primer Parcial Septiembre 5 de 2009

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Programación Avanzada. Análisis Especificación del Comportamiento del Sistema

12. Tipos de atributos

EJERCICIOS DE MODELADO DE INTERACCIÓN

Segundo Parcial Julio 2016

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos)

Práctica 1: Una primera aproximación a la programación de sistemas concurrentes y distribuidos en C++

Examen No. 3 - Final

Introducción a la computación. Carlos Lopez Pombo

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

PROCESO: Documentos por cobrar/pagar (Parametrización)

Examen de Introducción al Software (Ingeniería Informática)

PROGRAMACION ORIENTADA A OBJETOS Ingenieria Informática Final Febrero 2006/07

Ejercicio 1 (3 puntos).-

Características Avanzadas en C# Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Curso Informática Lección 4. Instrucciones de control

Transcripción:

Ejercicio 1 (35 puntos) a) Defina brevemente qué es un contrato de software e indique 3 tipos de condiciones que se expresan en las postcondiciones de un contrato. Un contrato de software especifica el comportamiento o efecto de una operación, determinando derechos y obligaciones para el proveedor y consumidor de la operación. Tipos de condiciones que se expresan en un contrato: - creación de objetos - eliminación de objetos - conexión de objetos - desconexión de objetos - modificación del valor de los atributos de objetos b) Se desea implementar un software de gestión de documentos, para el cual se ha relevado lo siguiente: El gestor de documentos está organizado lógicamente en espacios. Cada espacio se identifica por un nombre, contiene usuarios que podrán acceder al espacio, y podrá tener documentos que agreguen los usuarios con acceso al espacio. El usuario se identifica mediante un nick. Cada documento tiene número identificador, nombre, espacio al que pertenece y tipo de documento (permite solamente las extensiones ODT, ODS y ODP). El documento se compone de un conjunto de versiones. De la versión interesa el número de versión, la fecha, la descripción de la versión y el usuario que la agregó. Cabe señalar que cuando un usuario deja de tener acceso a un espacio, se desea mantener las versiones de los documentos que agregó a dicho espacio del gestor. Además, no se podrá permitir que un espacio tenga repetido un documento (con el mismo número). Se pide: i. Modelar la realidad planteada mediante un Diagrama de Modelo de Dominio UML. Espacio -nombre contiene > 1 * Documento -id -nombre -tipo : Tipo «tipo de datos» Fecha * accede ^ 1 +getdia() +getmes() +getaño() -nick * Usuario agrega > 1 * 1..* Version -numero -fecha : Fecha -descripcion {ordered «enumeración» Tipo +ODT +ODS +ODP ii. Expresar todas las restricciones del modelo en lenguaje natural. R1. No existen dos espacios con el mismo nombre. R2. No existen dos usuarios con el mismo nick. R3. No existen dos documentos con el mismo id. R4. En el contexto de un documento, no existen dos versiones con el mismo número. R5. Para un documento, los números de sus versiones son correlativos. R6. La fecha de una versión de un documento es mayor o igual a las fechas de las versiones con numeración menor de dicho documento.

Ejercicio 2 (35 puntos) a) Enumere y describa brevemente los criterios GRASP vistos en el curso. b) Se está modelando parte de un sistema de gestión de recursos para una empresa que brinda servicios de almacenamiento y distribución. La empresa cuenta con una flota de montacargas que pueden ser de tipo automático (no requieren operario) o común. Todos los montacargas tienen un costo diario de operación; los comunes además tienen un costo diario de operación por concepto del personal requerido para operarlos. Los montacargas se asignan a secciones de la empresa, interesando registrar la fecha de cada asignación de cada montacargas a cada sección. A partir de esta realidad se ha realizado el siguiente diagrama de modelo de dominio con las restricciones en lenguaje natural. Además, se ha realizado el Diagrama de Secuencia del Sistema para el caso de uso de asignación de montacargas a secciones de la empresa. Las operaciones del sistema del DSS anterior tienen las siguientes pre y post condiciones:

Operación ingresarsecfecha(ids: Integer, f: Fecha) Pre y Post Condiciones pre: Existe una instancia de Seccion cuyo atributo idsec coincide con ids. post: Se recuerdan en la memoria del sistema, la instancia de Seccion cuyo atributo idsec coincide con ids y el valor de f. Operación asignarmont(idm: Integer) Pre y Post Condiciones pre: Existe una instancia de Montacargas cuyo atributo idmont coincide con idm. pre: No existe en la memoria del sistema una instancia de Montacargas cuyo atributo idmont coincida con idm. pre: El Montacargas identificado por idm no está asignado la Seccion recordada en la fecha recordada. post: Se recuerda en la memoria del sistema, la instancia de Montacargas cuyo atributo idmont coincide con idm. Operación confirmar() : Real Pre y Post Condiciones pre: Existen en la memoria del sistema una instancia de Seccion denominada s, una fecha denominada f y una colección de instancias de Montacargas denominada ms. post: Para cada instancia m de Montacargas en ms: Sea montsec la instancia del tipo asociativo Mont-Sec que asocia a m con s (si no existe se crea); se crea una nueva instancia de Asignacion asociada a montsec, cuyo atributo fecha coincide con f. post: El resultado es la suma de los costos diarios de operación de todos los montacargas pertenecientes a la colección ms. El costo de un montacargas automático es el atributo costo mientras que el de uno común es la suma de los atributos costo y costoper. Se pide: i. Realizar los Diagramas de Comunicación de las tres operaciones descritas. ingresarsecfecha(ids,f) 1: s:=find(ids) :Sistema :Seccion Se recuerdan s y f asignarmont(idm) 1: m:=find(idm) :Sistema :Montacargas 2: add(m) ms:montacargas

ms es la colección de Montacargas recordada ms:montacargas s y f son la Sección y la Fecha recordadas, respectivamente 1*[foreach]: m:=next() 2*.1*[foreach and not encontre]: montsec:=next() :Mont-Sec confirmar() :Sistema 2*: asignar(s,f) m:montacargas 2*.2*: encontre:=perteneceaseccion(s) montsec:mont-sec 2*.3[not encontre]: montsec:=create(s) 2*.4[not encontre]: add(montsec) Mantiene referencia a s 2*5: nuevaasig(f) 3*: c:=calcularcosto() :Mont-Sec 2*.5.1: a:=create(f) :Asignacion :Mont-Sec Se acumula c en el resultado a retornar montsec:mont-sec 2*.5.2: add(a) m:montacargas :Asignacion calcularcosto() :Automatico Retorna costo calcularcosto() :Comun Retorna costo + costoper

b) Montacargas -idmont -costo +asignar(in s : Seccion, in f : Fecha) +calcularcosto() : double 1 * Mont-Sec +perteneceaseccion(in s : Seccion) : bool +nuevaasig(in f : Fecha) * 1 Seccion -idsec 1 Automatico +calcularcosto() : double -costoper Comun +calcularcosto() : double * Asignacion -fecha «datatype» Fecha +getdia() : int +getmes() : int +getanio() : int

Ejercicio 3 (30 puntos) Se le pidió que implemente un sistema para la gestión de las tarjetas de puntos de un supermercado. El sistema deberá registrar las cuentas de puntos de los clientes, los movimientos de puntos de cada cuenta (ganancia y uso de los puntos) y las organizaciones con la que el supermercado tiene convenios y promociones especiales. Se le ha entregado el siguiente diseño parcial que usted deberá respetar: Se le ha entregado también la siguiente especificación: Operación Descripción Sistema::comprarPuntos(idCuenta : Integer, monto : Integer):Integer Crea una nueva instancia de Movimiento y la asocia a la uenta cuyo atributo id = idcuenta. El valor del atributo puntos se calcula como el monto dividido el costo por punto de la cuenta. Si es una cuenta Común, el costo por punto de la cuenta es el valor del atributo costoporpunto. Si es una cuenta Convenio, es el valor del atributo con el mismo nombre en la instancia de Organización asociada. El valor retornado es el valor del atributo puntos de la nueva instancia. Si el monto es menor que el costo por punto, no se crea el movimiento y se lanza una excepción. Se pide: i) Implementar los.h de las clases Sistema, Cuenta, Común y Convenio. class Sistema { static Sistema* getinstancia(); ~Sistema(); void borrarcuenta(int id); int comprarpuntos(int idcuenta, int monto);

; Sistema(); static Sistema* instancia; IDictionary* cuentas; IDictionary* organizaciones; class Organizacion: public ICollectible { Organizacion(int id, int costoporpunto); ~Organizacion(); void quitarconvenio(convenio* convenio); int getcostoporpunto(); ; int id; int costoporpunto; IDictionary* convenios; class Cuenta: public ICollectible { Cuenta(int id); ~Cuenta(); int comprarpuntos(int monto); virtual int getcostoporpunto() = 0; ; int id; ICollection* movimientos; class Convenio: public Cuenta { Convenio(int id, Organizacion* org); ~Convenio(); int getcostoporpunto(); ; Organizacion* organizacion; class Comun: public Cuenta { Comun(int id, int costo); int getcostoporpunto(); ; int costoporpunto;

ii) Implementar en C++ la operación especificada anteriormente y todas aquellas operaciones necesarias para su implementación que pertenezcan a las clases Sistema, Cuenta, Común y Convenio. Operación comprarpuntos. int Sistema::comprarPuntos(int idcuenta, int monto) { KeyInteger* key = new KeyInteger(idCuenta); Cuenta* cuenta = (Cuenta*) cuentas->find(key); delete key; if (cuenta!= NULL) { return cuenta->comprarpuntos(monto); else { throw invalid_argument("no existe la cuenta"); int Cuenta::comprarPuntos(int monto) { int costoporpunto = getcostoporpunto(); if (monto < costoporpunto) throw out_of_range("monto insuficiente"); int puntos = monto / costoporpunto; Movimiento* mov = new Movimiento(puntos); movimientos->add(mov); return puntos; int Convenio::getCostoPorPunto() { return organizacion->getcostoporpunto(); int Comun::getCostoPorPunto() { return costoporpunto; Movimiento::Movimiento(int puntos) : puntos(puntos) {