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: 

 

2.TAreas a realizar

Crear una carpeta de trabajo donde almacenar los proyectos, los fuentes .java, las clases .class, el workspace, 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:

          

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 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.- 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?. 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 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

Una vez que acabemos el laboratorio hay que eliminar del disco duro la carpeta de trabajo con los proyectos, los fuentes .java, las clases .class, y el workspace