UML and Classen example

I’m translating this:

UML

Antes de ponernos con el ejemplo voy a explicar muy rápido lo que es UML. Es cómo se diseñan los programas e indica que clases hay, como son, y como se relacionan las clases entre sí, indicando si una clase es abstracta, que clases son las hijas, si una función necesita crear un objeto de otra clase, o si en vez de una variable en una clase tenemos un objeto de otra clase … (recuerda que el objetivo de una clase es encapsular información. Si quisieramos hacer una clase DNI, esa clase tendría un objeto de la clase Persona que encapsula los datos de esa persona, luego la clase DNI incluirá la fecha de expedición y mas cosas propias del DNI, pero no de la persona porque se eso de encarga la otra clase).

Aquí puedes ver todos los ejemplos que hemos hecho hasta ahora.

A la izquierda tienes la definición normal de una clase con ejemplos de cómo poner las variables y las funciones. Solo veo aclarar que aquí el tipo de la función o de la clase se pone al final mientras que en el código va antes.

Luego en vehículo tenemos el ejemplo de polimorfismo que hemos puesto. Fijate que las funciones abstractas se escriben inclinadas. Que una clase hereda de otra se especifica con esa flecha.

Finalmente a la derecha esta el ejemplo de la persona con el DNI. Como el DNI contiene una Persona, se llama composición y se especifica con el simbolo de la linea con el rombo negro.

Para empezar esta bien con esto. Hay más cosas que saber (como cuando una clase solo necesita a otra para una sola función y no esta compuesta por ella [es igual que la composición, pero el rombo esta en blanco]).

Lo que falta lo veremos más adelante en el ejemplo.

Ejemplo:

Vamos a realizar el siguiente programita:

En este programa nos basamos en el ejemplo anterior de los vehículos. Creamos una clase principal (llamada aplicación), que tendrá objetos de la clase Persona (Los numeros sobre la linea significan que cada objeto de la clase persona pertenecen solo a 1 aplicación, y que una aplicación puede tener de 0 a muchas personas)

La clase Persona es abstracta, y las clases cartero y panadero heredan de ella (son una especialización de Persona). Las funciones que se llaman igual que la clase se llaman constructores y se usan para dar los valores iniciales a la clase.

Vamos a añadir una función mostrarDatos() que devuelve los valores de la persona como un texto (lo que hicimos en el capitulo anterior en la función main() ). Y esta vez vamos a hacer algo un poco distinto: Al calcular la edad vamos a coger la fecha actual en el ordenador. Para ello, usaremos una función que incorpora Java que nos permite recibir la fecha, y esa fecha convertirla en un numero.

Vamos a ello. Para empezar, mostramos la clase Persona:

//Mostrar clase Persona acabada

De este código solo hay dos cosas que quizás no entiendas:

1_ Las funciones abstractas tienen que llevar el texto abstract al inicio. Y al haber una función abstracta la clase es abstracta: No se pueden crear objetos de esta clase directamente, si no objetos hijos.

2_ Al coger el año del orenador usamos la clase „Calendar“ de Java. Para ello se pone en la parte de arriba del todo „import Java.util.Calendar“. Luego se usa de la forma que se muestra: Se coge una instancia de la clase (Eso es porque es un Singelton. No te preocupes, es un patrón de diseño que veremos en el siguiente capítulo). Cuando tenemos la instancia, llamamos a la función get, que nos devolverá un valor. Le decimos que el valor que queremos es el año.

El código del calendario se puede mostrar así para hacerlo más fácil de leer:

Calendar cal = Calendar.getInstance();

int anyo = cal.get(Calendar.YEAR);

Ahora veamos las clases hijas:

// Codigo clase Panadero

//Codigo clase Cartero

Como estas clases heredan de Persona, se pone al principio que „extienden“ esta clase. Para específicar la función trabajar hay que poner antes el „@Override“ para indicar al programa que es la misma función que hay en Persona, pero que la estas modificando. Esto se hace también si quieres modificar en la clase actual alguna función de la clase padre.

Cuando en estas clases se usa „super“ se llama a la clase padre. En este caso se usa en los constructores para pasarle los datos iniciales, y para llamar a la función coger datos. Una persona te da los datos, que luego los usa el carpintero o el panadero para decirte su profesión.

Finalmente vamos a escribir la clase principal. Creamos una función que le dice a la persona que trabaje (para que nos diga que oficio tiene y sus datos), y luego en la función main creamos un panadero y un cartero. Como queremos cambiar de uno a otro sin problemas para usar los beneficios del polimorfismo, usamos la clase Persona para crearlos.

En total, tiene que quedar así:

En println estamos usando un texto raro. El „\n“… ¿Que significa? Que añadimos manualmente un salto de linea mas. Con esto hacemos el resultado más fácil de leer. Así. El texto del final con este ejemplo debe ser:
run:

Creamos la primera persona y la mostramos

Nombre: Pepe. Telefono: 1. Año de nacimiento: 1986. Edad: 29

Soy carpintero y corto madera

Creamos la segunda persona

Nombre: Jorge. Telefono: 2. Año de nacimiento: 1991. Edad: 24

Soy panadero y hago pan

BUILD SUCCESSFUL (total time: 0 seconds)

Leave a Reply