• No results found

Chapter 4 Recent Changes in United States Extreme 3-Day Precipitation Using the

4.2.2 Methodology

Se trata de una estructura dinámica. Esta clase implementa la interfaz List.

Implementa todas las operaciones opcionales de las listas, y permite todos los

elementos incluyendo null. Además de implementar la interfaz List, esta clase

proporciona métodos para manipular el tamaño de las tablas que se usan

internamente para almacenar la lista. (Esta clase es básicamente equivalente a

Vector, excepto que no es sincronizada).

Cada instancia ArrayList tiene una capacidad. La capacidad es el tamaño de la

tabla usada para almacenar los elementos en la lista. Es siempre al menos tan grande

como el tamaño de la lista. Como los elementos son añadidos a ArrayList su

capacidad crece automáticamente.

Una aplicación puede incrementar la capacidad de una instancia ArrayList antes

de añadir un gran número de elementos usando la operación ensureCapacity. Esto

puede reducir la cantidad de reasignaciones.

Esta implementación no es sincronizada. Por tanto, si múltiples hilos acceden a

una instancia ArrayList concurrentemente, y al menos uno de los hilos modifica la

lista estructuralmente, debe ser sincronizado externamente. (Una operación

estructural es una operación que añade o borra uno o más elementos, o

explícitamente redimensiona la tabla devuelta. La recogida del valor de un elemento

simplemente no es una modificación estructural). Esto es típicamente realizado por

la sincronización de algunos objetos que naturalmente encapsula la lista. Si tales

elementos no existen, la lista debería ser envuelta usando el método

Collections.syncronizedList. Esta es la mejor forma de acceder a la lista para

prevenir accesos no sincronizados accidentales:

List list = Collections.synchronizedList(new ArrayList(...));

Esta clase incluye los siguientes métodos:

• ArrayList (): Construye una lista vacía con una capacidad inicial de 10.

• ArrayList (Collection c): Construye una lista que contiene los

• ArrayList (int initialCapacity): Construye una lista vacía con la

capacidad inicial especificada.

Esta clase tiene, entre otros, los siguientes métodos:

• void add (int index, Object element): Inserta el elemento especificado

en la posición especificada de la lista.

• boolean add (Object o): Añade el elemento especificado al final de la

lista.

• boolean addAll (Collection c): Añade todos los elementos especificados

en la colección al final de la lista.

• boolean addAll (int index, Collection c): Añade todos los elementos

especificados en la colección empezando por la posición especificada de

la lista.

• void clear (): Borra todos los elementos de la lista.

• Object clone (): Devuelve una copia de esta instancia de ArryList.

• boolean contains (Object elem): Devuelve true si esta lista contiene el

elemento especificado.

• Object get (int index): Devuelve el elemento de la posición especificada

en la lista.

• boolean isEmpty (): Verifica si esta lista no tiene elementos.

• int lastIndexOf (Object elem): Devuelve el índice de la última

aparición del objeto especificado en esta lista.

• Object remove (int index): Borra el elemento en la posición

especificada en esta lista.

• Object set (int index, Object element): Reemplaza el elemento de la

lista en la posición especificada por el elemento especificado.

• int size (): Devuelve el número de elementos de esta lista.

• Object [] toArray (): Devuelve una tabla conteniendo todos los

elementos de esta lista en el orden correcto.

2.4.1.2 Clase Vector

Se trata de una estructura dinámica. La clase Vector implementa una tabla de

objetos capaz de crecer. Al igual que las tablas, contiene componentes que pueden

ser accedidos usando un índice entero. Sin embargo, el tamaño de un Vector puede

crecer o disminuir según necesitemos, y añadiendo o borrando ítems después de que

el Vector haya sido creado. Vector es sincronizado.

Cada vector intenta optimizar la gestión del almacenamiento manteniendo un

capacity y un capacityIncrement. El capacity es siempre al menos tan grande como

el tamaño del vector. Normalmente es más grande porque como los componentes

son añadidos al vector, el almacenamiento del vector aumenta en trozos de tamaño

de insertar un gran número de componentes. Esto reduce la cantidad de

reasignaciones.

Esta clase tiene los siguientes constructores:

• Vector (): Construye un vector vacío, de forma que su tabla de datos

interna tiene tamaño 10 y su capacidad incremental estándar es 0.

• Vector (Collection c): Construye un vector que contiene los elementos

de la colección especificada.

• Vector (int initialCapacity): Construye un vector vacío con la

