Programación Genérica e Internacionalización PDF

Title Programación Genérica e Internacionalización
Author Andres Alvarez
Course Programación Aplicada
Institution Universidad Nacional de Loja
Pages 4
File Size 183.6 KB
File Type PDF
Total Downloads 97
Total Views 137

Summary

Antes de que exista la programación genérica en Java se utilizaban colecciones las cuales son un conjunto o grupo de trabajos y que se almacenan a través de la interfaz genérica COllection la cual ofrece varios métodos comunes los cuales desarrollar sobre las mismas. El problema de usar las coleccio...


Description

Programación Genérica e Internacionalización J. Álvarez Sistemas

Abstract- The present work will reveal the advantages of the Java programming language. We will see concepts that have to do with generic programming, how it works, advantages that includes using generic features and internationalization concepts that allows the user or the operating system to configure parameters such as the application language, format of dates, etc. I. INTRODUCCIÓN Antes de que exista la programación genérica en Java se utilizaban colecciones las cuales son un conjunto o grupo de trabajos y que se almacenan a través de la interfaz genérica COllection la cual ofrece varios métodos comunes los cuales desarrollar sobre las mismas. El problema de usar las colecciones se da cuando se quiere declarar objetos de distintos tipos, lo que produce un error, pero igualmente se agrega a la lista. Para corregir este error se crearon las Genéricas. II. MARCO TEÓRICO Programación Genérica Desde luego la POO supuso un formidable avance del arsenal de herramientas de programación. Incluso en algunos casos, un auténtico balón de oxígeno en el desarrollo y mantenimiento de aplicaciones muy grandes, en las que se estaba en el límite de lo factible con las técnicas programación tradicional. Sin embargo, algunos teóricos seguían centraron su atención en los algoritmos. Algo que estaba ahí también desde el principio. Se dieron cuenta que frecuentemente las manipulaciones contienen un denominador común que se repite bajo apariencias diversas. Por ejemplo, la idea de ordenación "Sort" se repite infinidad de veces en la programación, aunque los objetos a ordenar y los criterios de ordenación varíen de un caso a otro. Alrededor de esta idea surgió un nuevo paradigma denominado programación genérica o funcional. La forma de genericidad que es novedosa. La programación genérica tiene, potencialmente,

grandes ventajas sobre la programación de un solo disparo, ya que la genericidad hace posible escribir programas que resuelven una Clase de problemas de una vez por todas, en lugar de escribir código nuevo una y otra vez para cada instancia diferente. Se hace hincapié en que el mayor potencial puede ser utilizado ya que los programas genéricos permiten la incorporación en forma de bibliotecas y el aumento de la fiabilidad debido a que los programas genéricos tienen un alto nivel de detalle, lo que a menudo hace que sea más fácil de programar. Cuyo logro es muy satisfactorio. ¿Qué es programación genérica? Genericidad es el proceso que consiste en abstraer lo que es común y esencial en un conjunto de entidades para formar un concepto general que comprenda a todas La programación genérica está mucho más centrada en los algoritmos que en los datos y su postulado fundamental puede sintetizarse, en una palabra: generalización. Significa que, en la medida de lo posible, los algoritmos deben ser parametrizados al máximo y expresados de la forma más independiente posible de detalles concretos, permitiendo así que puedan servir para la mayor variedad posible de tipos y estructuras de datos. La programación genérica es una técnica que define algoritmos: *Reusables *implementados como entidades de primer nivel(clases) *independientes de los datos sobre los que opera Clase y tipos de datos genéricos Una clase genérica es una plantilla de definición de una clase que puede ser instanciada en múltiples versiones concretas.

En java, cuando definimos una nueva clase, debemos conocer el tipo de dato con el que trabajaremos. Si queremos realizar una operación específica dentro de esta nueva clase, sea cual sea el tipo de datos que va a recibir, podemos hacer uso de los tipos genéricos. Este tipo genérico asumirá el tipo de dato que realmente le pasaremos a la clase. Hay que tener en cuenta que los generics de java solo funcionan con objetos.



No se pueden declarar campos static cuyos tipos son parámetros de tipo.



No se pueden usar casts o instanceof con tipos parametrizados.



No se pueden crear arrays de tipos parametrizados.



No se pueden crear, capturar o lanzar tipos parametrizados que extiendan de Throwable.



No se puede sobrecargar un método que tengan la misma firma que otro después del type erasure.

Existen una serie de convenciones para nombrar a los genéricos: •

E – Element (usado bastante por Java Collections Framework)



K – Key (Llave, usado en mapas)



N – Number (para números)



T – Type (Representa un tipo, es decir, una clase)



V – Value (representa el valor, también se usa en mapas)



S,U,V etc. – usado para representar otros tipos.

Los tipos genéricos pueden extenderse o implementarse y mientras no se cambie el tipo del argumento la «relación es un» se preserva. De modo que ArrayList es un subtipo de List que a su vez es un subtipo de Collection.

Los generics tiene algunas restricciones: •

No se pueden instanciar tipos genéricos con tipos primitivos.



No se pueden crear instancias de los parámetros de tipo.

