Prog. Aprendiendo POO

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introducción

  • La idea de esta página es la de mostrar muchos de los conceptos de la POO siguiendo el desarrollo de un ejercicio.




Clases

  • Un programador novato (PN) decide introducirse en el mundo de POO y tratar de implementar una solución informática para la gestión de los vehículos de la empresa de transporte donde trabaja.
Decide usar como lenguaje de programación Java.
  • El problema que al que está intentando dar solución es el siguiente: Necesita almacenar información sobre los diferentes vehículos disponibles en la Compañía.
Entre esta información está el año de compra del vehículo, su matrícula y su marca.
  • El PN decide implementar en una clase la información necesaria.
Recuerda que las clases no son más que abstracciones de las propiedades de los objetos sin dar ningún valor concreto.
Por convención, las clases tienen que estar definidas en singular y la la primera letra en mayúscula así como las primeras letras de las siguientes palabras si el nombre está formado por varias.
Más tarde utiliza la clase creada previamente en otra clase llamada 'Principal', una que se va a ejecutar (dispone del método main)
Dentro de esta clase, el PN creará los cuatro vehículos que tiene la empresa en este momento y le asignará los siguientes valores:
Prog ej novato 1.jpg
  • Una vez hecho esto, el PN compila sus clases (Vehiculo y Principal) y ejecuta la clase Principal, creando 4 instancias de la clase Coche.


Ejercicio 1: Implementar la solución.

Solución Ejercicio 1



Métodos sin parámetros

  • Comprueba que no le haya dado errores, pero permanece con la duda de que si habrá guardado los valores de forma correcta, por lo que es necesario que se muestren estos valores.
Para imprimir los valores, necesita un procedimiento (método) que los saque a la pantalla.
Entonces decide crear dentro de la clase Vehiculo, un método que imprima la información Puede hacer un único método que imprima el año, matrícula y marca a la vez, pero decide crear tres métodos, uno para cada tipo de información a imprimir, de nombre imprimirAno, imprimirMatricula, imprimirMarca, porque necesita mostrar la información en forma individualizada.
  • Una vez escritos, decide probarlos, para ver si muestran la información correcta,
Para esto modifica la clase Principal, haciendo que cada objeto de la clase Vehículo llame a cada uno métodos.


Ejercicio 2: Implementar la solución.

Solución Ejercicio 2



Herencia

  • El PN está bastante satisfecho con lo que se ha logrado hasta ahora, pero esto fue solo una pequeña parte de lo que tienes que hacer.
Digamos que su empresa se dedica al transporte de 'dinero', y dos de sus vehículos son furgonetas. Cada una de ellas es capaz de transportar una cantidad de dinero.
Además, cada furgonete lleva consigo un número de vigilantes jurados
  • Esta información es necesaria almacenarla.
Ante esta situación, el PN decide crear una nueva clase, Furgoneta, con los procedimientos de la clase Vehículo y los nuevos atributos (cantidad de dinero y número de vigilantes jurados).
Pero cuando iba a comenzar a implementar esta solución, aparece el Programador Experto, alguien que ha trabajado en Java durante muchos años, y viendo lo que iba a hacer, le explica que en Java, al ser un lenguaje de POO se puede implementar algo que se denomina Herencia.
  • La herencia se da entre dos clases y es un tipo de relación jerárquica de tipo es un y se denomina generalización o especialización.
En la herencia, hacemos que una clase (subclase) pueda hacer uso de todos los métodos y atributos definidos en la clase de la que va a heredar (superclase).
El otro tipo de relación 'jerárquica' es el de tipo es parte de denominada de agregación o inclusión. Es un tipo de relación que heredó de la asociación.


  • Con esta gran ventaja, el PN decide crear una subclase Furgoneta de la superclase Vehiculo.
Dentro de la nueva clase implementa los nuevos atributos (cantidad de dinero y número de vigilantes jurados), ya que son atributos de la clase Furgoneta, que no tiene la clase Vehículo.
  • Por otro lado, como el PN querrá mostrar la información de estos dos nuevos atributos, también crea, dentro de la clase Furgoneta, dos métodos para mostrar estos atributos del nombre 'imprimirDinero()', 'imprimirJurados()'.
  • Para probar esta nueva clase, tendrá que cambiar su clase Principal, ya que tenía cuatro objetos de la clase Vehículo, pero ahora sabe que dos de ellos son furgonetas, por lo que tendrá que cambiar su código, y si antes tenía cuatro vehículos de forma:
