Estandares de Programacion JAVA.9.1.
Estandares de Programacion JAVA.9.1.
Versión 0.9.3
Lima, 2014
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
1. TABLA DE CONTENIDO
1. TABLA DE CONTENIDO 2
2. LISTA DE FIGURAS 4
3. INTRODUCCIÓN 5
4. OBJETIVO 6
5. ALCANCES 6
Estándares de nomenclatura 6
Estándares de codificación 6
Convenciones de formato del código fuente 6
Plantillas de desarrollo 7
Prácticas de desarrollo 7
6. ESTÁNDARES DE PROGRAMACIÓN 8
6.1. ORGANIZACIÓN DEL PROYECTO 8
6.2. ESTÁNDARES DE NOMENCLATURA 10
Nomenclatura de Paquetes 10
Nomenclatura general de clases 11
Nomenclatura general de interfaces 12
Nomenclatura de JavaBeans 13
Nomenclatura de Servlets 14
Nomenclatura de Clases DAO o despachadoras 15
Nomenclatura de las Clases de Negocio 16
Nomenclatura de las Clases Action 17
Nomenclatura de las Clases Lista 18
Nomenclatura de los archivos JSP y HTML 19
Nomenclatura de los documentos XML, XSL, XSD, XSLT, WML, WSDL 20
Nomenclatura de archivos JavaScript 21
Nomenclatura de archivos de páginas de estilos (CSS) 22
Nomenclatura de archivos de recursos (Imágenes, PDF, jpg) 23
Nomenclatura de objetos de Interfaz de Usuario: Controles HTML 24
Notación de clases 25
Notación de interfaces 27
6.3. ESTÁNDARES DE CODIFICACIÓN 29
Accesibilidad 29
Notación de Sentencias 29
Manejo de errores 32
6.4. CONVENCIONES DE FORMATO DE CÓDIGO FUENTE 33
Comentarios de código fuente 33
Documentación de Clases e Interfaces 36
Documentación de páginas HTML, JSP, XML, scriptlets, CSS y JS 38
Documentación de Constructores 41
Documentación de variables o campos miembro 41
Documentación de Métodos 43
Identación 44
Tamaño de línea 44
6.5. PLANTILLAS DE DESARROLLO 45
Plantilla de clase Java 45
Plantilla de página JSP 46
Página 2
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Plantilla de HTML 47
7. PRÁCTICAS DE DESARROLLO 48
a) ARQUITECTURA MVC 54
Definición de las partes 54
b) FRAMEWORKS 56
JAKARTA STRUTS 57
JAVASERVER FACES (JSF) 58
HIBERNATE 59
IBATIS 60
c) PATRONES DE DISEÑO 62
d) COMPONENTES ADICIONALES 63
JFREECHART 63
IREPORT 63
JAVAMAIL 64
POI 64
e) RECOMENDACIONES DE OPTIMIZACIÓN 64
JDBC 65
Excepciones 65
Servlet y JSP 65
8. GLOSARIO 66
Página 3
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
2. LISTA DE FIGURAS
Página 4
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
3. INTRODUCCIÓN
En su afán por la mejora continua en el desarrollo y mantenimiento de sistemas de
información, se ha establecido una serie de estándares y buenas prácticas a aplicar en
las tareas de desarrollo y mantenimiento de sus sistemas, en este caso específicamente
los sistemas en entorno Java.
Para la redacción de esta guía, se han tenido en cuenta los siguientes principios:
Página 5
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
4. OBJETIVO
Los estándares que se presentan a continuación han sido elaborados con la finalidad de
establecer una guía que permita identificar en forma clara el código de las aplicaciones
desarrolladas bajo el entorno Java, los cuales se basan en una arquitectura distribuida
(Modelo MVC) que permita en primer lugar tener una codificación clara, que permita el re-
uso de clases y con facilidad para el mantenimiento.
5. ALCANCES
Estándares de nomenclatura
En esta sección se detallan los estándares para la definición de los nombres físicos
que se usan en los diferentes componentes Java durante el desarrollo del sistema.
Estas notaciones se basan en las recomendaciones de los creadores de Java y se
aplican sobre los siguientes componentes:
Paquetes
Clases
Interfaces
Archivos
Estándares de codificación
Se definen los estándares a utilizar para la declaración de variables, constantes, y
métodos, así como la notación de sentencias (condicionales y de bucle) y el manejo
de errores.
El seguimiento de los estándares y convenciones definidos facilitarán las labores de
mantenimiento y actualización de las aplicaciones desarrolladas.
Página 6
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Plantillas de desarrollo
Se establecen las plantillas para los principales documentos Java que se emplearán
en el desarrollo del sistema:
Páginas JSP
Clases Java
Páginas HTML
Páginas XML
Prácticas de desarrollo
Se exponen un conjunto de buenas prácticas para el desarrollo de aplicaciones Web
basadas en el uso de la arquitectura MVC, frameworks, patrones de diseño,
recomendaciones de optimización y componentes (API) adicionales. El objetivo de
esta sección es presentar algunas herramientas, mas no limitar al equipo de
desarrollo en su uso, el cual es libre de utilizar además aquellas que considere
óptimas en base a su experiencia.
Observación:
Los estándares de diseño establecidos pueden consultarse en el documento titulado
“Estándares de Diseño para aplicaciones Web”. En este documento se define el
diseño de interfaz gráfica de usuario que se empleará para el desarrollo de las pantallas
que conformarán los sistemas.
Página 7
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
6. ESTÁNDARES DE PROGRAMACIÓN
Los proyectos Web deben presentar 2 directorios base que contendrán todos los
componentes de la aplicación:
JavaSource: Contiene todos los fuentes sin compilar (archivos .java)
WebContent: Almacena los archivos del proyecto en ejecución (archivos .class,
.jar, y demás recursos)
En el nivel del directorio WebContent debemos tener una carpeta recursos que
contenga la carpeta images para las imágenes que se usan en el proyecto y la carpeta
script donde se asignen todos los archivos en javascript (.js). Los archivos .jsp y .class
se distribuirán en carpetas con nombres específicos según su funcionalidad y con letras
minúsculas (excepto la carpeta WEB-INF), como se muestra en la figura 1:
Página 8
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 9
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Nomenclatura de Paquetes
Sintaxis:
pe.AA.com.[wwww].[xxxx].[yyyy]
Donde:
pe.AA.com. : estructura base de toda aplicación
[wwww][xxxx][yyyy] : nombre de paquetes
Ejemplos:
pe.AA.com.serviciosbancarios
pe.AA.com.serviciosbancarios.beans
pe.AA.com.serviciosbancarios.servlets
Página 10
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de clases simples y descriptivos;
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura sea muy conocida como URL o HTML).
considerar 10 palabras como máximo para el nombre de las clases.
No se debe:
Incluir preposiciones en el nombre de la clase.
Sintaxis:
[Wwww][Xxxx][Yyyy].java
Donde:
[Wwww][Xxxx][Yyyy] : palabras conformadas por la clase
Ejemplos:
NotaAbono.java
GeneraReporteMoraReclamoCredito.java
Página 11
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de interfaces simples y descriptivos;
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 10 palabras como máximo para el nombre de las interfaces.
No se debe:
Incluir preposiciones en el nombre de la interfaz.
Sintaxis:
I[Wwww][Xxxx][Yyyy].java
Donde:
I : denota a las clases interfaz
[Wwww][Xxxx][Yyyy] : palabras del nombre de la interfaz
Ejemplos:
IDocumentoBase.java
ISolicitudApertura.java
Página 12
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Nomenclatura de JavaBeans
Los Java Beans, son las clases que representan alguna identidad, tabla o vista de
base de datos y estas deben contener los atributos correspondientes a los datos con
el modificador private y los métodos setters y getters (públicos) para acceder a
dichos atributos.
En cuanto al nombre de las clases este debe ser iniciado con el prefijo del
identificador del tipo de clase en mayúsculas:"B" y por ultimo se añadirá la identidad a
la que representa con la primera letra en mayúsculas.
Se debe:
mantener los nombres de clases simples y descriptivos;
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 10 palabras como máximo para el nombre de las clases.
No se debe:
Incluir preposiciones en el nombre de la clase.
Sintaxis:
B[Wwww][Xxxx][Yyyy].java
Donde:
B : denota a las clases JavaBean o Bean
[Wwww][Xxxx][Yyyy] : identidad a la que representa
Ejemplos:
BCuenta.java
BGarantiaHipotecaria.java
Página 13
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Nomenclatura de Servlets
Los servlets desempeñan el papel de controladores en el sistema. Los nombres de
los Servlets deben tener como prefijo de la letra que especifica el tipo de componente
(S) seguido de la funcionalidad que controlan. Con la primera letra en mayúsculas v el
resto del nombre con la notación Camel.
Se debe:
mantener los nombres de clases simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 10 palabras como máximo para el nombre de las clases.
No se debe:
Incluir preposiciones en el nombre de la clase.
Sintaxis:
S[Wwww][Xxxx][Yyyy].java
Donde:
S : denota a las clases Servlet
[Wwww][Xxxx][Yyyy] : funcionalidad del Servlet
Ejemplos:
SAperAhorros.java
SCerrarSesion.java
Página 14
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de clases simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 10 palabras como máximo para el nombre de las clases.
No se debe:
Incluir preposiciones en el nombre de la clase.
Sintaxis:
D[Wwww][Xxxx][Yyyy].java
Donde:
D : denota a las clases despachador o DAO
[Wwww][Xxxx][Yyyy] : funcionalidad del despachador
Ejemplos:
DAperAhorros.java
DHojaLiquidacionDevolucion.java
Página 15
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de clases simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 10 palabras como máximo para el nombre de las clases.
No se debe:
Incluir preposiciones en el nombre de la clase.
Sintaxis:
N[Wwww][Xxxx][Yyyy].java
Donde:
N : denota a las clases de negocio
[Wwww][Xxxx][Yyyy] : palabras que definen la clase de negocio
Ejemplos:
NSaldoAhorros.java (valida el saldo de la cuenta de ahorros)
NDeudaPrestamo.java
Página 16
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de clases simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 10 palabras como máximo para el nombre de las clases.
No se debe:
Incluir preposiciones en el nombre de la clase.
Sintaxis:
A[Wwww][Xxxx][Yyyy].java
Donde:
A : denota a las clases Controlador
[Wwww][Xxxx][Yyyy] : palabras conformadas por la clase
Ejemplos:
ACalculaImporte.java
AGeneraEnvioNotificacion.java
Página 17
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de clases simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 10 palabras como máximo para el nombre de las clases.
No se debe:
Incluir preposiciones en el nombre de la clase.
Sintaxis:
L[Wwww][Xxxx][Yyyy].java
Donde:
L : denota a las clases listas
[Wwww][Xxxx][Yyyy] : nombre del Bean que contiene
Ejemplos:
LApoderado.java (lista de objetos apoderado)
LAval.java
Página 18
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Opción Prefijo
Administración adm
Ahorros aho
Solicitudes sol
Reportes rep
Nota: Los jsp que son de uso general no llevarán tal prefijo. Ejemplo: login.jsp,
index.html, errorMensaje.jsp.
Se debe:
mantener los nombres de estos archivos simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente)
considerar 5 palabras como máximo para el nombre de estos archivos.
la primera letra de cada palabra posterior al prefijo y al “_” debe ser en
mayúsculas
No se debe:
Incluir preposiciones en el nombre del archivo.
Sintaxis:
[pre]_[Wwww][Xxxx][Yyyy].[extension]
Donde:
[pre] : denota el prefijo de la opción
[Wwww][Xxxx][Yyyy] : nombre del archivo JSP ó HTML
.[extension] : extensión del archivo (.html o .jsp)
Ejemplos:
adm_RegistrarCliente.jsp
aho_BusquedaCtaAhorros.jsp
rep_MostrarListadoCtaAhorros.html
Página 19
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de los documentos simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente)
considerar 5 palabras como máximo para el nombre del documento
No se debe:
incluir preposiciones en el nombre del documento
Sintaxis:
[wwww][Xxxx][Yyyy].[extension]
Donde:
[wwww][Xxxx][Yyyy] : nombre del documento
Ejemplos:
web.xml
application.xml
plantillaInicio.xsl
esquemaFactura.xsd
documentoInscripcion.xslt
mensajeSaludo.wml
interfazServicios.wsdl
Página 20
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de los archivos simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 5 palabras como máximo para el nombre de estos archivos.
No se debe:
Incluir preposiciones en el nombre del archivo.
Sintaxis:
[wwww][Xxxx][Yyyy].js
Donde:
[wwww][Xxxx][Yyyy].js : nombre del archivo
Ejemplos:
funcionesValidacion.js
utilidadesFecha.js
Página 21
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de los archivos simples y descriptivos.
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 5 palabras como máximo para el nombre del archivo.
No se debe:
Incluir preposiciones en el nombre del archivo.
Sintaxis:
[wwww][Xxxx][Yyyy].css
Donde:
[wwww][Xxxx][Yyyy].css : nombre del archivo
Ejemplos:
estilosPortal.css
estilosCabecera.css
Página 22
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Se debe:
mantener los nombres de los archivos simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 5 palabras como máximo para el nombre del archivo
No se debe:
Incluir preposiciones en el nombre de estos archivos.
Sintaxis:
[wwww][Xxxx][Yyyy].[extension]
Donde:
[wwww][Xxxx][Yyyy].[extension] : nombre del archivo
[extension] : extensión del archivo (pdf, jpg, etc.)
Ejemplos:
logoAA.jpg
tarifarioCTS.pdf
3.1.1.1
Página 23
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Objeto Prefijo
Button btn<ButtonName>
Label lbl<LabelName>
List lst<ListName>
CheckBox chk<CheckName>
Text txt<TextName>
TextArea tar<TextAreaName>
Radio rad<RadioName>
Form frm<FormName>
Hidden hdd<HiddenName>
Se debe:
mantener los nombres de los archivos simples y descriptivos
usar palabras completas y evitar acrónimos y abreviaturas
(a menos que la abreviatura se use muy ampliamente).
considerar 5 palabras como máximo para el nombre de estos objetos.
No se debe:
Incluir preposiciones en el nombre del objeto.
Ejemplos:
txtNumeroCuenta
lstPaginacion
frmDatosPrestamo
Página 24
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Notación de clases
El siguiente gráfico y tabla describen las partes de la declaración de una clase así
como el orden en el que deberían aparecer:
Parte de Declaración de
Orden
Class/Interfaz Notas
Página 25
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Por ejemplo:
/**
*Resumen.
*Clase de regla de Negocio
*@author
*@versión 1.00, 17/01/2007
*
*/
package pe.gob.onp.operaciones.recaudacion;
/**
* Descripción del Método.
*@param campo El parámetro campo para …
* @return int
*/
public MetodoClase() {
// declaración de variables
} //Fin MetodoClase
} //Fin Clase
Página 26
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Notación de interfaces
El siguiente gráfico y tabla describe las partes de una declaración de una Interfaz, en
el orden que deberían aparecer:
Parte de Declaración de
Orden
Class/Interfaz Notas
Página 27
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Por ejemplo:
/**
*Resumen.
*Clase de regla de Negocio
*@author
*@versión 1.00, 17/01/2007
*
*/
package pe.gob.onp.operaciones.recaudacion.interfaces;
/**
* Descripción del Método.
* @param campo El parámetro campo para …
* @return int
*/
public MetodoClase() {
// declaración de variables
} //Fin MetodoClase
} //Fin Interfaz
Página 28
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Accesibilidad
En Java, para acceder a las variables y métodos miembro de un objeto, se debe tener
en cuenta desde donde lo hacemos. La tabla siguiente resume los aspectos a
considerar en la accesibilidad de paquetes:
En la misma clase Sí Sí Sí Sí
Notación de Sentencias
SENTENCIAS SIMPLES
Cada línea debería contener una sola expresión.
Ejemplo:
Argv++; // Correcto
Argc--; // Correcto
argv++ ; argc--; //incorrecto
Página 29
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Las sentencias incluidas deben estar identadas un nivel más que la sentencia
compuesta.
Deben usarse llaves para todas estas sentencias cuando forman parte de una
estructura de control, como una sentencia if-else o for. Esto hace más fácil
incorporar sentencias sin que se introduzcan errores debido a llaves olvidadas.
SENTENCIAS DE RETORNO
Una expresión de retorno con un valor, no debería usar paréntesis a menos que
ayuden a visualizar mejor lo que se devuelve.
Ejemplo:
return;
return myDisk.size();
return (size ? size : defaultSize);
FORMA 1
if (condition) {
statements;
}
FORMA 2
if (condition) {
statements;
} else {
statements;
}
FORMA 3
if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}
Página 30
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
SENTENCIAS FOR
Una expresión “for” debe de tener necesariamente la siguiente forma:
SENTENCIAS WHILE
Una expresión “while” debería tener el siguiente formato:
while (condition) {
statements;
}
En el caso de una sentencia while vacía, debería tener esta forma:
while (condicion);
SENTENCIAS DO-WHILE
Un “do-while” expresión debería tener le siguiente formato:
do {
statements;
} while (condition);
Página 31
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
SENTENCIAS SWITCH
Una Expresión “switch” debe de tener el siguiente formato:
switch (condicion) {
case ABC:
statements;
/* sigue la ejecución */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
Cada vez que una cláusula case deba seguir la ejecución en la siguiente cláusula
case, es decir, no incluya la sentencia break; es imprescindible incluir un comentario
en el lugar que ocuparía la sentencia break, tal como se muestra en el ejemplo con el
comentario /* sigue la ejecución */.
Cada sentencia switch debería incluir el caso default. Aquí la sentencia break es
redundante, pero debería incluirse siempre para evitar errores en caso de que se
añada una sentencia case posterior y se ejecute si deber hacerlo.
Manejo de errores
El manejo de errores o excepciones en Java se hace con la instrucción “try-catch” que
debe tener el siguiente formato:
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
Página 32
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
DEFINICIÓN DE COMENTARIOS
Los comentarios explican la razón de la existencia de código de programación y
son muy importantes para el mantenimiento y documentación.
BLOQUE DE DOCUMENTACIÓN
Usados para que los comentarios persistan en el programa compilado (generación
del javadoc ó documentos HTML de ayuda). Generalmente la documentación en
estos comentarios es la descripción de la clase y la definición de cada uno de los
miembros de clase.
Deben:
Estar precedidos por una línea en blanco.
Ejemplo:
/**
* Clase Calendario de Pagos (Definición de atributos y métodos)
*/
Página 33
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
BLOQUE DE COMENTARIOS
Usados para describir archivos, métodos, estructura de datos y algoritmos en
varias líneas.
Deben:
Identarse conjuntamente con las líneas de código escritas.
Estar precedidos por una línea en blanco.
Ejemplo:
/*
* Cálculo para determinar la mora de un cliente
*/
/*Manejando la condición*/
if (condición){
…
}
Página 34
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
COMENTARIOS FINALES
El delimitador de comentario // puede comentar una línea completa o una línea
parcial.
Deben:
Estar precedidos por una línea en blanco.
No deben:
Usarse en líneas consecutivas para comentar texto; sin embargo, si puede
usarse en líneas consecutivas para comentar secciones de código.
Ejemplo:
if (condición){
…
}else{
return false; //no es un cliente
}
Página 35
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
VERSIÓN INICIAL
/**
*Resumen.
* <DESCRIPCION >
*
*@author < AUTOR>
*@versión <VERSION>, <FECHA >
*@PR [opcional]
*/
package pe.bn.com.operaciones;
// Código de la clase
}
/**
*Resumen.
* <DESCRIPCION >
*
*@author < AUTOR>
*@versión <VERSION>, <FECHA >
*@PR [opcional]
*
* PR Modificación : PR<NUMERO PR>
* Descripción : <DESCRIPCION DEL PR>
*
* Fecha modificación : <FECHA MODIFICACION PR>
* Usuario modificación : <DESARROLLADOR DEL PR>
* <Descripción del cambio y métodos cambiados por cada PR>
*/
package pe.bn.com.operaciones;
public MiClase {
Página 36
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Donde:
<DESCRIPCION > Descripción de la Clase / Interfaz
< AUTOR> Apellidos y Nombre
<VERSION> Control de Versión
<FECHA > Fecha de Creación
<NUMERO PR> Número Correlativo del PR
<NUMERO ITEM> El número del Ítem del Requerimiento de Cambio.
<DESCRIPCION DEL PR> Descripción del PR
<FECHA MODIFICACION PR> Fecha en la cual se hizo la modificación del objeto con el PR
<DESARROLLADOR DEL PR> Apellidos y Nombres del Desarrollador del objeto con el PR
Ejemplo:
/**
*Resumen.
*Servlet usado para la apertura de una cuenta de Plazo Fijo
*@author Marco Márquez
*@versión 1.00, 16/05/2007
*
*
* PR Modificación : PR021
* Descripción : Considerar personas jurídicas
* Fecha modificación : 18/09/2007
* Usuario modificación : Juan Pérez.
* <Métodos modificados>
*/
package pe.bn.pe.operaciones;
// Código de la clase
Página 37
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
VERSIÓN INICIAL
<!—
Resumen
Objeto : <NOMBRE DEL OBJETO>
Descripción : <descripción>
Fecha de creación : <fecha de creación>
PR de Creación : (Opcional, si se creo con un PR)
Autor : <Autor>
-----------------------------------------------------------------------------
Modificaciones
Motivo Fecha Nombre Descripción
----------------------------------------------------------------------------
PR00A 15/07/2007 Marco Márquez Valida envio de formulario.
PR00B 08/11/2007 Juan Pérez Cambio de Fecha.
-->
<%--
* Resumen
* Objeto : <nombre del objeto>
* Descripción : <descripción>
* Fecha de creación : <fecha de creación>
* PR de Creación : (Opcional, si se creo con un PR)
* Autor : <Autor>
* ----------------------------------------------------------------------------------------
* Modificaciones
* Motivo Fecha Nombre Descripción
* -------------------------------------------------------------------------------------
* PR00A 15/07/2007 Marco Márquez Valida envio de formulario.
* PR00B 08/11/2007 Juan Pérez Cambio de Fecha.
--%>
<%--
Comentario para un bloque del JSP / Scriptlets --%>
Página 38
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Para CSS:
/*
Resumen
Objeto : <nombre del objeto>
Descripción : <descripción>
Fecha de creación : <fecha de creación>
PR de Creación : (Opcional, si se creo con un PR)
Autor : <Autor>
-----------------------------------------------------------------------------
Modificaciones
Motivo Fecha Nombre Descripción
----------------------------------------------------------------------------
PR00A 15/07/2007 Marco Márquez Valida envio de formulario.
PR00B 08/11/2007 Juan Pérez Cambio de Fecha.
*/
Para JS:
/*
Resumen
Objeto : <nombre del objeto>
Descripción : <descripción>
Fecha de creación : <fecha de creación>
PR de Creación : (Opcional, si se creo con un PR)
Autor : <Autor>
-----------------------------------------------------------------------------
Modificaciones
Motivo Fecha Nombre Descripción
----------------------------------------------------------------------------
PR00A 15/07/2007 Marco Márquez Valida envio de formulario.
PR00B 08/11/2007 Juan Pérez Cambio de Fecha.
*/
Dentro de las líneas de código se debe indicar algún cambio con lo siguiente.
Para JSP:
Dentro de las líneas de código se debe indicar algún cambio con lo siguiente.
<%--
PR<NUMERO PR> - Item <NUMERO ITEM> - Inicio --%>
<%--
PR<NUMERO PR> - Item <NUMERO ITEM> - Fin --%>
Página 39
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Para CSS:
Dentro de las líneas de código se debe indicar algún cambio con lo siguiente.
/*
PR<NUMERO PR> - Item <NUMERO ITEM> - Inicio */
/*
PR<NUMERO PR> - Item <NUMERO ITEM> - Fin */
Para JS:
Dentro de las líneas de código se debe indicar algún cambio con lo siguiente.
/*
PR<NUMERO PR> - Item <NUMERO ITEM> - Inicio */
/*
PR<NUMERO PR> - Item <NUMERO ITEM> - Fin */
Donde:
<DESCRIPCION > Descripción del Documento HTML/JSP/XML/CSS/JS
< AUTOR> Apellidos y Nombre
<VERSION> Versión
<FECHA > Fecha de Creación
<NUMERO PR> Número Correlativo del PR
<NUMERO ITEM> El número del Ítem del Requerimiento de Cambio.
<DESCRIPCION DEL PR> Descripción del PR
<FECHA MODIFICACION PR> Fecha en la cual se hizo la modificación del PR
Ejemplo:
<!—
*Resumen.
*Documento XML de esquema de datos de empleados
*@author Marco Márquez
*@versión 1.00, 26/04/2007
*
* PR Modificación : PR021
* Descripción : Adición de propiedades al esquema
* Fecha modificación : 18/05/2007
* Usuario modificación : Juan Pérez.
-->
Página 40
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Documentación de Constructores
Utilizar el siguiente bloque de comentario como plantilla para cada constructor
declarado:
VERSIÓN INICIAL
/**
* Resumen.
* <DESCRIPCION >
* @param nombre explicación y tipo de parámetro
* @param nombre explicación y tipo de parámetro
*
*thows nombre de excepción y explicación
*/
Donde:
<DESCRIPCION > Descripción del Constructor
<NUMERO PR> Numero de PR
<NUMERO ITEM> El número del Ítem del Requerimiento de Cambio
VERSIÓN INICIAL
<AMBITO> <TIPO> <NOMBRE >; // <DESCRIPCION >
Página 41
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 42
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Documentación de Métodos
Los comentarios de documentación de un método deberán incluir la descripción
del método, los tipos de argumentos que recibe y el tipo de retorno
VERSIÓN INICIAL
/**
* <DESCRIPCION>
*@param nombre explicación y tipo de parámetro 1
*@param nombre explicación y tipo de parámetro 2
..
*@param nombre explicación y tipo de parámetro N
* @ return Explicación del valor de retorno del método
* thows nombre de excepción y explicación
*/
return campo;
/**
* <DESCRIPCION>
*@param campo El parámetro campo para …
* @return int
*/
<AMBITO> <TIPO> <NOMBRE MÉTODO > (<PARAMETROS>) {
Página 43
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Ejemplo:
/**
* Descripción del Método.
* @param campo El parámetro campo para …
* @return int
*/
public int getCampo (int campo) {
return campo;
}
Identación
La unidad de identación son cuatro (4) espacios. De esta forma, se puede
identificar rápidamente los bloques de código, y los bloques comprendidos dentro
de ellos.
Ejemplo:
public final class Sql {
// 1 tab
static public String ejecuta(String sql) {
// 2 tabs
String mensaje= null;
try {
// 3 tabs
ConectaDB db= new ConectaDB();
Connection cn= db.getConnection();
Statement st= cn.createStatement();
st.execute(sql);
st.close();
cn.close(); …
} catch(SQLException e) {
mensaje= e.getMessage();
} catch(Exception e) {
mensaje= e.getMessage();
}
Tamaño de línea
Las líneas de código deben tener una longitud máxima de 80 caracteres, tamaño
adecuado para el caso de impresiones de código.
Página 44
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
/**
* Descripción de constructor y lista de parámetros.
* @param <Nombre de parámetro 1> : <tipo y descripción de parámetro 1>
* @param <Nombre de parámetro 2> : <tipo y descripción de parámetro 2>
* @param <Nombre de parámetro N> : <tipo y descripción de parámetro N>
* */
public <NombreConstructor>(<tipo> <parámetro 1>, <tipo> <parámetro 2>, <tipo>
<parámetro N>) {
/**
* Descripción de método y lista de parámetros.
* @param <Nombre de parámetro 1> : <tipo y descripción de parámetro 1>
* @param <Nombre de parámetro 2> : <tipo y descripción de parámetro 2>
* @param <Nombre de parámetro N> : <tipo y descripción de parámetro N>
* @return <tipo y descripción de retorno>.
* */
<ámbito> <tipo> <nombreMetodo>(<tipo> <parámetro 1>, <tipo> <parámetro 2>, <tipo>
<parámetro N>) {
Página 45
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%--
Lista de taglib usadas en la página JSP como la que sigue:
--%>
<%--
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
--%>
<html>
<head>
<title>Título del JSP</title>
</head>
<body>
<%--
Código del JSP
--%>
</body>
</html>
Página 46
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Plantilla de HTML
<!—
Resumen
Objeto : <NOMBRE DEL OBJETO>
Descripción : <descripción>
Fecha de creación : <fecha de creación>
PR de Creación : (Opcional, si se creo con un PR)
Autor : <Autor>
-----------------------------------------------------------------------------
Modificaciones
Motivo Fecha Nombre Descripción
----------------------------------------------------------------------------
<html>
<head>
<title>Título de Documento</title>
</head>
<body>
</body>
</html>
Página 47
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 48
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
realizan en background (en un segundo plano) servicio generales, esto es, tareas que
no forman parte de la esencia del programa y que se están ejecutando mientras no
finalice la aplicación. Un thread daemon podría ser por ejemplo aquél que está
comprobando permanentemente si el usuario pulsa un botón. Un programa de Java
finaliza cuando sólo quedan corriendo threads de tipo daemon. Por defecto, y si no se
indica lo contrario, los threads son del tipo no daemon.
7.1 Creación de THREADS
En Java hay dos formas de crear nuevos threads. La primera de ellas consiste
en crear una nueva clase que herede de la clase java.lang.thread y sobrecargar
el método run() de dicha clase. El segundo método consiste en declarar una
clase que implemente las interface java.lang.Runnable, la cual declarará el
método run(); posteriormente se crea un objeto de tipo Thread pasándole como
argumento al constructor el objeto creado de la nueva clase (la que implementa
la interface Runnable). Como ya se ha apuntado, tanto la clase Thread como la
interface Runnable pertenecen al package java.lang, por lo que no es necesario
importarlas.
A continuación se presentan dos ejemplos de creación de threads con cada uno
de los dos métodos citados.
7.1.1 Creación de threads derivando de la clase Thread
7.1.2 Creación de threads implementando la interface Runnable
7.2 Ciclo de vida de un THREAD
En el apartado anterior se ha visto cómo crear nuevos objetos que permiten
incorporar en un programa la posibilidad de realizar varias tareas
simultáneamente. En la figura (tomada del tutorial Sun) se muestran los distintos
estados por los que puede pasar un thread a lo largo de su vida. Un thread
puede presentar cuatro estados distintos:
1) Nuevo (New): El thread ha sido creado pero no inicializado, es decir, no
se ha ejecutado todavía el método Start(). Se producirá un mensaje de
error (IllegalThreadStateException) si se intenta ejecutar cualquier
método de la clase Thread distinto de Start().
2) Ejecutable (Runnable): en thread puede estar ejecutándose, siempre y
cuando se le haya asignado un determinado tiempo de CPU. En la
práctica puede no estar siendo ejecutado en un instante determinado en
beneficio de otro thread.
3) Bloqueado (Blocked o Not Runnable): El thread podría estar
ejecutándose, pero hay alguna actividad interna suya que impide, como
Página 49
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 50
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 51
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 52
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 53
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
8. PRÁCTICAS DE DESARROLLO
a) ARQUITECTURA MVC
Modelo:
Contiene los objetos que representan los datos del programa (dominio de la
aplicación).
Encapsula el estado de la aplicación.
No tiene conocimiento / Es independiente del Controlador y la Vista.
El propio sistema es el encargado de mantener enlaces entre el Modelo y sus
Vistas, y notificar a las Vistas cuando cambia el Modelo.
Página 54
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Vista:
Página 55
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
INPUT
PROCESO
OUTPUT
INPUT CONTROLLER
MODEL
OUTPUT VIEW
b) FRAMEWORKS
Página 56
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
JAKARTA STRUTS
Es el framework que implementa el patrón de arquitectura MVC en Java orientado
a aplicaciones Web más difundido. Su naturaleza de software libre y su
compatibilidad con todas las plataformas J2EE lo convierte en una herramienta
altamente disponible que permite reducir el tiempo de desarrollo.
Los principales protagonistas en Struts son los Action y los ActionForms que
mediante pantallas creadas con su biblioteca de tag, permiten mantenimientos de
datos, con navegación definida en archivos XML.
Página 57
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 58
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
La página JSP miform.jsp, es una página JSF, la cual es una página JSP que
incluye etiquetas JSF. Expresa los componentes de la interfaz de usuario
empleando unas etiquetas personalizadas definidas por la tecnología JSF. La
interfaz gráfica para la aplicación Web (representada por miIG en la figura) maneja
los objetos referencias por la página JSP. Estos objetos incluyen:
HIBERNATE
Hibernate es un framework que proporciona mecanismos de mapeo
objeto/relacional para definir cómo se almacenan, eliminan, actualizan y
recuperan los objetos Java, mediante archivos declarativos (XML) que permiten
establecer estas relaciones.
Además, Hibernate ofrece servicios de consulta y recuperación que pueden
optimizar los esfuerzos de desarrollo dentro de entornos SQL y JDBC.
Página 59
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
IBATIS
Apache iBatis está constituido por dos frameworks independientes que
generalmente se usan juntos: DAO y sqlMaps. El primero simplifica la
implementación del patrón de diseño Direct Access Objects (DAO) y el segundo
simplifica la persistencia de objetos en bases de datos relacionales.
Página 60
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 61
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
c) PATRONES DE DISEÑO
Página 62
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
d) COMPONENTES ADICIONALES
JFREECHART
Presenta todo un conjunto de bibliotecas Java para el desarrollo de gráficos
estadísticos. La versión a usar para ONP es la 1.06, que se descarga en el
archivo jfreechart-1.0.6.zip donde se encuentran ejemplos de su uso y los
archivos .JAR que son las bibliotecas a enlazar en el proyecto.
IREPORT
En muchos proyectos Web siempre se presentan la necesidad de imprimir
reportes, documentos impresos que sustenten el cumplimiento de un proceso, o
que ayuden a recoger información para el usuario, por lo tanto, es necesario
generar reportes en Java:
Página 63
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Asimismo, Jasperreport, es para poder usar los reportes generados con iReport
a través de nuestras aplicaciones Java con bibliotecas (archivos JAR) que leen los
XML. La versión de Jasperreport a usar en ONP será 1.3.4, que se puede
descargar de: http://jasperreports.sourceforge.net/index.html
JAVAMAIL
El API JavaMail es un paquete de clases para leer, componer, y enviar mensajes
vía correo electrónico. Está diseñado para proporcionar acceso independiente del
protocolo, para enviar y recibir mensajes agrupándose en dos partes: La primera
parte del API es el cómo enviar y recibir mensajes independientemente del
proveedor/protocolo. La segunda parte habla de lenguajes específicos del
protocolo como SMTP, POP, IMAP, y NNTP
Los archivos necesarios para la generación de aplicaciones que envíen emails
son:
mail.jar de la siguiente dirección http://java.sun.com/products/javamail/index.jsp
Versión para BN JavaMail 1.4
activation.jar de la siguiente dirección http://java.sun.com/products/javabeans/jaf/
Versión para BN JAF 1.1
POI
El proyecto POI consiste en APIs para manipular varios formatos de ficheros
basados en el formato de Documento Compuesto OLE 2 de Microsoft, utilizando
Java puro. En concreto, se pueden leer y escribir ficheros MS Excel utilizando
Java.. Para más información del proyecto POI nave-gar a:
http://jakarta.apache.org/poi/index.html Versión para BN 3.0.1
e) RECOMENDACIONES DE OPTIMIZACIÓN
Página 64
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
JDBC
La estructura a emplearse en el caso se realicen las conexiones a Base de
Datos será siempre la siguiente:
Connection conn = null;
PreparedStatement pst = null;
Resultset rs = null;
Try
{
//Uso JDBC
}
catch (Exception ex)
{
//Manejar Exception y hacer rollback
}
finally
{
//cerrar conexiones clase utilitaria
}
Excepciones
Toda excepción debe ser controlada inclusive si se advierten excepciones del
tipo Runtime.
Las excepciones se deben manejar generalmente en las clases de control
(Ejemplo Servlets), ya que estas son las clases que manejan el flujo de la
aplicación
Se debe enviar a consola un mensaje de la excepción además de controlar
siempre que el flujo de la aplicación continúe (redirección a páginas de error).
No se debe usar la impresión del Stack Trace (solo para tareas de depuración)
Toda página JSP debe tener a una página de error.
Servlet y JSP
Usar el método process() en los Servlets para resolver requerimientos de los
métodos POST o GET.
Usar nombres estándar para objetos frecuentemente usados en servlets y JSP
(session, request, response).
Página 65
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
9. GLOSARIO
Archivador de Java (JAR).- Formato de archivo comprimido para almacenar todos los
recursos necesarios para instalar y ejecutar un programa de Java em um archivo
individual.
Array.- Vector.
Bit.- Unidad mínima de información digital que puede tomar los valores lógicos de 0 o de
1.
Boolean.- Tipo de datos bi-estado, que puede tomar valor de cierto (true) o falso (false).
Clase.- Unidad fundamental de programación en Java, que sirve como plantilla para la
creación de objetos. Una clase define datos y métodos y es la unidad de organización
básica de un programa Java.
Página 66
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Constructor.- Método que tiene el mismo nombre que la clase que inicia. Toma cero o
más parámetros y proporciona unos datos u operaciones iniciales dentro de una clase,
que no se pueden expresar como una simple asignación.
Data Access Object (DAO).- es un componente de software que suministra una interfaz
común entre la aplicación y uno o más dispositivos de almacenamiento de datos, tales
como una Base de datos o un archivo
Estructura de datos.- Una construcción de software (en memoria o en disco duro) que
contiene datos y las relaciones lógicas entre ellos.
Evento.- Un mensaje que significa n incidente importante, normalmente desde fuera del
entorno de software.
HTML (HyperText Markup Languaje).- Lenguaje que se utiliza para crear páginas Web.
Los programas de navegación de la Web muestran estas páginas de acuerdo con un
esquema de representación definido por el programa de navegación.
Instancia.- Objeto de software construido desde una clase. Por ejemplo, puede tener una
clase avión, pero una flota de quince instancias de avión.
Interfaz Definition Language (IDL).- Herramienta mediante la cual los objetos pueden
invocar métodos de otros objetos que se encuentren en máquinas remotas, mediante
CORBA.
Página 67
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Interfaz gráfica de usuario (GUI).- Una interfaz entre la máquina y el hombre como el
Windows de Microsoft, el Mac OS, o el Sistema X Windows, que depende de pantallas de
alta resolución, un recurso gráfico de puntero como un ratón y una colección de controles
en pantalla (denominados Widgets) que el usuario puede manejar directamente.
Interfaz.- Mecanismo Java para decirle al compilador que un conjunto de métodos serán
definidos en futuras clases. (Esas clases estarán definidas para implementar la interfaz).
Java DataBase Connectivity (JDBC).- Lenguaje estándar de Java para interactuar con
bases de datos, similar al SQL. Es independiente no sólo de la plataforma sino también
de la base de datos con que interactúe. Desde la versión 1.2 del JDK se permite
interactuar con ODBC.
Java Native Invocation (JNI).- Capacidad de Java para ejecutar código nativo, es decir,
código compilado al lenguaje máquina de un determinado ordenador. Permite a la
Máquina Virtual Java (JVM) interactuar con programas o bibliotecas escritos en otros
lenguajes (C/C++, ensamblador...). No se puede utilizar en applets, pues viola las
directrices de seguridad.
Java Runtime Environment (JRE).- Software suministrado por Sun que permite a los
programas de Java ejecutarse en una máquina de usuario. El JRE incluye la Máquina
Virtual Java (JVM).
Java Server Page.- Tecnología de script de servidor que permite que el codigo Java se
incorpore dinámicamente dentro de las paginas web (archivo HTML) y se ejecute al
utilizar las pagina, para devolver contenido dinámico a un cliente. Las JSP tienen uma
extensión de archivo .jps
Java Virtual Machine (JVM).- El intérprete de Java que ejecuta los códigos de byte en una
plataforma particular.
JavaBeans.- Paquete que permite escribir componentes software Java, que se puedan
incorporar gráficamente a otros componentes.
Java 2 Plataforma, Enterprise Edition.- Es una plataforma de Sun Microsystem Inc. Para
crear aplicaciones de empresa basadas en web. Los componenetes centrales de J”EE
son Eterprise JavaBeans, JavaServer Page(JSP) y servelet Java, ademas de diversas
interfaces para enlazar con recursos de información de empresas.
Página 68
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Método.- Conjunto de sentencias que operan sobre los datos de la clase para manipular
su estado.
Modelo.- En diseño orientado a objetos, una representación del mundo real en unas
abstracciones de software denominadas clases y la relación entre ellas.
Moldeado.- Suplantación del tipo de un objeto o variable por otro nuevo tipo.
Parámetros formales.- Nombres utilizados dentro de una subrutina por sus parámetros.
Plug-in.- Un programa de una plataforma específica diseñado para ser llamado por un
navegador Web. Utilizado con frecuencia para mostrar información que el mismo
navegador no puede mostrar.
Página 69
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Structured Query Language (SQL).- Lenguaje para realizar consultas a Bases de Datos
relacionales.
Superclase.- Clase de la cual heredan sus métodos y variables otras clases denominadas
subclases.
Swing.- Paquete que permite incorporar elementos gráficos en las aplicaciones, de una
manera más potente que con el AWT. Aparece en la versión 1.2 del JDK. Es no de los
componentes que están incluidos en las Java Fundation Classes, o JFC.
Thread.- Un "proceso ligero" que puede ser arrancado y utilizado más rápidamente que
por un fork o spawn. Véase también: fork, spawn y Proceso.
Unicode.- Conjunto de caracteres de 16 bits, en lugar de los 8 que soportaba ASCII. Así
se pueden representar la mayor parte de los lenguajes del mundo.
Página 70
Versión: 0.9.3
Manual de Instalación Fecha: 15/04/2010
Página 71