capacidad inicial especificada y con su capacidad incremental igual a 0.

• Vector (int initialCapacity, int capacityIncrement): Construye un

vector vacío con la capacidad inicial y capacidad incremental

especificadas.

Esta clase contiene, entre otros, los siguientes métodos:

• void add (int index, Object element): Inserta el elemento especificado

en la posición especificada en este vector.

• boolean add (Object o): Añade el elemento especificado al final de este

vector.

• boolean addAll (Collection c): Añade todos los elementos especificados

en la colección al final de este vector.

• boolean addAll (int index, Collection c): Inserta todos los elementos

especificados en la colección en el vector, empezando por la posición

especificada.

• int capacity (): Devuelve la capacidad actual de este vector.

• void clear (): Borra todos los elementos de este vector.

• boolean contains (Object elem): Verifica si el objeto especificado es un

componente del vector.

• boolean containsAll (Collection c): Devuelve true si este vector

contiene todos los elementos de la colección especificada.

• void copyInto (Object [] anArray): Copia los componentes de este

vector en el array especificado.

• Object elementAt (int index): Devuelve el componente del índice

especificado.

• Enumerations elements (): Devuelve una enumeración de los

componentes de este vector.

• Object firstElement (): Devuelve el primer componente ( el de índice 0)

de este vector.

• Object get (int index): Devuelve el elemento de la posición especificada

en este vector.

• int indexOf (Object elem): Busca la primera aparición del elemento

especificado.

• int indexOf (Object elem, int index): Busca la primera aparición del

elemento especificado, empezando por el índice especificado.

• boolean isEmpty (): Verifica si este vector no tiene componentes

• Object lastElement (): Devuelve el último componente de este vector.

• Int lastIndexOf (Object elem): Devuelve el índice de la última

aparición del objeto especificado en este vector.

• Int lastIndexOf (Object elem, int index): Busca la última aparición del

objeto especificado, empezando por el índice especificado, y devuelve el

índice en el que se encuentra.

• Object remove (int index): Devuelve el elemento de la posición

especificada en este vector.

• boolean remove (Object o): Borra la primera aparición del elemento

especificado en este vector. Si el vector no contiene este elemento, no

hace nada.

• boolean removeAll (Collection c): Borra de este vector todos los

elementos contenidos en la colección especificada.

• void removeAllElements (): Borra todos los componentes de este vector

y pone su valor a 0.

• Object set (int index, Object element): Reemplaza el elemento de la

posición especificada en este vector por el elemento especificado.

• void setSize (int newSize): Pone el tamaño de ste vector.

• int size (): Devuelve el número de components de este vector.

• Object [] toArray (): Devuelve una tabla conteniendo todos los

elementos de este vector en el orden correcto.

• String toString (): Devuelve un string como representación de este

vector, conteniendo el string la representación de cada elemento.

2.4.1.3 Interfaz Iterator

Se trata de un iterador sobre una colección. Permite borrar elementos de la

colección en el momento de la iteración.

Los métodos son los siguientes:

• boolean hasNext (): Devuelve trae si en la iteración hay más elementos.

• Object next (): Devuelve el siguiente elemento de la iteración.

• void remove (): Borra de la colección el último elemento devuelto por el

iterator.

2.4.2 PAQUETE JAVA.LANG

Este paquete proporciona clases que son fundamentales para el diseño del

lenguaje de programación Java. Las clases más importantes son Object, la cual es la

raíz de toda la jerarquía de clases, y Class, instancias de la cual representa clases en

tiempo de ejecución.

Frecuentemente es necesario representar un valor de tipo primitivo como si fuese

un objeto. Las clases envolventes Boolean, Carácter, Integer, Long, Float, y Double

sirven para este propósito. Estas clases proporcionan un número de métodos para la

conversión entre valores primitivos, y también soportando métodos estándares como

equals y hashCode.

2.4.2.1 Clase Object

La clase Object es la raíz de toda la jerarquía de clases. Todas las clases tienen a

Object como superclase. Todos los objetos, incluyendo tablas, implementan los

métodos de esta clase.

Tiene el siguiente constructor:

• Object (): Construye un objeto vacío.

Esta clase tiene, entre otros, los siguientes métodos:

• boolean equals (Object obj): Indica si el objeto especificado es igual a

este objeto.

• String toString (): Devuelve un string como representación del objeto.

2.4.2.2 Clase String

La clase String representa cadenas de caracteres. Todos los literales string en