Vehiculo vehiculo1 = new Vehiculo();
Vehiculo vehiculo2 = new Vehiculo();
Vehiculo vehiculo3 = new Vehiculo();
Vehiculo vehiculo4 = new Vehiculo();
Ahora tendrá dos furgonetas y dos vehículos de la forma:
Vehiculo vehiculo1 = new Vehiculo();
Vehiculo vehiculo2 = new Vehiculo();
Furgoneta furgoneta1 = new Furgoneta();
Furgoneta furgoneta2 = new Furgoneta();
  • A cada uno de sus vehículos (furgonetas y vehículos) les asignará los valores a sus atributos y llamará a los métodos que imprimen estos valores.
El PN realiza todo lo anterior, compila las clases y ejecuta la clase principal, comprobando que todo sea correcto.


Ejercicio 3: Implementar la solución.

Solución Ejercicio 3




  • El PN ahora piensa que sus otros dos vehículos (que son coches) no llevan dinero, pero llevan documentos secretos. Cada coche lleva un documento secreto, por lo que es necesario para guardar su nombre, así como el nombre del conductor que conduce el coche
Pensando de la misma manera que el caso de las furgonetas, ahora sabe que puede crea una subclase (llamada Coche, por ejemplo) de la superclase Vehiculo.
En esa subclase estarán los atributos nombreCond y nombreDoc. Por lo tanto, implementa esta subclase y los dos atributos, así como los métodos necesarios para mostrarlos (imprimirNombreDoc, imprimirNombreCond)


  • Una vez hecho esto, el PN modifica la clase Principal, tal como lo hizo en el caso de Furgonetas para probar todo de nuevo.


Ejercicio 4: Implementar la solución.

Solución Ejercicio 4



Constructores

  • Repasemos lo que hemos hecho hasta este momento.
  • Creamos 3 clases (Vehiculos, Coche y Furgoneta), para almacenar la información que necesito, así como los métodos necesarios para imprimir (mostrar) esa información.
  • Por otro lado, creamos otra clase Principal, que hará uso de las clases anteriores, mediante la creación de 4 vehículos, dos de tipo Coche y dos de tipo Furgoneta.
  • Cada uno de estos vehículos es una instancia de la clase correspondiente y tendrá almacenados algunos valores específicos. Si quisiera tener más información almacenada de otros vehículos, solo tendría que crear un nuevo objeto (instanciar) de la clase correspondiente.


  • El PN todavía está rompiéndose el 'coco' para implementar completamente todo el proceso de su empresa
Lo siguiente que piensa es en 'refinar' un poco más lo hecho hasta ahora.
Primero, sería conveniente tener un método que dé valores a las variables o atributos que tenemos en cada clase.
Es decir, en lugar de poner:
coch1.marca = "Peugot";
coch1.matricula = "C-1234-BZ";
coch1.ano = 1999;
coch1.nombreDoc = "Documento secreto 1";
coch1.nombreCond = "Ángel";
se podría llamar un método con 5 parámetros, tal que cada uno de estos parámetros asignará un valor a cada atributo, de la siguiente manera:
coch1.asignarValores (param1, param2, param3, param4, param5)
donde:
  • marca = param1
  • matricula = param2
  • ano = param3
  • nombreDoc = param4
  • nombreCond = param5
para que pudiéramos poner en una sola línea lo que teníamos antes en cinco:
coch1.asignarValores ("Peugot", "C-1234-BZ", 1999, "Documento secreto 1","ANGEL");
  • A la luz de esta brillante idea, el PN está listo para implementarla.
Primero, piensa dónde colocar el método que asigna los valores de los parámetros a los atributos y de inmediato se da cuenta que no puedes ubicarlo en la clase Vehiculo, ya que en esta clase no existen los atributos nombreDoc y nombreCond, por lo que decide colocarlos en las subclases.
Entonces, en la subclase Coche, decide crear un método de cinco parámetros, en el que se asignan los valores a las cinco variables o atributos que tenemos, de la forma:




-- Ángel D. Fernández González -- (2017).