Objetos | Clases | Herencia | Interfaz
La gran ventaja de un lenguaje orientado a objetos es el poder crearte los objetos que tu necesites. Un objeto es un coche, una mesa, que tu te creas y "tiene vida propia". Con la expresion de que tiene vida propia, quiero decir, que el objeto no es como una variable que te creas en cualquier lenguaje, que lo unico que puedes hacer con ella es consultar su valor, sumarla si es numerica, concatenarla si es una cadena o un caracter, etc, sino que al objeto aparte de hacer esas cosas, si es un coche, puedes preguntarle cuantas ruedas tiene, si tiene alguna pinchada, si va alguien en el, o decirle que haga un viaje a Madrid y que vaya por tal carretera. Con los objetos puedes hacer lo que se te antoje puesto que los creas tu y tu eres el que le dice lo que puede hacer y lo que no.
Los objetos frecuentemente estan formados por otros objetos más pequeños. Un coche puede estar formado por ejemplo por el objeto rueda, y el objeto rueda puede tener las caracteristicas de grosor, que lleve llanta o tapacubo, que sea bueno para la lluvia o no, etc.
Las clases son el instrumento más importante en un lenguaje orientado a objetos, en ellas se definen los objetos, más bien lo que se define en las clases son las caracteristicas que pueden llegar a tener los objetos creados a partir de esa clase, lo que pueden llegar a hacer, etc. Por ejemplo, en la clase coche puedes definir un metodo el cual te devuelva el numero de ruedas o de puertas que puede tener un coche. Un coche normalmente tiene 5 ruedas pero puede ser que se le haya pinchado hace poco una y en estos momentos solo lleve 4, o tambien un coche puede ser de 3 o 5 puertas, en la clase defines que el coche debe tener puertas y ruedas, pero cuando te creas el objeto es cuando le dices a tu objeto en particular cuantas ruedas tiene y cuantas puertas.
En las clases, tu puedes definirte métodos para realizar acciones que tu necesites que hagan los objetos que te vas a crear de esas clases. Por ejemplo si tienes una clase coche, sería importante que definieras un método que te devolviera cual es la mátricula de ese coche, u otro que simule que el coche hace un viaje a una ciudad.
Siguiendo con el ejemplo de la clase coche, tu te puedes crear dos objetos de esa clase "tuCoche" y "elCocheDeTuPadre", que van a ser dos objetos de la misma clase pero seguramente van a ser totalmente destintos. tuCoche tendrá 5 ruedas, será 3 puertas, será rojo, su matricula será OU-3463-P y hará un viaje a Valencia, sinembargo elCoche DeTuPadre tambien tendrá 5 ruedas, pero tendrá 5 puertas, será azul oscuro, su matricula será OU-9332-V y el viaje que realizará será a la casa de la playa.
La herencia en los lenguajes orientados a objetos es otra caracteristica muy potente, para que lo entiendas voy a seguir con el ejemplo de la clase coche.
Imaginate que tienes que hacer un programa para una empresa que se dedica ha fabricar coches, motos, vehiculos de tres ruedas, etc. Una buena forma de hacerlo sería empezar por la base, todo lo que esa empresa fabrica son vehiculos a motor, cada uno de ellos con unas caracteristicas determinadas pero todos son vehiculos a motor. Pues entonces nos creamos una clase que sea VehiculoAMotor, que tengta las siguientes caracteristicas:
Estas son caracteristicas que tienen todos los vehiculos motorizados. Pero ahora tenemos el problema de que los coches y los vehiculos de tres ruedas tienen puertas, volante, cinturones de seguridad, cristales, etc y las motos no. Pues lo que podemos hacer es una clase Moto y otra VehiculosDeMasDeDosRuedas, asi la clase Moto tendría las caracteristicas que le difencia de la clase VehiculosDeMasDeDosRuedas y al reves. Entonces a ti te acaba de surgir una gran duda(espero), y es que si necesitas saber que motor se le va a instalar a las motos ¿como lo podemos saber?. Este problema nos lo soluciona la herencia.
Cuando una clase(hijo) hereda de otra(padre), la clase hijo(subclase) puede usar como propias todas las caracteristicas(metodos) de la clase padre(superclase). Otra forma de verlo es que si la clase Moto hereda de la clase VehiculoAMotor, ya es un vehiculo a motor, y tiene como suyos todos los metodos definidos en la clase VehiculoAMotor.
Nota: La herencia es una caracteristica muy potente en los lenguajes orientados a objetos, pero en java esta limitado y una clase solo puede heredar de otra, es decir, cada clase hijo solo puede tener una clase padre.
Para solucionar el problema de la "uniherencia", es decir, que una clase solo puede heredar de otra, se ceraron las interfaces. Una clase puede "implementar" varias interfaces.
Una interfaz es parecida a una clase. En una clase se definen unas variables, se definen unos procedimientos y unas funciones, y dentro de esos procedimientos y de esas funciones se coloca el código que tienen que realizar esos procedimientos y funciones.
Pues bien, una interfaz solo tiene los procedimientos y funciones vacios, si una interfaz por si sola es incapaz de realizar nada. Despues cuando se implementa una interfaz en una clase tu ya tienes esos procedimientos y funciones, lo unico que tienes que hacer es escribir el codigo de lo que quieres que realicen.
Nota: Ten en cuenta que una interfaz tiene unos procedimientos y unas funciones, y que cuando implementas una interfaz en una clase, esa clase tiene que tener todos los procedimientos y funciones de la interfaz, TODOS, aunque no los necesites. Si no los necesitas los dejas vacios, pero tienen que estar en esa clase.