Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Construir
aplicaciones
computacionales
basadas en
programacin
orientada a objetos,
de manera de
cumplir con las
exigencias tcnicas
y de los usuarios
planificacin del proyecto sobre los requisitos funcionales y no funcionales, como tambin la
calidad esperada de la solucin.
El docente propone un ejercicio para realizar pruebas con JUnit a partir de un plan de pruebas,
en donde se ilustra cada una de las alternativas y casos en donde una aplicacin puede generar
errores, excepciones o situaciones de borde, aplicando la orientacin objeto obtenidas por el
estndar O.R.M. (Mapeo Objeto-Relacional)
Caso: Prueba Unitaria
Ref#
R.1.1
R.1.2
Funci
n
Inform
acin
del
Cliente
Cat.
Entrada
Proceso
Resultado
evident
e
rut=1
nombre=Pedro
apPaterno=Astorga
apMaterno=Berrios
Promed
io de
Ventas
evident
e
Cliente
rut=1
nombre=Pedro
apPaterno=Astorga
apMaterno=Berrios
Calcula el promedio de
ventas de un cliente.
Cliente{rut=1,
nombre=Pedro,
apPaterno=Astor
ga,
apMaterno=Berri
os}
1500
Venta
id=1
fecha=21/02/2013
Productos
Producto1
Codigo=1
Nombre=Tuerca
Valor=50
Cantidad=20
Producto2
Codigo=2
Nombre=Clavo
Valor=10
Cantidad=100
Venta
id=2
fecha=23/02/2013
Productos
Producto1
Codigo=1
Nombre=Tuerca
Valor=50
Cantidad=40
Producto2
Codigo=2
Nombre=Clavo
Valor=10
Cantidad=200
R.1.3
Calcula
total
de la
venta
evident
e
Venta
id=1
fecha=21/02/2013
Productos
2000
120
1000
Producto1
Codigo=1
Nombre=Tuerca
Valor=50
Cantidad=20
Producto2
Codigo=2
Nombre=Clavo
Valor=10
Cantidad=100
R.1.4
Calcula
Cantid
ad de
produc
tos de
la
Venta
evident
e
Venta
id=1
fecha=21/02/2013
Productos
Producto1
Codigo=1
Nombre=Tuerca
Valor=50
Cantidad=20
Producto2
Codigo=2
Nombre=Clavo
Valor=10
Cantidad=100
R.1.5
Calcula
el
subtota
l del
produc
to
Solucin R.1.1
evident
e
Producto1
Codigo=1
Nombre=Tuerca
Valor=50
Cantidad=20
Solucin R.1.2
Solucin R.1.3.
Solucin R.1.4.
Solucin R.1.5.
esperado.
APRENDIZAJE ESPERADO
Analiza el cdigo de programacin JAVA para verificar su correcto comportamiento y detectar
errores.
Actividad 2: Debug
El docente hace una presentacin para profundizar las pruebas de caja blanca, explicando
como ocupar y conocer los diferentes comportamientos del cdigo, analizando variables,
instrucciones paso a paso y saltos de instrucciones.
El docente propone un ejercicio prctico en donde se analiza un mtodo de una clase en un
debug, creando un plan de resultados parciales para la prueba de caja blanca.
Caso: Prueba Caja Blanca Cantidad Total
A partir de la actividad anterior se requiere analizar desde la instruccin
int result = v1.cantidadTotal();
los resultados parciales del mtodo cantidadTotal()
Solucin
Notar que por cada iteracin cada objeto producto es extrado de la lista productos, en la
primera iteracin debe obtener del mtodo getCantidad() el valor 20, la ltima o segunda
iteracin debe obtener del mtodo getCantidad() el valor 100.
Notar que vuelve de la clase Venta a su unidad de Test de JUnit con el resultado esperado.
AP_PATERNO VARCHAR(30),
AP_MATERNO VARCHAR(30)
);
CREATE TABLE SEGURO
(
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FECHA_INICIO DATE,
FECHA_FIN DATE,
CLIENTE_RUT INT NOT NULL,
POLIZA_ID INT NOT NULL,
CONSTRAINT CLIENTE_FK FOREIGN KEY (CLIENTE_RUT) REFERENCES CLIENTE(RUT),
CONSTRAINT POLIZA_FK FOREIGN KEY (POLIZA_ID) REFERENCES POLIZA(ID)
);
Convertir el modelo de datos a orientacin a objetos bajo el estndar O.R.M. Manualmente.
Solucin
package entidad;
import java.util.HashSet;
import java.util.Set;
public class Cliente implements java.io.Serializable {
private int rut;
private String nombre;
private String apPaterno;
private String apMaterno;
private Set seguros = new HashSet(0);
public Cliente() {
}
public Cliente(int rut) {
this.rut = rut;
}
public Cliente(int rut, String nombre, String apPaterno, String apMaterno, Set seguros) {
this.rut = rut;
this.nombre = nombre;
this.apPaterno = apPaterno;
this.apMaterno = apMaterno;
this.seguros = seguros;
}
public int getRut() {
return this.rut;
}
public void setRut(int rut) {
this.rut = rut;
}
public String getNombre() {
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApPaterno() {
return this.apPaterno;
}
public void setApPaterno(String apPaterno) {
this.apPaterno = apPaterno;
}
public String getApMaterno() {
return this.apMaterno;
}
public void setApMaterno(String apMaterno) {
this.apMaterno = apMaterno;
}
public Set getSeguros() {
return this.seguros;
}
public void setSeguros(Set seguros) {
this.seguros = seguros;
}
}
package entidad;
import java.util.HashSet;
import java.util.Set;
public class Poliza implements java.io.Serializable {
private Integer id;
private String nombre;
private String descripcion;
private Set seguros = new HashSet(0);
public Poliza() {
}
public Poliza(String nombre, String descripcion, Set seguros) {
this.nombre = nombre;
this.descripcion = descripcion;
this.seguros = seguros;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNombre() {
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDescripcion() {
return this.descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Set getSeguros() {
return this.seguros;
}
public void setSeguros(Set seguros) {
this.seguros = seguros;
}
}
package entidad;
import java.util.Date;
public class Seguro implements java.io.Serializable {
private Integer id;
private Poliza poliza;
private Cliente cliente;
private Date fechaInicio;
private Date fechaFin;
public Seguro() {
}
public Seguro(Poliza poliza, Cliente cliente) {
this.poliza = poliza;
this.cliente = cliente;
}
public Seguro(Poliza poliza, Cliente cliente, Date fechaInicio, Date fechaFin) {
this.poliza = poliza;
this.cliente = cliente;
this.fechaInicio = fechaInicio;
this.fechaFin = fechaFin;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Poliza getPoliza() {
return this.poliza;
}
public void setPoliza(Poliza poliza) {
this.poliza = poliza;
}
public Cliente getCliente() {
return this.cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public Date getFechaInicio() {
return this.fechaInicio;
}
public void setFechaInicio(Date fechaInicio) {
this.fechaInicio = fechaInicio;
}
public Date getFechaFin() {
return this.fechaFin;
}
public void setFechaFin(Date fechaFin) {
this.fechaFin = fechaFin;
}
}
SCRIPT MYSQL
CREATE DATABASE BDSEGURO;
USE BDSEGURO;
CREATE TABLE POLIZA
(
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
NOMBRE VARCHAR(50),
DESCRIPCION VARCHAR(250)
);
CREATE TABLE CLIENTE
(
RUT INT NOT NULL PRIMARY KEY,
NOMBRE VARCHAR(30),
AP_PATERNO VARCHAR(30),
AP_MATERNO VARCHAR(30)
);
CREATE TABLE SEGURO
(
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FECHA_INICIO DATE,
FECHA_FIN DATE,
CLIENTE_RUT INT NOT NULL,
POLIZA_ID INT NOT NULL,
CONSTRAINT CLIENTE_FK FOREIGN KEY (CLIENTE_RUT) REFERENCES
CLIENTE(RUT),
CONSTRAINT POLIZA_FK FOREIGN KEY (POLIZA_ID) REFERENCES
POLIZA(ID)
);
Crear mtodo para obtener todos los seguros asociados a una poliza
Solucin
Agregar cliente modalidad String
public void agregarCliente(Cliente p) throws Exception {
Connection con;
Statement st;
con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/BDSEGURO");
st = con.createStatement();
String sql = "INSERT INTO
CLIENTE(RUT,NOMBRE,AP_PATERNO,AP_MATERNO) VALUES
(%s,%s,%s,%s);";
sql =
String.format(sql,p.getRut(),p.getNombre(),p.getApPaterno(),p.getApMatern
o());
st.executeUpdate(sql);
}
Agregar poliza modalidad PreparedStatement
public void agregarPoliza(Poliza p) throws Exception {
Connection con;
con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/BDSEGURO");
PreparedStatement pSt = con.prepareStatement(INSERT INTO
POLIZA(NOMBRE,DESCRIPCION) VALUES (?,?));
pSt.setString(1,p.getNombre());
pSt.setString(2,p.getDescripcion());
pSt.execute();
}
Agregar un seguro modalidad PreparedStatement en adelante
public void agregarSeguro(Seguro s) throws Exception {
Connection con;
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/BDSEGURO");
PreparedStatement pSt = con.prepareStatement(INSERT INTO
SEGURO(FECHA_INICIO,FECHA_FIN,CLIENTE_RUT, POLIZA_ID) VALUES (?,?,?,?));
pSt.setDate(1,s.getFechaInicio());
pSt.setDate(2,s.getFechaFin());
pSt.setInt(3,s.getCliente().getRut());
pSt.setInt(4,s.getPoliza().getId());
pSt.execute();
}
Obtener todos los seguros asociados a una poliza
public List<Perro> obtenerSeguroPorPoliza(int poliza) throws Exception {
Connection con;
Statement st;
ResultSet rs;
con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/BDSEGURO");
st = con.createStatement();
String sql = "SELECT ID,FECHA_INICIO, FECHA_FIN,
En esta experiencia se detalla de manera simple la configuracin de hibernate con los pasos
- Hibernate Configuration Wizard
- Hibernate Reverse Engineering Wizard
- Hibernate Mapping Files and POJOs from Database
Observaciones para el docente
El docente aclara los diferentes producto resultado obtenidos de cada uno de los pasos,
entendiendo que el hibernate configuration wizard y su establecimiento de una conexin con la
base datos, Hibernate reverse engineering wizard para la produccin de las tablas candidatas a
conversin bajo O.R.M., hibernate mapping files and POJOs from Database como se mescla la
conexin con las tablas candidatas para crear las clases java y el mapeo relacional con la base
de datos.
APRENDIZAJES ESPERADOS:
Utiliza las clases predefinidas en el lenguaje JAVA para resolver un problema dado
Actividad 6: Hibernate business
El docente hace una presentacin del uso de la librera org.hibernate destacando el uso de las
clases Transaction con los diferentes usos bajo D.M.L. insert, update, delete y la diferenciacin
que tiene el insert cuando la base de datos en su clave primaria posee un identity.
El docente propone un ejercicio prctico para la creacin de mtodos de negocio utilizando
HibernateUtil
Caso: Mantenedor de clientes en hibernate
SCRIPT MYSQL
CREATE DATABASE BDCLIENTE;
USE BDCLIENTE;
CREATE TABLE CLIENTE(
RUT INT NOT NULL PRIMARY KEY,
NOMBRE VARCHAR(30),
AP_PATERNO VARCHAR(30),
AP_MATERNO VARCHAR(30)
);
CREATE TABLE PRODUCTO(
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
NOMBRE VARCHAR(50),
VALOR INT
);
A partir de la base de datos cliente crear los mtodos de negocio para agregar, modificar y
eliminar un cliente y producto.
Solucin
Crear el HibernateUtil en la capa de negocio
Crear la clase de negocio Producto que tiene la diferencia que el primary key id de la tabla
producto es un campo auto-incremental, por lo tanto la base de datos asigna un nmero
correlativo cuando es ingresado.
NOMBRE VARCHAR(50),
VALOR INT
);
Crear filtros de bsqueda para producto por Id, Nombre, Valor, Nombre-Valor
Solucin
Cdigo HTML
A partir de la pgina web del prototipo relacionar el servlet AddCliente, la finalidad es ocupar a
una entidad de negocio NegCliente para lograr ingresar el cliente a la base de datos.
Solucin
APRENDIZAJES ESPERADOS:
Disea componentes reutilizables en el lenguaje JAVA de manera de dar solucin a problemas
frecuentes
Actividad 10: JSP + Servlets + Session
El docente hace una presentacin que ilustra el uso de sesiones como transporte de datos entre
componentes web para la creacin de pginas dinmicas.
El docente propone un ejercicio prctico para creacin de un informe de todos los clientes de
una base de datos.
Caso: Informe de Clientes
Primero se crea el servlet para ocupar una variable de sesin.
Pagina web
Identifica las principales entidades, procesos y sus interrelaciones para poder disear un
modelo que permita la interaccin de los elementos
Construye el modelo de datos que responda a las necesidades de informacin transaccional del
negocio
Implementa el modelo en la BBDD que da solucin a la problemtica expuesta
Actividad de evaluacin
Como actividades de evaluacin en lo
que respecta al aprendizaje se
sugiere:
El
docente
entrega
a
los
estudiantes un problema sobre la
plataforma
web,
en
donde
realizar la capa de negocios,
presentacin y servlets.
Criterios de evaluacin
Construye las unidades de prueba en JAVA para
verificar el correcto funcionamiento de la codificacin
realizada
Analiza el cdigo de programacin JAVA para verificar
su correcto comportamiento y detectar errores.
Reconoce las clases predefinidas en el lenguaje JAVA
para resolver un problema dado
Utiliza las clases predefinidas en el lenguaje JAVA para
resolver un problema dado
Disea componentes reutilizables en el lenguaje JAVA
de manera de dar solucin a problemas frecuentes
Programacion Java
Autor: Herbert Schilt
Ttulo: La Biblia de java 2 v5.0
N Edicin: 1
Lugar de Publicacin: Espaa
Editorial: Anaya Multimedia
Ao de Publicacin: 2005
Cdigo Biblioteca Duoc: 005.133LJ S334b
Mysql
http://dev.mysql.com/doc/
Java
http://www,java.com/es/download