Vous êtes sur la page 1sur 12

INTRODUCCIN

Este modelo de programacin est basado en los estndares recomendados por Sun Microsystems, que
han sido difundidos y aceptados ampliamente por toda la comunidad Java, y que han terminado por
consolidarse como un modelo estndar de programacin de facto.

Estas normas son muy tiles por muchas razones, entre las que destacan:
Facilitan el mantenimiento de una aplicacin. Dicho mantenimiento constituye el 80% del coste del ciclo
de vida de la aplicacin.
Permite que cualquier programador entienda y pueda mantener la aplicacin. En muy raras ocasiones
una misma aplicacin es mantenida por su autor original.
Los estndares de programacin mejoran la legibilidad del cdigo, al mismo tiempo que permiten su
compresin rpida.
ORGANIZACIN DE FICHEROS

Las clases en Java se agrupan en paquetes. Estos paquetes se deben organizar de manera jerrquica,
de forma que todo cdigo desarrollado para el Ayuntamiento de Mlaga tendr que estar incluido dentro
del paquete "eu.malaga".

Dentro del paquete principal las clases se organizarn en subpaquetes en funcin del rea, organismo o
seccin del Ayuntamiento al que pertenezca el cdigo desarrollado. Por ejemplo, si estamos
desarrollando un servicio web de inscripcin a un curso de programacin Java del IMFE las clases de
dicho servicio se incluiran en el paquete "eu.malaga.imfe.webservices.cursojava" o similar.
Un fichero consta de secciones que deben estar separadas por lneas en blanco y comentarios
opcionales que identifiquen cada seccin.

Deben evitarse los ficheros de gran tamao que contengan ms de 1000 lneas. En ocasiones, este
tamao excesivo provoca que la clase no encapsule un comportamiento claramente definido, albergando
una gran cantidad de mtodos que realizan tareas funcional o conceptualmente heterogneas.

FICHERO FUENTE JAVA (.JAVA)

Cada fichero fuente Java debe contener una nica clase o interfaz pblica. El nombre del fichero tiene
que coincidir con el nombre de la clase. Cuando existan varias clases privadas asociadas funcionalmente
a una clase pblica, podrn colocarse en el mismo fichero fuente que la clase pblica. La clase pblica
debe estar situada en primer lugar dentro del fichero fuente.

En todo fichero fuente Java distinguimos las siguientes secciones:

Comentarios de inicio.
Sentencia de paquete.
Sentencias de importacin.
Declaraciones de clases e interfaces.

COMENTARIOS DE INICIO

Todo fichero fuente debe comenzar con un comentario que incluya el nombre de la clase, informacin
sobre la versin del cdigo, la fecha y el copyright. El copyright indica la propiedad legal del cdigo, el
mbito de distribucin, el uso para el que fue desarrollado y su modificacin.

Dentro de estos comentarios iniciales podran incluirse adicionalmente comentarios sobre los cambios
efectuados sobre dicho fichero (mejora, incidencia, error, etc.). Estos comentarios son opcionales si los
ficheros estn bajo un sistema de control de versiones bien documentado, en caso contrario se
recomienda su uso. Estos comentarios constituyen el historial de cambios del fichero. Este historial es
nico para cada fichero y permitir conocer rpidamente el estado y la evolucin que ha tenido el fichero
desde su origen.

Todos los ficheros fuente deben comenzar con un comentario en el que se lista el nombre de la clase,
informacin de la versin, fecha, y copyright:+

/*
* Nombre de la clase
*
* Informacion de la version
*
* Fecha
*
* Copyright
*/
SENTENCIAS DE PAQUETE

La primera lnea no comentada de un fichero fuente debe ser la sentencia de paquete, que indica el
paquete al que pertenece(n) la(s) clase(s) includa(s) en el fichero fuente. Por ejemplo,

javax.crypto paquete;

Los paquetes son una forma de organizar grupos de clases. Un paquete contiene un conjunto de clases
relacionadas bien por finalidad, por mbito o por herencia.

Los paquetes resuelven el problema del conflicto entre los nombres de las clases. Al crecer el nmero de
clases crece la probabilidad de designar con el mismo nombre a dos clases diferentes.

