Trabajo Práctico N 4: Diseño por Contratos



Documentos relacionados
RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016!

Modulo 1 El lenguaje Java

Estructura de datos tipo vector.

Introducción a la programación orientada a objetos

TEMA 3. CLASES. EJERCICIOS

INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL. Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación

15. Parámetros o argumentos

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Programación Orientada a Objetos

Clases y Objetos. Informática II Ingeniería Electrónica

Prof. Dr. Paul Bustamante

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Tema 4: De esa comparación se pueden determinar las causas de posibles diferencias y efectuar las correcciones cuando correspondan.

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso v1.0 (05.03.

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Relaciones entre clases: Diagramas de clases UML

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Ejercicios del tema 7: Clases y objetos

Text Mining: Distancia de Levenshtein

Caso práctico Alquiler de películas en un vídeo-club

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

11. Algunas clases estándar de Java (II)

Programación Orientada a Objetos en JAVA

Relaciones entre Clases Programación Avanzada Prim FCC-Buap Profesor: M. C. Miguel Rodríguez Hernandez

Secuencia para 4 grado- Sistemas de referencias ACTIVIDAD 1: BATALLA NAVAL

Pruebas de unidad con JUnit

Arquitectura y Diseño de Sistemas Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2015

Centro de Capacitación en Informática

1. Qué tipos de relación hay entre las siguientes clases?

TEMA 8: DIAGRAMA DE CLASE EN UML

EJERCICIOS DE PROGRAMACIÓN RELACIÓN VII (EJERCICIOS DE REPASO)

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

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

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Programación orientada a objetos

Aquí se declaran los. Aquí se declaran los métodos de la clase. *Atributos de la clase

El lenguaje de programación Java

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

Arrays y Cadenas en C

Análisis de Sistemas. M.Sc. Lic. Aidee Vargas C. C. octubre 2007

Multitarea en Java. Rafa Caballero - UCM

Ejercicios de Programación Orientada a Objetos

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

MICROSOFT EXCEL Introducción: Qué es y para qué sirve Excel2007? TECNOLOGIA/ INFORMATICA: MS-EXCEL

Manual del Protocolo XML-RPC de Mensajería Negocios

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

Estadística con Excel Informática 4º ESO ESTADÍSTICA CON EXCEL

Introducción al tipo de dato ARRAY

Facultad de Ingeniería Escuela de Ingeniería de Sistemas y Computación Algoritmia y Programación

(Tomado de:

Informática FACULTAD DE FÍSICAS

FICHERO MUESTRA Pág. 1

Para cerrar Excel, puedes utilizar cualquiera de las siguientes operaciones:

INSTRUCCIONES PARA LA UTILIZACIÓN DEL CALCULADOR DE COSTE AMORTIZADO

Los polinomios. Un polinomio es una expresión algebraica con una única letra, llamada variable. Ejemplo: 9x 6 3x 4 + x 6 polinomio de variable x

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

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

Unidad Formativa UF0525: Gestión Administrativa para el Asesoramiento de Productos de Activo

8. Sentencia return y métodos

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

POLIMORFISMO "una interfaz, múltiples métodos".

Modularización Relación de ejercicios

CESMA BUSINESS SCHOOL MATEMÁTICAS FINANCIERAS. TEMA 2 CAPITALIZACIÓN SIMPLE

ARREGLOS DEFINICION GENERAL DE ARREGLO

Práctica 2: Simón dice

Operación de Microsoft Excel

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 E V E N T O S. Ing. Bruno López Takeyas, M.C.

Charla N 6: Utilidades de Consulta de datos.

Comente: Los bancos siempre deberían dar crédito a los proyectos rentables. Falso, hay que evaluar la capacidad de pago.

Transformación de binario a decimal. Transformación de decimal a binario. ELECTRÓNICA DIGITAL

Tipos primitivos y clases de interés

Instructivo de Microsoft Excel 2003

Naturaleza binaria. Conversión decimal a binario

Tema 3. Medidas de tendencia central Introducción. Contenido

U.D.5: Diagramas de Gantt y PERT

MEDICION DEL TRABAJO

Tema 4. Gestión de entrada/salida

1. Introducción. 1.1 Ejercicio 1: Estación Meteorológica (4.0 pts.) Ejercicio 2: Gestión Académica: Alumnos (5.0 pts.)...

Tema 2. El lenguaje de programación Java. Arrays y cadenas

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

GUÍA DE TRABAJO N 2 ARREGLOS EN C# Ing. Néstor Raúl Suarez Perpiñan Página 1 de 8. Tema: ARREGLOS (ARRAYS) LENGUAJE C#

Operación de Microsoft Excel. Guía del Usuario Página 79. Centro de Capacitación en Informática

Microsoft Excel. El Documento Excel. Interfase de Programa. Celdas

Clase adicional 3. Métodos. Temas

Enseñanza-aprendizaje constructivista a través de la Robótica Educativa TEMA 4. La Ruta del autobús

EJERCICIOS SOBRE : NÚMEROS ENTEROS

DIAGRAMA DE GANTT. Este gráfico consiste simplemente en un sistema de coordenadas en que se indica:

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Estructuras de Datos y Algoritmos Práctica I - Curso 2012/13

Ejemplos de conversión de reales a enteros

Capítulo 12: Indexación y asociación

La Mutualidad de la Abogacía ofrece un nuevo e innovador seguro de rentas vitalicias

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Programación Orientada a Objetos. Java: Excepciones

Primer Parcial Septiembre 5 de 2009

Transcripción:

1. Defina los contratos de las siguientes clases: Trabajo Práctico N 4: Diseño por Contratos a. La clase Fecha representa una fecha en el formato dia, mes y año. Especificar los contratos para asegurar el manejo correcto de la clase Fecha. b. En un sistema Java que gestiona los usuarios de un servicio telemático se utiliza una clase Usuario. Especificar los contratos para asegurar una facturación correcta. class Usuario { private String nombre, dni; private int cuenta; Usuario (String d, String n) { nombre = n, dni=d; cuenta=0; void conexion (int s) // Contabiliza s segundos en la cuenta { cuenta = cuenta + s; double calculafacturación() //Calcula el importe facturable { return cuenta * 0,32; void reset() // Pone a cero la cuenta { cuenta = 0; c. En una Cuenta de Ahorro el saldo mínimo es de $ 0,00. Las extracciones nunca pueden superar el saldo disponible y los depósitos válidos son importes superiores a $ 0,00. class CuentaDeAhorro { private int numero; private float saldo; CuentaDeAhorro(int numero) { this.numero=numero; void extraer(double importe) {saldo = saldo importe; void depositar(double importe) {saldo = saldo + importe; float getsaldo() {return saldo; int getnumero() {return numero; d. Una Cuenta Corriente es un tipo de cuenta bancaria muy parecida a una Cuenta de Ahorro. El descubierto es una cantidad de dinero limite que el banco autoriza para que se puedan realizar extracciones cuando el saldo = 0,00. class CuentaCorriente { private int numero; private float saldo; private float descubierto; CuentaCorriente(int numero, float descubierto) { this.numero=numero; this.descubierto=descubierto; void extraer(double importe) {saldo = saldo importe; void depositar(double importe) {saldo = saldo + importe; float getsaldo() 1

{return saldo; float getdescubierto() {return descubierto; int getnumero() {return numero; e. En un Video Club cuando se realiza el alquiler de una película se registra el id de la película y la fecha de alquiler. Mientras la película esta alquilada el estado es verdadero. Cuando se produce la devolución de la película se registra la fecha de devolución y el estado del alquiler pasa a falso. Solo se calcula la facturación de los alquileres cuyo estado es falso. La facturación se obtiene aplicando la siguiente formula: (Hasta Desde) * coef. Donde coef = 0,27 si el alquiler no supero los 7 días; coef = 0,39 si el alquiler superó los 7 días pero no los 15 días y coef = 0,55 para el resto de los casos. class Alquiler { private String Id_pelicula private Fecha Desde; private Fecha Hasta; private boolean estado; Alquiler(String id_pelicula, Fecha desde) { void devolucion(..){ boolean getestado(){ float facturaralquiler(){ f. Un Plazo Fijo es una operación bancaria de inversión que permite a los clientes obtener un beneficio (interés) económico por prestarle al banco una determinada cantidad de dinero en un periodo de tiempo estipulado. El beneficio de un plazo fijo se calcula según la siguiente tabla. (M es monto). Días M < 10000 M < 50000 M >=50000 7 0,05 0,05 + (0,8% del interés) 0,05 + (1% del interés) 14 0,075 0,075 + (1% del interés) 0,075 + (1,2% del interés) 30 0,15 0,15+ (1,2% del interés) 0,15 + (1,4% del interés) 60 0,30 0,30+ (1,4% del interés) 0,30 + (1,6% del interés) 90 0,60 0,60+ (1,6% del interés) 0,60 + (1,8% del interés) 120 1,2 1,2+ (1,8% del interés) 1,2 + (2% del interés) class PlazoFijo { private int DNI_Cliente; private float monto; private int dias; PlazoFijo(..){ float calcularbeneficio(){ void renovar(){ // la renovación implica redefinir el mismo plazo fijo con el monto anterior, mas los beneficios obtenidos. La cantidad de días puede ser diferente. int getdias(){ 2. La clase Rectángulo tiene los atributos base y altura, los cuales se utilizan por ejemplo para el cálculo de superficie y perímetro. Los asertos base > 0 y altura > 0 deben ser pre-condiciones de los métodos Superficie() y Perímetro() o invariantes de clase???? Crear los contratos para la clase Rectángulo. 3. Construir la clase Fraccion y sus contratos para el tratamiento de Fracciones que realice las siguientes operaciones: Constructor Acceso al numerador y al denominador 2

Operaciones aritméticas entre fracciones, tales como: suma, resta, producto, cociente y simplificar una fracción. (en todos los casos devuelve otra fracción como resultado) Operaciones de comparación de fracciones, tales como: igualdad, mayor, menor, mayor o igual y menor o igual. Operaciones de lectura y escritura de fracciones en la entrada/salida estándar. 4. Construir la clase Conjunto y sus contratos para tratar la abstracción matemática Conjunto, que maneje conjuntos de números naturales del 1 al 100. Características: Descripción por enumeración, por ejemplo {1,4,6 No hay orden asociado. No hay elementos repetidos. No tiene sentido manipular los componentes individuales. Sugerencia: implementar con un array de boolean Operaciones: Crear el conjunto vacío. Insertar un elemento. Borrar un elemento. Comprobar si el conjunto está vacío, si un elemento pertenece a un conjunto y si dos conjuntos con iguales. Unión de conjuntos (devuelve el resultado en un 3er conjunto) Intersección de conjuntos (devuelve el resultado en un 3er conjunto) Resta de conjuntos (devuelve el resultado en un 3er conjunto) Complementario de un conjunto (devuelve el resultado en un 3er conjunto) Lectura y escritura de conjuntos en la entrada/salida estándar. 5. La Batalla Naval es un juego que consiste en hundir los barcos enemigos cuya localización inicialmente se desconocen. La simulación del juego puede realizarse de manera muy sencilla con una matriz (que representa el mar), en la cual ciertas celdas se identifiquen de manera tal que representan un barco. Teniendo en cuenta que los barcos se pueden ubicar en forma vertical u horizontal, y que en una posición no pueden haber más de un barco, se deben ubicar 6 barcos: uno de longitud 4, dos de longitud 3 y tres de longitud 2 en la matriz de 15 x 15. En una celda no pueden superponerse dos barcos. Luego comienza el juego en el cual se realizan una serie de disparos hasta hundir los 6 barcos. Solo el primer disparo que acierta en una posición que ocupa un barco se contabiliza como acierto. Es decir, el número total de aciertos será de 16. Al finalizar el juego se muestran la cantidad de disparos efectuados. A continuación se propone el código preliminar del juego. class BatallaNaval { private int mar[15][15]; private int aciertos; private int disparos; BatallaNaval() {// inicializar atributos void ubicarbarco( ) { // se ubica en mar un barco de longitud n, en forma vertical u horizontal void disparo( ) { // se chequea si el disparo efectuado acierta en algún barco // se incrementa aciertos si corresponde // se incrementa disparos int getaciertos() { return aciertos; int getdisparos() { return disparos; public void static main(string [] args) { 3

// Comienza el Juego!!! BatallaNaval bn = new BatallaNaval(); // Ubicar los 6 barcos bn.ubicarbarco(..) // ubicar barco 1 bn.ubicarbarco(..) // ubicar barco 6 // Hundir los barcos do { // toma datos para efectuar el disparo Ba.disparo(..) while ( bn.getaciertos() <= 16) // mostrar resultados Se pide: Defina los contratos de Batalla Naval Complete la implementación propuesta. (*) usar números ramdon. 6. Los robots son utilizados para realizar tareas de alto riesgo para los seres humanos. El robot DM, tiene la peligrosa misión de hallar una ruta segura por la cual los seres humanos puedan atravesar el campo minado. Para esto, DM debe previamente recorrer el campo y desactivar las minas que ha ocultado el enemigo en su camino. El robot DM recorre el campo paso a paso. Cada paso se realiza en dirección: adelante, atrás, izquierda o derecha. Antes de realizar un movimiento, el robot debe chequear si en esa próxima ubicación no hay una mina. Esta detección la realiza con un sensor que lleva incorporado. Si en dicha posición hay una mina, el robot DM puede: a) desactivarla para avanzar hacia esa ubicación; o b) intentar moverse a otra ubicación. Cada vez que DM desactiva una mina, gasta una carga de explosivo. El campo se representa con una matriz de 8 x 8 y DM comienza en [0][0], hasta llegar a [7][7]. En el campo hay esparcidas un total de 25 minas. DM solo tiene 9 cargas de explosivo. A continuación se propone el código preliminar del juego. class Campo { prívate boolean [8][8] campo; Campo() {// ubica las 25 minas en campo (*) booolean haymina(fila, columna) { // chequea si hay mina en fila, columna void desactivarmina(fila, columna) { // desactiva la mina de fila, columna class Robot{ private int posición_fila; private int posición_columna; private int cargas; Robot() {inicializa cargas void Inicio() { //avanza a la posición 0,0 void pasoadelante(){// avanza una fila void pasoatras(){ // retrocede una fila void pasoizquierda(){//retrocede una columna void pasoderecha(){// avanza una columna desactivarmina(){// gasta una carga int getposicionfila(){// completar int getposicioncolumna(){// completar public void static main(string [] args) { 4

Campo c = new Campo(); Robot DM = new Robot(); if (c.haymina(0,0)) { DM.desactivar(); c.desactivarmina(); DM.inicio(); do { // decide hacia donde avanzar (*) // chequea si hay mina // si no hay mina: avanza // si hay mina: decide si a) desactiva o b) busca nueva posición (*) // a) desactiva y avanza // b) lo hace en la proxima pasada x el bucle while (DM.getPosicionFila==7 && DM.getPosicionColumna==7 DM.getCargas()==-1) // mostrar camino seguro. Se pide: Defina los contratos del sistema Complete la implementación propuesta, teniendo en cuenta que falta registrar el camino seguro. (*) usar números random para 5