Vous êtes sur la page 1sur 9

Programacin en Capas

Hoy haremos un tema que es bastante interesante y muy usado en el desarrollo de software.
Realizaremos un ejemplo de la programacin orientada a capas.

La programacin orientada a capas es una tcnica que se usa para el desarrollo de software el cual
permita que dicho software sea escalable, mantenible, consistente y que tenga una aspecto mucho ms
profesional de desarrollo, no como la clsica programacin secuencial.

La programacin orientada a capas se caracteriza por ser un tipo de diseo en el desarrollo de software
mediante clases las cuales se separan generalmente en:

-La capa de datos.
-La capa de negocios.
-La capa de presentacin.





Bien, como se sabe que lo que Ud. quiere es la parte tcnica ms no la parte terica, pasaremos a
realizar el ejemplo de la programacin orientada a capas.

Tener en cuenta que la programacin en capas generalmente va de la mano con la programacin
orientada a objetos para la optimizacin de este.

Estructura del proyecto

Creamos el proyecto, luego creamos 4 paquetes uno para la capa de datos, otro para la capa de
negocio, otro para la capa de presentacin y el ltimo para los encapsulamientos. Tener en cuenta que
para poder trabajar de forma ms ordenada es mejor separar la lgica de negocio de los datos, as
mismo sera bueno separar componentes aislados al cdigo fuente en otro paquete como las imgenes,
formato de reportes y otros.

Ahora que tenemos los 4 paquetes, creamos en cada uno de ellos la clase respectiva para trabajar. En
este caso haremos un ejemplo que consista en manejar mediante la Programacin en capas la insercin
y lectura de los datos de una persona. Para dicho caso en el paquete de encapsulamiento creamos una
clase TPersona, en la capa de datos (Paquete que se creo para los datos) creamos otra clase
DbTPersona, en la capa de presentacin (Paquete para los formularios) creamos un formulario
frmPersona y e la capa de negocio (Paquete para negociar los datos) creamos la clase
NegocioFrmPersona.

Debemos tener en cuenta que en la Programacin sobre capas, generalmente se debe crear un
encapsulado y una clase de la capa de datos por cada tabla existente en nuestra base de datos y un
negocio por cada formulario el cual ser quien maneje toda la negociacin de datos entre las capas de
datos que se usen en el formulario y la capa de presentacin. Tambin recordar que en la capa de datos
se puede crear una clase exclusivamente para las consultas relacionales ya que la programacin
orientada a objetos que va de la mano con la programacin en capas no permite encapsular este tipo de
consultas.

Como en nuestro caso no tenemos una base de datos, simularemos dicho caso con un formulario que
tenga los campos para registrar una persona que lo pasar a un JTable y luego tendremos un botn que
permita leer tales datos almacenados en nuestro JTable.

La estructura de nuestro rbol con las clases creadas debera quedar de la siguiente manera.



Diseo del formulario

Con lo mencionado anteriormente, nuestro formulario debera quedar de la siguiente forma.




Cdigo Fuente

La Clase TPersona

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ENCAPSULAMIENTO;

/**
*
* @author kaaf
*/
public class TPersona {

private String nombre;
private String apellidoPaterno;
private String apellidoMaterno;
private String dNI;
private String direccion;
private int edad;
private char sexo;

public void SetNombre(String nombre)
{
this.nombre=nombre;
}

public String GetNombre()
{
return this.nombre;
}

public void SetApellidoPaterno(String apellidoPaterno)
{
this.apellidoPaterno=apellidoPaterno;
}

public String GetApellidoPaterno()
{
return this.apellidoPaterno;
}

public void SetApellidoMaterno(String apellidoMaterno)
{
this.apellidoMaterno=apellidoMaterno;
}

public String GetApellidoMaterno()
{
return this.apellidoMaterno;
}

public void SetDNI(String dNI)
{
this.dNI=dNI;
}

public String GetDNI()
{
return this.dNI;
}

public void SetDireccion(String direccion)
{
this.direccion=direccion;
}

public String GetDireccion()
{
return this.direccion;
}

public void SetEdad(int edad)
{
this.edad=edad;
}

public int GetEdad()
{
return this.edad;
}

public void SetSexo(char sexo)
{
this.sexo=sexo;
}

public char GetSexo()
{
return this.sexo;
}
}

La Clase DbTPersona




/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package CAPADEDATOS;

