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

Documentos relacionados
Universidad de los Andes Ingeniería de Sistemas y Computación. ISIS1205 Algorítmica y Programación 2. Hoja de trabajo teórica Nivel 7 (N7-EE)

UNADM. Estructura de datos. Guillermo Duran Garcia AL Actividad 2. Identificación de errores en métodos de ordenación

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

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

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

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

Soluciones Kata TDD. Solución requisito 1

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

Clases abstractas e interfaces en Java

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Estructuras de control selectivas

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Estructura de datos y Programación

3.3 Conceptos Básicos del Lenguaje Java

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Práctica 10a. Práctica 10a. José M. Ordax

Programación multimedia y dispositivos móviles. Objetos Parcelables

Fundamentos de Programación

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

Prueba N o 1. Programación II

Práctica 5c. Práctica 5c. José M. Ordax

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

PROGRAMACION I Archivos directos

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Estructuras de Datos Clase 4 Pilas y colas

Estructuras de Datos Clase 6 Listas e Iteradores (primera parte)

Estructuras de Datos Clase 7 Listas e Iteradores (segunda parte)

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Programación Orientada a Objetos. Java: Excepciones

Estructuras de Datos Clase 14 Árboles binarios de búsqueda

Tema 15: Aserciones 0

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Tema 4- Representación Enlazada

Construcciones del Lenguaje Java

Apellidos: Nombre: Matrícula: UNIVERSIDAD POLITÉCNICA DE MADRID

Sacándole Partido a JUnit Módulo 1. Introducción a las Pruebas

Programación II Arboles Binarios(AB)

Tema: Grafos en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Programación IV. Guía 7

Examen Teórico Convocatoria de Junio de 2012

Unidad II Tema 3: Tratamiento de arreglos y cadenas en Java

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

Programación Orientada a Objetos. Java: Excepciones

1. (1 punto) Dado el siguiente fragmento en Java:

Tabla: producto Campo: codigo varchar(13) Campo: nombre varchar(40) Campo: precio int Campo: unidades int PRIMARY KEY: codigo

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Programación de sistemas Listas enlazadas

Apellidos: Nombre: Matrícula:

Depto. Ingeniería de Sistemas Telemáticos Universidad Politécnica de Madrid ETSI Telecomunicación Fundamentos de Programación 15 de diciembre de 2011

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato));

Ejercicios de Programación Tema 7. Programación Orientada a Objetos

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

2) Cual modificador limita el acceso a un método de una clase pública a los miembros de la misma clase?

Práctica #2. Patrón de diseño Factory Method. 2.1 Objetivos. 2.2 Práctica a realizar

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

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

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

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Uso de Java Generics (I)

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

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

package com.example.dialogov1;

Examen escrito de Programación 1

Solución al Examen de Fundamentos de Computadores y Lenguajes

PRIMER EXAMEN PARCIAL. 5 de febrero de SOLUCIONES

Identidad, igualdad y equivalencia

Colas. 5.1 Implementación

CURSO : Programacion Java DOCENTE : ING. JUAN ZEVALLOS VALLE

Instrucción de selección múltiple switch.

Entiendo los métodos de Java equals y hashcode

Código fuente del Trabajo Fin de Máster realizado por. Sonia Madero García. para la obtención del título de

Herencia Java y Servicios Web I Master en Ingeniería Matemática

Transcripción:

* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * $Id: Traductor.java,v 1.1 2008/01/24 00:10:51 cupi3 Exp $ * Universidad de los Andes (Bogotá - Colombia) * Departamento de Ingeniería de Sistemas y Computación * Licenciado bajo el esquema Academic Free License version 2.1 * * Proyecto Cupi2 (http://cupi2.uniandes.edu.co) * Ejercicio: n7_traductor * Autor: Daniel Francisco Romero - 27-jun-2006 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ package uniandes.cupi2.traductor.servidor; import java.io.serializable; import java.util.arraylist; * Traductor de palabras de español, inglés, francés e italiano. <br> * <b>inv: </b> <br> * espanolingles!= null <br> * espanolfrances!= null <br> * espanolitaliano!= null <br> * * En el vector espanolingles no hay palabras repetidas <br> * En el vector espanolfrances no hay palabras repetidas <br> * En el vector espanolitaliano no hay palabras repetidas <br> * * En el vector espanolingles no hay traducciones repetidas <br> * En el vector espanolfrances no hay traducciones repetidas <br> * En el vector espanolitaliano no hay traducciones repetidas public class Traductor implements Serializable // Constantes * private static final long serialversionuid = 1L; 1 / 9

* Idioma inglés public final static int INGLES = 0; * Idioma francés public final static int FRANCES = 1; * Idioma italiano public final static int ITALIANO = 2; * Idioma español public final static int ESPANOL = 3; // Atributos * Conjunto de traducciones del español al inglés private ArrayList espanolingles; * Conjunto de traducciones del español al francés private ArrayList espanolfrances; * Conjunto de traducciones del español al italiano private ArrayList espanolitaliano; // Constructores * Crea al traductor con los diccionarios vacíos. <br> * <b> post: </b> Se creó el traductor con los diccionarios vacíos. 2 / 9

public Traductor( ) espanolingles = new ArrayList( ); espanolfrances = new ArrayList( ); espanolitaliano = new ArrayList( ); // Verifica el invariante verificarinvariante( ); // Métodos * Agrega al diccionario una traducción de una palabra en español a un idioma dado. <br> * <b> post: </b> La traducción fue adicionada al diccionario del idioma especificado. * @param pal es la palabra - pal!= null y pal!= "" * @param trad es la traducción - trad!= null y trad!= "" * @param iddestino es el idioma destino - iddestino pertenece a FRANCES, INGLES, ITALIANO * @return True si la palabra pudo ser adicionada al diccionario o false en caso contrario. public boolean agregartraduccion( String pal, String trad, int iddestino ) boolean agregada = false; // Busca la palabra en el diccionario del idioma Traduccion latraduccion = traducirdeespanol( pal, iddestino ); // Verifica que la palabra ni la traducción existan if( latraduccion == null &&!existetraduccion( iddestino, trad ) ) // Obtiene el arreglo de las traducciones correspondientes al idioma ArrayList traducciones = obtenerdiccionario( iddestino ); // Agrega la palabra con su traducción al diccionario traducciones.add( new Traduccion( pal, trad ) ); agregada = true; // Verifica el invariante verificarinvariante( ); // Indica si la palabra fue agregada return agregada; * Dada la palabra de búsqueda y el idioma al que se quiere traducir, retorna la traducción 3 / 9

correspondiente. <br> * @param palabra es la palabra a buscar - palabra!= null y palabra se encuentra en español * @param idiomatraduccion es el idioma al que se va a traducir la palabra - idiomatraduccion pertenece FRANCES, INGLES, ITALIANO * @return Traducción de la palabra en el idioma solicitado. Si no encuentra la palabra retorna null private Traduccion traducirdeespanol( String palabra, int idiomatraduccion ) // Obtiene el arreglo de traducciones correspondiente al idioma de traducción ArrayList traducciones = obtenerdiccionario( idiomatraduccion ); Traduccion traduccion = null; // Busca la palabra como palabra base en las traducciones for( int i = 0; i < traducciones.size( ) && traduccion == null; i++ ) Traduccion aux = ( Traduccion )traducciones.get( i ); if( aux.darpalabra( ).equalsignorecase( palabra ) ) traduccion = aux; return traduccion; * Según el idioma retorna el diccionario correspondiente. <br> * @param idiomatraduccion es el idioma de la traducción - idiomatraduccion pertenece FRANCES, INGLES, ITALIANO * @return Arreglo con las traducciones del español al idioma dado. Si no se maneja esa traducción retorna null private ArrayList obtenerdiccionario( int idiomatraduccion ) switch( idiomatraduccion ) case INGLES: return espanolingles; case ITALIANO: return espanolitaliano; case FRANCES: return espanolfrances; default: return null; * Indica si la traducción especificada ya existe en el diccionario del idioma dado. <br> 4 / 9

* <b> post: </b> Se retornó true si la traducción ya se encuentra asignada o false de lo contrario. * @param idiomatraduccion es el idioma del diccionario - idiomatraduccion pertenece FRANCES, INGLES, ITALIANO * @param traduccion es la traducción a ser buscada en el diccionario - traducion!=null * @return True si la traducción ya se encuentra asignada o false de lo contrario. private boolean existetraduccion( int idiomatraduccion, String traduccion ) boolean existe = false; ArrayList traducciones = obtenerdiccionario( idiomatraduccion ); // Recorre el diccionario buscando si hay palabras con la misma traducción for( int i = 0; i < traducciones.size( ) &&!existe; i++ ) Traduccion t = ( Traduccion )traducciones.get( i ); String palabratraducida = t.dartraduccion( ); if( palabratraducida.equalsignorecase( traduccion ) ) existe = true; return existe; * Dada una palabra, el idioma en el que está y el idioma al que se quiere traducir, este método retorna la traducción correspondiente. Para que la traducción exista entre * dos idiomas diferentes es necesario que la traducción de la palabra exista en los dos idiomas implicados. Así por ejemplos para traducir una palabra de francés a inglés * es necesario que exista la traducción en el diccionario de español-francés y que la traducción de la palabra en español exista el diccionario español-inglés. <br> * @param pal es la palabra - pal!= null * @param idorigen es el idioma de origen - idorigen pertenece a FRANCES, INGLES, ITALIANO, ESPANOL * @param iddestino es el idioma destino - iddestino pertenece a FRANCES, INGLES, ITALIANO, ESPANOL * @return Traducción de la palabra en el idioma destino. Si no existe, retorna null. public Traduccion traducir( String pal, int idorigen, int iddestino ) // Solo se realiza la traducción si los dos idiomas son diferentes if( idorigen!= iddestino ) if( idorigen == ESPANOL ) return traducirdeespanol( pal, iddestino ); else if( iddestino == ESPANOL ) 5 / 9

return traduciraespanol( pal, idorigen ); else Traduccion aux = traduciraespanol( pal, idorigen ); if( aux!= null ) return traducirdeespanol( aux.darpalabra( ), iddestino ); return null; * Dada la palabra de búsqueda y el idioma en el que se encuentra, retorna la traducción correspondiente al español. <br> * @param palabra es la palabra a buscar - palabra!= null * @param idiomaorigen es el idioma en el que se encuentra la palabra - idiomaorigen pertenece FRANCES, INGLES, ITALIANO * @return Traducción de la palabra en español - Si no encuentra la traducción retorna null private Traduccion traduciraespanol( String palabra, int idiomaorigen ) // Obtiene el arreglo de traducciones correspondiente al idioma origen ArrayList traducciones = obtenerdiccionario( idiomaorigen ); Traduccion traduccion = null; // Busca la palabra como la traducción en el diccionario for( int i = 0; i < traducciones.size( ) && traduccion == null; i++ ) Traduccion aux = ( Traduccion )traducciones.get( i ); if( aux.dartraduccion( ).equalsignorecase( palabra ) ) traduccion = aux; return traduccion; * Retorna el número de palabras del diccionario de un idioma dado. <br> * @param iddestino es el idioma destino - iddestino pertenece a FRANCES, INGLES, FRANCES * @return Número de palabras en el diccionario public int dartotalpalabrastraducidas( int iddestino ) // Obtiene el arreglo de traducciones correspondiente ArrayList traducciones = obtenerdiccionario( iddestino ); 6 / 9

if( traducciones == null ) return 0; else return traducciones.size( ); // Invariante * Indica si hay palabras repetidas en el diccionario del idioma dado. <br> * @param idtrad es el idioma del diccionario - idtrad pertenece a FRANCES, INGLES, ITALIANO * @return True si hay al menos una palabra repetida o false en caso contrario. private boolean haypalabrasrepetidas( int idtrad ) Traduccion traduccion; Traduccion otratraduccion; String palabra; ArrayList traducciones = obtenerdiccionario( idtrad ); // Recorre las traducciones buscando si hay palabras repetidas for( int i = 0; i < traducciones.size( ) - 1; i++ ) traduccion = ( Traduccion )traducciones.get( i ); palabra = traduccion.darpalabra( ); for( int j = i + 1; j < traducciones.size( ); j++ ) otratraduccion = ( Traduccion )traducciones.get( j ); if( palabra.equalsignorecase( otratraduccion.darpalabra( ) ) ) return true; return false; * Indica si hay palabras con la misma traducción en el diccionario del idioma dado. <br> * @param idtrad es el idioma del diccionario - idtrad pertenece a FRANCES, INGLES, ITALIANO * @return True si hay dos palabras con la misma traducción o false en caso contrario. private boolean haytraduccionesrepetidas( int idtrad ) 7 / 9

Traduccion traduccion; Traduccion otratraduccion; String palabratraducida; ArrayList traducciones = obtenerdiccionario( idtrad ); // Recorre las traducciones buscando si hay palabras con la misma traducción for( int i = 0; i < traducciones.size( ) - 1; i++ ) traduccion = ( Traduccion )traducciones.get( i ); palabratraducida = traduccion.dartraduccion( ); for( int j = i + 1; j < traducciones.size( ); j++ ) otratraduccion = ( Traduccion )traducciones.get( j ); if( palabratraducida.equalsignorecase( otratraduccion.dartraduccion( ) ) ) return true; return false; // Invariante * Verifica que el invariante de la clase se cumpla. Si algo falla, lanza un AssertError.<br> * <b>inv: </b> <br> * espanolingles!= null <br> * espanolfrances!= null <br> * espanolitaliano!= null <br> * En el diccionario español-inglés no hay palabras repetidas <br> * En el diccionario español-francés no hay palabras repetidas <br> * En el diccionario español-italiano no hay palabras repetidas private void verificarinvariante( ) assert espanolingles!= null : "Diccionario español-ingles sin inicializar"; assert espanolfrances!= null : "Diccionario español-francés sin inicializar"; assert espanolitaliano!= null : "Diccionario español-italiano sin inicializar"; assert!haypalabrasrepetidas( INGLES ) : "Palabras repetidas en el diccionario de inglés"; assert!haypalabrasrepetidas( FRANCES ) : "Palabras repetidas en el diccionario de francés" ; assert!haypalabrasrepetidas( ITALIANO ) : "Palabras repetidas en el diccionario de italiano" ; 8 / 9

assert!haytraduccionesrepetidas( INGLES ) : "Traducciones repetidas en el diccionario de inglés" ; assert!haytraduccionesrepetidas( FRANCES ) : "Traducciones repetidas en el diccionario de francés" ; assert!haytraduccionesrepetidas( ITALIANO ) : "Traducciones repetidas en el diccionario de italiano" ; // Puntos de Extensión * Ejecuta el punto de extensión 1 * @return respuesta 1 public String metodo1( ) return "respuesta1"; * Ejecuta el punto de extensión 2 * @return respuesta 2 public String metodo2( ) return "respuesta2"; 9 / 9