Download PRESENTACIÓN DE JDEVELOPER

Document related concepts
no text concepts found
Transcript
PRESENTACIÓN DE JDEVELOPER
LABORATORIO ARQUITECTURAS SOFTWARE DE
VARIOS NIVELES EN JAVA (I)
SEPARACIÓN DEL NIVEL DE PRESENTACIÓN Y LÓGICA DE NEGOCIO
MEDIANTE EL USO DE INTERFACES JAVA
1. OBJETIVO
Los objetivos de este laboratorio son:
Comprender cómo se puede separar en clases diferentes el nivel de presentación y el nivel de lógica
de negocio.
Mostrar la utilidad de las interfaces Java, las cuales permiten que un objeto de una clase solicite, en
tiempo de compilación, a un objeto de otra clase NO CONOCIDA la ejecución de un método
concreto (el nombre de este método sí será conocido porque estará definido en la interfaz Java).
Comprender también que es posible independizar el nivel de presentación y el nivel de la lógica de
negocio, de forma tal que no haga falta recompilar el nivel de presentación cuando se cambie la
lógica del negocio, e incluso que sea posible hacerlo incluso en TIEMPO DE EJECUCIÓN.
2. TAREAS A REALIZAR
Crear una carpeta de trabajo donde almacenar los proyectos .jpr, los
fuentes .java, las clases .class, el workspace .jws, y los ficheros .html.
Nota: Si teneis algun problema recordad el punto 1 al 2.2 del laboratorio 1.
1.- Crear un proyecto con una clase aplicación asociada (nombre de la clase: Lanzador).
Asociaremos también a esa aplicación un frame (la clase LanzadorFrame). Diseñar
este último frame para que tenga esta forma:
Página 1
PRESENTACIÓN DE JDEVELOPER
Nota1: Si teneis algún problema recordad el punto 4 y 4.1 del laboratorio 1.
Nota2: Sed coherentes, si habeis creado un Frame del tipo Swing (javax.swing.Frame)
usad los objetos asociados a los mismos. De igual modo si habeis seleccionado AWT
(java.awt.Frame).
2.- Crear un nuevo frame (nombre de la clase Presentacion) que tenga la siguente
forma, recordad sed coherentes.
Añadir también un label (inicialmente sin texto) para que se pueda escribir mensajes
informativo al usuario (del tipo, si se le permite entrar en el sistema o si se ha producido
algún error). Añadir un método main a la clase, para que cuando se ejecute la clase
Presentacion, se cree una instancia de presentación y se haga visible.
Probad a ejecutar la presentación e intentad acceder al sistema. ¿Qué sucede? ¿Por qué?.
Al no haber asociado ningun evento la presentación sólo se visualiza; no reacciona.
3.- Crear la lógica del negocio, la cual consiste en una unica operación que permite o no
ingresar al sistema según un nombre de usuario y un password. Para ello haced lo
siguiente:
Página 2
PRESENTACIÓN DE JDEVELOPER
a) Crear una interface Java (de nombre InterfaceLogicaNegocio) que
contenga un método llamado hacerLogin que acepte como parámetros 2 strings (nombre
de usuario y password) y que devuelva un valor booleano (true si permite hacer login y
false si no).
Nota: En Java no existe el tipo string. Es la clase String (y más concretamente
java.lang.String)
b) Escribir al menos dos clases (EntradaSistemaXXX y EntradaSistemaYYY)
que
proporcionen
implementaciones
distintas
a
la
interfaz
InterfaceLogicaNegocio, esto es, al método hacerLogin.
Posibles implementaciones (por si no se os ocurren):
- que deje solamente entrar al sistema a un usuario con el nombre “invitado” y
password “hola”;
- que no deje entrar a ningún usuario;
- que deje entrar a cualquier usuario.
Nota: En Java, para comparar si dos objetos de la clase String son iguales hay que hacerlo
con el método equals: s.equals(“invitado”). Así no funciona: s ==
“invitado”
4.- Añadir un atributo al frame Presentacion para que permita almacenar el objeto con
la lógica del negocio y un método público setLogicaNegocio que permita asignar un
objeto del tipo InterfaceLogicaNegocio.
Página 3
PRESENTACIÓN DE JDEVELOPER
5.- Programar los eventos correspondientes al frame Presentacion, para que cuando
se pulse el botón “Acceder al sistema” se pida al objeto con la lógica del negocio que
ejecute el método hacerLogin con los valores actuales que se encuentran en las dos
cajas de texto y que escriba en la interfaz gráfica (en concreto, en el objeto Label) si nos
han dado permiso para acceder al sistema, si no nos lo han dado, o si todavía no se ha
asignado el objeto con la lógica del negocio. Si teneis algun problema recurrid al punto
4.2. del lab 1.
Probad a ejecutar la presentación e intentad acceder al sistema. ¿Qué sucede? ¿Por qué?
Nos da error porque la logica de negocio no esta asociada, solucionad esto, prestando
atencion a la primera línea de excepcion.
6.- Modificar el método main da la clase Presentacion, para que cuando se ejecute la
clase Presentacion, se le asigne al objeto de presentación la lógica del negocio; habrá que
crear una instancia de la clase con la lógica del negocio que se quiera utilizar
(EntradaSistemaXXX o EntradaSistemaYYY). Probad a ejecutar la presentación e intentad
acceder al sistema.
¿Qué habría que hacer para cambiar la lógica del negocio a ejecutar? ¿Habría que
recompilar la clase de presentación y la lógica del negocio?. A continuación, se va a
mostrar cómo es posible modificar la lógica del negocio que el objeto de presentación está
ejecutando, sin tener que recompilar la clase Presentacion, ni siquiera relanzar el objeto de
presentación. Esto es, cómo es posible cambiar la lógica del negocio en tiempo de
ejecución.
7.- Programar el evento correspondiente al frame LanzadorFrame para que cuando se
pulse el botón “Ejecutar Presentación” se cree y se muestre el objeto de presentación (de
la clase Presentacion).
8.- Programar el evento correspondiente al frame LanzadorFrame para que cuando se
pulse el botón “Asignar Lógica del Negocio” se le asigne al objeto de presentación el
objeto con la lógica del negocio, para ello
a) Crear una instancia de una clase cuyo nombre es el que aparece en la caja de texto del
frame LanzadorFrame. El objeto de esta clase (conocida en tiempo de ejecución) es el
que se asignará al objeto presentación utilizando el método setLogicaNegocio. Para
crear un objeto de una clase de manera dinámica (sin conocer su nombre en tiempo de
compilación) se puede usar el método forName de java.lang.Class:
InterfaceLogicaNegocio intLN =
(InterfaceLogicaNegocio)Class.forName(jTextField1.getText()).newInstance();
// para crear una instancia de la clase cuyo nombre está en “jTextField1”
Si compilais vereis que esta sentencia produce excepciones, atrapadlas.
b) Y asignarle dicha lógica del negocio al objeto de presentación utilizando el método
Página 4
PRESENTACIÓN DE JDEVELOPER
b) Y asignarle dicha lógica del negocio al objeto de presentación utilizando el método
setLogicaNegocio de la clase Presentacion.
9.- Ejecutar la aplicación y probar cómo se puede cambiar la lógica del negocio del objeto
presentación EN TIEMPO DE EJECUCIÓN
Si lanzais el nivel de presentación (al pulsar “Ejecutar Presentación”) pero no le asignais
la lógica del negocio, en la ventana de presentación aparece el texto “PROBLEMAS CON
LA LÓGICA DEL NEGOCIO” al intentar acceder al sistema.
En cambio, si se le asigna una lógica del negocio concreta: la definida en la clase
EntradaSistemaXXX que permite entrar al usuario “invitado” con password “hola”...
NOTA: El nombre de la clase con la lógica del negocio hay que ponerlo completo. Esto es:
NombrePaquete.NombreClase
Página 5
PRESENTACIÓN DE JDEVELOPER
Entonces sí permitirá el paso a dicho usuario con ese password. Pero no a otros usuarios...
Probar a asignar otra lógica del negocio concreta: la definida en la clase
EntradaSistemaYYY que permite entrar a cualquiera… Nótese que SE ESTÁ
EJECUTANDO LA MISMA PRESENTACIÓN, ya que no hemos vuelto a pulsar el botón
“Ejecutar Presentación”, y sin embargo, ahora sí deja entrar a cualquiera… En concreto al
mismo usuario “invitadooo” anterior.
Página 6
PRESENTACIÓN DE JDEVELOPER
En este enlace se encuentra la solución del laboratorio: SOLUCION LABORATORIO 2.1
En este enlace se allá una descripcion más detallada de cada uno de los pasos llevados a
cabo en este laboratorio: Laboratorio_Detallado (PDF)
Una vez que acabemos el laboratorio hay que eliminar del disco duro la
carpeta de trabajo con los proyectos .jpr, los fuentes .java, las clases
.class, y el workspace .jws
Página 7