Download ABET - Regis University: Academic Web Server for Faculty
Document related concepts
no text concepts found
Transcript
CS-434: Programación Orientada a Objetos usando Java Semana 5 Dr. Jesús Borrego Adjunct Faculty Regis University 1 scis.regis.edu ● scis@regis.edu Temas • • • • • 2 Examen 1 Capítulo 15 Serializacion de objetos Manejo de archivos Tarea Exámen 1 3 Serialización • Corresponde al movimiento del estado de un objeto a su destino • Estado: los miembros de datos pero no los métodos • Cuando el objeto es serializado, el valor de los miembros de los datos se obtienen del objeto y se envían a su destino • El proceso también se llama ‘Marshaling’ 4 Serializacion - 2 • Cuando el objeto es serializado (marshaled, deflated) puede ser recreado bajo un proceso llamado deserializado (unmarshaling, inflating) • El objeto deserializado es una copia exacta del objeto original desde cuando salió al ser serialziado 5 6 Razones • El proceso es típicamente utilizado por dos razones: 1. Para conserver el estado de un objeto a un archive 2. Para mandar el estado de un objeto a otra aplicación 7 Ejemplo JohnDoe pide prestado 2 libros con su cuenta general y uno con su cuenta de negocios 8 ¿Como serializar la transacción? • Usamos la interfaz Serializable • Serializamos/Deserializamos la gráfica del objeto con ObjectOutputStream/ObjectInputStream • Opcionalmente, podemos usar una fábrica (Factory) para instanciar el servicio 9 Interfaz Serializable ‘Marker’ • Para poder serializar un objeto, Java requiere que su clase implemente la interfaz Serializable (localizada en el paquete java.io): public interface Serializable { } • La interfaz no contiene métodos – el paquete es vacio, por lo que se llama Marcador (Marker) • El propósito es de indicar que es ‘uno de ellos’ sin proveer comportamiento 10 Ejemplo 11 Modificaciones requeridas public public public public 12 class class class class User implements Serializable {…} Account implements Serializable {…} Loan implements Serializable {…} Book implements Serializable {…} Notas • Solo se puede serializar miembros de datos que no son estáticos ▫ A menos que se declaren manualmente • Java prove la clave ‘transient’ para denotar miembros de datos que no debe ser serializados (para proteger datos sensitivos): private transient String sensitiveData = “_”; 13 Invocando serialización de objetos • Cuando clases son marcadas con la interfaz Serializable, sus objetos pueden ser serializados y deserializados con ObjectOutputStream y ObjectInputStream respectivamente • Las clases se encuentran en el paquete java.io • Ejemplo: Para serializar un objeto, ObjectOutputStream provee el siguiente método: void writeObject ( Object obj ); • El método recibe una clase Object (clase primal) para serializar cualquier objecto 14 Deserializando • Para deserializar el objeto, ObjectInputStream prove el método Object readObject ( ); • El método regresa un objeto • Para poder usar el objeto, necesitamos convertir el tipo del objeto (type cast) usando la clase que se espera recibir del proceso 15 Ejemplo • Si un objeto User fué serializado, la deserialización puede producer un objeto User también • El proceso es: ObjectInputStream ois = new ObjectInputStream ( … ); User user = ( User ) ois.readObject ( ); 16 Actividad 1 • Ejemplo de Serialización: http://www.youtube.com/watch?v=YzwiuRDgS SY (11:22 min.) 17 Diseño de Servicios de Aplicación • Los Servicios con piezas de funcionalidad reusables que necesita la lógica de negocios de la aplicación • Los servicios varían de una aplicación a la otra y aque las reglas del negocio también varían • Ejemplos Servicio de autenticación y autorización de clientes 18 Ejemplos de Servicios • Servicio de autenticación y autorización de clients • Servicio de mensajes para mandarlos a usuarios • Servicio de clientes para el manejo de clients • Servicio de pago para recibir pagos de clients • Servicio de compras para la gestión de compras 19 Conceptos involucrados • El movimiento de objetos dentro y fuera de la aplicación son definidos en la capa de dominio de la aplicación • Escondiendo decisions de una tecnología particular (serialización, lógica de base de datos, comunicación entre procesos) • ¿Que forma tiene el servicio? 20 Interfaz Separada 21 Ejemplo de libros • Para añadir un libro a la biblioteca: package services; import domain.*; public interface iBookSvc { public Bood add (Book book ) throws Exception; } • Guardamos el servicio en el paquete services • Importamos el paquete dominio para tener visibilidad a Book • El nombre iBookSvc denota la interfaz • El método add ( ) regresa el libro creado 22 Implementación del Servicio package services; import java.io; import domain.*; public class BookSvcSerializedIOImpl implements IBookSvc { public Book add (Book book ) throws Exception { FileOutputStream fos = new FileOutputStream (“somefile”); ObjectOutputStream oos = new ObjectOutputStream ( fos ); oos.writeObject ( book ); oos.flush ( ); oos.close ( ); return book; } } 23 Patrón de diseño de Fábrica • El patrón de diseño de fábrica nos permite instanciar la capa de servicios Service • Es útil quitar las referencias a la implementación de servicios • El código que usa el servicio no se da cuenta que usó la implemetación, solo la interfaz 24 Capa de Negocios • La capa de negocios (Business Layer) se implementa usando servicios de la capa de servicios • Para agregar libros a la biblioteca, podemos usar BookMgr con método addBook 25 package business; import services.*; import domain.*; public class BookMgr { public Book addBook ( Book book ) throws Exception { Factory factory = new Factory (); IBookSvc bookSvc = factory.getBookSvc(); return bookSvc.add ( Book ); } } 26 Funciones de BookMgr • Declarar que lanza la excepción • Instanciar Factory para tener acceso a IBookSvc • Invocar iBookSvc para añadir in libro a la biblioteca • Regresa los resultados a quien lo invoca • No tiene visibilidad a la implementación del servicio 27 Autenticando Usuarios package business; import services.*; import domain.*; public class AuthenticationMgr{ public Boolean authenticate ( Login login ) { //código se incluye } } 28 AuthenticationMgr.authenticate public Boolean authenticate ( Login login ) { User user = null; try { Factory factory = new Factory(); IUserSvc usersvc = factory.getUserSvc(); user = userSvc.findUser (login.getUsername()); } catch ( Exception s ) { //excepción } if ( user = null ) return falsel return true; } 29 Actividad 2 • Ejemplo de ArrayList en YouTube: http://www.youtube.com/watch?v=K1G1E9TW UVk (14:18 min.) 30 Tarea 5 ▫ Implementar ArrayList en el GUI para agregar los libros y mostrarlos en la pantalla ▫ ArrayList debe incorporar Book ▫ Entregar a WorldClass antes de la semana 6 – el proyecto NetBeans y el document con captura de pantallas 31 ¿Preguntas? • Email to jborrego@regis.edu 32