Las clases tienen ciertos privilegios de acceso a los miembros dato y a las funciones miembro de otras
clases dentro de un mismo paquete.

En el Entorno Integrado de Desarrollo (IDE) JBuilder de Borland, un proyecto nuevo se crea en un


subdirectorio que tiene el nombre del proyecto. A continuacin, se crea la aplicacin, un archivo .java que
contiene el cdigo de una clase cuyo nombre es el mismo que el del archivo. Se pueden agregar nuevas
clases al proyecto, todas ellas contenidas en archivos .java situadas en el mismo subdirectorio. La
primera sentencia que encontramos en el cdigo fuente de las distintas clases que forman el proyecto
es package o del nombre del paquete.

// archivo MiApp.java

Paquete nombrePaquete;
public class {MiApp
//miembros dato
//funciones miembro
}
/ /archivo MiClase.java

Paquete nombrePaquete;
MiClase {public class
//miembros dato
//funciones miembro
}

SENTENCIAS DE IMPORTACIN

Los proyectos (en general podramos establecer equivalencia de proyecto con programa, pero no
siempre es as; proyecto es un conjunto de cdigo que se mantiene agrupado) en Java se suelen
organizar en paquetes (packages). El concepto de paquete viene siendo similar al de carpeta en
Windows: un contenedor donde mantenemos cosas relacionadas entre s.

Tras la declaracin del paquete se incluirn las sentencias de importacin de los paquetes necesarios.
Esta importacin de paquetes obligatorios seguir el siguiente orden:

Paquetes del JDK de java.

Paquetes de utilidades no pertenecientes al JDK de Java, de frameworks de desarrollo o de proyectos


opensource tales como apache, hibernate, springframework, etc.

Paquetes desarrollados para el Ayuntamiento de Mlaga.

Paquetes de la aplicacin.

Se recomienda minimizar en la medida de lo posible el uso de importaciones del tipo "package.*", pues
dificultan la comprensin de las dependencias existentes entre las clases utilizadas por la aplicacin. En
caso contrario, se recomienda utilizar comentarios de lnea tras la importacin.

import java.io. *; // BufferedReader, PrintWriter, FileInputStream, Archivo


java.util.ArrayList importacin;

org.apache.log4j.Logger importacin;
org.apache.lucene.analysis.Analyzer importacin;
es.provincia.organismo.corporativas.atlas.vo.AgendaVO importacin;
es.provincia.organismo.atlas.vo.AnuncioVO importacin;
es.provincia.organismo.atlas.vo.OrganigramaVO importacin;

DECLARACIONES DE CLASES E INTERFACES

La siguiente tabla describe los elementos que componen la declaracin de una clase o interfaz, as como
el orden en el que deben estar situados.

Elementos de declaracin de
Descripcin
una clase / interfaz
Comentario de documentacin Permite describir la clase/interfaz desarrollada. Necesario para generar la
de la clase/interfaz /** ... */ documentacin de la api mediante javadoc.
Sentencia class / interface
Comentario de implementacin
Este comentario incluye cualquier informacin que no pueda incluirse en el
de la clase/interfaz, si es
comentario de documentacin de la clase/interfaz.
necesario /* ... */
En primer lugar las variables de clase pblicas (public), despus las protegidas
Variables de clase (estticas) (protected), posteriormente las de nivel de paquete (sin modificador), y por ltimo
las privadas (private).
Primero las pblicas (public), despus las protegidas (protected), luego las de nivel
Variables de instancia
de paquete (sin modificador), y finalmente las privadas (private).
Constructores
Deben agruparse por funcionalidad en lugar de agruparse por mbito o
Mtodos accesibilidad. Por ejemplo, un mtodo privado puede estar situado entre dos
mtodos pblicos. El objetivo es desarrollar cdigo fcil de leer y comprender.

SANGRA

Como norma general se establecen 4 caracteres como unidad de sangra. Los entornos de desarrollo
integrado (IDE) ms populares, tales como Eclipse o NetBeans, incluyen facilidades para formatear
cdigo Java.

LONGITUD DE LNEA

La longitud de lnea no debe superar los 80 caracteres por motivos de visualizacin e impresin

DIVISIN DE LNEAS

