Está en la página 1de 13

Modulo 10.

Programacin Orientada a Objetos

Objetivos: Aprender los conceptos bsicos de la programacin orientada a objetos, comportamiento, relaciones y operaciones. Comprender por qu la programacin orientada a objetos sirve para reutilizar cdigo Comprender los principios bsicos de la programacin orientada a objetos.

Introduccin a objetos

Los progresos en la abstraccin Todos los lenguajes de programacin proporcionan abstracciones. Puede ser discutido que la complejidad de los problemas que puedes solucionar est relacionada directamente con la clase y la calidad de la abstraccin. Por clase entendemos, qu es lo que estoy abstrayendo? El lenguaje ensamblador por ejemplo es una abstraccin bsica de la mquina sobre la cual se ejecuta la aplicacin o maquina subyacente. Muchos idiomas son abstracciones del lenguaje ensamblador. Estos idiomas agregaron grandes mejoras al lenguaje ensamblador, pero su abstraccin primaria de los problemas a resolver todava requiere que se piense en trminos de la estructura de la computadora en lugar de la estructura del problema que se est intentando solucionar. El programador debe establecer una asociacin entre el modelo de la mquina y el modelo del problema que se est solucionando. El esfuerzo requerido para realizar esta asociacin, y el hecho de tener que codificar en el lenguaje de programacin segn esta asociacin, produce como consecuencia programas difciles de escribir y costosos de mantener, Es por esto que la industria de desarrollo de software creo los mtodos de programacin. En estos trminos se presentaron varios mtodos y lenguajes que solucionan satisfactoriamente o torpemente los problemas, la calidad de la solucin depende del dominio en el cual se est trabajando y del problema en s.

La programacin orientada a objetos proporciona al programador herramientas para representar los elementos en el espacio del problema. Referimos a los elementos en el espacio del problema y sus representaciones en la solucin espacial como objetos. As la POO, permite que se describan los problemas en trminos del problema y no en trminos de la maquina donde la solucin funcionara, sin embargo aun existe una relacin con la computadora muy estrecha y se da en los fragmentos de cdigo que representan los estados, las operaciones, las funciones, las relaciones y el comportamiento de cada objeto. Alan Kay resumi cinco caractersticas bsicas Smalltalk, la primera lengua orientada al objeto y una de los idiomas sobre los cuales se basa Java. Estas caractersticas representan un acercamiento puro a la programacin orientada al objeto: 1. Todo es un objeto. Pensar en un objeto como una variable que; almacena datos, se le puedan solicitar estas variables, se le pueda pedir realizar operaciones, etc. En teora, puedes tomar cualquier componente conceptual en el problema que ests intentando solucionar (los perros, los edificios, los servicios, etc.) y representar como objeto en tu programa. 2. Un programa es un conjunto de objetos que se envan mensajes entre s. Para hacer una peticin a un objeto, envas un mensaje a ese objeto. Ms concreto, puedes pensar en un mensaje como una peticin de llamado a un mtodo que pertenezca a un objeto particular. 3. Cada objeto tiene su propia memoria compuesta de otros objetos. Vindolo de otra manera, creas una nueva clase de objeto haciendo un paquete que contiene objetos ya existentes. As, puedes construir un programa complejo involucrando objetos de complejidad simple. 4. Cada objeto tiene un tipo, es decir, cada objeto es una instancia de una clase, entendiendo que clase es sinnima de tipo. 5. Todos los objetos de un tipo o clase en particular pueden recibir los mismos mensajes. Un objeto del tipo crculo es tambin un objeto del tipo forma, *1+

Definicin de algunos conceptos claves en la programacin orientada a objetos Para comenzar necesitamos definir algunos conceptos claves en la programacin orientada a objetos, estos conceptos se deben manejar en los mismos trminos, los conceptos son: Atributo, Attribute: Es un dato que representa las propiedades en un objeto. Campo, Field: Es una instancia de una variable. Operacin: Operation: Lleva a cabo las responsabilidades de la clase. Mtodo, Method: Es la implementacin de una operacin. Mensaje, Message: Una solicitud de un objeto a otro. Invocacin o Ejecucin , Invocation o execution: Realizacin de una operacin en respuesta a un mensaje. Asociacin, Association: Una relacin entre dos clases, implica la precensia de instancias de las clases que tienen asociacin. Agregacin, Aggregation: Toda una parte de una asociacin. Composicin, Composition: Un tipo de agregacin donde las partes se destruyen cuando todo se destruye. Interface, Interface: Una conducta que debe ser seguida por un juego de objetos. Protocolo, Protocol: Lenguajes y reglas que se utilizaran por los mensajes en una red. Comportamiento, Behavior: Es en conjunto lo que hace un objeto, es el conjunto de las operaciones de un objeto.

