Beruflich Dokumente
Kultur Dokumente
10 mayo 2002
Introducción a
Java y WebObjects
Introducción a la Arquitectura
Programación y Tecnología de
Java y WebObjects
10 mayo 2002
PAGINA - 1
PAGINA - 2
Introducción a Java-WebObjects
INDICE
PAGINA - 3
PAGINA - 4
PAGINA - 5
PAGINA - 6
APENDICES
i. Convenciones
1. Introducción
2. Nombre de Archivos
3. Sufijos
4. Nombre común de los archivos
5. Organización de Archivos
6. Archivos fuente de Java
a. Comentarios
b. Paquetes y estamentos de importación
c. Declaración de Clases e Interfaces
7. Identación
8. Longitud de la línea
9. Líneas envolventes
10. Comentarios
11. Implementación de Formatos
a. Comentarios en bloques
b. Comentarios de línea simple
c. Comentarios grandes
d. Comentarios de final de línea
12. Comentarios para la documentación
13. Declaraciones
14. Posición
15. Inicialización
16. Declaración de Clases e Interfaces
17. Estamentos
18. Estamentos simples
19. Estamentos compuestos
20. Estamentos de retorno
21. Estamentos if, if-else, if-else-if
22. Estamento for
23. Estamento while
24. Estamento do-while
25. Estamento switch
26. Estamento try-catch
ii. Espacios en blanco
PAGINA - 7
1. Líneas en blanco
2. Espacios en blanco
iii. Convención de nombres
iv. Prácticas de programación
1. Proporcionar acceso a instancias y variables de Clase
2. Referenciar métodos y variables de una Clase
3. Constantes
4. Asignación de variables
5. Miscelánea
6. Paréntesis
7. Valores de retorno
8. Expresiones antes de la “?” en el Operador Condicional
9. Comentarios especiales
10. Ejemplos
11. Ejemplos de archivos fuente en Java
v. Introducción a WebObjects
1. Qué es WebObjects
2. Enterprise Objects
3. Aplicaciones basadas en HTML
4. Aplicaciones “Direct to Web”
5. Aplicaciones Cliente Java
6. Aplicaciones “Direct to Java”
7. Seleccionando una aproximación
vi. Java para programadores de WebObjects
1. Usando Objetos
2. Creando Clases
3. Conceptos avanzados
4. Manejo de excepciones
5. Recursos adicionales
vii. WebObjects y EOF
1. Introducción a WebObjects: El primer proyecto
2. Desarrollando contenidos dinámicos
3. Manejando entradas de Usuario
4. Comunicación entre Componentes
5. Uso de la Sesión para gestionar estados
6. Introducción a las Bases de Datos
7. Introducción a EOF
PAGINA - 8
PAGINA - 9
PAGINA - 10
Revisión 0.95
10/5/02 18:09:50
PAGINA - 11
PAGINA - 12
PARTE 1. Java
Introducción
El año 1993 marca el inicio de la revolución de Internet mediante la utilización de la Web. Esta
herramienta, desarrollada por el CERN estandarizó el acceso a la información, la navegación por
hipertexto y la facilidad de desarrollo mediante el lenguaje HTML, lo que hizo crecer el número
de usuarios de la red de forma exponencial.
Como el proyecto para el que fue diseñado OAK no tuvo el éxito esperado, Sun rápidamente se
dirigió al nuevo medio de comunicación. Las cualidades de transportabilidad y el tamaño
compacto del lenguaje OAK lo hacía idóneo para su uso en Internet, conocido por su baja
velocidad de acceso y la heterogeneidad de las máquinas conectadas. El proceso de adaptación
duro cerca de dos años.
En 1995, OAK pasa a llamarse Java. Java agrupa todas las características de un verdaderos
lenguaje profesional pues es simple, flexible y potente. Sus características principales son:
Orientado a objetos
Con estas características Java está muy bien adaptado para soportar las múltiples exigencias de
los desarrollos informáticos:
PAGINA - 13
Multihilo
Con esta característica se pueden desarrollar muy fácilmente flujos de ejecución concurrentes
en una misma aplicación, lo que proporciona nuevas posibilidades a los usuarios, pero también
permite que Java funcione en máquinas multiprocesador, sin grandes problemas de adaptación.
Enlace dinámico
En Java no existe una fase de enlazado (link), proceso que interviene tras la compilación, y tiene
por objetivo enlazar las bibliotecas externas con el programa. La verificación de la existencia de
las bibliotecas se hace en el momento de la compilación, y la carga del código de estas
bibliotecas se hace en la ejecución. La consecuencia de este proceso es la reducción del tamaño
del ejecutable y optimiza la carga de las bibliotecas.
Gestión de memoria
Java dispone, de modo estándar, de un mecanismo de recogida de basura (garbage collector)
que se ocupa de limpiar la memoria de todos los objetos que ya no se utilizan. Otro aspecto
importante es la desaparición de la noción de puntero. Esto responde a un doble problema:
Simplificado
La sintaxis de Java es simple. La ausencia de punteros, la recogida de basura, la obligación de
estructurar el código fuente, la ausencia de variables globales y la obligación de tratarlo todo
bajo la forma de objetos confiere al lenguaje una gran legibilidad.
Seguro
El lenguaje aumenta la seguridad en la implementación del código ya que, el código no debe
sobrepasar las protecciones impuestas por el lenguaje; no debe intentar construir punteros de
acceso directo a memoria; no debe utilizar un objeto en lugar de otro, ni tampoco debe
provocar desbordamiento de pila. Pero también realiza verificaciones de alto nivel como, por
ejemplo, la verificación de que los programas no accedan a recursos prohibidos.
PAGINA - 14
PAGINA - 15
Introducción
La programación procedimental clásica (usada en COBOL, Fortran o C, entre otros) tiene dos
componentes fundamentales: datos y código. Los datos representan aquello que el usuario
necesita manipular mientras que el código lleva a cabo la manipulación. Para poder gestionar y
mantener adecuadamente ambos conceptos, la programación procedimental los aglutina en
procedimientos. Pero muchos de estos datos son globales y cualquier procedimiento puede
modificar estas variables globales en cualquier lugar directamente.
Con este enfoque una interacción en red entre procedimientos y datos aumenta
considerablemente la complejidad cuando la aplicación crece e inevitablemente esta interacción
hace muy difícil el mantenimiento (código-spaghetti). Un simple cambio en una estructura de
datos puede afectar a muchos procedimientos y a muchas líneas de código. Además la
programación procedimenal hace difícil la corrección de errores y la depuración cuando una
función hace cambios inadvertidamente en datos que necesita otra función. Los objetos
cambian esta perspectiva.
Al igual que los objetos del mundo real, los objetos en un programa tienen características y
comportamientos identificativos. Con frecuencia los objetos de programación están modelados
desde el mundo real. Por ejemplo, un objeto botón que incluye datos y código que muestra una
PAGINA - 16
apariencia en la pantalla el cual simula un botón real y responde de manera familiar a las
acciones de un usuario.
La encapsulación
Compartir código y datos se denomina encapsulación de datos. Habitualmente, un objeto se
observa como una caja negra de manera que ninguna parte del programa puede acceder
directamente a las variables. En efecto, un programa sólo puede acceder a los datos de un
objeto por medio de sus métodos. Los métodos envuelven los datos, no sólo como variables de
instancia del objeto, sino también con métodos de acceso. Cada objeto encapsula un área
particular de la funcionalidad que necesita el programa. Los métodos proporcionan el interfaz a
esta funcionalidad. Usando esta modularidad, los programas orientados a objetos pueden
dividirse en distintos objetos para datos específicos y para tareas específicas.
Los mensajes
Para invocar a un método de un objeto se le debe enviar un mensaje. Un mensaje hace una
petición a un objeto para que realice una funcionalidad específica o para devolver un valor. El
valor devuelto debe recibirlo una variable del mismo tipo. La Programación Orientada a Objetos
es algo más que otra forma de organizar datos y funciones. POO permite a los programadores de
aplicaciones construir soluciones a programas complejos usando un modelo para que se
asemeja –mucho mas que un programa tradicional- al mundo que lo rodea.
En una aplicación cada ventana se representa como un objeto por separado, al igual que cada
botón, ítem de un menú, o una cadena de texto. Las aplicaciones también asignan objetos que
funcionalmente no tienen representación en el interface. Estos objetos pueden hacer tareas
computacionales muy específicas como manejo de pantallas o transferencia de datos mediante la
interacción entre objetos del interfaz del usuario y objetos computacionales. Una vez que se han
definido los objetos, crear un programa es hacer una amalgama de esos objetos: crear la
conexión de los objetos que se usarán para comunicarse unos con otros.
PAGINA - 17
Clases
Muchos de los objetos en red son de categorías diferentes y otros son de la misma. Los objetos
que son de la misma categoría pertenecen a la misma clase. Una clase es un entidad de
programación que crea instancias de sí misma –objetos. Una clase define una estructura, un
interfaz de instancias y un comportamiento determinado. Cuando se necesita una nueva
categoría de objetos se define una nueva clase. Se pueden definir muchos objetos a partir de
una clase. En este sentido, se puede decir que una clase es una fábrica particular de objetos. En
términos de líneas de código, un programa orientado a objetos consiste, principalmente, en
hacer definición de clases. Los objetos se crean y trabajan dinámicamente en la ejecución de un
programa usando la definición de la clase. No obstante, una clase es algo más que una fábrica de
objetos.
Una clase puede tener asignados métodos y recibir mensajes al igual que lo hace un objeto. De
hecho, su nombre es clases Object.
La herencia es uno de los aspectos mas potentes de la programación orientada a objetos. Las
instancias de una clase heredan los atributos y comportamientos desde la clase ascendente. La
clase que hereda los atributos y el comportamiento se llama subclase y la clase de la cual hereda
PAGINA - 18
se llama superclase. Cualquier método y atributo definidos –o heredados- en una superclase los
hereda una subclase.
Cada subclase necesita implementar sólo aquellas partes en las que se diferencian de la
superclase. Es más, el diseño jerarquizado asume una codificación más robusta. ya que la nueva
codificación en una subclase está únicamente limitados a la implementación de un
comportamiento, el cual es más fácil de depurar y testar. Cualquier clase puede ser clase de una
nueva subclase. La herencia permite fácilmente la extensibiliad.
PAGINA - 19
Modelo de objeto
PAGINA - 20
PAGINA - 21
Definiciones y conceptos
El enfoque Orientado a Objetos se caracteriza por una estructuración de los programas en clases
de objetos. Este enfoque aporta una importante contribución, por su potencia de abstracción,
de generalización y de interacción, y por la simplificación de los procesos de adaptación y de
extensión de clases. El enfoque a objetos consiste en definir las características de los objetos que
constituyen una aplicación para posteriormente implementar su interacción por medio del
intercambio de mensajes.
Objetos
Un objeto comporta un aspecto estático que representa su estado por medio de variables de
instancias, llamadas también atributos. Este aspecto estático queda oculto por un aspecto
dinámico que representa el comportamiento del objeto. Este último corresponde a las
operaciones que se pueden realizar sobre un objeto. Los objetos similares están agrupados en
un tipo abstracto.
Según el enfoque clásico un programa de aplicación consta de tres partes: la primera, contiene
la estructura de datos (definición de los tipos y variables); la segunda, es la parte de las
PAGINA - 22
La POO responde a este problema por medio de la encapsulación de los datos y las operaciones
que los manipula en el interior de objetos. La encapsulación aplica el principio de abstracción:
un objeto sólo es accesible por sus operaciones visibles (su interfaz externa), y su
implementación (las estructuras de datos asociadas) queda oculta. Una ventaja inmediata es que
diferentes programas de aplicación pueden compartir los mismos objetos sin tener que
conocerse.
Los conceptos de objeto y clase son interdependientes. Un objeto pertenece a una clase (es una
instancia de una clase) y una clase agrupa lógicamente los objetos de la misma estructura y con
el mismo comportamiento. correspondiéndose con el modelo Entidad-Relación, un objeto
sería un tupla y una clase una entidad. Un objeto es una abstracción de datos (TAD) que puede
esquematizarse del siguiente modo:
La identidad de un objeto viene dada por su identificador OID, único e invariable, que permite
referenciar al objeto independientemente de otros objetos.
Qué es un Objeto: Los objetos son la clave para entender la tecnología Orientada a Objetos. En
el mundo real los objetos comparten dos características: Todos tienen un estado y un
comportamiento. Por ejemplo, un perro tiene un estado (nombre, color, raza) y un
comportamiento (ladrando, buscando, caminando). Una bicicleta tiene un estado (numero de
engranajes, cadencia del pedal) y un comportamiento (acelerando, frenando, cambiando de
marchas).
Los objetos de software modelan objetos del mundo real para representar su estado y su
comportamiento. Un objeto de software mantiene su estado en una o mas variables –una
PAGINA - 23
Se pueden representar objetos del mundo real usando objetos de software pero también se
pueden modelar objetos abstractos, por ejemplo, un evento (suceso / acontecimiento) es un
objeto común que se usa en las ventanas del sistema del interfaces de usuario para representar
la acción de un usuario presionando el botón del ratón o la tecla del teclado.
Todo lo que el objeto de software conoce (estado) y puede hacer (comportamiento) se expresa
mediante las variables y los métodos que están dentro del propio objeto. Estas variables se
conocen formalmente como variables de instancia –ya que contienen el estado para un objeto
en particular y en terminología orientada a objetos, un objeto de software. Los métodos se
conocen formalmente como métodos de instancia.
Los diagramas de objetos muestran sus variables en el centro, o núcleo, del propio objeto. Los
métodos envuelven y esconden el núcleo de otros objetos. El empaquetado de las variables del
objetos mediante la protección de sus métodos se llama encapsulación –este gráfico conceptual
donde las variables en el núcleo del objeto, protegido por una membrana de métodos es un
diseño ideal. Por razones prácticas, a veces, un objeto puede exponer algunas de sus variables y
esconder algunos de sus métodos. En Java, un objeto puede especificar uno de cuatro niveles
de acceso (de paquete, público, protegido y privado) por cada variable o método. El nivel de
acceso determina qué objetos y clases pueden acceder a las variables y métodos de un objeto en
particular.
§ Modularidad: El código fuente para cada objeto puede ser escrito y mantenido
independientemente del código fuente de otros objetos. También, un objeto puede ser
pasado a otro sistema fácilmente.
§ Ocultación de la información: Un objeto tiene una interfaz pública que otros objetos
usan para comunicarse entre ellos. El objeto puede tener información privada y
métodos que pueden cambiarse en cualquier momento sin afectar para nada a otros
PAGINA - 24
La identidad y la igualdad de dos objetos son nociones distintas. Dos objetos o1 y o2 son
idénticos si sus OID son iguales. Dos objetos o1 y o2 son iguales si sus estados son iguales.
Dadas dos referencias a objetos o1 y o2, se dice que o1 = o2 si o1 y o2 son idénticos; se dice
que o1 =(1)o2 si los estados de o1 y o2 (caracterizados por valores y referencias a objetos) son
iguales. En caso que o1 y o2 contengan referencias a otros objetos, es posible recorrer estas
referencias y comprobar la igualdad de los estados referenciados. De manera más general, se
dirá que o1 = (n)o2 si los valores y los estados obtenidos después de n recorridos por las
referencias son iguales. La igualdad profunda de dos referencias de notación o1 = (*)o2 se
verifica si los valores obtenidos después de recorrer todas las referencias son iguales. Se cumple
que: o1 = (i)o2 => o1 = (i + 1)o2
Asociaciones
PAGINA - 25
Clases
Qué es una Clase: En el mundo real existen muchos objetos de la misma categoría y en el
software orientado a objetos también es posible tener muchos objetos de la misma categoría
compartiendo características comunes.
Una clase es un anteproyecto o un prototipo, que define las variables y los métodos
comunes a todos los objetos de una determinada categoría.
Además de las variables de instancia, las clases definen variables de clase –una variable de clase
contiene información que comparten todas las instancias de la clase. Si un objeto cambia este
tipo de variable todos los objetos del mismo tipo la cambian. Una clase también define métodos
de clase –Se puede invocar un método de una clase directamente desde la clase considerando
que se debe invocar métodos de instancia en una instancia particular.
Se puede observar que, a primera vista, los objetos y las clases parecen similares. De hecho, la
diferencia entre objetos y clases puede ser fuente de confusión. En el mundo real es obvio que
las clases no son los descriptores de los objetos: Un prototipo de una bicicleta no es una
bicicleta. Sin embargo, es algo más difícil diferenciar clases y objetos en software. Esto se debe a
que los objetos de software son modelos electrónicos de objetos del mundo real o abstracciones
conceptuales. Pero también es debido a que el término objeto se usa a veces para referirse tanto
a clases como a instancias.
Una clase fabrica la estructura y el comportamiento comunes a una colección de objetos (sus
instancias)
Una clase es un tipo abstracto de datos que define el tipo y el comportamiento comunes a
objetos (las instancias de la clase). Los atributos, llamados variables de instancia, tienen un
nombre y un tipo que es, o bien un tipo de base (simple o compuesto), o bien una clase.
PAGINA - 26
Los métodos son las operaciones aplicables a un objeto de la clase. Un método devuelve o
modifica la totalidad o parte del estado de un objeto (sin impacto en el OID).
Los métodos pueden considerarse funciones cuya firma define el tipo de los argumentos de
entrada y de salida.
El principio de encapsulación requiere que los atributos de la clase no sean accesibles desde el
exterior más que por medio de la llamada al método de lectura correspondiente. La
encapsulación permite aislar los programas de una clase de las modificaciones de la
implementación de los atributos. Se accede a los objetos mediante llamadas a los
procedimientos (métodos), como en un lenguaje de programación clásico.
PAGINA - 27
Mensajes
Qué es un Mensaje: Un objeto aislado, generalmente, no sirve para nada. En cambio, un objeto
aparece habitualmente como componente de un programa o una aplicación que contiene
muchos otros objetos. Mediante la interacción entre objetos, un programa alcanzará una mayor
funcionalidad y un comportamiento cada vez mas complejo.
Los objetos de software interactúan y se comunican unos con otros enviándose mensajes.
Cuando un objeto A necesita una funcionalidad del objeto B, el objeto A envía un mensaje al
objeto B. A veces, el receptor del mensaje necesita más información para conocer exactamente
qué tiene que hacer. Esta información se pasa en el mensaje a través de parámetros.
§ Los objetos no necesitan del mismo proceso en la misma máquina para enviar o recibir
mensajes entre ellos.
Envío de mensajes a los objetos: protocolo de comunicación entre objetos por invocación de
método público representado por el identificador del objeto receptor, el nombre del método y
los argumentos.
Grafos de clases: Una clase realiza varias funciones; por un lado es un tipo abstracto de datos y
por otro es un generador de instancias. Como tipos abstractos, las clases pueden ser
organizadas según la relación de generalización o relación es-un. Se habla entonces de un grafo
de clases o grafo de herencia. La generalización es útil para clasificar los objetos en función de
sus puntos comunes (generales)y de su especifidad por un mismo grafo.
Generalización: función que hace corresponder a una clase su origen, llamada subclase, una
clase más general, llamada superclase.
La función inversa de la generalización, que hace corresponder a una clase todas las subclases
de las cuales es superclase, se llama especialización. Esta función permite añadir propiedades
específicas (especializadas) a una subclase. La representación gráfica hace corresponder, por
medio de un arco orientado, la subclase situada bajo la superclase. La generalización se
PAGINA - 28
representa de modo natural por un O lógico. Esta relación es transitiva: una superclase de una
clase es también superclase de sus subclases.
Metaclase: clase generadora de clases (sus instancias), que agrupa en particular los métodos
aplicables a las clases y las estructuras de datos comunes a todas ellas.
Los métodos aplicables a las clases son la creación y la destrucción de instancias, y las
operaciones de evolución de las estructuras como añadir o suprimir un atributo. Para evitar una
regresión al infinito en el momento de crear la metaclase, ésta se admite como su propia
instancia. Entonces es fácil generalizar las nociones de clase y metaclase mediante una clase
única, la clase Object, que se convierte entonces en la raíz del grafo de clases. La clase Object
proporciona las propiedades comunes a todos los objetos (OID, método new, etc.)
Las asociaciones y conexiones entre objetos pueden ser descritas a nivel de clases por grafos de
agregación, que es el equivalente de la asociación (1-1, 1-N) entre entidades.
Agregación: relación entre dos clases que especifica qué objetos de una clase (clase anfitrión)
son los componentes de la otra clase (clase fuente).
PAGINA - 29
Colecciones
Es posible especializar una clase genérica llamada Colección en subclases tales como conjunto,
matriz o lista, de modo que éstas tengan cada una sus propios métodos de acceso a sus
elementos.
Interfaces
§ Capturar similitudes entre clases inconexas sin artificialidad forzando una relación entre
clases.
§ Declarar métodos que una o más clases esperan implementar.
§ Revelar la interface de programación de un objeto sin revelar la clase.
PAGINA - 30
La herencia
Qué es la Herencia: En general, los objetos se definen en términos de clases. Se puede conocer
perfectamente un objeto conociendo su clase. Los sistemas orientados a objetos toman esto para
permitir clases que definan otras clases.
La clase Object es la clase raíz de la jerarquía de clases, y cada clase desciende de ella directa o
indirectamente. Una variable de tipo Object puede ser soportada como una referencia de
cualquier objeto, como una instancia de una clase o un array. Object proporciona los
mecanismos necesarios para que todos los objetos funcionen en la Máquina Virtual Java
(JVM).
La herencia es la aportación especial de los lenguajes orientados a objetos. Puede ser simple o
múltiple y permite soportar el polimorfismo de los métodos. La organización de las clases según
la relación de generalización permite agrupar las propiedades comunes en el interior de una
misma clase sin duplicación en otras clases. El mecanismo de herencia permite a una subclase
heredar propiedades de todas sus superclases.
Herencia: mecanismo de paso de propiedades de una clase a una subclase. Si la clase C2 hereda
de la clase C1 (C2 subclase de C1), C2 posee todas las propiedades de C1. Desde el punto de
vista de instancia, una instancia de C2 es también una instancia de C1. Una instancia de C2
puede poseer también propiedades propias que reflejen su especifidad. La herencia permite
definir una relación de orden entre las clases que será útil para verificar la seguridad del tipado
de los métodos. Esta relación de orden indica por medio de C2≤C1 el hecho de que C2 posee
propiedades de C1. Es decir: C2 es subclase de C1 o C2 = C1. La clase de pertenencia de un
objeto es el que permite crearlo. Esta clase puede ser una subclase; el objeto hereda las
propiedades de sus superclases.
PAGINA - 31
PAGINA - 32
Polimorfismo.
A menudo es necesario redefinir un método heredado para poder darle una implementación
diferente (un código diferente), que tenga en cuenta propiedades locales (no heredadas) de la
clase.
El método redefinido tiene la misma firma que el método heredado, con la única diferencia del
argumento que designa el objeto sobre el que se aplica el método. La redefinición del método
m sería la siguiente:
El mecanismo de enlace dinámico se activa en el momento del envío del mensaje: el tratamiento
del mensaje consiste en seleccionar el código del método a ejecutar.
PAGINA - 33
Seguridad de tipos
El método se llama monoanfitrión. Para salvar estas limitaciones, la búsqueda se orienta hacia
los métodos multianfitrión, los cuales permiten la selección de métodos en función de varios
argumentos asegurando la integridad del tipado.
PAGINA - 34
Java e Internet
Si Java es, de hecho, otro lenguaje de programación, la pregunta que más le interesa a la
comunidad de programadores es qué aporta Java a la industria. La respuesta no es obvia desde
una perspectiva tradicional, ya que Java resuelve problemas clásicos mediante aplicaciones. Lo
que sí es más importante es que resuelve problemas de programación para la Red (World Wide
Web).
Si el software del cliente cambia, se debe compilar, depurar e instalar en cada uno de los
clientes, lo cual suele ser muy complicado y caro. La problemática se hace especialmente difícil
cuando existen diferentes ordenadores y sistemas operativos. Por último, la siempre importante
cuestión del rendimiento. Cuando un cliente hace una petición al servidor, éste debe responder
en un pequeño y crucial intervalo de tiempo. Para minimizar la latencia, los programadores
trabajan intensivamente para descargar al servidor de procesos, cargándolos en el cliente o
poniendo otras máquinas intermedias entre el servidor y el cliente, llamadas mediadores
(middlewares, usados también para mejorar el mantenimiento del sistema).
PAGINA - 35
La Red es realmente un gran sistema cliente-servidor, aunque es algo diferente ya que todos los
servidores y los clientes coexisten a la vez en una única red. No se necesita saber ni conocer
quién se conecta con quién o qué servidores interactúan con los clientes.
El navegador Web es un gran adelanto: el concepto de que una pieza de información pueda ser
mostrada en cualquier tipo de ordenador sin cambios.
Muchos sitios Web está hechos estrictamente en CGI. El problema es el tiempo de respuesta. El
tiempo de respuesta de un programa CGI depende de cómo envía los datos el servidor y de
cómo se cargan tanto el servidor como Internet (en un caso extremo, la carga de un programa
CGI tiende a ser lenta). La programación en el lado del cliente resuelve ciertos problemas.
Muchos equipos que ejecutan navegadores Web son máquinas muy potentes capaces de realizar
trabajos de computación muy pesados. La programación en la parte cliente permite que el
navegador Web haga el mayor número de tareas posibles, dando como resultado mayor
velocidad y mayor interactividad del sitio Web. Para realizar este trabajo o tareas la
programación en la parte cliente usa diferentes aproximaciones: Plug-ins, lenguajes de guiones
(scripts), Java, ActiveX, etc.
PAGINA - 36
enviar los datos y el cliente formatearlos en el equipo, lo que sería más rápido y descargaría de
trabajo al servidor.
Las peticiones a la base de datos deben procesarse mediante algún tipo de código situado en el
servidor. Tradicionalmente, la programación en la parte servidora se hace mediante Perl o
guiones CGI, pero están apareciendo sistemas más sofisticados, los cuales incluyen servidores
basados en Java, que permiten todas las funcionalidades necesarias en el servidor mediante
programas escritos en Java también llamados Servlets.
PAGINA - 37
struct Avion {
int altitud;
int velocidad;
flota longitud;
flota latitud;
}
La estructura de datos Avion es un nuevo tipo de dato a través de tipos internos de C. La propia
estructura no almacena información, es solamente un esquema para la creación de una nueva
variable de tipo Avion. Para declarar una variable de tipo Avion llamada boeing se podría utilizar
es siguiente código:
boeing.altitud = 300;
boeing.velocidad = 800;
En la programación no orientada a objetos, el código que accede a las variables miembro está
separado y es específico de cada tipo de datos. Para modificar el valor de un miembro de una
clase se podría escribir el código en forma de subrutina de la siguiente forma:
PAGINA - 38
if (unaVelociad > 0) {
unAvion.velocidad = unaVelocidad;
} else {
unAvion.velocidad = 0;
}
}
Ahora se podría hacer otra estructura derivada de Avion llamada AvionComercial del siguiente
modo:
struct AvionComercial {
int pasajeros;
int carga:
int altitud;
int velocidad;
flota longitud;
flota latitud;
}
Sin embargo la rutina general de asignación de velocidad no funcionaría, es decir, una llamada
de la forma establecerVelocidad(otroBoeing, 600) daría un error de compilación. Por lo
tanto, se tendría que duplicar el código para crear otra rutina llamada por ejemplo:
Sin embargo, la duplicación del código crea problemas de mantenimiento. Si por cualquier
razón se necesitase hacer cambios para diez estructuras diferentes, deberán modificarse las diez
rutinas asociadas. Además de ser difícil de conseguir, puede también introducir defectos
adicionales en el código.
PAGINA - 39
En la programación orientada a objetos, las rutinas para una estructura de datos y la propia
estructura de datos se combinan (están encapsuladas) en una entidad simple llamada clase.
Por ejemplo:
class Avion {
int altitud;
int velocidad;
flota longitud;
flota latitud;
La rutina establecerVelocidad es ahora una función miembro de la clase, es decir, forma parte
de la propia estructura. Al igual que la definición de la estructura, esta definición de clase es tan
sólo un esquema para las variables que se crearán en el tipo de datos Avion. Los tipo de datos
de la clase Avion son objetos Avion. En otras palabras, un objeto es un almacén de variables
que a su vez es un elemento de una clase. Las clases definen las variables y las rutinas que son
miembros de un objeto de dicha clase. A las rutinas o funciones miembro se les suele llamar
métodos.
PAGINA - 40
Avion unBoeing;
unBoeing.altitud = 300;
unBoeing.establecerVelocidad(400);
La herencia resuelve el problema de la duplicación del código. Por medio de las clases es
posible heredar tanto los datos como los métodos cuando se crea una nueva clase.
Por ejemplo:
La clase AvionComercial, una subclase de la clase Avion, hereda automáticamente todas las
variables y métodos de la clase Avion y se podría escribir el siguiente código:
AvionComercial av;
av = new AvionComercial();
av.altitud = 300;
av.pasajeros = 50;
av.establecerVelocidad(300);
PAGINA - 41
Las funciones polimórficas son funciones que responden indistintamente a los diferentes tipos
de datos que se les suministran. Java simplifica el código a través del polimorfismo de tres
formas:
Supóngase que ahora se necesita crear un informe que muestre tanto aeropuertos como vuelos
entrantes y salientes (aparentemente estas dos clases no provienen de una clase superior y por
lo tanto, no comparten herencia). Se podría implementar un método en cada clase para realizar
esta tarea. Por ejemplo:
class Aeropuerto {
String nombre;
void imprimirInforme() {
println(“Aeropuesto “ + nombre);
}
}
class Avion {
int altitud;
int velocidad;
flota longitud;
flota latitud;
PAGINA - 42
void imnprimirInforme() {
println(“Velocidad de vuelo “ + velocidad);
}
}
aeropuerto1.imprimirInforme();
avion1.imprimirInforme();
Informalmente, ambas clases tienen una interface común a la hora de mostrar el informe. Java
permite formalizar la interfaz de tal forma que pueda garantizarse que una clase funcionará con
todos los métodos que conforman una interfaz. Usando una interfaz formal, puede escribirse
una función que aceptará un argumento de cualquier clase que implemente una interfaz en
particular. Para definir usa interfaz se usa la siguiente sintaxis:
interface Imprimible {
void imprimirInforme();
}
La interface Imprimible no es una clase y, por consiguiente, no puede ser instanciada. Las
funciones miembro que se declaran en una interfaz son abstractas. Para implementar la interfaz
en las clases Avion y Aeropuerto se debe declarar cada una de ellas del siguiente modo:
PAGINA - 43
Y ahora se pude crear una clase GeneradorDeInformes que genere informes de cualquier
objeto que implemente la interfaz Imprimible:
class GeneradorDeInformes {
void crearInforme(Imprimible unObjeto) {
unObjeto.imprimirInforme();
}
}
PAGINA - 44
Ejercicios y cuestiones
PAGINA - 45