Cuando una expresin ocupe ms de una lnea, esta se podr romper o dividir en funcin de los
siguientes criterios,
Tras una coma.
Antes de un operador.
Se recomienda las rupturas de nivel superior a las de nivel inferior.
Alinear la nueva lnea con el inicio de la expresin al mismo nivel que la lnea anterior.
Si las reglas anteriores generan cdigo poco comprensible, entonces estableceremos tabulaciones de 8
espacios.

Ejemplos:

unMetodo (expresionLarga1, expresionLarga 2, expresionLarga 3,


expresionLarga 4, expresionLarga 5);

if ((condicion1 && condicion2)


|| (condicion3 && condicion4)
|| (condicion5 && condicion6)) {
unMetodo ();
}

COMENTARIOS

Distinguimos dos tipos de comentarios: los comentarios de implementacin y los de documentacin.

COMENTARIOS DE IMPLEMENTACIN
Estos comentarios se utilizan para describir el cdigo ("el cmo"), y en ellos se incluye informacin
relacionada con la implementacin, tales como descripcin de la funcin de variables locales, fases
lgicas de ejecucin de un mtodo, captura de excepciones, etc.

Comentarios de bloque:
Permiten la descripcin de ficheros, clases, bloques, estructuras de datos y algoritmos.
/*
* Esto es un comentario
* de bloque
*/
Comentarios de lnea:
Son comentarios cortos localizados en una sola lnea y tabulados al mismo nivel que el cdigo que
describen. Si ocupa ms de una lnea se utilizar un comentario de bloque. Deben estar precedidos por
una lnea en blanco.
/* Esto es un comentario de lnea */
// Esto es otro comentario de lnea

Comentario a final de lnea


Comentario situado al final de una sentencia de cdigo y en la misma lnea.
int contador = 4 + 10; // Inicializacin del contador
contador++; /* Incrementamos el contador */

COMENTARIOS DE DOCUMENTACIN

Los comentarios de documentacin, tambin denominados "comentarios javadoc", se utilizan para


describir la especificacin del cdigo, desde un punto de vista independiente de la implementacin, de
forma que pueda ser consultada por desarrolladores que probablemente no tengan acceso al cdigo
fuente.

El apartado 2 de este documento describe el uso de comentarios de documentacin.

DECLARACIONES

Una declaracin de variable miembro tiene dos componentes: el tipo de dato y el nombre de la variable.

tipo nombreVariable; // Declaracin mnima de una variable miembro

Una declaracin mnima de variable miembro es como la declaracin de variables que se escribe en
cualquier otro lugar de un programa Java, como las variables locales o los parmetros de los mtodos. El
siguiente cdigo declara una variable miembro entera llamada unEntero dentro de la
clase ClaseEnteros.

class ClaseEnteros {
int unEntero;
...
// define los mtodos aqu
...
}
UNA DECLARACIN POR LNEA

Se recomienda el uso de una declaracin por lnea, promoviendo as el uso de comentarios. Ejemplo,

int idUnidad; // Identificador de la unidad organizativa


String[] funciones; // Funciones de la unidad

LOCALIZACIN

Toda variable local tendr que ser inicializada en el momento de su declaracin, salvo que su valor inicial
dependa de algn valor que tenga que ser calculado previamente.

int idUnidad = 1;
String[] funciones = { "Administracin", "Intervencin", "Gestin" };

DECLARACIN DE CLASES / INTERFACES

Durante el desarrollo de clases / interfaces se deben seguir las siguientes reglas de formateo:
No incluir ningn espacio entre el nombre del mtodo y el parntesis inicial del listado de parmetros.
El carcter inicio de bloque ("{") debe aparecer al final de la lnea que contiene la sentencia de
declaracin.
El carcter fin de bloque ("}") se sita en una nueva lnea tabulada al mismo nivel que su correspondiente
sentencia de inicio de bloque, excepto cuando la sentencia sea nula, en tal caso se situar detrs de "{".
Los mtodos se separarn entre s mediante una lnea en blanco.

pblica classe ClaseEjemplo extiende Object {

int variable1;
int variable2;

ClaseEjemplo pblico () {
variable1 = 0;
variable2 = 1;
}
...
}