import ENCAPSULAMIENTO.TPersona;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
*
* @author kaaf
*/
public class DbTPersona {

public static DefaultTableModel Registrar(TPersona tPersona, JTable miTabla)
{
DefaultTableModel modeloDeDatosTabla=(DefaultTableModel)miTabla.getModel();

Object[] datosRegistro=
{
tPersona.GetNombre(),
tPersona.GetApellidoPaterno(),
tPersona.GetApellidoMaterno(),
tPersona.GetDNI(),
tPersona.GetDireccion(),
tPersona.GetEdad(),
tPersona.GetSexo()
};

modeloDeDatosTabla.addRow(datosRegistro);

return modeloDeDatosTabla;
}

public static List<TPersona> LeerTodo(JTable miTablaDeDatos)
{
List<TPersona> listaTPersona=new ArrayList<>();
for(int i=0;i<miTablaDeDatos.getRowCount();i++)
{
TPersona tPersona=new TPersona();
tPersona.SetNombre(miTablaDeDatos.getValueAt(i, 0).toString());
tPersona.SetApellidoPaterno(miTablaDeDatos.getValueAt(i, 1).toString());
tPersona.SetApellidoMaterno(miTablaDeDatos.getValueAt(i, 2).toString());
tPersona.SetDNI(miTablaDeDatos.getValueAt(i, 3).toString());
tPersona.SetDireccion(miTablaDeDatos.getValueAt(i, 4).toString());
tPersona.SetEdad(Integer.parseInt(miTablaDeDatos.getValueAt(i, 5).toString()));
tPersona.SetSexo((miTablaDeDatos.getValueAt(i, 6).toString()).charAt(0));

listaTPersona.add(tPersona);
}

return listaTPersona;
}
}

La Clase NegocioFrmPersona



/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package CAPADENEGOCIO;

import CAPADEDATOS.DbTPersona;
import ENCAPSULAMIENTO.TPersona;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JTable;

/**
*
* @author kaaf
*/
public class NegocioFrmPersona {

public void Registrar(TPersona tPersona, JTable miTabla)
{
try
{
miTabla.setModel(DbTPersona.Registrar(tPersona, miTabla));
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}

public List<TPersona> LeerDatosPersona(JTable tablaDeDatos)
{
List<TPersona> listaTPersona=new ArrayList<>();

try
{
listaTPersona=DbTPersona.LeerTodo(tablaDeDatos);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.getMessage());
}
finally
{
return listaTPersona;
}
}
}

Botn "Ingresar Datos"-actionPerformed



TPersona tPersona=new TPersona();

tPersona.SetNombre(txtNombre.getText());
tPersona.SetApellidoPaterno(txtApellidoP.getText());
tPersona.SetApellidoMaterno(txtApellidoM.getText());
tPersona.SetDNI(txtDNI.getText());
tPersona.SetDireccion(txtDireccion.getText());
tPersona.SetEdad(Integer.parseInt(txtEdad.getText()));
tPersona.SetSexo(rbM.isSelected() ? rbM.getText().charAt(0) : rbF.getText().charAt(0));

new NegocioFrmPersona().Registrar(tPersona, jTableDatos);

Botn "Leer Datos Ingresados"-actionPerformed



List<TPersona> listaTPersona=new NegocioFrmPersona().LeerDatosPersona(jTableDatos);

DefaultTableModel modeloTabla=new DefaultTableModel();
modeloTabla.addColumn("Nombre");
modeloTabla.addColumn("Apellido P.");
modeloTabla.addColumn("Apellido M.");
modeloTabla.addColumn("DNI");
modeloTabla.addColumn("Direccin");
modeloTabla.addColumn("Edad");
modeloTabla.addColumn("Sexo");

for(TPersona tPersona:listaTPersona)
{
Object[] registroLeido=
{
tPersona.GetNombre(),
tPersona.GetApellidoPaterno(),
tPersona.GetApellidoMaterno(),
tPersona.GetDNI(),
tPersona.GetDireccion(),
tPersona.GetEdad(),
tPersona.GetSexo()
};

modeloTabla.addRow(registroLeido);
}

jTableDatosLeidos.setModel(modeloTabla);

Compilando la Aplicacin

Una vez se realiz todos estos pasos la aplicacin debera correr de la siguiente manera.



Tener en cuenta que los datos no fueron validados por lo que debera ingresarse datos correctos sin
dejar ningn dato vaco.

Por otro lado, hay cosas que no debera estar; como pasar el JTable desde la capa de presentacin
hasta la capa de datos. Pero se hace esto porque no se est trabajando con una base de datos real y se
est tomando como base de datos nuestra primera tabla donde estamos ingresando los datos de la
persona.

En un prximo post ya estaremos viendo programacin orientada a objetos con el uso de una base de
datos real, herencia, polimorfismo entre otros.