Configuración limitada de dispositivos conectados
# Configuración limitada de dispositivos conectados

La configuración limitada de dispositivos conectados (Connected Limited Device Configuration, CLDC) es una especificación para el framework de aplicaciones Java ME describiendo un conjunto de bibliotecas básicas y características de máquina virtual que deben estar presentes en una implementación.

La CLDC está combinada con uno o más perfiles para dar a los desarrolladores una plataforma para construir aplicaciones en dispositivos embebidos con recursos muy escasos como mensáfonos (pagers) y dispositivos móviles.

La CLDC se desarrolló bajo la comunidad de JAVA (Java Community Process) en JSR 30 (CLDC 1.0) y JSR 139 (CLDC 1.1).

## Requisitos típicos

CLDC está diseñado para dispositivos que tienen capacidad de procesamiento, memoria y capacidades gráficas limitadas. Los dispositivos, normalmente tienen las siguientes características.

* CPU de 16-bits o 32-bits con una velocidad de reloj de 16MHz o más.
* Por lo menos 160 KB ROM reservados para las bibliotecas de CLDC y la máquina virtual.
* Por lo menos 8 KB RAM disponibles para la plataforma de JAVA.
* Bajo consumo de energía, normalmente operando en energía de batería.
* Conectividad a algún tipo de red, normalmente inalámbrico, conexión intermitente y ancho de banda limitado.

## Limitaciones notables

A diferencia con el entorno de Java SE, varias API están en ausencia completamente, y algunas API fueron alteradas para que el código pueda explícitamente soportar el CLDC. En particular, algunos cambios no solamente son la ausencia de clases o interfaces, sino que en realidad cambia las firmas de las clases existentes en la biblioteca base. Un ejemplo de esto es la falta de interfaz Serializable, la cual no aparece en las bibliotecas de CLDC debido a las restricciones en uso reflejado. Todas las clases de la clase java.lang.* la cual normalmente implementa Serializable no lo hace, por lo tanto implementa una interfaz de marcado.

Otros ejemplos de limitación dependen de la versión utilizada, así como algunas características fueron re-introducidos con la versión 1.1 de CLDC.

### CLDC 1.0 y 1.1

* La interfaz Serializable no está soportada.
* Partes de la capacidad de reflexión de Java standard edition:
   * El paquete java.lang.reflect y ninguna de sus clases está soportado.
   * Métodos en java.lang.Class la cual obtiene Constructores, Métodos o Campos.
* No hay finalización. CLDC no incluye el método de Object.finalize.
* Manejo de error limitado. Los errores que no son de runtime son manejados por terminación de la aplicación o por reiniciar el dispositivo.
* No cargadores de clases definidos por usuario.
* No grupos de threads ni threads daemon.

## Perfiles

Un perfil es un set de API que son soportados por los dispositivos con diferentes capacidades y recursos dentro del framework CLDC para proveer un entorno completo de aplicaciones de Java. Hay perfiles para los dispositivos abarcando desde expendedoras hasta decodificadores de televisión, dentro de los teléfonos móviles MIDP es la más predominante.

### MIDP (Mobile Information Device Profile)

Mobile Information Device Profile o Perfil para dispositivos móviles de información es un perfil diseñado para teléfonos móviles. Hay dos versiones de MIDP disponibles, especificado en JSR 37 (MIDP 1.0) y en JSR 118 (MIDP 2.0). Ambas versiones proveen un API de interfaz gráfico orientado al LCD, con el MIDP 2.0 que hasta incluye API básico para juegos en 2D. A las aplicaciones que escritas para usar este perfil se las conoce como MIDlets. Muchos teléfonos vienen con una implementación de MIDP, y es una plataforma popular para juegos descargables para móvil.

### Perfil para Información de Módulo

El perfil de información de módulo está especificado en JSR 195 y está diseñado para máquinas expendedoras, tarjetas de red, routers, teléfonos públicos y otros sistemas simples o sin display y con algunas formas de acceso a la red bidireccional. Solamente se definieron las API para la creación, almacenamiento y acceso a la red. Estas son un conjunto de javax.microedition.io, rms y paquetes de midlet en MIDP. Siemens mobile y Nokia pusieron las especificaciones para este JCP.

### Perfil DoJa

El perfil DoJa fue diseñado para los equipos móviles en i-mode de NTT DoCoMo.

### Perfil para descodificador digital

El perfil para descodificador digital, especificado en JSR 242, está diseñado para un mercado de cable. También se le conoce como OnRamp. Este perfil está basado en un subconjunto de OpenCable Applicacion Platform (OCAP), la cual define un conjunto de interfaces de programación de aplicaciones para el desarrollo de aplicaciones para descodificadores y dispositivos similares. Este perfil consiste en subconjuntos de CDC Personal Basis Profile incluyendo el soporte para AWT, Xlet, acceso de archivo y API de red, al igual que varios interfaces de media de OCAP. El perfil completo incluye 31 paquetes de Java y aproximadamente 1500 API.

## Paquetes opcionales

Los paquetes opcionales de PDA fueron especificados en JSR 75 y fue diseñado para PDAs como Palm OS o Windows CE. Las especificaciones definen dos paquetes independientes que representan características especiales que pueden ser encontrados en los PDAs y otros dispositivos móviles. Estos paquetes son:

* Personal Information Management (PIM) o gestión de información personal, la cual permite el acceso a dispositivos acceder a la información personal que está en libreta de contactos, calendario y listas de to-do
* FileConnection (FC) o conexión de archivos, la cual permite el acceso a los archivos de sistema y de memoria extraíble, como tarjetas de memoria externa.

## API general

### java.io

    Versión minimizada del paquete java.io que puede ser encontrado en la edición estándar para hacer las operaciones de entrada/salida.

### java.lang

    Contiene clases que son esenciales para el lenguaje Java. Este paquete contiene tipos de dato de la versión estándar de Java como enteros (integer) y string así como excepciones básicas, funciones matemáticas, funciones de sistema, threading y funciones de seguridad.

### java.util

    Versión minimizada de la biblioteca de colección java.util. Este paquete contiene la colección de las clases como Vector y Hashtable. También contiene Calendar y clases para las fechas.