programas Java, tales como “abc”, son implementados como instancias de esta

clase.

Las cadenas son constantes, sus valores no pueden ser cambiados después de ser

creadas. Los objetos String se pueden dividir, porque son invariables. Por ejemplo:

String str = “abc”;

Es equivalente a:

Char data[ ] = {‘a’, ‘b’, ‘c’};

String str = new String(data);

Aquí mostramos algunos ejemplos más de como se pueden usar las cadenas:

System.out.println(“abc”);

String cde = “cde”;

System.out.println(“abc” + cde);

String c = “abc”.substring(2,3);

String d = cde.substring(1,2);

La clase String incluye métodos para la manipulación individual de caracteres de

la secuencia, para comparación de cadenas, para la búsqueda de cadenas, para la

extracción de subcadenas, y para la creación de una copia de una cadena con todos

los caracteres traducidos a mayúsculas o minúsculas.

El lenguaje Java proporciona un soporte especial para la concatenación de

cadenas con el operador “+”, y para la conversión de otros objetos a cadenas. La

concatenación de cadena está implementada a través de la clase StringBuffer y su

método append. Las conversiones de cadenas son implementadas a través del

método toString, definido en Object y heredado por todas las clases en Java.

Si se le pasa un argumento null a un constructor o método de esta clase causará

la excepción NullPointerException que será lanzada.

Tiene, entre otros, los siguientes constructores:

• String (): Crea un string que representa el carácter vacío.

• String (String original): Crea un String que representa la misma cadena

de caracteres del argumento.

Tiene, entre otros, los siguientes métodos:

• int compareTo (Object o): Compara esta cadena con el Object

especificado.

• int compareTo (String anotherString): Compara dos cadenas

léxicamente.

• String concat (String str): Concatena la cadena especificada al final de

esta cadena.

• boolean equals (Object anObject): Compara esta cadena con el objeto

especificado.

• int length (): Devuelve la longitud de esta cadena.

• String replace (char oldChar, char newChar): Devuelve una nueva

cadena resultante de reemplazar todas las apariciones en esta cadena de

oldChar por newChar.

• String substring (int beginIndex): Devuelve una subcadena de esta

cadena.

• String substring (int beginIndex, int endIndex): Devuelve una

subcadena de esta cadena.

3 IMPLEMENTACIÓN

3.1 ONTOLOGÍA FEDERADA

3.1.1 INTRODUCCIÓN

Nuestro objetivo es crear una ontología que represente el dominio de la

información demográfica de personas para entornos clínicos.

El Comité Técnico CEN/TC 251 “Informática de la Salud”, ha preparado un

documento sobre Componentes de Información de Propósito General prEN 14822-

2:2003, con las siguientes partes:

Parte 1: Introducción

Parte 2: No-Clínico

Parte 3: Clínico

El documento Parte 2 define un conjunto de Componentes de Información de

Propósito General no-clínico, y en él nos hemos basado para crear la ontología.

Este estándar dirige la definición y estructuración de la información relativa a

entidades que son comúnmente encontradas en comunicaciones y en sistemas

informáticos de información clínica. Nosotros nos hemos centrado en personas,

aunque este estándar también habla de animales y grupos de animales.

3.1.2 DESCRIPCIÓN DE LA ONTOLOGÍA

A continuación vamos a ir viendo qué componentes define el estándar y cómo

los hemos modelado en la ontología.

3.1.2.1 CodedSimpleValue

Esta clase es la representación más simple de un concepto codificado, y usa sólo

las propiedades pertenecientes a su listado. Esta clase tiene una serie de subclases,

las cuales tienen instancias que representan códigos. Aparece definida en el cen

data types version 4.0.

Los atributos de CodedSimpleValue definidos en la norma son los siguientes:

Nombre de

Atributo

Tipo

Definición

codeValue

String

String que contiene los valores del código

displayName String String que contiene una corta descripción del

concepto.

Por tanto, en nuestra ontología hemos definido las siguientes propiedades para

CodedSimpleValue:

• codeValue: Se trata de un DatatypeProperty, del tipo String. Es una

propiedad funcional, por tanto sólo puede tener un valor.

• displayName: Se trata de un DatatypeProperty, del tipo String. Es una

propiedad funcional, por tanto sólo puede tener un valor.

A continuación vemos las subclases definidas para esta clase. Todas las

subclases heredan las propiedades de CodedSimpleValue. Las subclases son:

