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 ● [email protected]
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
[email protected]
32