Colecciones Las colecciones son una especie de arrays de tamaño dinámico. Para usarlas haremos uso del Java Collections Framework (JCF), el cual contiene un conjunto de clases e interfaces del paquete java.util para gestionar colecciones de objetos. En Java las principales interfaces que disponemos para trabajar con colecciones son: Collection, Set, List, Queue y Map: *Collection: Un grupo de elementos individuales, frecuentemente con alguna regla aplicada a ellos. *List: Elementos en una secuencia particular que mantienen un orden y permite duplicados. La lista puede ser recorrida en ambas direcciones con un ListIterator. Hay 3 tipos de constructores: *ArrayList: Su ventaja es que el acceso a un elemento en particular es ínfimo. Su desventaja es que, para eliminar un elemento, se ha de mover toda la lista para eliminar ese “hueco”. *Vector: Es igual que ArrayList, pero sincronizado. Es decir, que, si usamos varios hilos, no tendremos de qué preocuparnos hasta cierto punto. *LinkedList: En esta, los elementos están conectados con el anterior y el posterior. La ventaja es que es fácil mover/eliminar elementos de la lista, simplemente moviendo/eliminando sus referencias hacia otros elementos. La desventaja es que para usar el elemento N de la lista, debemos realizar N movimientos a través de la lista.

* Set: No puede haber duplicados. Cada elemento debe ser único, por lo que, si existe uno duplicado, no se agrega. Por regla general, cuando se redefine equals(), se debe redefinir hashCode(). Es necesario redefinir hashCode() cuando la clase definida será colocada en un HashSet. Los métodos add(o) y addAll(o) devuelven false si o ya estaba en el conjunto. * Queue: Colección ordenada con extracción por el principio e inserción por el principio (LIFO – Last Input, First Output) o por el final (FIFO – First Input, First Output). Se permiten elementos duplicados. No da excepciones cuando la cola está vacía/llena, hay métodos para interrogar, que devuelven null. Los métodos put()/take() se bloquean hasta que hay espacio en la cola/haya elementos. * Map: Un grupo de pares objeto clavevalor, que no permite duplicados en sus claves. Es quizás el más sencillo, y no utiliza la interfaz Collection. Los principales métodos son: put(), get(), remove(). -HashMap: Se basa en una tabla hash, pero no es sincronizado. -HashTable: Es sincronizado, aunque que no permite null como clave. -LinkedHashMap: Extiende de HashMap y utiliza una lista doblemente enlazada para recorrerla en el orden en que se añadieron. Es ligeramente más rápida a la hora de acceder a los elementos que su superclase, pero más lenta a la hora de añadirlos. -TreeMap: Se basa en una implementación de árboles en el que ordena los valores según las claves. Es la clase más lenta. INTENACIONALIZACION En un mundo globalizado, en el que aplicaciones de todo tipo están a la orden del día y que pueden ser utilizados por diferentes usuarios de distintas partes del mundo y con un idioma diferente, es importante que las presentaciones de los sistemas se puedan configurar a conveniencia de lo que requiera cualquier usuario. En el lenguaje Java existen las clases Locale y ResourceBoundle del paquete java.util para el manejo de idiomas y localizaciones de una manera más cómoda para el programador. En java

Es posible hacer que nuestras aplicaciones java cambien fácilmente de idioma. Si hacemos el código java de la forma correcta, nuestra aplicación aparecerá en inglés si el sistema operativo está en inglés y aparecerá en español si el sistema operativo está en español. Esto es lo que se llama internacionalización en java, el conseguir que nuestra aplicación salga en el idioma adecuado. Clase Locale En java existe una clase llamada Locale que nos permite especificar la región geográfica, política y cultural en la que nos encontramos. A pesar de su importancia, pocas veces es explicada o enseñada en los cursos de programación, por lo que a veces no se toma en cuenta ni se considera el valor que por defecto que se asigna provocando problemas e inconsistencias en nuestras aplicaciones. Definir una clase localizada es muy sencillo, podemos usar cualquiera de los siguientes constructores: Locale(String language) Locale(String language, String country) Locale(String language, String country, String variant) El primer argumento es el código ISO idioma (ISO-639), seguido del código del país (ISO-3166) y puede terminar con un argumento sobre variantes especificas del sistema operativo o explorador. Clase ListResourceBundle Si decidimos usar clases, igual que hemos hecho con los ficheros, debemos elegir un idioma por defecto para la aplicación. También tendremos que crear varias clases, con el mismo criterio de nombres que los ficheros. Es decir, el nombre del idioma por defecto puede ser el que queramos, por ejemplo, Etiquetas.class, y luego deberemos crear clases Etiquetas_es_ES.class, Etiquetas_es.class, etc. Estas clases deben construirse de una forma especial. Deben heredar de la clase ListResourceBundle y deben redefinir el método public Object[][] getContents() que es abstracto en la clase padre. El array doble de objetos contendrá como primer índice tantas posiciones como etiquetas haya. El segundo índice podrá ser 0 para obtener el nombre de la etiqueta y 1 para obtener su valor.

III.CONCLUSIONES La programación genérica ayuda bastante a la hora de que se quiere declarar variables de distinto tipo de datos ya sea un String, int, doublé,etc, ya que a la hora de copilar resuelve los posibles errores que se presenten. La internacionalización es muy útil y muy importante ya que el programa que se desarrolle tiene que satisfacer las necesidades del usuario, por ello se debe crear el programa para que, si un usuario de un distinto país lo va a usar, este pueda cambiar de idioma del programa. REFERENCIAS [1] R. Backhouse, P. Jansson, J. Jeuring, and L. Meertens. Generic Programming - An Introduction -. In Advanced Functional Programming, Lecture Notes in Computer Science 1608. Springer-Verlag, 1999. [2] R. Backhouse, P. Jansson, J. Jeuring, and L. Meertens. Generic Programming en español An Introduction -. In Advanced Functional Programming, Lecture Notes in Computer Science 1608. Springer-Verlag, 1999. [3] Ralf Hinze and Andres Löh. Generic Programming, Now!. In Spring School on Generic Programming, Lecture Notes in Computer Science. Springer-Verlag, 2006. [4] James C. Bender, I. d. (2014). Programación genérica, Java genérico y JGL 5.0. En James C. Bender....


Similar Free PDFs