Qu es un objeto? Como se dijo anteriormente, todo es un objeto, Si damos una mirada a nuestro alrededor encontraremos muchos ejemplos de objetos del mundo real: el perro, el escritorio, el televisor, la bicicleta. Los objetos del mundo real tienen dos caractersticas: Todos tienen un comportamiento (state and behavior). estado y un

Un objeto es una cosa, una entidad, un sujeto, un sustantivo, las caractersticas principales de los objetos son: Los atributos, son los estados internos del objeto. El comportamiento, se expresa en trminos de operaciones. La ejecucin de una operacin causa que se modifique un estado de un objeto o produce la ejecucin de operaciones en otros objetos. Las operaciones se conocen tambin mtodos o funciones miembro.

Los perros por ejemplo pueden tener estados como (el nombre, color, hijos, hambre) y comportamientos como (gruir, menear la cola, ladrar). Las bicicletas por ejemplo tienen estados como (engranaje actual, cade ncia actual del pedal, velocidad actual) y comportamientos como (cambiar engranaje, cambiar cadencia del pedal, aplicar frenos). Identificar los estados y los comportamientos para los objetos del mundo real es una muy buena manera de comenzar a pensar en trminos de la programacin orientada al objeto. Actividad: observar los objetos del mundo real que nos rodean y hacer dos preguntas: Cuales son los posibles estados que posee el objeto? y cules son los posibles comportamientos que este objeto puede realizar?. Con el Ejercicio se puede notar que algunos objetos, alternadamente, contienen otros objetos. Estas observaciones del mundo real se traducen al mundo de la programacin orientada al objeto.

Estructura y comportamiento de un Objeto Un objeto posee atributos privados y relaciones con otros objetos, su comportamiento se basa en establecer y realizar operaciones dinmicas con otros objetos y operaciones con s mismo. Un ejemplo: Un Taxi es un vehculo que puede tener los siguientes atributos: color, modelo, kilometraje, cilindraje, cantidad de pasajeros. Un taxi tiene relaciones estticas y directas con otros objetos como son Alejandro, el conductor del taxi y Mario, el dueo del taxi.

Idnticos o iguales? Existe una diferencia entre ser idnticos o iguales, cuando dos objetos tienen los mismos comportamientos, el mismo estado o valores en sus atributos y participan en las mismas relaciones se considera que los objetos son iguales. Dentro de la programacin cada objeto recibe una identidad nica, si dos objetos tiene la misma identidad los objetos se consideran idnticos.

Representacin grfica de un Objeto. Dentro del lenguaje UML un objeto se representa con una caja que contiene 3 secciones. Su nombre, atributos, operaciones (comportamiento). Las operaciones se escriben con parntesis y en ellos van los parmetros si fuese el caso. Ejemplo aCar, aDog, maquinaVenta

Un objeto en software. Los objetos de un software son conceptualmente similares a los objetos del mundo real: consisten tambin en relaciones de objetos que tienen estados y comportamientos. Un objeto almacena sus estados en campos (variables en algunos lenguajes de programacin) y expone su comportamiento con los mtodos (funciones en algunos lenguajes de programacin). Los mtodos funcionan internamente dentro de un

objeto y sirven como el mecanismo primario para la comunicacin de objeto-aobjeto, o medio para el cambio de los estados (variables). Los estados (variables) internos que son ocultados y son necesarios para realizar una interaccin de un mtodo dentro del objeto se conoce como encapsulacin de datos - un principio fundamental de la programacin orientada al objeto. Consideremos por ejemplo una bicicleta:

Una bicicleta modelada como un objeto de software.

Aun si tuvisemos control sobre los estados o variables (velocidad actual, cadencia actual del pedal, y engranaje actual) por medio de los mtodos para cambiar estos estados o variables (comportamiento), el objeto sigue contando con la posibilidad de restringir el uso de estos comportamientos dentro del mismo objeto. Por ejemplo, si la bicicleta tiene solamente 6 engranajes, un mtodo para cambiar los engranajes podra rechazar cualquier valor que sea menor de 1 o mayo que 6 implementando cdigo de validacin. Construir cdigo de software basado en objetos individuales proporciona un nmero de ventajas, en las que se incluyen:

Ventajas de construir programas en la programacin orientada a objetos