• TelecomUse: Representa los posibles usos de recursos de

telecomunicaciones, como teléfono móvil, teléfono de casa, teléfono del

trabajo… Tiene una única propiedad, isTelecomUseOf, que es la

propiedad inversa de telecomUse, perteneciente a Telecom.

• ProficiencyLevelCodeLanguage: Indica la corrección con la que una

persona se comunica en un idioma. Por ejemplo, excelente, correcta,

buena, pobre. Tiene una única propiedad,

isProficiencyLevelCodeLanguageOf, que es la propiedad inversa de

proficiencyLevelCodeLanguage, perteneciente a

LanguageComunication.

• NamePartType: Es un código que representa el tipo de un nombre. Por

ejemplo, apellido, nombre, sufijo, prefijo. Tiene una única propiedad,

isNamePartTypeOf, que es la propiedad inversa de namePartType,

perteneciente a EntityNamePart.

• NamePartQualifier: Es un código que indica la calificación del nombre.

Por ejemplo, nombre de soltero, preferido, de nacimiento… Tiene una

única propiedad, isNamePartQualifierOf, que es la propiedad inversa de

namePartQualifier, perteneciente a EntityNamePart.

• ModeCodeLanguage: Es un código que indica el tipo de comunicación

de un idioma. Por ejemplo, escrito, hablado… Tiene una única

propiedad, isModeCodeLanguageOf, que es la propiedad inversa de

modeCodeLanguage, perteneciente a LanguageComunication.

• JobType: Indica el tipo de trabajo que tiene un personal sanitario. Por

ejemplo, médico, enfermero, celador… Tiene una única propiedad,

isJobTypeOf, que es la propiedad inversa de jobType, perteneciente a

HealthcarePerson.

• JobSection: Indica la sección en la que trabaja un personal sanitario. Por

ejemplo, cardiología, pediatría, urología… Tiene una única propiedad,

isJobSectionOf, que es la propiedad inversa de jobSection, perteneciente

a HealthcarePerson.

• DeterminerCodePerson: Representa el código de la instancia de una

persona. Tiene una única propiedad, isDeterminerCodePersonOf, que es

la propiedad inversa de determinerCodePerson, perteneciente a Person.

• ContractType: Es un código que indica el tipo de contrato laboral que

tiene una persona. Por ejemplo, temporal, indefinido… Tiene una única

propiedad, isContractTypeOf, que es la propiedad inversa de

contractType, perteneciente a HealthcarePerson.

• ClassCodePerson: Representa el código de una persona. Tiene una

única propiedad, isClassCodePersonOf, que es la propiedad inversa de

classCodePerson, perteneciente a Person.

• AdministrativeGenderCode: Es un código que indica el sexo de una

persona. Tiene una única propiedad, isAdministrativeGenderCodeOf, que

es la propiedad inversa de administrativeGenderCode, perteneciente a

Person.

• AddressUse: Representa el uso o los usos que una persona le da a una

dirección. Por ejemplo, vivienda habitual, vivienda de vacaciones,

dirección del trabajo… Tiene una única propiedad, isAddressUseOf, que

es la propiedad inversa de addressUse, perteneciente a PostalAddress.

• AddressLineType: Indica el tipo de una parte de la dirección. Por

ejemplo, calle, número, ciudad… Tiene una única propiedad,

isAddressLineTypeOf, que es la propiedad inversa de addressLineType,

perteneciente a PostalAddressPart.

En la figura 3.2 vemos las propiedades de CodedSimpleValue dentro de

Protégé 2000. No se le imponen ninguna restricción a ninguna de estas

propiedades.

Fig. 3.2: Propiedades de CodedSimpleValue

3.1.2.2 CodedValue

Esta clase es un dato codificado, especificando sólo un código, y opcionalmente

el nombre display y el texto original. Esta clase tiene una serie de subclases, las

cuales tienen instancias que representan códigos. Este tipo se usa cuando por

algún caso de uso requiera sólo un valor simple de código para ser enviado.

Aparece definida en el cen data types version 4.0.

Los atributos de CodedValue definidos en la norma son los siguientes:

Nombre de

Atributo

Tipo

Definición

codeValue

String String que contiene los valores del código

displayName String String que contiene una corta descripción del

concepto.

codingScheme OID

Object Identifier (OID) definido en ISO/IEC 8824-

1 que identifica unívocamente el esquema de

código al cual el concepto y el valor del código

pertenecen.