SENTENCIAS
Cada lnea debe contener como mximo una sentencia. Ejemplo,
int contador ++;
int variable--;
Las sentencias pertenecientes a un bloque de cdigo estarn tabuladas un nivel ms a la derecha con
respecto a la sentencia que las contiene.
El carcter inicio de bloque "{" debe situarse al final de la lnea que inicia el bloque. El carcter final de
bloque "}" debe situarse en una nueva lnea tras la ltima lnea del bloque y alineada con respecto al
primer carcter de dicho bloque.
Todas la sentencias de un bloque deben encerrarse entre llaves "{ ... }", aunque el bloque conste de una
nica sentencia. Esta prctica permite aadir cdigo sin cometer errores accidentalmente al olvidar
aadir las llaves. Ejemplo,

if (condicion) {
variable++;
}
La sentencia "try/catch" siempre debe tener el formato siguiente,

try {
sentencias;
} catch (ClaseException e) {
sentencias;
}

En el bloque "catch" siempre se imprimir una traza de error indicando el tipo de excepcin generada y
posteriormente se elevar dicha excepcin al cdigo invocante, salvo que la lgica de ejecucin de la
aplicacin no lo requiera.

Siempre se utilizar el bloque "finally" para liberar recursos y para imprimir trazas de monitorizacin de
fin de ejecucin.

try {
sentencias;
} catch (ClaseException e) {
sentencias;
} finally {
sentencias;
}
ESPACIOS EN BLANCO

Las lneas y espacios en blanco mejoran la legibilidad del cdigo permitiendo identificar las secciones de
cdigo relacionadas lgicamente.
Se utilizarn espacios en blanco en los siguientes casos:
Entre una palabra clave y un parntesis. Esto permite que se distingan las llamadas a mtodos de las
palabras clave. Por ejemplo:

while (true) {
...
}
Tras cada coma en un listado de argumentos. Por ejemplo:

objeto.unMetodo(a, b, c);
Para separar un operador binario de sus operandos, excepto en el caso del operador ("."). Nunca se
utilizarn espacios entre los operadores unarios (p.e., "++" o "--") y sus operandos. Por ejemplo:
= a + b + c;
a = (a + b) / (c + d);
Contador ++;

Para separar las expresiones incluidas en la sentencia "for". Por ejemplo:


para (expresion1; expresion2; expresion3)
Al realizar el moldeo o "casting" de clases. Ejemplo:
Unidad unidad = (Unidad) objeto;

NOMENCLATURA DE IDENTIFICADORES

Las convenciones de nombres de identificadores permiten que los programas sean ms fciles de leer y
por tanto ms comprensibles. Tambin proporcionan informacin sobre la funcin que desempea el
identificador dentro del cdigo, es decir, si es una constante, una variable, una clase o un paquete, entre
otros.

Clases: Para todo nombre de clase, la primera letra debe de ser Mayscula, si son varias palabras se
debe de intercalar entre maysculas y minsculas, este mecanismo de nombre es
llamado camelCase (Por ejemplo: NombreDeClase, Animal, Factura).

Interfaces: Aplica la misma definicin de clases, pero se debe colocar la terminacin [highlight]able
[/highlight] al final del nombre de la clases (Por ejemplo Runnable, Serializable).

Mtodos: Para los metodos de clases, la primera letra debe ser minscula, si son varias palabras se
debe de intercalar entre minsculas y maysculas, para el caso de los mtodos de clases aplica el
mecanismo del camelCase (Por ejemplo getNombre, setEdad, buscarPorIdPersona).

Variables: Para las variables, se aplica el caso de los mtodos, donde la primera letra es minscula, y
las dems se deben de guiar por el mecanismo de camelCase, lo que es importante de destacar, es que
los nombres de las variables, adems de cumplir lo anterior, deben ser cortos y descriptivos en si mismo.
(Por ejemplo: nombre, edad, idPersona).

Constantes: Para la constantes, su nombre debe ser escrito completamente en Maysculas, y para la
separacin de palabras se debe usar el underscore/guin bajo (_). (Por ejemplo MAX_SUMA,
VALOR_MULTIPLO).

Este post nos ilustra el como hacer de nuestro codigo el ms efectivo y que este apegado a
los estndares definidos.

