Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Gua de programacin
Edicin 1.2
06/08/2007 GFD
Edicin 1.1
12/04/2007 GFD
Edicin 1.0
09/04/2007 - GFD
Indice de Contenidos
1 Descripcin General.......................................................................................................................... 3
2 Estructura de archivos de cdigo fuente........................................................................................4
2.1 Comentarios Iniciales......................................................................................................................................... 4
2.2 Sentencias package e import............................................................................................................................. 4
2.3 Declaraciones de clase e interfaz...................................................................................................................... 4
4 Comentarios...................................................................................................................................... 6
4.1 comentarios de implementacin........................................................................................................................ 7
4.1.1 Comentarios de bloque............................................................................................................................. 7
4.1.2 Comentarios de una sola lnea.................................................................................................................. 7
4.1.3 Comentarios por detrs............................................................................................................................. 7
4.1.4 Comentarios de final de lnea.................................................................................................................... 8
4.2 comentarios de documentacin......................................................................................................................... 8
4.2.1 Javadoc..................................................................................................................................................... 8
Declaraciones.................................................................................................................................................... 9
Inicializacin..................................................................................................................................................... 10
Colocacin....................................................................................................................................................... 10
Declaraciones de clase e interfaz.................................................................................................................... 11
Sentencias....................................................................................................................................................... 11
5.5.1 Sentencias simples................................................................................................................................. 11
5.5.2 Sentencias compuestas.......................................................................................................................... 11
5.5.3 Sentencias return.................................................................................................................................... 11
5.5.4 Sentencias if, if-else, if-else-if-else..........................................................................................................12
5.5.5 Sentencias for......................................................................................................................................... 12
5.5.6 Sentencias while..................................................................................................................................... 13
5.5.7 Sentencias do-while................................................................................................................................ 13
5.5.8 Sentencias switch.................................................................................................................................... 13
5.5.9 Sentencias try-catch................................................................................................................................ 13
5.6 Espacios en blanco.......................................................................................................................................... 14
5.6.1 Lneas en blanco..................................................................................................................................... 14
5.6.2 Espacios en blanco................................................................................................................................. 14
5.7 Convenciones de nombrado............................................................................................................................ 15
5.7.1 Paquetes................................................................................................................................................. 15
5.7.2 Clases..................................................................................................................................................... 15
5.7.3 Interfaces................................................................................................................................................. 15
5.7.4 Mtodos................................................................................................................................................... 15
5.7.5 Variables................................................................................................................................................. 15
5.7.6 Constantes.............................................................................................................................................. 16
5.8 Prcticas de varias........................................................................................................................................... 16
5.8.1 Proporcionar acceso a variables de clase e instancia............................................................................16
5.8.2 Referenciar variables y mtodos de clase..............................................................................................16
5.8.3 Generales................................................................................................................................................ 16
5.8.4 Constantes.............................................................................................................................................. 16
5.8.5 Asignaciones de variables....................................................................................................................... 17
5.8.6 Parntesis............................................................................................................................................... 17
5.8.7 Devolver valores...................................................................................................................................... 17
5.8.8 Expresiones antes de '?' en el operador condicional..............................................................................18
5.8.9 Comentarios especiales.......................................................................................................................... 18
5.8.10 Main....................................................................................................................................................... 18
pg. 2
Java
Gua de programacin
El presente documento pretende ser una gua normativa de practicas de buena formas de programacin para lenguaje java.
1 Descripcin General
El presente documento especificar una serie de practicas recomendadas para la codificacin de proyectos en java, esto no
posee ms pretensiones que el de ser una gua descriptiva quedando de absoluta responsabilidad del programador la
aplicacin con ms o menos rigidez los temas que aqu se expresen. El contenido de este documento esta basado en las
normas descritas por SUN para java y solo fueron discriminadas algunos puntos para poder llegar a un criterio nico y en
pequeos casos se complemento con informacin adicional considerada valiosa.
Comentarios iniciales
El primer componente de un nombre de paquete nico estara siempre escrito en letras ASCII minsculas y sera uno de los
nombres de dominio de nivel superior (actualmente com, edu, gov, mil, net, org uno de los cdigos de pas de dos letras,
como se especifica en el estndar ISO 3166).
Minimice las formas * en los import, Sea preciso acerca de lo que esta importando, Chequee que todo los import sean
usados. De esta forma evita que otros lectores de su cdigo gasten mucho tiempo y tengas dificultades para entender sus
contextos y dependencias.
Comentario de documentacin de la clase/interfaz: (/** ? */) Ver punto 4 para detalle de comentarios.
2.
3.
Comentario de la implementacin de la clase/interfaz: si fuera necesario (/* ? */) Este comentario debera contener
cualquier informacin relativa a toda la clase o interfaz, que no sea apropiada para el comentario de documentacin.
4.
Variables de clase (estticas) (static): Primero las variables pblicas (public), luego las protegidas (protected),
despus las de paquete (sin modificador de acceso) y por ltimo las privadas (private).
5.
Variables de instancia: Primero las variables pblicas (public), luego las protegidas (protected), despus las de
paquete (sin modificador de acceso) y por ltimo las privadas (private).
6.
Constructores
7.
Mtodos, Estos mtodos deberan estar agrupados por funcionalidad en lugar de por mbito o accesibilidad.
Por ejemplo, un mtodo esttico privado puede estar entre dos mtodos de instancia pblicos.
3.1 Tabulacin
La unidad de tabulacin deberan ser cuatro espacios.
Alinear la nueva lnea con el principio de la expresin al mismo nivel que la lnea anterior.
anArg,
Object
Object andStillAnother) {
?
}
anotherArg,
String
La ruptura de lneas para las sentencias if debera usar generalmente la regla de los 8 espacios, ya que la tabulacin
convencional (4 espacios) dificulta la lectura del cuerpo de la sentencia if.
Por ejemplo:
// NO UTILIZAR ESTA TABULACION
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { // MALAS RUPTURAS
doSomethingAboutIt(); // HACEN QUE ESTA LINEA SE PIERDA
}
4 Comentarios
Los comentarios son un punto muy importante en lo que a un proyecto de software se refiere, por eso se dedicara este
captulo a analizar estos, si bien hay puntos comunes en la forma de comentar distintos tipos de lenguajes, no se pretende
generalizar y se intentar mantener el foco directamente sobre el lenguaje Java que es nuestro objetivo.
Los programas en Java pueden tener dos tipos de comentarios:
comentarios de implementacin
comentarios de documentacin.
Los comentarios deberan contener solamente informacin que sea relevante para la lectura y comprensin del programa.
Por ejemplo, informacin sobre cmo se construye el paquete correspondiente o en qu directorio reside, no debera ser
incluida como comentario.
de bloque
por detrs
de final de lnea.
/* caso especial */
/* funciona solo con impares */
4.2.1 Javadoc
Javadoc es un estandart dentro de la programacin java , en si se puede decir que es un protocolo que define uns et de
comandos (o marcas) que permiten que un procesador javadoc las interprete generando un documento descriptivo de el o los
cdigos procesados, este documento no profundizara en este tema sino que dar una breve descripcin de los comandos
ms usados, para ms detalles se puede ver en http://java.sun.com/j2se/javadoc/writingdoccomments/index.html cuya lectura
es altamente recomendada.
Comando
Descripcin
@see
@version
@author
@deprecated
Especifica que el item asociado se encuentra deprecado , por ende no debiera ser utilizado.
@param
Especifica los detalles de un parmetro de mtodo, se acompaa del nombre del parmetro y una
breve descripcin
@return
{@link}
Un punto especial a notar es como documentar paquetes y/o directorios, dado que son elementos implcitos que no poseen
lugar para agregar documentacin de forma natural, para esto javadoc nos da la posibilidad de agregar dentro de la
estructura de directorios de nuestros fuentes archivos de texto de nombre package.html en los se puede incluir la
documentacin asociada al directorio o package que defina esa ubicacin, lo exigido es que dentro del archivo se incluya el
tag <body></body> dado que javadoc buscar el contenido de este tag para incluir su informacin en la documentacin a
generar.
Ejemplos:
/**
* A class representing a window on the screen.
* For example:
* <pre>
* Window win = new Window(parent);
* win.show();
* </pre>
*
* @see
awt.BaseWindow
* @see
awt.Button
* @version 1.2 31 Jan 1995
* @author Bozo the Clown
**/
class Window extends BaseWindow {
...
}
/**
* The current number of elements.
* must be non-negative, and less than or equal to capacity.
**/
protected int count_;
/**
* Insert element at front of the sequence
*
* @param element the element to add
* @return condition:
* <PRE>
* size() == PREV(this).size()+1 &&
* at(0).equals(element) &&
* foreach (int i in 1..size()-1) at(i).equals(PREV(this).at(i-1))
* </PRE>
**/
public void
addFirst(Object element);
// nivel de tabulacin
// tamao de la tabla
// elemento de la tabla seleccionado
5.2 Inicializacin
Hay que intentar inicializar las variables locales donde se declaren. La nica razn para no inicializar una variable donde se
declara es si el valor inicial depende de algn clculo que debe ocurrir primero.
5.3 Colocacin
Poner las declaraciones slo al principio de los bloques. (Un bloque es cualquier cdigo rodeado por llaves "{" y "}".) No
esperar a declarar las variables hasta su primer uso; puede confundir a un programador y dificultar la portabilidad del cdigo
dentro del mbito.
void myMethod() {
int int1 = 0;
if (condition) {
int int2 = 0;
?
}
La nica excepcin a esta regla es el ndice de los bucles for, que en Java se puede declarar dentro de la sentencia for:
for (int i = 0; i < maxLoops; i++) { ? }
Evitar declaraciones locales que oculten declaraciones de ms alto nivel. Por ejemplo, no declare el mismo nombre de
variable en un bloque interno:
int count;
?
myMethod() {
if (condition) {
int count = 0;
?
}
?
}
// EVITAR
Ningn espacio entre el nombre del mtodo y el parntesis "(" que abre su lista de parmetros.
La llave de apertura "{" aparece al final de la misma lnea que la sentencia de declaracin.
La llave de cierre "}" comienza una lnea nueva tabulada para coincidir su sentencia de apertura correspondiente,
excepto cuando es un bloque vaco que la llave de cierre "}" debera aparecer inmediatamente despus de la de
apertura "{".
5.5 Sentencias
5.5.1 Sentencias simples
Cada lnea debera contener una sentencia como mucho. Por ejemplo:
argv++;
argc--;
argv++; argc--;
// Correcto
// Correcto
// EVITAR!
Las sentencias internas deberan estar tabuladas un nivel ms que la sentencia compuesta.
La llave de apertura debera estar al final de la lnea que comienza la sentencia compuesta; la llave de cierre debera
estar en una nueva lnea y estar tabulada al nivel del principio de la sentencia compuesta.
Las llaves se usan en todas las sentencias compuestas, includas las sentencias nicas, cuando forman parte de
una estructura de control, como una sentencia if-else o un bucle for.
return;
return myDisk.size();
return (size > 0 ? size : defaultSize);
Las sentencias if siempre llevan llaves {}. Evitar la siguiente forma, propensa a errores:
if (condicin) // EVITAR OMITIR LAS LLAVES! {}
sentencias;
Una sentencia for vaca (aquella en la que todo el trabajo se hace en las clusulas de inicializacin, condicin y actualizacin)
debera tener el siguiente formato:
for (inicializacin; condicin; actualizacin);
Cuando se use el operador coma en la clusula de inicializacin o actualizacin, evitar la complejidad de utilizar ms de tres
variables. Si se necesita, usar sentencias separadas antes del bucle for (para la clusula de inicializacin) o al final del bucle
(para la clusula de actualizacin).
Cada vez que un caso contina con el siguiente (no incluye una sentencia break), se aade un comentario donde ira la
sentencia break. Esto se muestra en el ejemplo anterior con el comentario /* continua con el siguiente */.
Todas las sentencias switch deberan incluir un caso por defecto. El break en el caso por defecto es redundante, pero
previene un error de continuar con el siguiente si ms adelante se incluye otro caso.
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 halla completado correctamente o no.
try {
sentencias;
} catch (ExceptionClass e) {
sentencias;
} finally {
sentencias;
}
Entre mtodos.
Una palabra clave seguida por un parntesis debera estar separado por un espacio. Por ejemplo:
while (true) {
?
}
Ntese que entre el nombre de un mtodo y sus parntesis no debe haber espacio en blanco. Esto ayuda a
distinguir entre palabras claves y llamadas a mtodos.
Todos los operadores binarios, excepto el operador punto (.) deberan estar separados de sus operandos por
espacios. Los operadores unarios (incremento ++, decremento --, complemento a 1 -) nunca deberan estar
separados de sus operandos. Por ejemplo:
a += c + d;
a = (a + b) / (c * d);
while (d++ = s++) {
n++;
}
print("size is " + foo + "\n");
Las expresiones de una sentencia for deberan estar separadas por espacios en blanco. Por ejemplo:
Las conversiones de tipo (cast) deberan estar seguidas de un espacio en blanco. Por ejemplo:
myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3)) + 1);
5.7.1 Paquetes
El prefijo de un nombre de paquete nico se escribe siempre en letras ASCII minsculas y debera ser uno de los nombres de
dominio de nivel superior (actualmente com, edu, gov, mil, net, org uno de los cdigos de pas de dos letras, como se
especifica en el estndar ISO 3166).
Los siguientes componentes del nombre del paquete varan de acuerdo a las propias convenciones de nombrado internas de
las organizaciones. Dichas convenciones pueden especificar que ciertos componentes de nombre de directorio sean divisin,
departamento, proyecto, mquina o nombres de usuario.
package
package
package
package
com.sun.eng;
com.apple.quicktime.v2;
edu.cmu.cs.bovik.cheese;
es.nom.jpereza;
5.7.2 Clases
Los nombres de clases deberan ser sustantivos, escritos en CamelCase con la primera letra en mayscula. Tratar de
mantener los nombres de clases simples y descriptivos. Usar palabras completas, evitar acrnimos y abreviaturas (a menos
que la abreviatura sea mucho ms usada que la forma larga, como URL o HTML).
class Raster
class ImageSprite
5.7.3 Interfaces
Los nombres de interfaz deberan ser escritos como los nombres de clases.
interface RasterDelegate
interface Storing
5.7.4 Mtodos
Los nombres de mtodos deberan ser verbos, escritos en CamelCase con la primera letra en minscula.
run();
runFast();
getBackground();
5.7.5 Variables
Todos los nombres de variable deberan estar escritos en CamelCase con la primera letra en minscula. No deberan
comenzar con un caracter de subrayado "_" o un signo de dlar "$", aunque ambos estn permitidos.
5.7.6 Constantes
Los nombres de variables declaradas como constantes de clase deberan estar escritos todo en maysculas separando las
palabras con un underscore (caracter de subrayado) "_".
static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final String DEFAULT_PROTOCOL = "http";
// OK
// OK
// EVITAR!
5.8.3 Generales
Hay una serie de convenciones generales que con el tiempo se han tomado, pues han demostrado un aporte en el
entendimiento al escribir cdigo, a continuacin se listan algunas de ellas:
5.8.4 Constantes
Las constantes numricas no deberan codificarse directamente, excepto -1, 0 y 1, que pueden aparecer en un bucle for
como contadores. Por ejemplo:
// EVITAR!
No usar el operador de asignacin (=) en un lugar donde se pueda confundir fcilmente con el operador de igualdad (==).
Ejemplo:
if (c++ = d++) {
?
}
// EVITAR!
5.8.6 Parntesis
Es, generalmente, una buena idea usar parntesis generosamente en expresiones que tienen operadores mezclados para
evitar problemas de precedencia de operadores. Incluso si la preferencia de operador parece clara, puede no serlo para otros
(no se debera suponer que otros programadores conocen tan bien la precedencia de operadores como usted).
if (a == b && c == d)
if ((a == b) && (c == d))
// EVITAR!
// BIEN
Igualmente,
if (condicin) {
return x;
}
return y;
debera ser escrito as:
return (condicin ? x : y);
5.8.10 Main
Cuando su cdigo considere partes sensibles , considere escribir una main para la clase principal , El main debera proveer
un unidad de testeo simple o una demo. Es recomendable proveer el ejemplos de uso.