codingScheme

Name

String String que contiene un nombre del código.

codingScheme

Version

String String calificando la versión del código.

originalText

String String que describe un elemento dentro de un

código.

Por tanto, en nuestra ontología hemos definido las siguientes propiedades para

CodedValue:

• codeValue: Se trata de un DatatypeProperty, del tipo String. Es una

propiedad funcional, por tanto sólo puede tener un valor.

• displayName: Se trata de un DatatypeProperty, del tipo String. Es una

propiedad funcional, por tanto sólo puede tener un valor.

• codingScheme: Se trata de un DatatypeProperty, del tipo String. Es una

propiedad funcional, por tanto sólo puede tener un valor.

• codingSchemeName: Se trata de un DatatypeProperty, del tipo String.

Es una propiedad funcional, por tanto sólo puede tener un valor.

• codingSchemeVersion: Se trata de un DatatypeProperty, del tipo String.

Es una propiedad funcional, por tanto sólo puede tener un valor.

• originalText: Se trata de un DatatypeProperty, del tipo String. Es una

propiedad funcional, por tanto sólo puede tener un valor.

A continuación vemos las subclases definidas para esta clase. Todas las

subclases heredan las propiedades de CodedValue. Las subclases son:

• EthnicCodeGroup: Es un código que indica las razas a las que puede

pertenecer una persona. Tiene una única propiedad,

isEthnicCodeGroupOf, que es la propiedad inversa de ethnicCodeGroup,

perteneciente a Person.

• EmploymentStatusCode: Es un código que indica el estado de una

persona respecto al trabajo. Por ejemplo, empleado, desempleado,

jubilado… Tiene una única propiedad, isEmploymentStatusCodeOf, que

es la propiedad inversa de employmentStatusCode, perteneciente a

Patient.

• LanguageCode: Código que indica los idiomas con los que una persona

se puede comunicar. Tiene una única propiedad, isLanguageCodeOf, que

es la propiedad inversa de languageCode, perteneciente a

LanguageComunication.

• LivingArrangmentCode: Es un código que indica la situación de una

persona respecto a su vivienda. Por ejemplo, vivienda propia, alquilada,

residencia… Tiene una única propiedad, isLivingArrangmentCodeOf,

que es la propiedad inversa de livingArrangmentCode, perteneciente a

Patient.

• MaritalStatusCode: Se trata de un código que indica el estado civil de

la persona. Tiene una única propiedad, isMaritalStatusCodeOf, que es la

propiedad inversa de maritalStatusCode, perteneciente a Patient.

• NationalityCode: Se trata de un código que indica las nacionalidades

que puede tener una persona. Tiene una única propiedad,

isNationalityCodeOf, que es la propiedad inversa de nationalityCode,

perteneciente a Patient.

• ReligeousAfiliationCode: Es un código que indica la afiliación religiosa

de una persona. Tiene una única propiedad,

isReligeousAfiliationCodeOf, que es la propiedad inversa de

religeousAfiliation, perteneciente a Patient.

• RiskCode: Es un código que indica el riesgo que tiene un paciente.

Tiene una única propiedad, isRiskCodeOf, que es la propiedad inversa de

riskCode, perteneciente a Patient.

• DisabilityCode: Se trata de un código que indica discapacidades que

puede tener una persona. Tiene una única propiedad, isDisabilityCodeOf,

que es la propiedad inversa de disabilityCode, perteneciente a Patient.

En la figura 3.3 vemos las propiedades de CodedValue, dentro de Protégé

2000. Estas propiedades no tienen restricciones.

Fig. 3.3: Propiedades de CodedValue

3.1.2.3 IntervalOfTime

Esta clase aparece definida en el cen data types version 4.0. De acuerdo con

ISO 8601 un IntervalOfTime puede ser expresado del siguiente modo:

a) Por un comienzo y un final de fecha/hora.

b) Por una duración no asociada a un comienzo o final de fecha/hora.

c) Por un comienzo y una duración de tiempo.

d) Por una duración y un final de tiempo.

Nombre de

Atributo

Tipo Definición

Low

TS

El límite inferior del intervalo.

High

TS

El límite superior del intervalo.

lowClosed

BL

Un Boolean indicando si el límite inferior del intervalo

es cerrado o abierto, es decir, si el límite inferior forma

parte del intervalo o no.

highClosed BL

Un Boolean indicando si el límite superior del

intervalo es cerrado o abierto, es decir, si el límite