CLASES DE JAVA (Y DIAGRAMA UML)

Como hemos aprendido en la entrada de introducción a la orientación a objetos, una clase es un modelo o estructura del cual nacen los objetos. En esta entrada dejaremos de lado la teoría y nos meteremos de lleno con una clase totalmente práctica.

Una clase se declara de la forma:

public class Nombre_Clase [extends Clase /implements Interfaz] {
    /*formación de la clase */
}

Siempre trabajaremos con clases publicas (public), ya que es más útil y sencillo. El nombre de la clase empieza siempre con mayúscula y pueden extender o implementar (ya lo veremos en un futuro).

Como ya sabeis, una clase podemos estructurarla en 3 grandes bloques básicos:
  • Atributos
  • Constructor
  • Métodos

ATRIBUTOS

Los atributos son las características que tiene una clase. Para una clase Rectángulo, tendremos dos atributos claros a implementar, base y altura.

Un atributo en Java se escribe de la forma:

    [visibilidad] [tipo] tipo_dato nombre_atributo [=valor];

* entre corchetes -> no necesario *

 Donde:
  • Visibilidad: es la restricción de quien quieres que acceda al atributo. Normalmente se pone private (privada, es decir, que solo pueda acceder la propia clase), aunque pudiera ser public (visible por cualquier clase), package (visible por clases del paquete) o protected (solo visible para subclases herederas y del interior del paquete).
  • Tipo: Básicamente hay un atributo distinto al normal, el static final (una constante inmutable en el transcurso del código). No es la única, ya que puede aparecer simplemente static, pero lo veremos en profundidad en entradas posteriores.
  • tipo_dato: el tipo de dato que va almacenar el atributo. Ver tipos de dato.
  • nombre_atributo: el nombre del atributo, comenzando en minúscula para los atributos clásicos y en mayúsculas completas los static final, por mayor legibilidad.
  • =valor: Iniciar a un valor por defecto el atributo.
Ejemplos:

    private static final float PI=3.14159

    private int base;

    public String nick;



CONSTRUCTOR

Es una función la cual construye un objeto a través de la clase. En Java si no se implementa, el compilador siempre usa una por defecto en la cual se usa uno que inicializa todo a valores nulos.

En Java se implementa de la forma

    [visibilidad] Nombre_clase ([parámetros]) { secuencia };

Donde:
  • La visibilidad es como la de los atributos, pero en este caso es frecuente que sea public debido a que se quiere que se instancien (construyan objetos de esta clase) siempre.
  • Nombre_clase: El constructor lleva siempre el nombre de la clase.
  • Parámetros: diferentes parámetros a pasar para construir el objeto

Ejemplo:

Para la clase Circulo con atributos radio y color:

   public Circulo (int rad) {
        this.radio=rad;
        this.color="blanco";
   }

Es muy típico encontrarnos varios constructores en forma de sobrecarga, es decir, varios con el mismo nombre cambiando unicamente los parámetros a pasarle y el cuerpo del constructor.

Ejemplo:

   public Circulo () {
        this.radio=10;
        this.color="blanco";
   }


   public Circulo (int rad) {
        this.radio=rad;
        this.color="blanco";
   }


   public Circulo (int rad, String col) {
        this.radio=rad;
        this.color=col;
   }

Así dependiendo de los parámetros que pases usará uno o otro constructor. Esto también pasa con los métodos, aunque se usa menos.


MÉTODOS

Son funciones que trabajan con el comportamiento del objeto.


    [visibilidad] [tipo] tipo_retorno nombre_método ([parámetros]){ secuencia };

Como veis solo cambian dos pequeñas cosas con respecto al constructor: usa el nombre que quieras CON MINÚSCULAS y precisa un tipo de dato que devolverá la función (String, int...). En caso de que queramos hacer un procedimiento (no devolver nada) colocaremos la cláusula void.

El tipo puede ser abstract (el cual solo es declarado e implementado por subclases herederas) o static (no modificable desde fuera).

Existen métodos con nombres: getter (obtener atributo), setter (modificar atributo)...

Ejemplos:

    public void incrementarRadio (int incremento){
        this.radio= this.radio+incremento;               

    }

    public int getRadio (){
        return this.radio;               <- return para devolver el valor
    }


EJEMPLO COMPLETO DE CLASE RECTÁNGULO EN JAVA





Algo a tener en cuenta es que el parámetro se puede llamar igual que el atributo, para diferenciarlos se usa el this.nombre para referirse al atributo. De tal forma, si en un método queremos llamar a un método de la propia clase usaremos this.metodo.


EJEMPLO COMPLETO DE CLASE CÍRCULO EN UML

Uso en este caso la clase círculo para mostraros como se pone un static final (constante) en un diagrama UML de clase.

Una clase se representa con un rectángulo dividido en 3 partes: nombre de la clase, atributos y métodos (donde también aparece el constructor).

Los métodos y atributos estáticos se ponen subrayados.

La visibilidad se representa como: + para públicos, - para privados,  # para paquete y en caso de protegidos no se pone nada.

Las notaciones las podeis ver en el propio ejemplo, ya que son muy sencillas:
Ciertos detalles a fijarse es que el rol de los métodos pueden colocarse de la forma <<rol>> y que los tipos de datos se colocan a continuación con :.



Crear una clase es básico para programar Java, así que es importante que te quede esta noción clara.
Cualquier duda ponla en comentarios, responderé con la mayor brevedad posible.

Un saludo!



Comentarios