Objetos Clases Herencia Interfaces Conceptos de programacin orientada a objetos 1 Objetos Los objetos son un concepto fundamental para comprender la tecnologa orientada a objetos. Por ejemplo, miremos a nuestro alrededor e identifiquemos algunos de ellos: perro, silla, reloj, coche, bicicleta. Los objetos del mundo real comparten dos caractersticas: todos tienen un estado y un comportamiento. Los perros tienen un estado (nombre, raza, color, hambre?) y un comportamiento (ladra, busca, mueve la cola). Las bicicletas tambin tienen un estado (velocidad, cadencia de pedaleo, velocidad de desplazamiento) y un comportamiento (cambio de velocidad, cambio de cadencia de pedaleo, frenar). El identificar el estado y el comportamiento de los objetos del mundo real es una forma recomendable para empezar a pensar en trminos de programacin orientada a objetos (a partir de este momento lo abreviaremos como POO).
Ejercicio: Cules son el estado y el comportamiento de los siguientes objetos reales? silla reloj coche
Los objetos del mundo real varan en complejidad: algunos pueden tener pocos estados y comportamientos, mientras que otros pueden tener muchos ms. Por ejemplo, un rbol y una lmpara tienen pocos estados y comportamientos comparados con un radio y una televisin. Una lmpara de escritorio puede tener slo dos estados posibles (encendido y apagado) y dos posibles comportamientos (encender y apagar), pero un radio puede tener otros estados (encendido, apagado, volumen actual, estacin actual) y comportamiento (encender, apagar, subir el volumen, bajar el volumen, buscar, explorar y sintonizar). De la misma forma podemos podemos observar que algunos objetos contienen, a su vez, a otros objetos. Estas observaciones del mundo real se traducen al mundo de la POO.
Los objetos de software son conceptualmente similares a un objeto real: tienen estados y comportamientos. Un objeto almacena su estado en atributos (variables en algunos lenguajes de programacin) y exponen su comportamiento mediante mtodos (funciones en algunos lenguajes de programacin). Los mtodos actan sobre el estado interno de un objeto y sirven como el mecanismo principal para la comunicacin entre objetos. La ocultacin del estado 1 Este es un intento de traduccin al espaol de The Java Tutorials, Lesson: Object-Oriented Programming Concepts. interno y el requerimiento de que toda la interaccin deba hacerse a travs de los mtodos se le conoce como encapsulado de datos, que es un principio fundamental en la POO.
Atribuyndole estado y asignndole mtodos, un objeto mantiene el control de cmo el mundo exterior est permitido para usarlo. Por ejemplo, si una bicicleta slo tiene seis velocidades, un mtodo para cambiar de velocidad podra rechazar cualquier valor menor a 1 y mayor a 6.
El agrupar el cdigo de los objetos individuales de software proporciona una serie de beneficios, que incluyen:
Modularidad. El cdigo fuente de un objeto puede ser escrito y mantenido independientemente del cdigo fuente de otros objetos. Una vez creado, un objeto puede transmitirse fcilmente por el interior del sistema. Ocultacin de la informacin. Al interactuar slo con los mtodos de un objeto, los detalles de su implementacin interna permanecen ocultos del mundo exterior. Reutilizacin de cdigo. Si un objeto que ya existe (tal vez escrito por otro desarrollador), puede utilizarse ese objeto en un programa. Esto permite a los especialistas implementar / probar / depurar objetos complejos para tareas especficas, en los cuales se puede confiar para ser utilizados en cdigo propio. Facilidad conexin y depuracin. Si un objeto en particular resulta ser problemtico, se puede simplemente eliminar de la aplicacin y conectar un objeto diferente para reemplazarlo. Esto es anlogo a la solucin de problemas mecnicos en el mundo real: si un tornillo se rompe, slo sto se sustituye y no toda la mquina. Clases En el mundo real podemos encontrar muchos objetos del mismo tipo. Por ejemplo, pueden haber miles de bicicletas de la misma marca y modelo. Cada bicicleta fue construida bajo un mismo diseo, por lo tanto contienen los mismo componentes. En trminos de POO, decimos que la bicicleta es una instancia de la clase de objetos conocida como bicicleta. Una clase es el diseo bajo el cual se crean los objetos individuales.
Ejemplo: Analiza las siguientes clases de objetos: nmero libro telfono La siguiente clase Bicicleta es una posible implementacin en Java de una bicicleta:
class Bicicleta {
int cadencia = 0; int desplazamiento = 0; int velocidad = 1;
Los atributos cadencia, desplazamiento y velocidad representan el estado del objeto y los mtodos cambiarCadencia, cambiarVelocidad, acelerar, frenar y imprimirEstado definen su interaccin con el mundo exterior.
La clase Bicicleta no contiene un mtodo main porque no es una aplicacin completa, es slo el modelo de bicicletas que se pueden utilizar en una aplicacin. La responsabilidad de crear y usar nuevos objetos Bicicleta pertenece a alguna otra clase en la aplicacin.
La siguiente clase EjemploBicicleta crea dos objetos Bicicleta independientes y llama a sus mtodos:
class EjemploBicicleta {
public static void main(String[] args) {
// Se crean dos objetos Bicicleta diferentes Bicycle bici1 = new Bicicleta(); Bicycle bici2 = new Bicicleta();
// Se invocan los mtodos sobre esos objetos bici1.cambiarCadencia(50); bici1.acelerar(10); bici1.cambiarVelocidad(2); bici1.imprimirEstado();
El resultado de esta prueba imprime, para las dos bicicletas, la cadencia final de pedaleo, la velocidad de desplazamiento y la velocidad:
cadencia: 50, velocidad de desplazamiento: 10, velocidad: 2 cadencia: 40, velocidad de desplazamiento: 20, velocidad: 3 Herencia Objetos de diferentes tipos a veces tienen algo en comn. Por ejemplo, las bicicletas de montaa, de carrera y BMX comparten las caractersticas de las bicicletas (velocidad de desplazamiento, cadencia de pedaleo, velocidad). Sin embargo, cada una de ellas tiene caractersticas adicionales que las hacen diferentes: Las de montaa tienen generalmente engranes adicionales, las de carrera tienen un manubrio diferente y las BMX solamente tienen una velocidad.
La POO permite a las clases heredar el estado y comportamiento de otras clases. En nuestro ejemplo, la clase Bicicleta ahora es una superclase de BicicletaDeMontaa, BicicletaDeCarrera y BicicletaBMX. En Java, a cada clase se le permite tener una superclase directa y cada superclase puede tener un nmero ilimitado de subclases:
Ejercicio: Pensemos ahora en las siguientes superclases: nmero telfono vaso
La sintaxis para la creacin de una subclase es sencilla. Al principio de la declaracin de la clase, se utiliza la palabra reservada extends, seguida por el nombre de la clase de la cual se est heredando:
class BicicletaDeMontana extends Bicicleta {
// Los nuevos atributos y mtodos que definen una // bicicleta de montaa van aqu
}
Esto le da a BicicletaDeMontaa todos los atributos y mtodos de Bicicleta, pero permite que su cdigo se concentre exclusivamente en las caractersticas que la hacen nica. Esto hace que el cdigo de las subclases sea fcil de leer. Sin embargo, se debe tener cuidado de documentar apropiadamente el estado y el comportamiento que define cada superclase, ya que el cdigo no aparece en el archivo fuente de cada subclase. Interfaces Como vimos anteriormente, los objetos definen su interaccin con el mundo exterior mediante los mtodos que exponen. Los mtodos de los objetos son la interfaz con el mundo exterior. Por ejemplo, los botones de un televisor o un reproductor de Blu-Ray son la interfaz entre nosotros y los circuitos que hay dentro de los aparatos.
En su forma ms comn, una interfaz es un grupo de mtodos relacionados con cuerpos vacos. El comportamiento de una bicicleta, si se especifica como una interfaz, podra ser la siguiente:
interface Bicicleta {
void cambiarCadencia(int nuevoValor);
void cambiarVelocidad(int nuevoValor);
void acelerar(int incremento);
void frenar(int decremento); }
Ejercicio: Define las siguientes interfaces:
Telfono Radio Refrigerador
Para implementar esta interfaz se debe cambiar el nombre de la clase (por ejemplo por una marca determinada de bicicleta, como BicicletaPatito) y utilizar la palabra reservada implements en la declaracin de la clase:
class BicicletaPatito implements Bicicleta {
// el resto de esta clase se implementa como antes }
La implementacin de una interfaz permite a una clase ser ms formal acerca del comportamiento que promete proporcionar. Una interfaz es una contrato entre la clase y el mundo exterior y este contrato se cumple al tiempo de la compilacin. Si una clase implementa una interfaz, todos los mtodos definidos por esa interfaz deben aparecer en el cdigo fuente para que la clase se compile con xito.