LABORATORIO ARQUITECTURAS SOFTWARE DE VARIOS
NIVELES EN JAVA (I)
Los objetivos de este laboratorio son:
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:
Nota: Si teneis algún problema recordad el punto 4 y 4.1 del laboratorio 1.
Para la caja de texto de la parte inferior del frame, es conveniente no usar el componente JTextField (en su lugar, JTextPane o JTextArea) y añadirle unas barras de desplazamiento (o scroll) mediante el contenedor JScrollPane.
2.- Crear un nuevo frame (nombre de la clase Presentacion) que tenga la siguente forma:
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:
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 no deje entrar a ningún usuario;
- que deje entrar a cualquier usuario.
4.- Eliminar el método main de la clase Presentacion y crear un método main en la clase Lanzador que cree una instancia de LanzadorFrame. 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.
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 Lanzador, 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?
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 =
//
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 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
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.
En este enlace se allá una descripcion más detallada de cada uno de los pasos llevados a cabo en este laboratorio: Laboratorio_Detallado