PAQUETES

Se escribirn siempre en letras minsculas para evitar que entren en conflicto con los nombres de clases
o interfaces. El prefijo del paquete siempre corresponder a un nombre de dominio de primer nivel, tal
como: es, eu, org, com, net, etc.
El resto de componentes del paquete se nombrarn de acuerdo a las normas internas de organizacin
de la empresa: departamento, proyecto, mquina, seccin, organismo, rea, etc.
Ejemplos:

es.provincia.organismo1.festivaldecine
es.provincia.organismo2.vivienda
es.provincia.organismo3.juventud
es.provincia.organismo3.formacion
es.provincia.organismo3.gestionturistica
java.util.ArrayList
java.util.Date
java.util.Properties
javax.servlet.http.HttpServletRequest
javax.servlet.http.HttpServletResponse
CLASES E INTERFACES
Los nombres de clases deben ser sustantivos y deben tener la primera letra en maysculas. Si el nombre
es compuesto, cada palabra componente deber comenzar con mausculas.
Los nombres sern simples y descriptivos. Debe evitarse el uso de acrnimos o abreviaturas, salvo en
aquellos casos en los que dicha abreviatura sea ms utilizada que la palabra que representa (URL,
HTTP, etc.).
Las interfaces se nombrarn siguiendo los mismos criterios que los indicados para las clases. Como
norma general toda interfaz se nombrar con el prefijo "I" para diferenciarla de la clase que la
implementa (que tendr el mismo
nombre sin el prefijo "I").
clase Ciudadano
clase OrganigramaDAO
clase AgendaService
clase IAgendaService
MTODOS

Los mtodos deben ser verbos escritos en minsculas. Cuando el mtodo est compuesto por varias
palabras cada una de ellas tendr la primera letra en maysculas.
public void insertaUnidad(Unidad unidad);
public void eliminaAgenda(Agenda agenda);
public void actualizaTramite(Tramite tramite)

VARIABLES

Las variables se escribirn siempre en minsculas. Las variables compuestas tendrn la primera letra de
cada palabra componente en maysculas.
Las variables nunca podrn comenzar con el carcter "_" o "$". Los nombres de variables deben ser
cortos y sus significados tienen que expresar con suficiente claridad la funcin que desempean en el
cdigo. Debe evitarse el uso de nombres de variables con un slo carcter, excepto para variables
temporales.

Unidad unidad;
Agenda agenda;
Tramite tramite;

CONSTANTES

Todos los nombres de constantes tendrn que escribirse en maysculas. Cuando los nombres de
constantes sean compuestos las palabras se separarn entre s mediante el carcter de subrayado "_".
int LONGITUD_MAXIMA;
int LONGITUD_MINIMA;

PRCTICAS DE PROGRAMACIN

Programa java que realice lo siguiente: declarar una variable N de tipo int, una variable A de tipo double y
una variable C de tipo char y asigna a cada una un valor. A continuacin muestra por pantalla: El valor de
cada variable, la suma de N + A, la diferencia de A - N, el valor numrico correspondiente al carcter que
contiene la variable C.

Programa java que realice lo siguiente: declarar dos variables X e Y de tipo int, dos variables N y M de
tipo double y asigna a cada una un valor. A continuacin reliza y muestra muestra por pantalla una serie
de operaciones entre ellas.
VISIBILIDAD DE ATRIBUTOS DE INSTANCIA Y DE CLASE

Los atributos de instancia y de clase sern siempre privados, excepto cuando tengan que ser visibles en
subclases herederas, en tales casos sern declarados como protegidos.

El acceso a los atributos de una clase se realizar por medio de los mtodos "get" y "set"
correspondientes, incluso cuando el acceso a dichos atributos se realice en los mtodos miembros de la
clase.
public class Unidad {

private int id;


private String nombre;
...

public void actualizaUnidad(Unidad unidad) {


this.setId(unidad.getId());
this.setNombre(unidad.getNombre());
}
...
}

REFERENCIAS A MIEMBROS DE UNA CLASE