1. Modularidad: El cdigo fuente para un objeto se puede escribir y mantener independientemente del cdigo de fuente para otros objetos. Una vez que est creado, un objeto se pueda utilizar fcilmente alrededor y dentro del sistema. 2. Ocultar informacin: Al poder trabajar solamente con las definiciones de los mtodos de un objeto, se oculta del mundo exterior los detalles internos de su puesta en prctica. 3. Reutilizacin de cdigo: Si ya existe un objeto (quizs escrito por otro programador de software), se puede utilizar ese objeto en nuestros programas. 4. Conectividad y facilidad el eliminar errores: Si un objeto particular resulta ser problemtico, puedes simplemente quitarlo de tu aplicacin y colocar otro objeto como su reemplazo. Esto es anlogo a cambiar problemas mecnicos en el del mundo real. Si un perno se rompe, se cambia, no la mquina entera.

Clases Una clase como ya hemos estudiado se puede definir el modelo del cual se crean los objetos individuales. Esto significa que una clase encapsula un grupo comn de objetos que comparten los mismos atributos, operaciones, relaciones y estructura.

Qu es entonces una clase? En el mundo real, encontramos a menudo muchos objetos individuales de la misma clase. Puede haber millares de otras bicicletas en existencia, todas de la misma marca y modelo. Cada bicicleta fue construida en la misma mquina y basados en el mismo modelo y por lo tanto contienen los mismos componentes. En trminos orientados al objeto, decimos que esa bicicleta es un caso de la clase de los objetos conocidos como bicicletas. Una clase es el modelo del cual se crean los objetos individuales.

La siguiente clase de la bicicleta es ejemplo posible de una clase bicicleta:


class Bicicleta { int cadencia = 0; int velocidad = 0; int engranaje = 1; void cambiarCadencia(int newValue) { cadencia = newValue; } void cambiarEngranaje(int nuevoEngranaje) { engranaje = nuevoEngranaje; } void incrementarVelocidad(int incremento) { velocidad = velocidad + incremento; } void apliqueFrenos(int disminucion) { velocidad = velocidad - disminucion; } void imprimaEstados() { System.out.println("cadencia:"+ cadencia +" velocidad:"+ velocidad +" engranaje:"+ engranaje); } }

Aunque la sintaxis es nueva, lo que se quiere mostrar son los conceptos de objetos que se estn tratando, Los campos cadencia, la velocidad, y el engranaje representan el estado del objeto, y los mtodos (cambiarCadencia, cambiarEngranaje, incrementarVelocidad etc.) definen su interaccin con el mundo exterior. En el prrafo anterior debemos notar que la clase bicicleta no contiene un mtodo principal. Eso es porque no es una aplicacin completa; es justo el modelo para las bicicletas que se puede utilizar en una aplicacin. La responsabilidad de crear y de usar nuevos objetos de la bicicleta pertenece a una cierta clase en las aplicaciones a desarrollar. Aqu est una clase BicycleDemo que crea dos objetos separados de la bicicleta e invoca sus mtodos, esta clase si contiene un mtodo principal y es una aplicacin:

class BicycleDemo { public static void main(String[] args) {

// Creacin de 2 nuevos objetos tipo Bicicleta Bicicleta bike1 = new Bicicleta(); Bicicleta bike2 = new Bicicleta();

// Llamado a los mtodos de los objetos bike1. cambiarCadencia (50); bike1. incrementarVelocidad (10); bike1. cambiarEngranaje (2); bike1. imprimaEstados ();

bike2. cambiarCadencia (50); bike2. incrementarVelocidad (10); bike2. cambiarEngranaje (2); bike2. cambiarCadencia (40); bike2. incrementarVelocidad (10); bike2. cambiarEngranaje (3); bike2. imprimaEstados (); } }

La salida de las impresiones de la cadencia, la velocidad, y el engranaje en esta prueba para las dos bicicletas es: cadencia:50 velocidad:10 engranaje:2 cadencia:40 velocidad:20 engranaje:3

Qu es la herencia? Diversas clases de objetos tienen a menudo cierta cantidad de elementos en comn con otras clases del mismo tipo. Por ejemplo: Las Bicicletas de montaa, las Bicicletas de ruta, y las Bicicletas dobles, comparten las caractersticas de las bicicletas (velocidad actual, cadencia actual del pedal, engranaje actual). A cada uno de los tipos de bicicletas se les puede tambin definir las caractersticas adicionales que las hacen diferentes: las bicicletas dobles tienen dos asientos y dos

sistemas de volantes; las bicicletas de ruta tienen volantes especiales; algunas bicicletas de montaa tienen un anillo de cadena adicional, brindndoles un cociente ms bajo de engranaje. La programacin orientada al objeto permite que las clases hereden el estado y el comportamiento de la aplicacin general de otras clases. En este ejemplo, la bicicleta ahora se convierte en la superclase de MountainBike, de RoadBike, y de TandemBike. En el lenguaje de programacin de Java, cada clase se permite tener una superclase directa, y cada de una de las superclases tienen el potencial para un nmero ilimitado de subclases:

