¿Qué es documentar el código?
Documentar el código es como dejar notas o instrucciones dentro de tu programa para que tú (en el futuro) o cualquier otro programador pueda entender qué hace tu código y por qué lo hace. Es como poner etiquetas o carteles que expliquen los rincones de tu programa.
¿Quién leerá esta documentación?
Principalmente:
- Tú mismo (cuando vuelvas a ver el código en unos meses).
- Otros programadores que trabajen contigo o que tengan que modificar tu código.
¿Por qué es tan importante?
Porque ayuda a:
- Mantener el código (arreglar errores o mejorarlo).
- Reutilizarlo en otros programas.
- Entenderlo más rápido.
¿Qué cosas deberías documentar?
Mínimo deberías poner comentarios en:
- Las clases
- Los métodos
- Los atributos (variables dentro de una clase)
- Los constructores
Y también opcionalmente en:
- Bucles complicados
- Algoritmos que no sean obvios
- Cualquier cosa que no se entienda solo leyendo el código
¿Cómo se hace en Java?
Se usa una herramienta que ya viene con Java y se llama Javadoc.
Para que Javadoc funcione, usamos comentarios especiales que empiezan así:
/**
* Aquí va la explicación
*/
Ese bloque sirve para documentar lo que viene justo debajo, como un método o una clase.
Ejemplo de un comentario con Javadoc:
/**
* Calcula el área de un círculo dado su radio.
*
* @param radio El radio del círculo
* @return El área calculada
*/
public double calcularArea(double radio) {
return Math.PI * radio * radio;
}
¿Qué son las etiquetas @
?
Son como palabras clave que le dicen a Javadoc qué información especial debe mostrar. Algunas muy comunes:
Etiqueta | Para qué sirve |
---|---|
@author | Dice quién hizo el código |
@version | Muestra la versión del código |
@param | Explica un parámetro (en métodos o constructores) |
@return | Explica qué devuelve el método |
@throws o @exception | Explica qué errores puede lanzar el método |
@see | Pone un enlace a algo relacionado |
@deprecated | Advierte que algo ya no se debería usar |
Orden recomendado de etiquetas
@author
@version
@param
@return
@exception
o@throws
@see
@deprecated
Actividades de programación
Actividad 1: Documentar una clase de utilidades matemáticas
- Agrega comentarios Javadoc a la clase y a cada método.
- Usa
@param
,@return
,@throws
,@author
.
public class Calculadora {
public int sumar(int a, int b) {
return a + b;
}
public int restar(int a, int b) {
return a - b;
}
public int multiplicar(int a, int b) {
return a * b;
}
public int dividir(int a, int b) {
return a / b; // Cuidado: puede lanzar ArithmeticException si b es 0
}
}
/**
* Clase que proporciona operaciones matemáticas básicas.
* Contiene métodos para sumar, restar, multiplicar y dividir.
*
* @author Juan Pérez
* @version 1.0
*/
public class Calculadora {
/**
* Suma dos números enteros.
*
* @param a El primer número
* @param b El segundo número
* @return La suma de a y b
*/
public int sumar(int a, int b) {
return a + b;
}
/**
* Resta dos números enteros.
*
* @param a El primer número
* @param b El segundo número
* @return La diferencia entre a y b
*/
public int restar(int a, int b) {
return a – b;
}
/**
* Multiplica dos números enteros.
*
* @param a El primer número
* @param b El segundo número
* @return El producto de a y b
*/
public int multiplicar(int a, int b) {
return a * b;
}
/**
* Divide dos números enteros.
*
* @param a El numerador
* @param b El denominador
* @return El cociente de a dividido entre b
* @throws ArithmeticException Si el denominador es 0
*/
public int dividir(int a, int b) {
if (b == 0) {
throw new ArithmeticException(“No se puede dividir por cero.”);
}
return a / b;
}
}
Actividad 2: Documentar constructor y atributos
- Documenta la clase, el constructor y los métodos
get
. - Usa
@param
para el constructor, y@return
para los getters.
public class Persona {
private String nombre;
private int edad;
private String dni;
public Persona(String nombre, int edad, String dni) {
this.nombre = nombre;
this.edad = edad;
this.dni = dni;
}
public String getNombre() {
return nombre;
}
public int getEdad() {
return edad;
}
public String getDni() {
return dni;
}
}
/**
* Clase que representa una persona con nombre, edad y DNI.
*
* @author Juan Pérez
* @version 1.0
*/
public class Persona {
private String nombre;
private int edad;
private String dni;
/**
* Constructor para crear una nueva persona.
*
* @param nombre El nombre de la persona
* @param edad La edad de la persona
* @param dni El DNI de la persona
*/
public Persona(String nombre, int edad, String dni) {
this.nombre = nombre;
this.edad = edad;
this.dni = dni;
}
/**
* Obtiene el nombre de la persona.
*
* @return El nombre de la persona
*/
public String getNombre() {
return nombre;
}
/**
* Obtiene la edad de la persona.
*
* @return La edad de la persona
*/
public int getEdad() {
return edad;
}
/**
* Obtiene el DNI de la persona.
*
* @return El DNI de la persona
*/
public String getDni() {
return dni;
}
}
Actividad 3: Usar @see
para vincular clases
- Documenta ambas clases.
- Usa
@see Persona
enEstudiante
, y viceversa. - Puedes añadir un enlace externo con
@see <a href="...">texto</a>
.
public class Persona {
// Código como el de la actividad anterior
}
public class Estudiante extends Persona {
private String curso;
public Estudiante(String nombre, int edad, String dni, String curso) {
super(nombre, edad, dni);
this.curso = curso;
}
public String getCurso() {
return curso;
}
}
/**
* Clase que representa una persona.
*
* @author Juan Pérez
* @version 1.0
* @see Estudiante
*/
public class Persona {
private String nombre;
private int edad;
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public String getNombre() {
return nombre;
}
public int getEdad() {
return edad;
}
}
/**
* Clase que representa un estudiante, que es un tipo especial de persona.
*
* @author Juan Pérez
* @version 1.0
* @see Persona
*/
public class Estudiante extends Persona {
private String curso;
public Estudiante(String nombre, int edad, String curso) {
super(nombre, edad);
this.curso = curso;
}
public String getCurso() {
return curso;
}
}
Actividad 4: Marcar métodos obsoletos con @deprecated
- Documenta
potenciaAntiguo
con@deprecated
. - Usa
{@link #potencia(double, double)}
para indicar la nueva versión.
public class Calculadora {
/**
* Método antiguo para calcular potencias.
*/
public int potenciaAntiguo(int base, int exponente) {
int resultado = 1;
for (int i = 0; i < exponente; i++) {
resultado *= base;
}
return resultado;
}
public double potencia(double base, double exponente) {
return Math.pow(base, exponente);
}
}
/**
* Clase que proporciona operaciones matemáticas avanzadas.
*
* @author Juan Pérez
* @version 1.0
*/
public class Calculadora {
/**
* Método antiguo para calcular potencias.
* @deprecated Este método está obsoleto. Usa {@link #potencia(double, double)} en su lugar.
*/
@Deprecated
public int potenciaAntiguo(int base, int exponente) {
int resultado = 1;
for (int i = 0; i < exponente; i++) {
resultado *= base;
}
return resultado;
}
/**
* Calcula la potencia de un número.
*
* @param base La base
* @param exponente El exponente
* @return El resultado de base elevado a exponente
*/
public double potencia(double base, double exponente) {
return Math.pow(base, exponente);
}
}
Actividad 5: Generar documentación HTML con Javadoc
- Documenta esta clase usando Javadoc.
- Luego, en terminal, ejecuta: javadoc -d doc Vehiculo.java
- Abre el archivo
doc/index.html
con tu navegador para ver la documentación generada.
/**
* Clase que representa un vehículo básico.
*/
public class Vehiculo {
private String marca;
private int velocidad;
public Vehiculo(String marca) {
this.marca = marca;
this.velocidad = 0;
}
public void acelerar(int incremento) {
velocidad += incremento;
}
public int getVelocidad() {
return velocidad;
}
}
/**
* Clase que representa un vehículo básico.
*
* @author Juan Pérez
* @version 1.0
*/
public class Vehiculo {
private String marca;
private int velocidad;
/**
* Constructor de Vehiculo.
*
* @param marca La marca del vehículo
*/
public Vehiculo(String marca) {
this.marca = marca;
this.velocidad = 0;
}
/**
* Acelera el vehículo.
*
* @param incremento La cantidad en la que se incrementará la velocidad
*/
public void acelerar(int incremento) {
velocidad += incremento;
}
/**
* Obtiene la velocidad actual del vehículo.
*
* @return La velocidad del vehículo
*/
public int getVelocidad() {
return velocidad;
}
}