Académique Documents
Professionnel Documents
Culture Documents
DESARROLLO DE SISTEMAS
(Servicio de Fbrica de Software)
JAVA
GMD S.A. - SFS
Versin 1.0
Actualizado a
Diciembre del 2015
Versin
Fecha
Autor
Descripcin
Estado
Responsable de
Revisin y/o
Aprobacin
01
0.1
29/12/2015
MA, MC
Versin Final
Revisado
JC
Autores:
MA: Michel Aguilar
MC: Milagros Camaa
Revisor GMD:
JC: Jose Chilet
Rev.: 1.0
Pg. 2 de 31
ndice
1
1.1
2
Introduccin............................................................................................................. 5
Por qu convenciones de cdigo.............................................................................. 5
Organizacin de los ficheros....................................................................................... 5
2.1
Comentarios de comienzo....................................................................................... 5
2.2
2.3
Indentacin.............................................................................................................. 8
3.1
Longitud de la lnea................................................................................................ 8
3.2
Rompiendo lneas.................................................................................................. 8
Comentarios........................................................................................................... 10
4.1
4.2
Comentarios de bloque......................................................................................... 10
4.3
4.4
Comentarios de remolque..................................................................................... 11
4.5
4.6
Comentarios de documentacin.............................................................................13
Declaraciones......................................................................................................... 13
5.1
5.2
Inicializacin........................................................................................................ 14
5.3
Colocacin.......................................................................................................... 14
5.4
Sentencias............................................................................................................. 16
6.1
Sentencias simples.............................................................................................. 16
6.2
Sentencias compuestas........................................................................................ 17
6.3
Sentencias de retorno........................................................................................... 17
6.4
6.5
Sentencias for..................................................................................................... 19
6.6
Sentencia while................................................................................................... 20
6.7
Sentencias do-while............................................................................................. 21
6.8
Sentencias switch............................................................................................... 21
6.9
Sentencias try-catch............................................................................................. 22
7
7.1
Espacios en blanco................................................................................................. 23
Lneas en blanco................................................................................................. 23
Rev.: 1.0
Pg. 3 de 31
Espacios en blanco.............................................................................................. 24
7.2
8
Convenciones de nombres....................................................................................... 25
Hbitos de programacin......................................................................................... 27
9.1
9.2
Constantes......................................................................................................... 27
Asignaciones de variables.................................................................................. 27
9.2.1
10
Hbitos varios..................................................................................................... 28
10.1
Parntesis........................................................................................................... 28
10.2
Valores de retorno................................................................................................ 29
10.3
11
Ejemplos de cdigo.............................................................................................. 30
11.1
Rev.: 1.0
Pg. 4 de 31
Introduccin
Las convenciones de cdigo son importantes para los programadores, por un gran
nmero de razones:
o El 80% del coste del cdigo de un programa va a su
mantenimiento.
o Casi ningn software lo mantiene toda su vida el auto original.
o Las convenciones de cdigo mejoran la lectura del software,
permitiendo entender cdigo nuevo mucho ms rpidamente y ms a
fondo.
o Si distribuyes tu cdigo fuente como un producto, necesitas
asegurarte de que est bien hecho y presentado como cualquier otro
producto.
o Para que funcionen las convenciones, cada persona que escribe software
debe seguir la convencin. Todos.
2
2.1
NOMBRE DEL
RECURSO
DEFINICIN
Rev.: 1.0
Comentario de comienzo
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:
Fecha Efectiva: 29/12/2015
Pg. 5 de 31
/*
* Nombre de la clase
*
* Informacion de la version
*
* Fecha
*
* Copyright
*/
EJEMPLOS
2.2
NOMBRE DEL
RECURSO
DEFINICIN
NOTACION
Sintaxis:
pe.gob.onp.[wwww].[xxxx].[yyyy]
Donde:
pais.tipo de institucion.nombre de la empresa. es la estructura
bsica que debe tener toda aplicacin de ONP
[wwww][xxxx][yyyy] nombre de paquetes.
package java.awt;
EJEMPLOS
2.3
import java.awt.peer.CanvasPeer;
Pg. 6 de 31
Partes de la
declaracin de una
clase o interface
1
Comentario de
documentacin de la
clase o interface
(/**...*/)
Notas
Sentencia class o
interface
Comentario de
implementacin de la
clase o interface si fuera
necesario (/*...*/)
Variables de clase
(static)
Variables de instancia
Constructores
7
Mtodos
Rev.: 1.0
Pg. 7 de 31
3
3.1
Indentacin
Longitud de la lnea
Rompiendo lneas
NOMBRE
DEL
RECURSO
Rompiendo lneas
Rev.: 1.0
Pg. 8 de 31
EJEMPLO 3
...
}
//INDENTACION DE 8 ESPACIOS PARA EVITAR GRANDES INDENTACIONES
private static synchronized metodoDeNombreMuyLargo(int unArg,
Object otroArg, String todaviaOtroArg,
Object unOtroMas) {
...
}
EJEMPLO 4
}
Rev.: 1.0
Pg. 9 de 31
EJEMPLO 5
alpha = (unaLargaExpresionBooleana)
? beta
: gamma;
4
4.1
Comentarios
Formatos de los comentarios de implementacin
Comentarios de bloque
NOMBRE DEL
RECURSO
Rev.: 1.0
Comentarios de bloque
Pg. 10 de 31
DEFINICIN
EJEMPLOS
4.3
/*
* Aqui hay un comentario de bloque.
*/
NOMBRE DEL
RECURSO
DEFINICIN
EJEMPLOS
}
4.4
Comentarios de remolque
NOMBRE DEL
RECURSO
DEFINICIN
Rev.: 1.0
Comentarios de remolque
Pueden aparecer comentarios muy pequeos en la misma lnea
que describen, pero deben ser movidos lo suficientemente lejos
para separarlos de las sentencias. Si ms de un comentario
corto aparece en el mismo trozo de cdigo, deben ser indentados
Fecha Efectiva: 29/12/2015
Pg. 11 de 31
4.5
if (a == 2) {
return TRUE;
} else {
return isPrime(a);
}
/* caso especial */
/* caso gerenal */
NOMBRE DEL
RECURSO
DEFINICIN
if (foo > 1) {
// Hacer algo.
...
}
else {
return false;
}
EJEMPLOS
//if (bar > 1) {
//
//
// Hacer algo.
//
...
//}
//else {
//
return false;
//}
Rev.: 1.0
Pg. 12 de 31
4.6
Comentarios de documentacin
NOMBRE DEL
RECURSO
DEFINICIN
Comentarios de documentacin
/**
* La clase Ejemplo ofrece ...
*/
public class Ejemplo { ...
EJEMPLOS
Darse cuenta de que las clases e interfaces de alto nivel son est
indentadas, mientras que sus miembros los estn. La primera
lnea de un comentario de documentacin (/**) para clases e
interfaces no est indentada, subsecuentes lneas tienen cada
una un espacio de indentacin (para alinear verticalmente los
asteriscos). Los miembros, incluidos los constructores, tienen
cuatro espacios para la primera lnea y 5 para las siguientes.
NOTA
5
5.1
Declaraciones
Cantidad por lnea
Rev.: 1.0
Pg. 13 de 31
NOMBRE DEL
RECURSO
DEFINICIN
Se prefiere
int nivel; // nivel de indentacin
int tam;
// tamao de la tabla
EJEMPLOS
Antes que
int level, size; //Evitar
fooarray[]; //ERROR!
Nota
Los ejemplos anteriores usan un espacio entre el tipo y el
identificador. Una alternativa aceptable es usar tabuladores, por
ejemplo:
int
int
Object
level;
//nivel de
indentacin
size;
//tamao de la tabla
currentEntry; //entrada de la tabla seleccionada
actualmente
5.2 Inicializacin
Intentar inicializar las variables locales donde se declaran. La nica razn para no
inicializar una variable donde se declara es si el valor inicial depende de algunos
clculos que deben ocurrir.
5.3
Colocacin
NOMBRE DEL
RECURSO
Colocacin
DEFINICIN
if (condicion) {
int int2 = 0; // comienzo del bloque del "if"
...
}
}
//LA EXCEPCION A LA REGLA
for (int i = 0; i < maximoVueltas; i++) { ... }
EJEMPLOS 1
//DECLARACIONES DUPLICADAS
int cuenta; // EVITAR!
...
miMetodo()
{
if (condicion) {
int cuenta = 0;
...
// EVITAR!
}
...
}
5.4
NOMBRE DEL
RECURSO
DEFINICIN
Rev.: 1.0
Pg. 15 de 31
EJEMPLOS
int metodoVacio() {}
...
}
6
6.1
Sentencias
Sentencias simples
NOMBRE DEL
RECURSO
Sentencias simples
Cada lnea debe contener como mucho una sentencia.
NOTACION
argv++;
argc--;
argv++; argc--;
// Correcto
// Correcto
// EVITAR!
Rev.: 1.0
numero++;
numero--;
Pg. 16 de 31
6.2
Sentencias compuestas
NOMBRE DEL
RECURSO
Sentencias compuestas
DEFINICIN
EJEMPLOS
6.3
Sentencias de retorno
NOMBRE DEL
RECURSO
Sentencias de retorno
Una sentencia return con un valor no debe usar parntesis a
menos que hagan el valor de retorno ms obvio de alguna
manera.
EJEMPLOS
return;
return miDiscoDuro.size();
return (tamanyo ? tamanyo : tamanyoPorDefecto);
Rev.: 1.0
Pg. 17 de 31
DEFINICIN
If-else:
if(condicion) {
sentencia verdadera;
}
else {
sentencia falsa;
}
NOTACION
If-else-if:
if(condicion) {
sentencia;
}else if (condicion) {
sentencia;
}else{
sentencia;
}
Rev.: 1.0
Pg. 18 de 31
if:
if(calificacion == 10) {
System.out.println(Matrcula de Honor);
}
If-else:
if(numero % 2 == 0) {
System.out.println(El nmero es par);
}
else {
System.out.println(El nmero es impar);
}
EJEMPLOS
If-else-if:
if(calificacion == 10) {
System.out.println(Matrcula de Honor);
} else if (calificacion == 9) {
System.out.println(Sobresaliente);
} else if (calificacion == 7) {
System.out.println(Notable);
} else if (calificacion == 6) {
System.out.println(Bien);
} else if (calificacion == 5) {
System.out.println(Aprobado);
} else {
System.out.println(Suspenso);
}
6.5
Sentencias for
NOMBRE DEL
RECURSO
Sentencias for
DEFINICIN
Rev.: 1.0
Pg. 19 de 31
EJEMPLOS
6.6
Sentencia while
NOMBRE DEL
RECURSO
Sentencia while
DEFINICIN
NOTACION
while(condicion) {
sentencias;
}
Pg. 20 de 31
EJEMPLOS
6.7
Sentencias do-while
NOMBRE DEL
RECURSO
DEFINICIN
NOTACION
EJEMPLOS
6.8
while (i<=n) {
factorial = factorial*i;
i++;
}
Sentencias do-while
La estructura de repeticin de do-while ejecuta el doble de
sentencias al menos una vez. Despus comprueba la condicin y
repite el bloque de sentencias mientras la condicin es verdadera.
Una sentencia do-while debe tener la siguiente forma:
do {
sentencias;
} while (condicion);
do {
factorial = factorial*i;
i++;
} while (i<=n);
Sentencias switch
NOMBRE DEL
RECURSO
DEFINICIN
NOTACION
Sentencias switch
La estructura switch es una estructura de seleccin mltiple que
permite seleccionar un bloque de sentencias entre varios casos. En
cierto modo, es parecido a una estructura de if-else anidados. La
diferencia est en que la seleccin del bloque de sentencias
depende de la evaluacin de una expresin que se compra por
igualdad con cada uno de los casos.
La estructura switch consta de una expresin y una serie de
etiquetas case y una opcin default. La sentencia break indica l final
de la ejecucin del switch.
Una sentencia switch debe tener la siguiente forma:
switch (condicion) {
case ABC:
Rev.: 1.0
Pg. 21 de 31
sentencias;
/* este caso se propaga */
case DEF:
sentencias;
break;
case XYZ:
sentencias;
break;
default:
sentencias;
break;
}
EJEMPLOS
case C:
System.out.print(Junior);
break;
default:
System.out.print(!Indefinida!);
break;
}
6.9
Sentencias try-catch
NOMBRE DEL
RECURSO
DEFINICIN
NOTACION
Sentencias try-catch
Las sentencias try-catch se utilizan para atrapar las excepciones
que se producen durante la ejecucin del programa:
FileNotFoundException, IOException o Exception. De esta forma se
atrapan los errores que se producen cuando el fichero de datos no
existe o cuando hay un problema de lectura o escritura en el fichero .
Una sentencia try-catch debe tener la siguiente forma:
try {
sentencias;
} catch (ExceptionClass e) {
Rev.: 1.0
Pg. 22 de 31
sentencias;
}
EJEMPLOS
7
7.1
try {
FileOutputStream salida = new
FileOutputStream(nombrefichero);
ObjectOutputStream objsalida = new
ObjectOutputStream(salida);
} catch (FileNotFoundException e) {
System.out.println (El fichero no existe!);
}
Espacios en blanco
Lneas en blanco
NOMBRE DEL
RECURSO
Lneas en blanco
DEFINICIN
NOTACION
EJEMPLOS
Rev.: 1.0
Pg. 23 de 31
Espacios en blanco
NOMBRE DEL
RECURSO
Espacios en blanco
EJEMPLOS
Rev.: 1.0
Pg. 24 de 31
8 Convenciones de nombres
Las convenciones de nombres hacen los programas ms entendibles hacindolos
ms fcil de leer. Tambin pueden dar informacin sobre la funcin de un
identificador, por ejemplo, cuando es una constante, un paquete, o una clase, que
puede ser til para entender el cdigo.
Tipos de
identific
adores
Clases
Interfaces
Rev.: 1.0
Ejemplos
com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
class Cliente;
class ImagenAnimada;
interface
ObjetoPersistente;
interface Almacen;
Pg. 25 de 31
Mtodos
Constantes
9
9.1
ejecutar();
ejecutarRapido();
cogerFondo();
int
i;
char
c;
float
miAnchura;
Hbitos de programacin
Referencias a variables y mtodos de clase
Rev.: 1.0
Pg. 26 de 31
NOMBRE DEL
RECURSO
DEFINICIN
EJEMPLOS
9.2
metodoDeClase();
UnaClase.metodoDeClase();
unObjeto.metodoDeClase();
//OK
//OK
//EVITAR!
Constantes
NOMBRE DEL
RECURSO
DEFINICIN
Asignaciones de variables
Las constantes numricas (literales) no se deben codificar
directamente, excepto -1, 0, y 1, que pueden aparecer en un
bucle for como contadores.
Evitar asignar el mismo valor a varias variables en la misma
sentencia. Es difcil de leer.
EJEMPLOS
Se debe escribir:
if ((c++ = d++) != 0) {
...
}
Pg. 27 de 31
// EVITAR!
Se debe escribir:
a = b + c;
d = a + r;
10 Hbitos varios
10.1 Parntesis
NOMBRE DEL
RECURSO
DEFINICIN
EJEMPLOS
Parntesis
En general es una buena idea usar parntesis en expresiones que
implican distintos operadores para evitar problemas con el orden de
precedencia de los operadores. Incluso s parece claro el orden de
precedencia de los operadores, podra no ser as para otros, no se
debe asumir que otros programadores conozcan el orden de
precedencia.
if (a == b && c == d)
// EVITAR!
if ((a == b) && (c == d)) // CORRECTO
NOMBRE DEL
RECURSO
Valores de retorno
DEFINICIN
Rev.: 1.0
Pg. 28 de 31
Ajuste De Identacion
if (expresionBooleana) {
return true;
} else {
return false;
}
return expressionBooleana;
Similarmente,
if (condicion) {
return x;
}
return y;
Se debe escribir:
return (condicion ? x : y);
NOMBRE DEL
RECURSO
DEFINICIN
EJEMPLOS
(x >= 0) ? x : -x;
11 Ejemplos de cdigo
11.1 Ejemplo de fichero fuente Java
NOMBRE DEL
RECURSO
Rev.: 1.0
Pg. 29 de 31
DEFINICIN
EJEMPLOS
/*
* @(#)Bla.java
1.82 99/03/18
*
* Copyright (c) 1994-1999 Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
* All rights reserved.
*
* Ms informacin y descripcin del Copyright.
*
*/
package java.bla;
import java.bla.blabla.BlaBla;
/**
* La descripcin de la clase viene aqui.
*
* @version
datos de la versin (numero y fecha)
* @author
Nombre Apellido
*/
public class Bla extends OtraClase {
/*Un comentario de implemantacin de la clase viene aqu.*/
/** El comentario de documentacin de claseVar1 */
public static int claseVar1;
/**
* El comentario de documentacin de classVar2
* ocupa ms de una lnea
*/
private static Object claseVar2;
/** Comentario de documentacin de instanciaVar1 */
public Object instanciaVar1;
/** Comentario de documentacin de instanciaVar2 */
protected int instanciaVar2;
/** Comentario de documentacin de instanciaVar3 */
private Object[] instanciaVar3;
/**
* ...Comentario de documentacin del constructor Bla...
*/
public Bla() {
// ...aqu viene la implementacin...
/**
* ...Comentario de documentacin del mtodo hacerAlgo...
*/
public void hacerAlgo() {
Rev.: 1.0
Pg. 30 de 31
Rev.: 1.0
Pg. 31 de 31