Documente Academic
Documente Profesional
Documente Cultură
TABLA DE CONTENIDO
1. ENTORNO DE DESARROLLO
La versión del JDK es la 1.6, el cual debe ser instalado junto con el JRE en el directorio C:/java1.6.
Variable JAVA_HOME: Es una variable de entorno que apunta al directorio donde quedó
instalado el JDK. C:/java1.6
Variable PATH: Especifica la ruta de acceso a los archivos ejecutables más importantes
del sistema; la modificación de esta variable permite accesar los ejecutables Java (javac,
javadoc, java) proporcionadas con el JDK de cualquier directorio. C:/java1.6/bin;
El IDE de desarrollo a utilizar es el JBoss Developer Studio 2.1.0.GA, el cual debe ser instalado
en la carpeta por defecto del instalador.
Para su configuración se debe instalar en el JBoss Developer Studio los siguientes paquetes:
subclipse-site-1.4.7
ajdt_1.6.1a_for_eclipse_3.4
org.tmatesoft.svn_1.2.1.eclipse
Una vez instalados se debe solicitar el nombre de usuario y la contraseña al Ingeniero encargado.
Cualquier inquietud acerca de la instalación y configuración del servidor de versiones, dirigirse con
el Ingeniero encargado.
El nombre del proyecto para los JPA debe estar conformado de la siguiente manera:
[Sistema]Entidades
[Sistema]JPA
Descargar del servidor de versiones de documentación las carpetas Estilos, Plantillas e Imágenes y
copiarlas en la careta view de la aplicación.
Capa de presentación: Modelo Vista Controlador, el cual es implementado por Java Server
Faces (JSF).
EAR/lib
antlr-runtime.jar
commons-beanutils.jar
core.jar
drools-compiler.jar
drools-core.jar
groovy-all.jar
janino.jar
jboss-el.jar
jboss-seam-remoting.jar
jbpm-jpdl.jar
mvel14.jar
richfaces-api.jar
WAR/WEB-INF/lib
commons-digester.jar
jboss-seam-debug.jar
jboss-seam-excel.jar
jboss-seam-ioc.jar
jboss-seam-mail.jar
jboss-seam-pdf.jar
jboss-seam-resteasy.jar
jboss-seam-rss.jar
jboss-seam-ui.jar
jsf-facelets.jar
jxl.jar
richfaces-impl.jar
richfaces-ui.jar
# You can remove the JARs for themes you aren't using
darkX.jar
glassX.jar
laguana.jar
Para hace la configuración en los proyectos debemos colocar las librerías de RICHFACES:
- richfaces-api.jar
- richfaces-ui.jar
- richfaces.impl.jar
La librería de FACELETS:
- jsf-facelets.jar
- commons-digester.jar
En la carpeta lib a nivel del archivo EAR. La estructura de librerías debe quedar de la siguiente
manera:
EAR/lib
antlr-runtime.jar
commons-beanutils.jar
commons-digester.jar
core.jar
drools-compiler.jar
drools-core.jar
groovy-all.jar
janino.jar
jboss-el.jar
jboss-seam-remoting.jar
jbpm-jpdl.jar
jsf-facelets.jar
mvel14.jar
richfaces-api.jar
richfaces-ui.jar
richfaces-impl.jar
WAR/WEB-INF/lib
jboss-seam-debug.jar
jboss-seam-excel.jar
jboss-seam-ioc.jar
jboss-seam-mail.jar
jboss-seam-pdf.jar
jboss-seam-resteasy.jar
jboss-seam-rss.jar
jboss-seam-ui.jar
# You can remove the JARs for themes you aren't using
darkX.jar
glassX.jar
laguana.jar
<display-name>Proyecto</display-name>
<module>
<java>/lib/jsf-facelets.jar</java>
</module>
<module>
<java>/lib/richfaces-api.jar</java>
</module>
<module>
<java>/lib/richfaces-ui.jar</java>
</module>
<module>
<java>/lib/richfaces-impl.jar</java>
</module>
<module>
<web>
<web-uri>Proyecto.war</web-uri>
<context-root>/Proyecto</context-root>
</web>
</module>
<module>
<ejb>Proyecto.jar</ejb>
</module>
…..
…..
…..
</application>
Las librerías richfaces a usar son las versión 3.3.1. Las cuales deben ser remplazadas en el
proyecto generado por el framework seam.
2. ENTIDADES
La Entidad debe llevar las anotaciones: @Entity, @Table y @Name y debe ser una clase
Serializable.
La anotación @Table indica la tabla de la base de datos relacionada para su persistencia.
En la anotación @Entity utilizar el parámetro name para identificar el EJB @Entity(name =
“xxx”).
Los nombres de las clases de Entidad deben ser sustantivos en singular.
Cada entidad debe llevar el atributo serialVersionUID generado por el IDE.
Las anotaciones en la entidad se deben colocar antes del método get correspondiente y no
en la declaración del atributo.
Las anotaciones requeridas para un campo llave son: @Id, @Column.
Las anotaciones requeridas para un campo fecha son: @Column, @Temporal y @NotNull
(Si el campo es obligatorio).
Las anotaciones requeridas para un campo alfanumérico son: @Column, @NotNull (Si el
campo es obligatorio) y @Length.
Las anotaciones requeridas para un campo numérico son: @Column y @NotNull.
Se debe utilizar la anotación @EmbeddedId, la cual obliga a declara un objeto del tipo de la llave
dentro del EJB de entidad.
Se debe utilizar únicamente los campos que conforman la llave primaria. En el caso de las llaves
compuestas, el atributo que hace referencia a ésta.
Este método se debe sobrescribir cuando se desea obtener una copia del objeto original, para
hacer posibles modificaciones al objeto copia sin reflejar cambios en el objeto original
Nota: Para utilizar los JPA externos (academico.jar, recursos-humanos.jar, etc), éstos deben
copiarse en la carpeta raíz. En el caso de Windows C:\, para Linux \). En cada uno de los archivos
persistence.xml de su aplicación, se debe utilizar <jar-file>file:/jpa.jar</jar-file>.
Por ejemplo:
<jar-file>file:/academico.jar</jar-file>
<jar-file>file:/recursos-humanos.jar</jar-file>
<jar-file>file:/general-UIS.jar</jar-file>
3. SERVICIOS
@RemoteBinding(jndiBinding = "ConsultarGenerales")
Para utilizar el servicio se debe utilizar la anotación EJB indicando el nombre jndi. De acuerdo al
ejemplo anterior sería:
@EJB(mappedName = "ConsultarGenerales")
4. LIBRERIAS GENERALES
4.1. general-UIS.jar
4.2. Log
Agregar al proyecto la librería log4j.jar, además se debe incluir el siguiente atributo en la clase:
Para crear un mensaje de error basta con utilizar la variable log incluyendo cualquiera de estas
líneas (Se puede encontrar más información en Internet consultando log4j):
log.getLog.error(mensaje);
log.getLog.info(mensaje);
4.3. Excepciones
Primero se debe copiar el archivo xfire-all-1.2.6.jar a la carpeta lib del proyecto y a la carpeta lib
del servidor.
Los métodos que son declarados en la interfaz del EAO, deben lanzar la excepción DSIException.
Por ejemplo:
return tiposDocumento;
}
Para capturar las posibles excepciones que lanza el método, se utiliza el try - catch, y en el catch la
Exception. Dentro del catch se lanza la excepción DSIExcepcion pasando como argumento la
variable de la excepción.
try {
this.tiposDocumento = autorizarPagosEAO.getTiposDocumentos(null);
} catch (DSIException e) {
log.getLog().error(e.toString());
}
Los métodos que se implementen en el EAO como privados, no deben capturar la excepción, la
deben lanzar.
Para los métodos que manejen transacciones UPDATE, DELETE E INSERT, es necesario utilizar
el método flush() del EntityManager, para provocar la excepción antes del commit. Por ejemplo:
La clase DSIExcepcion, permite crear otras excepciones personalizadas y para ello existen
diferentes constructores para la clase, algunos de ellos reciben la llave para leer el mensaje del
archivo del idioma general o específico.
Este tipo de excepción se debe lanzar en los métodos del EAO que ameriten su validación. Por
ejemplo:
Con Argumento:
try {
this.tiposDocumento = autorizarPagosEAO.getTiposDocumento(null);
} catch (DSIException e) {
if(e instanceof DSIPrivilegioException){
log.getLog().error(e.toString());
} else {
log.getLog().error(e.toString());
}
}
Es importante resaltar que los mensajes de error que el usuario ve en la capa de presentación, son
enviados a través del StatusMessages ubicado en el catch del método en el EJB y de acuerdo al
archivo de idioma utilizado. Por ejemplo:
try {
this.tiposDocumento = autorizarPagosEAO.getTiposDocumento(null);
} catch (DSIException e) {
if(e instanceof DSIPrivilegioException){
StatusMessages.instance().add(FormatoWeb.getMensaje(„ErrorPrivilegio‟, true));
log.getLog().error(e.toString());
} else {
StatusMessages.instance().add(FormatoWeb.getMensaje(„ErrorConsulta‟, true));
log.getLog().error(e.toString());
}
}
4.4. formato-web.jar
Esta librería contiene la clase FormatoWeb, la cual es la encargada de dar formato a las fechas,
números, caracteres especiales e idioma.
Para utilizar la clase se debe modificar el archivo build.xml de la aplicación adicionando las
siguientes líneas dentro de la etiqueta <target name="war"…/>
<target name="war"…/>
…
…
<copy todir="${ear.dir}">
<fileset dir="${basedir}/resources">
<include name="messages*.properties"/>
</fileset>
</copy>
…
…
</target>
<module>
<ejb>formato-web.jar</ejb>
</module>
<component class="co.edu.uis.servicios.FormatoWeb"/>
#{FormatoWeb.[nombreMetodo](parámetro)}
Donde nombreMetodo es el nombre del método a utilizar y parámetro es el valor a mostrar. Por
ejemplo:
#{FormatoWeb.fechaCorta(usuario.fechaCreacion)}
Para el manejo del idioma se debe descargar del servidor de versiones de documentación el
archivo messages_es_CO.properties ubicado en la carpeta Idioma y copiarlo a la carpeta
resources de su proyecto.
5. PATRONES DE DISEÑO
5.1. EAO
En la interfaz EAO deben estar la firma de los métodos que se desean implementar en la clase
EAO y los cuales serán llamados desde la clase EJB. La única anotación requerida para la interfaz
es la @Local.
package co.edu.uis.prueba;
import javax.ejb.Local;
@Local
public interface PruebaEAO {
public void registrarCondicionalidad (Condicionalidad aCondicionalidad) throws
DSIException;
}
Es necesario utiliza la sentencia throws, esta se utiliza al final de la declaración del método e
indica que la clase de Excepciones DSIException va a tener que ser implementada en el método
que invoque al método que tenga throws, es decir la clase EJB.
En la clase EAO se debe usar las anotaciones: @Stateless y @Name. El EntityManager debe ser
inyectado por SEAM utilizando la anotación @In.
package co.edu.uis.prueba;
import javax.ejb.Stateless;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import co.edu.uis.academico.entidades.Condicionalidad;
@Stateless
@Name(“pruebaEAO”)
public class PruebaEAOImp implements PruebaEAO {
@In
private EntityManager em;
}catch(Exception e){
throw new DSIException(e);
}
}
}
Para el funcionamiento correcto del @In en la clase EAO, se debe configurar el contexto de
persistencia en el archivo components.xml.
persistence:managed-persistence-context
name="em"
auto-create="true"
persistence-unit-jndi-name="x"/>
Donde x es el nombre del JNDI Java Naming Directory Interface, que está en el archivo
persistence.xml.
Para realizar consultas a la base de datos se debe utilizar las funciones de Hibernate, las cuales
permiten interactuar con las entidades para realizar búsquedas.
Primero se debe crear el objeto sesión de Hibernate, el cual toma la conexión del EntityManager:
Con el objeto anterior se crea el siguiente objeto de tipo Criteria, el cual asigna la clase y ofrece la
posibilidad de adicionar condiciones a la consulta:
criterios.list();
criterios.setMaxResults(100);
La interfaz EJB solo lleva la firma de los métodos que son implementados en la clase EJB y
aquellos métodos que son llamados desde la capa de presentación de JSF, la única anotación
requerida es: @Local.
package co.edu.uis.prueba;
import javax.ejb.Local;
@Local
public interface Prueba {
public void registrar(String aCodigo, string aNombre);
}
La clase EJB debe usar las anotaciones @Stateful, @Scope y @Name, en esta clase se desarrolla
la lógica de negocio y llama los métodos del EAO.
package co.edu.uis.prueba;
import javax.ejb.Stateful;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import co.edu.uis.academico.entidades.Condicionalidad;
@Stateful
@Scope(ScopeType.Conversation)
@Name(“prueba”)
public class PruebaEJB implements Prueba {
@EJB
private PruebaEAO pruebaEAO;
6. CAPA DE PRESENTACIÓN
6.1. Plantilla principal
Barra de navegación
MENU CONTENIDO
6.2. Contenido
Esta sección se refiere al caso de uso implementado. La estructura de esta sección es:
Menú de opciones
FaccesMessages
FILTROS
DATOS
Menú de opciones
Messages
FORMULARIO CENTRADO
6.3. Paginación
Para la paginación se debe tener en cuenta el tipo de consulta que se va a realizar y la memoria
consumida por ésta en el servidor de base de datos. De acuerdo a esto la aplicación decide el
número de registros máximos que debe retornar la consulta.
Por ejemplo, se quiere consultar los estudiantes de la sede Bucaramanga. De acuerdo al análisis
realizado, no hay un consumo alto de memoria, por lo que se decide retornar 100 estudiantes
máximos. Esto indica que cuando se implemente el método de consulta en JPQL, el parámetro
setMaxResults debe tener el valor de 100.
<h:form>
<a:outputPanel id="tblTabla">
<rich:dataTable value="#{condicionalidades}"
var="v"
rendered="#{condicionalidades != null and
condicionalidades.rowCount > 0}"
width="100%" onRowMouseOver="this.style.backgroundColor='#E1E1E1'"
onRowMouseOut="this.style.backgroundColor=
'#{a4jSkin.tableBackgroundColor}'"
id="dtbCondicionalidades"
rows="20">
<f:facet name="header">
<rich:columnGroup>
<rich:column width="15%">
<rich:spacer></rich:spacer>
</rich:column>
<rich:column
width="85%">#{FormatoWeb.getMensaje(‘descripcion’,true)}
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column width="15%">
<div align="center">
<h:outputText value="#{v.codigo}" />
</div>
</rich:column>
<rich:column width="85%">
<div align="left">
<h:outputText value="#{v.descripcion}" />
</div>
</rich:column>
<f:facet name="footer">
<rich:datascroller
id=”dscCondicionalidades”>
<f:facet name="next">
<h:outputText
value="#{FormatoWeb.getMensaje(‘siguiente’,true)}" />
</f:facet>
<f:facet name="previous">
<h:outputText
value="#{FormatoWeb.getMensaje(‘anterior’,true)}" />
</f:facet>
</rich:datascroller>
</f:facet>
</rich:dataTable>
</a:outputPanel>
</h:form>
6.4. Texto
Existen cinco tipos de plantillas para mostrar texto en la página. Éstas se encuentran dentro de la
carpeta Plantillas.
<s:decorate template="../Plantillas/[nombrePlantilla]">
<ui:define name="label">
#{FormatoWeb.getMensaje(„primerNombre‟, true)}
</ui:define>
</s:decorate>
<s:decorate template="../Plantillas/mostrar.xhtml">
<ui:define name="label">
#{FormatoWeb.getMensaje(„primerNombre‟, true)}
</ui:define>
<h:outputText value="#{formatoWeb.usuario.primerNombre}"/>
</s:decorate>
6.5. Edición
Para capturar cualquier tipo de dato en una caja de texto se debe utilizar la plantilla edicion.xhtml
de la siguiente manera:
<ui:define name="label">
#{FormatoWeb.getMensaje(„primerNombre‟, true)}
</ui:define>
Se debe usar el control dataTable de Rich Faces, agregando las siguientes líneas de programación
en su definición:
onRowMouseOver="this.style.backgroundColor='#E1E1E1'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'
Las cuales indican el color de la fila cuando el puntero del mouse esta sobre ésta.
Para cualquier tipo de lista se debe utilizar el control de Java Server Faces.
Los mensajes del sistema son textos enviados por los EJB de sesión, ya sea de confirmación de
una acción o errores en el procedimiento. Dichos errores se deben mostrar en la etiqueta
StatusMessages la cual debe estar definida al comienzo de la página después del menú si existiera
éste. El código es el siguiente:
Para mostrar errores de validación en los formularios, éstos deben aparecer al frente de cada
control y no globalmente.
A continuación se presentan los aspectos más importantes que se deben tener en cuenta al
momento de crear una clase o método y el control de acceso para los atributos de la misma.
7.2. Paquetes
El nombre de los paquetes debe iniciar con minúscula la primera palabra, las siguientes
palabras inician en mayúscula, sin separadores.
La estructura de los paquetes es la siguiente:
co.edu.uis.[sistema].[aplicación].[módulo].[caso de uso]
Ejemplo: co.edu.uis.financiero.egresos.contratacion.ordenarPrestacionServicio.
La estructura para el paquete donde van a estar las entidades comunes para todos los
sistemas es el siguiente: co.edu.uis.sistema.entidades
La estructura para el paquete donde van a estar los servicios comunes para todos los
sistemas es el siguiente: co.edu.uis.sistema.servicios
7.3. Clases
Los nombres de las clases deben iniciar siempre en mayúscula, deben ser simples y
descriptivos.
Los nombres de los EJB utilizados por el patrón Session Façade está conformado por un
verbo autorizado (Ver anexo de verbos). Además debe incluir al final las letras “EJB”.
Ejemplo: RegistrarMatriculaEstudianteEJB.
La interfaz asociada al EJB debe llevar el mismo nombre del EJB sin el sufijo “EJB”.
Ejemplo: RegistrarMatriculaEstudiante.
El nombre de los EJB utilizados por el patrón EAO está conformado por un verbo
autorizado. Además debe incluir al final las letras “EAOImp”. Por ejemplo:
RegistrarMatriculaEstudianteEAOImp.
La interfaz asociada al EAO debe llevar el mismo nombre del EJB sin el sufijo “Imp”.
Ejemplo: RegistrarMatriculaEstudianteEAO.
Para los EJB de entidad, cuando la clase representa una relación entre dos entidades, el
nombre se forma uniendo los nombres de las entidades involucradas.
El nombre de la clase no contendrá detalles sobre la implementación interna de la misma.
Por ejemplo ArrayEstudiantes no es nombre válido.
7.4. Atributos
Para el nombre de las atributos utilizar palabras completas en singular (máximo tres
palabras). El nombre deber ir en plural cuando la variable representa una lista o un
conjunto de elementos.
Si las palabras no son suficientes para la descripción, se debe hacer un comentario, al
frente de la variable.
Las constantes (final) van en mayúscula sostenida separando las palabras por guión de
piso ( _ ).
Para los argumentos, deben iniciar siempre con la letra “a” y posteriormente el nombre
según lo establecido anteriormente.
Para las instancias de las clases, las entidades llevan el mismo nombre de la clase, solo
que la palabra inicial va en minúscula. Si se necesita más de una instancia, para
diferenciarlas se debe adicionar una palabra que identifique el rol que desempeña.
Ejemplo: Estudiante estudiantePregrado, Estudiante estudiantePostgrado.
7.5. Métodos
El nombre de las librerías no sigue el mismo estándar de las clases. Éstas se deben escribir en
minúscula, separando cada palabra con un guión (-). Ejemplo: recursos-humanos.jar.
El nombre de las variables a utilizar para reconocer las librerías utilizadas en las páginas debe ser
así:
Para los nombres de los controles se coloca el prefijo correspondiente al control seguido del
nombre.
9. ESTRUCTURA DE DIRECTORIOS
Para cada uno de los sistemas principales (Recursos Humanos, Financiero, Académico,
etc.) se debe crear un proyecto que debe seguir los estándares para la estructura de
directorios y nombres. En estos proyectos van las entidades propias de cada sistema, así
como los componentes comunes a varias aplicaciones.
Las entidades van en cada sistema empaquetado en un .jar, de tal manera que el
desarrollo de una nueva aplicación no implica la implementación de éstas.
En el paquete general van los elementos que son utilizados por todos los módulos.
Para la creación de las entidades se toma la estructura de la base de datos. Por lo tanto se
hace indispensable comenzar por este paso, seguido de la creación de los componentes
para posteriormente desarrollar las demás aplicaciones.
9.2. Carpetas
Deben comenzar con minúscula y están basados en la estructura de directorios que se genera
mediante “Seam-Gen” cuando se crea un nuevo proyecto. Las carpetas que se crean son las
siguientes:
bootstrap
classes
dist
exploded-archives
lib
nbproject
resources
src
hot
main
test
test-build
view
A continuación se hace una breve descripción de las carpetas con las que el desarrollador tendrá
contacto directo.
Carpeta src. En esta carpeta se guardan los archivos fuentes de las clases del sistema
distribuidos en dos subcarpetas de la siguiente manera:
Carpeta main. Contiene las clases de apoyo al proceso. No incluye a las entidades, pues
estas estarán disponibles en otro lugar que se describe más adelante en este documento.
Carpeta hot. Contiene los casos de uso reflejados en los EJBs y sus interfaces.
Carpeta view. Contiene las páginas, imágenes, estilos y todo lo referente a aspecto de la
aplicación.
Carpeta dist. Contiene los archivos jar, war y ear de la aplicación. Estos se generan
automáticamente.
Se sigue el mismo estándar dado para el nombre de variables descrito en el capítulo 7 de este
documento.
Ejemplo:
co.uis.edu.co.recursosHumanos.catedra.solicitudesNombramiento.aprobacionViceAcdmca
En el caso de los proyectos principales (los que empaquetan entidades y componentes para cada
sistema) los paquetes serán los siguientes:
imagenes
estilos
ayudas
modulos
9.5. Documentación
La documentación relacionada con el diseño del sistema reside en la base de datos de Enterpirse
Architect.
La documentación del código fuente se debe hacer en cada una de las clases, siguiendo el
estándar de JAVADOC y documentando la definición de la clase, descripción de los métodos get y
set y descripción de los parámetros de entrada y salida de cada uno de los métodos que
componen la clase.
Los nombres dentro del código fuente siguen los parámetros establecidos en el estándar general
de nombres, con las siguientes particularidades.
Los nombre de los parámetros de los métodos empiezan con guión de piso, el resto del
nombre sigue el estándar para nombres de variables. Una vez dentro del código fuente, se
deben asignar a una nueva variable con el mismo nombre pero sin el guión de piso.
Los nombres de constantes o variables finally, se escriben en mayúscula sostenida
separando las palabras por guiones de piso.
Los programas en Java pueden tener dos tipos de comentarios: comentarios de implementación
y comentarios de documentación. Los comentarios de implementación están delimitados por /*..
*/ cuando se trata de varias líneas y // cuando se trata de una línea. Los comentarios de
documentación (conocidos como "comentarios Javadoc") son específicos de Java y están
delimitados por /** ... */. Los comentarios de documentación se pueden extraer a ficheros HTML
usando la herramienta javadoc.
Los comentarios se deben usar para dar una visión general del código y para proporcionar
información adicional que no esté disponible fácilmente en el propio código.
Cada archivo de código fuente Java debe contener una única clase o interfaz pública y deben
seguir el siguiente orden:
Sentencias package.
Sentencias import.
Tabulación:
La unidad de tabulación será de 2 espacios.
Longitud de línea
Se deben evitar líneas de 80 o más caracteres ya que algunas herramientas no las manejan bien,
además que líneas demasiado extensas hacen difícil la lectura del código.
Ruptura de líneas
Cuando una expresión no cabe en una única línea, se debe romper de acuerdo a estos principios
generales:
Variables locales:
Todas las variables locales deben inicializarse en el sitio en donde se declaran.
Las variables deben declararse al inicio de cada método y no esperar a declararlas hasta su primer
uso. La única excepción son las variables de bucles que en Java se pueden declarar dentro de la
sentencia for. Apropósito de estas variables, se utilizarán las letras de la i a la z en la medida que
se vayan necesitando.
Ningún espacio entre el nombre del método y el paréntesis "(" que abre su lista de
parámetros.
La llave de apertura "{" aparece al final de la misma línea que la sentencia de declaración.
La llave de cierre "}" comienza una línea nueva tabulada para coincidir con su sentencia de
apertura correspondiente, excepto cuando es un bloque vacío que la llave de cierre "}"
debe aparecer inmediatamente después de la de apertura "{".
Los métodos están separados por una línea en blanco.
Las clases e interfaces principales no van tabuladas
Los bloques de código que pertenecen a una clase o método van tabulados.
Sentencias simples:
Se debe escribir solo una sentencia por línea, y no escribir más de una separadas por punto y
coma en la misma línea sin importar lo cortas que puedan ser.
Sentencias compuestas:
Las sentencias compuestas son sentencias que contienen una lista de sentencias encerradas entre
llaves "{" y "}" y deben seguir las siguientes reglas de formato.
Las sentencias internas deben estar tabuladas un nivel más que la sentencia compuesta.
La llave de apertura debe estar al final de la línea que comienza la sentencia compuesta; la
llave de cierre debe estar en una nueva línea y estar tabulada al nivel del principio de la
sentencia compuesta.
Las llaves se usan en todas las sentencias compuestas, incluidas las sentencias únicas,
cuando forman parte de una estructura de control, como una sentencia if-else o un bucle
for. Esto hace más fácil introducir nuevas sentencias sin provocar errores accidentales al
olvidarse añadir las llaves.
Sentencias if:
Deben seguir las reglas de las sentencias compuestas, debe existir un espacio entre la palabra
reservada if y el paréntesis de apertura de la condición y otro entre el paréntesis de cierre de la
condición y la llave de apertura del if. En general el formato que debe seguirse es el siguiente:
if (condición) {
sentencias;
if (condición) {
sentencias;
} else {
sentencias;
if (condición) {
sentencias;
} else if (condición) {
sentencias;
} else {
sentencias;
Las sentencias if siempre llevan llaves, no importa que solo tengan una sentencia.
Sentencias for:
Estas sentencias deben seguir las reglas de las sentencias compuestas además del siguiente
formato:
sentencias;
Una sentencia for vacía (aquella en la que todo el trabajo se hace en las cláusulas de inicialización,
condición y actualización) debería tener el siguiente formato:
Evitar la complejidad de utilizar más de tres variables en la inicialización. En lugar de esto se deben
usar sentencias separadas antes del bucle for.
Sentencias while:
Una sentencia while debe seguir el siguiente formato:
while (condición) {
sentencias;
while (condición);
Sentencias do-while:
Una sentencia do-while debe tener el siguiente formato:
do {
sentencias;
} while (condición);
Sentencias switch:
Una sentencia switch debe tener el siguiente formato:
switch (condición) {
case ABC:
sentencias;
case DEF:
sentencias;
break;
case XYZ:
sentencias;
break;
default:
sentencias;
break;
Todas las sentencias switch deberían incluir un caso por defecto. El break en el caso por defecto
es redundante, pero debe colocarse, esto puede prevenir un error de continuar con el siguiente si
más adelante se incluye otro caso.
Sentencias try-catch:
Una sentencia try-catch debe tener el siguiente formato:
try {
sentencias;
} catch (ExceptionClass e) {
sentencias;
Una sentencia try-catch puede venir seguida de una sentencia finally, la cual se ejecuta siempre
independientemente de que el bloque try se haya completado correctamente o no.
try {
sentencias;
} catch (ExceptionClass e) {
sentencias;
} finally {
sentencias;
Líneas en blanco
Las líneas en blanco mejoran la legibilidad resaltando secciones de código que están relacionadas
lógicamente.
Entre métodos.
Entre las variables locales de un método y su primera sentencia.
Antes de un comentario de bloque o de una sola línea.
Entre las secciones lógicas de un método, para mejorar la legibilidad.
Espacios en blanco:
Los espacios en blanco deberían usarse en las siguientes circunstancias:
Dado la similitud entre las sentencias del lenguaje SQL y el JPQL, se tratarán en conjunto y no por
separado.
Sentencia SELECT
Cada una de las partes que componen una sentencia SELECT deben estar en una línea
independiente. Por ejemplo:
SELECT e
FROM estudiante e
ORDER BY e.codigo
SELECT e
FROM estudiante e
WHERE e.programa IN (
SELECT p.programa
FROM programaAcademico p
SELECT e
FROM estudiante e
and e.programa = 23
ORDER BY e.codigo
Para las condiciones agrupadas se utiliza la misma convención del operador lógico y los
paréntesis. Por ejemplo:
SELECT e
FROM estudiante e
and (
e.apellido = “GOMEZ”
or e.apellido = “ARRIETA” )
ORDER BY e.codigo
VALUES (1,”CARLOS”)
Cada campo que se vaya a actualizar debe estar especificado en una línea independiente.
Por ejemplo:
UPDATE estudiante
SET codigo = 1,
nombre = “Oscar”,
apellido = “Suárez”
Cada asignación de parámetros desde JAVA se debe hacer en una sola línea:
ps.setString(1,valor);
ps.setString(2,valor);
11. UML
Para el desarrollo del modelo de casos de uso, se debe realizar un diagrama de casos de usos por
módulo del sistema a implementar siguiendo el estándar propuesto por el Lenguaje Unificado de
Modelado 2.1 (UML). Se deben tener en cuenta los siguientes puntos:
Identificación de Actores
Se identifican con el rol que desempeñan en el sistema.
Casos de Uso
Se deben identificar con una acción. Los verbos que se pueden utilizar se encuentran al final del
documento.
Descripción completa
Precondiciones y postcondiciones
Diagrama de clases
Incluir en cada clase todos los atributos. Esto implica adicionar aquellos que son propios y
generados por las relaciones (objetos o listas) que tenga la clase.
Todo diagrama debe mostrar los atributos de cada una de las clases.
Aprobar Dar visto bueno. Se utiliza cuando el proceso es complejo, es decir, que implica
varias rutas alternas.
Generar Proceso que realiza N transacciones de forma automática. Ej: Generar deudas
Filtrar Filtrar los datos de una consulta por un buscador o parámetros de búsqueda
A nivel de métodos
Aprobar Dar visto bueno. Se utiliza cuando el proceso es complejo, es decir, que implica
varias rutas alternas.
Generar Proceso que realiza N transacciones de forma automática. Ej: Generar deudas
Filtrar Filtrar los datos de una consulta por un buscador o parámetros de búsqueda