Evitar el uso de objetos para acceder a los miembros de una clase (atributos y mtodos estticos).
Utilizaremos en su lugar el nombre de la clase. Por ejemplo:
metodoUtilidad(); // Acceso desde la propia clase esttica
ClaseUtilidad.metodoUtilidad(); // Acceso comn desde cualquier clase

CONSTANTES

Los valores constantes (literales) nunca aparecern directamente en el cdigo. Para designar dichos
valores se utilizarn constantes escritas en maysculas y se declararn, segn su mbito de uso, o bien
en una Clase de constantes creada para tal efecto, o bien en la clase donde sean utilizadas.
// Uso Incorrecto
codigoErrorUsuarioNoEncontrado = 1;
...
Interruptor (error) {
caso codigoErrorUsuarioNoEncontrado:
...
}

// Uso correcto
pblico final int CODIGOERROR_USUARIONOENCONTRADO = 1;
...
Interruptor (error) {
caso CODIDOGERROR_USUARIONOENCONTRADO:
...
}
ASIGNACIN SOBRE VARIABLES

Se deben evitar las asignaciones de un mismo valor sobre mltiples variables en una misma sentencia,
ya que dichas sentencias suelen ser difciles de leer.
int a = b = c = 2; // Evitar
No utilizar el operador de asignacin en aquellos lugares donde sea susceptible de confusin con el
operador de igualdad. Por ejemplo:
// INCORRECTO
if ((c = d ++) == 0) {}

// Correcto
c = d ++;
si (c == 0) {}
No utilizar asignaciones embebidas o anidadas. Ejemplo:
c = (c = 3) + 4 + d; // Evitar
debera escribirse
c = 3;
c = c + d + 4;

OTRAS PRCTICAS

PARNTESIS

Es una buena prctica el uso de parntesis en expresiones que incluyan distintos tipos de operadores
para evitar problemas de precedencia de operadores. Aunque la precedencia de operadores nos pueda
parecer clara, debemos asumir que otros programadores no tengan un conocimiento exhaustivo sobre
las reglas de precedencia.
si (w == x && y == z) // INCORRECTO
if ((w == x) && (y == z)) // Correcto

VALORES DE RETORNO

Los valores de retorno tendrn que ser simples y comprensibles, de acuerdo al propsito y
comportamiento del objeto en el que se utilicen.
// INCORRECTO
public boolean esProgramador (Empleado EMP) {

if (emp.getRol () es igual a (ROL_PROGRAMADOR).) {


Return true;
} Else {
return false;
}

}
// Correcto
public boolean esProgramador (Empleado EMP) {

boolean esUnProgramador = false;

if (. emp.getRol () es igual a (ROL_PROGRAMADOR)) {


esUnProgramador = true;
}

Devolver esUnProgramador;
}

EXPRESIONES EN EL OPERADOR CONDICIONAL TERNARIO

Toda expresin compuesta, por uno o ms operadores binarios, situada en la parte condicional del
operador ternario deber ir entre parntesis. Ejemplo:
(x >= y) ? x : y;

COMENTARIOS ESPECIALES ( XXX)

Utilizaremos XXX para comentar aquella porcin de cdigo que, aunque no tenga mal funcionamiento,
requiera modificaciones. Usaremos FIXME para sealar un bloque de cdigo errneo que no funciona.
Emplearemos TODO para comentar posibles mejoras de cdigo, como puedan ser las debidas a
optimizaciones, actualizaciones o refactorizaciones.

DOCUMENTACIN: JAVADOC

Se aconseja, como buena prctica de programacin, incluir en la entrega de la aplicacin la


documentacin de los ficheros fuente de todas las clases. Dicha documentacin ser generada por la
herramienta "javadoc".

La herramienta "javadoc" construir la documentacin a partir de los comentarios (incluidos en las


clases) encerrados entre los caracteres "/**" y "*/". Distinguimos tres tipos de comentarios javadoc, en
funcin del elemento al que preceden: de clase, de variable y de mtodo.

Dentro de los comentarios "javadoc" podremos incluir cdigo html y etiquetas especiales de
documentacin. Estas etiquetas de documentacin comienzan con el smbolo "@", se sitan al inicio de
lnea del comentario y nos permiten incluir informacin especfica de nuestra aplicacin de una forma
estndar.

Vous aimerez peut-être aussi