La sintaxis en java para crear una subclase es simple. En el principio de la declaracin de la clase, se usa la palabra clave extends, seguida del nombre de la clase a heredar:
class MountainBike extends Bicicleta { // Ac se colocaran los nuevos campos (estados) y nuevos mtodos (comportamientos) }

Con esto la clase MountainBike obtiene todos campos y mtodos que la clase bicicleta, permitiendo as que el cdigo de MountainBike se centre exclusivamente en las caractersticas que lo hacen nico. El cdigo de las subclases escritas se vuelve fcil de leer. Sin embargo, se debe tener cuidado al documentar correctamente los estados y los comportamientos definidos en cada superclase, porque ese cdigo no aparecer en el archivo de fuente de cada subclase y se debe conocer muy bien realmente cual es su uso.

Qu es una interfaz? Como se ha visto, los objetos definen su interaccin con el mundo exterior con los mtodos que exponen o se definen. Los mtodos forman el interfaz del objeto con el mundo exterior; por ejemplo, los botones en el frente de un televisor, son el interfaz entre el televidente y el cableado elctrico en el otro lado de la cubierta plstica. Se presiona el botn de encendido para la funcin de encender o apa gar y comenzar o detener las dems funciones. En su forma ms comn, un interfaz es un grupo de mtodos relacionados con los cuerpos de cdigo para cada mtodo vacos. El comportamiento de una bicicleta, si se hubiese especificado como una interfaz, pudo parecerse a lo siguiente:
interface Bicicleta { void cambiarCadencia (int newValue); void cambiarEngranaje(int newValue); void aumentarVeocidad(int incremento); void apliqueFrenos(int disminucion); }

Para poner este interfaz en ejecucin, el nombre de tu clase cambiara (por ejemplo a ACMEBicycle), y utilizaras la palabra clave implements en la declaracin de la clase.
class ACMEBicycle implements Bicicleta { // Recordemos la clase Bicicleta vista anteriormente }

Poner una interfaz en ejecucin permite que una clase llegue a ser ms formal sobre el comportamiento que promete proporcionar. Las interfaces forman un contrato entre la clase y el mundo exterior, y este contrato es realizado a fin de cumplir la estructura y verificado en tiempo compilacin. Si tu clase demanda poner un interfaz en ejecucin, todos los mtodos definidos por esa interfaz deben aparecer en el cdigo fuente antes de que la clase se compile con xito.

Qu es un paquete? Un paquete es un espacio que organiza un sistema de clases y de interfaces relacionadas. Puedes pensar conceptualmente en paquetes como diversas carpetas en tu

computadora. Puede ser que mantengas las pginas HTML en una carpeta, las imgenes en otra, y las escrituras o las aplicaciones en otra. Como el software escrito en Java se puede componer de centenares o de millares de clases individuales, tiene sentido mantener las cosas organizadas, poniendo clases e interfaces relacionadas en paquetes. La plataforma Java proporciona una biblioteca enorme de clases (un sistema de paquetes) conveniente para el uso en las aplicaciones. Se conoce esta biblioteca como el interfaz de programacin de aplicaciones, o API. Sus paquetes representan las tareas usadas comnmente en las aplicaciones. Por ejemplo, un objeto de la clase String contiene el estado y el comportamiento para las c adenas de caracteres; un objeto del tipo File permite que un programador cree, suprima, examine, compare, o modifique fcilmente un archivo en filesystem; un objeto de la clase Socket permite la creacin y el uso de los Socket de la red; varios objetos GUI se usan para poner los botones y los checkboxes y todo lo dems relacionado con las interfaces que usan grficos. Hay literalmente millares de clases a elegir. Esto permite que, el programador, se centre en el diseo de su aplicacin en particular, en lugar de preocuparse de la infraestructura requerida para solucionar el problema. La especificacin del API de la plataforma Java contiene el listado completo para todos los paquetes, interfaces, clases, campos, y mtodos provedos por la plataforma sobre la cual se quiera trabajar 6. Esta es la documentacin ms importante a mantener como referencia. [2]

REFERENCIAS

[1] Eckel, Bruce. Thinking in Java, fourth edition. P. 15 - 21 [2] Sun Microsystems, The Java Tutorials. En versin online: http://java.sun.com/docs/books/tutorial/ Tutorial de Java en SUN

También podría gustarte