Escolar Documentos
Profissional Documentos
Cultura Documentos
De la misma manera que entidades del mundo real como un vehculo, una casa, una computadora, una persona, un animal o una clula ocultan a travs de una interfaz su funcionamiento interno, los objetos en el Paradigma Orientada a Objetos ocultan su implementacin o su lgica interna a travs de una interfaz que evita que otros objetos conozcan sus detalles. A su vez, aquellos objetos que comparten caractersticas comunes se pueden agrupar en clases. Mediante el uso de una clase se pueden definir las caractersticas comunes que deben tener todos los objetos asociados con este tipo de clase. Se logra as un desarrollo ms natural e intuitivo de la programacin y con mayor facilidad para su comprensin.
Java es un lenguaje de programacin orientado a objetos. A diferencia de otros lenguajes estructurados que se basan en una serie de instrucciones imperativas, los lenguajes orientados a objetos hacen nfasis en los datos. Esto no quiere decir que Java no le comunique al procesador de una computadora qu instrucciones debe realizar, sino que antes de comunicar estas instrucciones prioriza la organizacin de los datos. Todos los programas desarrollados en Java utilizan objetos y a lo largo de la materia estudiaremos su sintaxis utilizada, tipos de datos, operadores, expresiones de control de flujo, definicin de clases, etc. Pero para lograr un buen manejo del lenguaje de programacin Java es necesario comprender el Paradigma Orientado a Objetos. Para ello, en las secciones posteriores analizaremos con mayor detalle muchos de los conceptos anteriormente mencionados.
Para resolver un problema: Una secuencia de instrucciones son comunicadas a la computadora. Para lograr esta comunicacin, se han desarrollado lenguajes de programacin. Un conjunto de instrucciones escritas en un lenguaje de programacin definen un programa o software. Un software de aplicacin es una coleccin de programas ideados para una aplicacin especfica. El hardware de una computadora puede entender instrucciones solamente a travs de un lenguaje binario de ceros y unos tambin conocido como lenguaje de bajo nivel. Es muy difcil para las personas comprender este tipo de lenguaje debido a que las instrucciones contienen secuencias de ceros y unos. Ante esta dificultad se han desarrollado lenguajes de alto nivel los cuales permiten el uso de expresiones literarias y expresiones algebraicas interpretadas por el ser humano que facilitan la comprensin y el entendimiento de la lgica involucrada en un programa. En el desarrollo de una solucin usando lenguajes de alto nivel se le da importancia al desarrollo de un algoritmo o modelo que permita obtener la solucin deseada. Un algoritmo es el conjunto de pasos necesarios para resolver un problema.
Para problemas complejos, los algoritmos y modelos de resolucin tienen una mayor dificultad para su desarrollo y da a lugar a distintas formas de encarar los modelos que dan solucin al problema. Es en este punto en donde surge el Paradigma Orientado a Objetos como un modelo para resolver distintos problemas.
Modelo de resolucin
Secuencia de instrucciones
Un programa representa la solucin a un problema; es un conjunto de instrucciones escritas en un lenguaje de programacin. Uno de los pasos ms desafiantes en el momento de resolver un problema es identificar el modelo de resolucin o los pasos necesarios para resolverlo. Una vez que hemos identificado el modelo de resolucin, es necesario convertirlo en instrucciones escritas en un lenguaje de programacin, para que de esta forma el programa acepte la entrada de datos y realice los pasos lgicos necesarios para generar la salida deseada.
Entrada
PROCESO
Salida
Se puede considerar al surgimiento de la Programacin Orientada a Objetos como la consecuencia de la evolucin natural de la programacin imperativa, partiendo de la programacin desestructurada, pasando por la programacin procedimental y modular, tambin conocida como programacin estructurada.
Paradigma desestructurado
Paradigma: Es un modelo o patrn en cualquier disciplina cientfica u otro contexto epistemolgico (Wikipedia, 2011).
Paradigma modular
Paradigma desestructurado
Cada lenguaje de programacin tiene un estilo particular de programacin. Viejos lenguajes de programacin como FORTRAN I, ALGOL y FLOWMATIC eran utilizados con el propsito de realizar clculos numricos complejos y tuvieron rpida difusin por su simplicidad y estructura parecida al lgebra. Estos lenguajes no siguen una metodologa definida y los programas consistan en una secuencia de instrucciones que operaban sobre datos globales o comunes a todo el programa.
PROGRAMA
Datos globales
Sin embargo, cuando la complejidad del escenario aumentaba, la dificultad para desarrollar cdigo que pudiera resolver el problema era alta. Estos lenguajes no seguan una metodologa que brindara soporte para dividir el problema en subrutinas ms pequeas y las secuencias de instrucciones contenan saltos y terminaciones del programa que no seguan ninguna estructura. Los saltos podan apuntar a cualquier punto del cdigo, ocasionando una gran dificultad para comprender el algoritmo de resolucin. Tambin haba una creciente repeticin de cdigo, ya que si una misma secuencia de instrucciones se necesitaba en distintas secciones del programa, era necesario copiarla en todas esas secciones. Debido a la falta de seguimiento de una metodologa estructurada, se dice que el estilo de programacin implementado era desestructurado.
PROGRAMA
Subrutina A
Subrutina B
Subrutina C
Datos globales
Este nuevo concepto de subprogramas evitaba una excesiva repeticin de cdigo y facilitaba el desarrollo de problemas de mayor complejidad. Este tipo de programacin es conocida como programacin procedimental o por procedimientos. Como lenguajes de programacin de este tipo se pueden nombrar a FORTRAN II, ALGOL 60 y COBOL. Con el agregado del paso de parmetros y funciones dentro de otras, se podan desarrollar resoluciones que tuvieran una mayor organizacin en su estructura y ser menos propensas a errores. Un programa pasaba de ser un conjunto de secuencias de instrucciones a un conjunto de secuencias de llamadas a procedimientos. Sin embargo, estos lenguajes compartan la informacin y datos entre las distintas subrutinas, por lo cual todava persista el problema de falta de encapsulamiento de datos y procedimientos.
Paradigma modular
La siguiente generacin de lenguajes como PASCAL y C hace uso de datos globales como as tambin de datos locales y mantiene el concepto de subprogramas o subrutinas. Estos tipos de lenguajes soportan una programacin modular que consiste en la agrupacin en mdulos de procedimientos comunes a varios programas.
PROGRAMA Mdulo 1
Subrutinas
Mdulo 2
Subrutinas
Mdulo 3
Subrutinas
Datos locales
Datos locales
Datos locales
Datos globales
En la figura podemos observar que el programa se divide en mdulos y a su vez cada mdulo puede contener varias subrutinas o submdulos. Cada uno de estos mdulos cuenta con datos locales pero tambin puede hacer uso de datos globales que son comunes a todos los mdulos. A este tipo de programacin se la conoce como programacin modular. A medida que el problema aumenta de complejidad, tambin lo hace el programa en cuestin debido al aumento de subprogramas y datos globales. En la programacin modular hay un mayor nfasis en los subprogramas y en desarrollar modelos que hagan un uso eficiente del flujo de informacin por medio de la organizacin y estructuracin de los datos. En este tipo de programacin los problemas son resueltos a travs de una descomposicin en subproblemas ms pequeos.
Con la programacin modular se pone de manifiesto lo que se denomina programacin estructurada. Algunos autores dan inicio a la programacin estructurada a partir de la programacin procedimental pero en la programacin modular se encuentra uno de los mayores exponentes de este tipo de programacin. Algunas de las caractersticas de la programacin estructurada son las siguientes: El cdigo del programa est dividido en mdulos o procedimientos que son ejecutados a medida que son requeridos. Los problemas se dividen de manera tal que las partes complejas son desarrolladas por mdulos independientes que a su vez pueden invocar a otros mdulos. Cada procedimiento cuenta con sus propios datos y algoritmos. Cada procedimiento procedimientos. es independiente de otros
Se pueden crear tipos de datos definidos por el usuario. Se cuenta con un amplio conjunto de estructuras de control.
Entre los aos 1970 y 1980 hubo un espacio vaco en cuanto al desarrollo de nuevos paradigmas de programacin. Sin embargo, hubo un creciente desarrollo de lenguajes de programacin pero la industria del software no lograba satisfacer sus requerimientos. Fue en este momento en el que surge lo que se denominara la crisis del software.
1 Marco C Bettoni, Kant And The Software Crisis, AI & Society, 1995
Entre los motivos causantes de estas estadsticas se pueden mencionar los siguientes factores: Altos costos y presupuestos excedidos a lo planeado. Software entregado fuera de tiempo. Falta de documentacin. Dificultad en la integracin del software con otros sistemas. Software poco escalable. Dificultad en el mantenimiento del software. Performance inestable del software. Software que no se cumplimenta con sus especificaciones. Software difcil de usar. Estos factores tienen una estrecha relacin con los pasos involucrados en la produccin del software, entre ellos la metodologa adoptada para modelar la situacin problemtica. La crisis del software se acentuaba entonces por la falta de metodologas de desarrollo de software adecuadas. Es durante esta etapa cuando surge el Paradigma Orientado a Objetos como una consecuencia de la crisis del software en donde los costos de desarrollo y mantenimiento de software se elevaron considerablemente pero no as las mejoras e innovaciones en este campo. La crisis del software trajo como consecuencia el motivo necesario para desarrollar nuevos principios y herramientas que permitan un mejor desarrollo y mantenimiento de software. El Paradigma Orientado a Objetos sugiere una nueva forma de pensar la solucin a un problema en comparacin a los paradigmas previamente existentes. La programacin estructurada presentaba ciertos limitantes a la hora de resolver soluciones a problemas de mayor complejidad. Los programadores siempre encuentran necesidades de crear proyectos ms grandes y ms complejos, y la utilizacin de la programacin estructurada no llegaba a satisfacer las demandas sin obtener como resultado resoluciones incontrolables.
A diferencia de la programacin estructurada en donde los requerimientos del programa se descomponen en procedimientos y funciones, en la Programacin Orientada a Objetos los datos son estructurados en objetos que pueden almacenar y manipular informacin. En otras palabras, la programacin estructurada hace nfasis en el conjunto de instrucciones que maneja el flujo de informacin y cmo se divide el problema en mdulos, mientras que la Programacin Orientada a Objetos se caracteriza por darle importancia a la relacin que existe entre la informacin y las acciones que se van a ejecutar con la misma.
El Paradigma Orientado a Objetos es una nueva manera de encarar los problemas de programacin. Esto no significa que se haya desestimado los paradigmas estructurados de programacin, y que todo el cdigo que est desarrollado fuera del POO sea intil, al contrario, lo que quiere decir es que se encontr una forma ms natural e intuitiva de implementar la programacin estructurada. El Paradigma Orientado a Objetos trabaja con unidades lgicas denominadas objetos que se interrelacionan entre s. Estos objetos contienen informacin y son los responsables de ejecutar las funciones necesarias para resolver los problemas.
1) Pregunta
Alumno
2) Respuesta
Profesor
La situacin que acabamos de describir es un escenario que no nos debera resultar extrao y que, simplemente, describe una situacin del mundo real. Qu entidades se pueden identificar del ejemplo anterior? Claramente tenemos dos entidades: o Alumno o Profesor Existe alguna interaccin entre las entidades? o El alumno realiza una consulta al profesor. Como bien dijimos con anterioridad, el Paradigma Orientado a Objetos hace modelos del mundo real mediante sus contrapartes en software a travs de la manipulacin de objetos y mensajes. Las entidades representan objetos y para el ejemplo anterior tanto el alumno como el profesor son objetos. A continuacin vamos a describir la interaccin entre el alumno y el profesor del ejemplo anterior pero con un enfoque orientado a objetos en donde las entidades cumplen el rol de objetos: El objeto alumno le enva un mensaje con la inquietud al objeto profesor. El objeto profesor recibe la consulta. El alumno no tiene que decirle al profesor cmo debe responder la pregunta ni debe hacerse cargo de la forma en que el profesor decide responder a la pregunta, es responsabilidad del objeto profesor resolver la inquietud como mejor considere. Al objeto alumno simplemente le basta con emitir un mensaje al objeto profesor. El profesor a travs de sus conocimientos responde al mensaje o evento de peticin del objeto alumno a travs del anlisis de la pregunta. El profesor es ahora responsable de responder la pregunta quien devuelve una respuesta al objeto alumno con el contenido de sta.
Consultar pregunta
Objeto Alumno
Objeto Profesor
Resultado consulta
Como podemos ver en la situacin anteriormente descripta, nos hemos encontrado con entidades u objetos (alumno y profesor) que interactan entre s a travs de mensajes.
Cada uno de estos objetos posee un conjunto de caractersticas o propiedades a las que llamaremos atributos y un conjunto de acciones o funciones a las que llamaremos mtodos.
Qu atributos y mtodos se pueden identificar de los objetos alumno y profesor? Objeto: Alumno Atributos: - Apellido - Nombre - Edad - Legajo Mtodos: - Caminar - Dormir - Leer - Estudiar
Objeto: Profesor Atributos: - Apellido - Nombre - Edad - Materia como profesor Mtodos: - Consultar pregunta - Evaluar
En el ejemplo anterior, para que el objeto alumno pudiera transmitir su mensaje (pregunta) al objeto profesor, fue necesario que el alumno invocara uno de los mtodos del objeto profesor; en este caso invoc al mtodo Consultar pregunta.
Tanto el objeto alumno como el objeto profesor poseen un conjunto de atributos y mtodos que los diferencian de otros objetos. As por ejemplo, un alumno se va diferenciar de otro alumno por tener valores distintos en sus propiedades o atributos (distinto nombre, apellido, edad, etc.); esto quiere decir que cada alumno de la facultad representa un objeto unvoco. Todos estos alumnos comparten la misma estructura de atributos, es decir, todos los alumnos van a tener un apellido, nombre, edad, etc. A estos patrones los llamaremos clases. De esta forma, los objetos son instancias o casos concretos de las clases, que no son ms que una definicin de los atributos y mtodos comunes a todos los objetos de un cierto tipo. A partir de la definicin de una clase podremos generar nuevos objetos especificando los valores que queramos para los atributos definidos en la clase. La orientacin a objetos sugiere una forma natural de encarar los problemas abstrayendo nuestra forma de pensar en trminos de objetos que interactan entre s. Si hacemos nfasis en esta abstraccin, podemos notar que todo lo que nos rodea son objetos: personas, vehculos, animales, edificios, computadoras, accesorios, entre otros.
Vamos a describir otro escenario que nos permita analizar la interaccin entre entidades y de esta forma abstraernos para pensar en trminos del paradigma orientado a objetos.
Este escenario se desarrolla en un restaurante en donde los clientes son atendidos para tomarles la orden de lo que desean comer. Supongamos que un cliente realiza un pedido a un mozo, quien toma la orden. Una vez que el mozo termina de confeccionarla, la enva al cocinero del restaurante, quien toma el pedido y cocina la comida solicitada. Una vez que el cocinero termina la comida, la misma es retirada por el mozo la comida, quien se la entrega al cliente que la haba solicitado.
1) Tomar pedido
Cliente
4) Pedido
2) Preparar comida
Mozo
3) Comida preparada
Cocinero
Al igual que el ejemplo anterior, este escenario no se aleja a la realidad cotidiana. Qu entidades se pueden identificar del ejemplo? A diferencia del ejemplo anterior, en donde habamos identificado dos entidades, en el presente ejemplo podemos definir tres entidades: o o o Cliente Mozo Cocinero
Existe alguna interaccin entre las entidades? o Hay una interaccin entre el cliente y el mozo en el momento que el primero realiza un pedido y el segundo toma dicho pedido. Como resultado de esta interaccin, el cliente espera que el mozo le entregue la comida, quien efectivamente lo hace una vez que la misma est lista. Tambin hay una interaccin entre el mozo y el cocinero. El primero le entrega el pedido al segundo para que prepare la comida solicitada y una vez que est lista la misma es retirada por el mozo.
Cada entidad identificada representa un objeto. Describamos el mismo escenario pero desde el Paradigma Orientado a Objetos: Un objeto cliente le enva un mensaje al objeto mozo para que tome un pedido. El mozo recibe este mensaje y emite un nuevo mensaje al objeto cocinero quien tiene la responsabilidad de preparar la comida en base al mensaje recibido. El cliente no necesita conocer los detalles sobre cmo el mozo debe hacer su trabajo para que le entregue el pedido, eso es responsabilidad del mozo; de la misma forma, el mozo no necesita conocer los detalles sobre cmo el cocinero prepara la comida, eso es responsabilidad del cocinero. Una vez que el objeto cocinero termina la preparacin, la misma es retirada por el mozo. A su vez, ste entrega el pedido al cliente como respuesta al mensaje recibido en un principio (pedido del cliente).
Objeto Cliente
1) Tomar pedido
Objeto Mozo
2) Preparar comida
Objeto Cocinero
Qu propiedades o atributos se pueden identificar de las entidades u objetos? Objeto: Cliente Atributos: - Apellido - Nombre - Nmero de cliente
Objeto: Mozo Atributos: - Apellido - Nombre - Nmero de mozo Objeto: Cocinero Atributos: - Apellido - Nombre - Nmero de cocinero
Qu acciones o mtodos se pueden identificar de las entidades u objetos? Objeto: Cliente Mtodos: - Pedir orden - Pagar Objeto: Mozo Mtodos: - Tomar pedido Objeto: Cocinero Mtodos: - Preparar comida
Seguramente se puede armar una extensa lista de atributos y mtodos para estos objetos, pero en el momento del planteo del modelo es bueno definir solamente aquellos atributos y mtodos que son referentes al problema. En el ejemplo anterior, para que el objeto cliente pudiera transmitir su mensaje (pedido) al objeto mozo, fue necesario que el cliente invocara a uno de los mtodos del objeto mozo; en este caso, el cliente invoc al mtodo Tomar pedido (del objeto mozo). De la misma forma, para que el objeto mozo pudiera transmitir su mensaje al objeto cocinero, fue necesario que el mozo invocara uno de los mtodos del objeto cocinero (Preparar comida).
Por medio de los ejemplos anteriores hemos mencionado varios conceptos que hacen referencia al Paradigma Orientado a Objetos: Objeto Atributo Mtodo Clase Mensaje
Estos conceptos han sido mencionados en grandes rasgos y los mismos sern explicados con mayor detalle en las siguientes secciones. Lo que se intent poner en evidencia por medio de los ejemplos es que en toda situacin o escenario de la vida cotidiana se puede realizar una abstraccin y pensar en trminos de objetos. Una entidad es representada por un objeto y de la misma forma en que varias entidades pueden interactuar entre s, en el Paradigma Orientado a Objetos varios objetos tambin pueden interactuar entre s.
Un programa orientado a objetos consiste de uno o ms objetos que interactan entre s para resolver un problema. Un objeto contiene informacin referente a su estado y operaciones y a su vez los mismos pueden interactuar entre s a travs del envo de mensajes. Estos mensajes se envan por medio de llamadas a operaciones o funciones denominadas mtodos. Todo objeto es una instancia concreta de una clase que determina qu atributos maneja y qu peticiones o mensajes puede comprender. El protocolo de una clase es el conjunto de mensajes que una instancia de una clase puede comprender.
A continuacin veremos con mayor detalle los conceptos de objeto, mensaje y clase.
A travs del uso de objetos podemos modelar entidades del mundo real (alumno, docente, auto, casa, perro, etc.). Un objeto est conformado por: Atributos que definen su estado. Mtodos que definen su comportamiento.
OBJETO
compuesto por
Atributos
definen el
Mtodos
definen el
Estado
Comportamiento
Los atributos son las caractersticas o propiedades que hacen a la definicin del objeto. Decimos que un objeto manipula datos o informacin por medio de sus atributos.
Por ejemplo, un objeto que modelase un vehculo tendra un estado definido por los siguientes atributos: Modelo Color Velocidad actual
Se pueden mencionar muchos atributos ms, pero a modo de ejemplo solamente mencionaremos estos tres. Los valores de estos atributos van a diferenciar a distintos objetos de tipo vehculo. En la siguiente figura quedan representados tres vehculos distintos:
Modelo: AA
Vehculo AA
Modelo: BB
Vehculo BB
Modelo: CC
Vehculo CC
Un objeto no solamente tiene atributos, tambin tiene un comportamiento definido por un conjunto de acciones que puede realizar a las que llamaremos mtodos.
Para un objeto vehculo, podemos definir los siguientes mtodos: Acelerar Frenar Desacelerar Girar
La ejecucin de alguno de estos mtodos puede provocar un cambio en alguno de los valores de sus atributos. Si alguno de los valores de los atributos ha cambiado entonces se dice que el estado del objeto ha variado. Pensemos en un objeto vehculo con un estado inicial en el cual la velocidad actual es de 50 km/h. Ahora vamos a suponer que se ejecuta la accin frenar que tiene como consecuencia el frenado total del vehculo. El estado del objeto est definido por los valores de sus atributos. En este caso el valor del atributo velocidad actual pas de 50 km/h a 0 km/h mientras que el resto de los valores de los atributos se mantuvieron iguales.
Modelo: AA
Vehculo AA
Estado inicial
Modelo: AA
Vehculo AA
Estado posterior
En el ejemplo precedente pudimos observar que al aplicar un mtodo del objeto (frenar) tuvo como consecuencia que uno de los valores de sus atributos (velocidad actual) haya variado dando como resultado un nuevo estado del objeto. La composicin de un objeto en atributos y mtodos genera una estructura parecida a la de la siguiente figura:
Mtodo B
Mtodo A
Atributos
Mtodo C
Mtodo D
OBJETO
En la figura se puede observar que los atributos del objeto se encuentran en el centro y los mtodos rodean al mismo. Ms adelante veremos que esta estructura permite proteger los atributos del objeto contra agentes externos (otros objetos) ante posibles alteraciones indeseadas sobre los valores de los atributos. Esta propiedad de empaquetamiento o proteccin contra otros objetos se denomina encapsulamiento y la analizaremos ms adelante con mayor profundidad.
1.3.2- Mensaje
Otra caracterstica del Paradigma Orientado a Objetos es que los objetos pueden hacer peticiones entre ellos a travs de mensajes. Un programa puede estar compuesto por muchos objetos, ya que tener uno solo no sera muy til. Pero de nada servira que estos objetos estn incomunicados entre ellos y no puedan trabajar en conjunto. Para ello, la Programacin Orientada a Objetos permite la interaccin entre objetos a travs de mensajes y de esta forma se pueden lograr programas que soporten mayor funcionalidad y complejidad. Pensemos por un momento en el objeto vehculo definido anteriormente. Este objeto solamente con sus atributos que definen un estado particular no es de gran utilidad para el desarrollo de algn tipo de actividad, es decir, este objeto es til en cuanto otro objeto, por ejemplo una persona, puede hacer uso de l a travs de las funciones definidas o mtodos soportados por el objeto (acelerar, frenar, desacelerar, girar).
Un evento o accin es iniciado cuando un objeto transmite un mensaje a otro objeto responsable de la accin. El mensaje que se transmite contiene la peticin de una accin y tambin contiene informacin adicional (argumentos o parmetros) necesarios para la ejecucin del evento. En otras palabras: cuando un objeto A desea que otro objeto B ejecute alguna de sus funciones o mtodos de B, entonces el objeto A manda un mensaje al objeto B. Decimos que el objeto que recibe el mensaje es el receptor y si acepta el mensaje entonces tambin acepta la responsabilidad de realizar la accin o evento solicitado. Para ello el objeto receptor ejecutar alguno de sus mtodos para satisfacer la solicitud.
Mensaje
Emisor Resultado
Receptor
A su vez, el objeto receptor tambin necesita de cierta informacin para ejecutar la funcin o mtodo solicitado. Esta informacin se la enva el objeto emisor en el mensaje a travs de parmetros. Vamos a suponer que el estado actual de nuestro objeto vehculo es el siguiente: Modelo: AA Color: Azul Velocidad actual: 40 km/h
Deseamos reducir la velocidad del vehculo en 10 km/h (a la velocidad actual se le debe reducir 10km/h). Para ello, un objeto conductor le enva el mensaje desacelerar al objeto vehculo. El objeto vehculo acepta la responsabilidad de ejecutar el mtodo desacelerar pero necesita informacin que le indique cunto debe desacelerar. Es decir, el vehculo puede reducir su velocidad actual en 10 km/h, 20 km/h 30 km/h por decir algunos ejemplos, pero esta medida se la debe indicar el objeto emisor, en este caso el conductor. Debido a esto, el conductor le enva en su mensaje al objeto vehculo un parmetro que contiene el valor 10 km/h. Como resultado de esta interaccin, el valor del atributo velocidad actual ha sido reducido a 30 km/h.
Conductor
Vehculo
Receptor
De esta interaccin entre el objeto conductor y el objeto vehculo detectamos los siguientes componentes de un mensaje: El objeto receptor a quien est dirigido el mensaje. (Vehculo) El mtodo que se desea ejecutar. (Desacelerar) El/los parmetro/s que contiene/n la informacin necesaria para ejecutar el mtodo. (10 km/h)
Hay algunos casos en donde no se enva ningn parmetro en el mensaje. Por ejemplo, si se ejecutara el mtodo frenar que tiene como efecto la detencin total del vehculo, el objeto vehculo no necesita de ninguna informacin adicional para ejecutar este mtodo. Simplemente sabe que debe reducir la velocidad actual a 0 km/h y para ello no necesita de ningn parmetro. De la presente estructura de comunicacin entre objetos debemos comprender: - El objeto emisor que enva una peticin necesita conocer los mtodos del objeto receptor. - El objeto emisor no necesita conocer los detalles por los cuales el objeto receptor ejecuta la operacin solicitada. Eso es responsabilidad del objeto receptor. - La interpretacin del mensaje est determinada por el objeto receptor. De esta forma distintos objetos receptores pueden interpretar un mismo mensaje de distinta forma. Por ejemplo, si enviamos el mensaje acelerar, la interpretacin de este mensaje puede variar si el objeto receptor es un auto, una moto o una bicicleta. Todos estos objetos sabrn qu deben hacer ante este mensaje pero la forma en que lo harn ser distinta para cada uno de estos objetos. - La peticin de un objeto emisor hacia otro objeto receptor contiene el tipo de informacin a devolver pero el receptor tiene la libertad de implementar el mtodo que resuelva la peticin como crea conveniente. - Esta estructura de comunicacin permite trabajar con mayor independencia entre los objetos. - Los objetos tienen un conjunto de responsabilidades que cumplir ante las distintas solicitudes que pueden recibir de otros objetos. - El protocolo de un objeto representa todas las posibilidades de comunicacin que pueden realizarse con el objeto (mtodos). - La ejecucin de un mtodo puede cambiar el estado del objeto. Es decir, los valores de los atributos que definen el objeto pueden cambiar al ejecutar alguno de sus mtodos.
1.3.3- Clase
Pensemos por un instante en las caractersticas que tienen varios vehculos. Qu caractersticas o propiedades tienen en comn un auto, una moto y una bicicleta? Podemos pensar que hay muchas propiedades en comn que comparten y algunas de ellas pueden ser las siguientes: Tipo de vehculo Modelo Color Velocidad actual
No solamente comparten propiedades, tambin comparten un conjunto de acciones o funciones que tienen en comn, como por ejemplo: Acelerar Frenar Desacelerar Girar
Podemos pensar en establecer una estructura que encapsule y defina estas propiedades y comportamientos que todos los vehculos tienen en comn.
Esta estructura se denomina clase y podemos definirla como un modelo o prototipo que define los atributos y mtodos comunes a todos los objetos de ciertas caractersticas similares. Una clase es un modelo que define una estructura compuesta por atributos y mtodos.
Vehculo Atributos Tipo de vehculo Modelo Color Velocidad actual Mtodos Acelerar Frenar Desacelerar Girar
Un auto, una moto y una bicicleta tienen propiedades (atributos) comunes pero con valores diferentes, es decir, todos estos vehculos tienen un atributo color pero el valor del mismo puede ser distinto para cada uno de estos objetos.
Auto
Bicicleta
Moto
Cada uno de estos objetos es una instancia de la clase Vehculo. Todo objeto es una instancia de una clase. Un auto es un objeto o una instancia de la clase Vehculo. Un conductor en particular es un objeto o una instancia de la clase Persona. Los mtodos que un objeto puede invocar estn determinados por la clase a la que pertenece. Si tenemos varios objetos y todos ellos pertenecen a la misma clase, entonces todos ellos respondern de la misma manera ante mensajes similares. Una clase representa un tipo de dato y describe las caractersticas comunes a un conjunto de objetos (instancias de la clase). Por ejemplo, un perro es un animal y por ello decimos que un perro es un ejemplo de un animal, es decir, es una instancia de la clase Animal. Puede haber muchas instancias de la clase Vehculo que tienen valores distintos en sus atributos y decimos que cada una de estas instancias es un objeto.
Cuando se instancia una clase, decimos que estamos creando un objeto de un tipo en particular, es decir, de un tipo de clase. Despus de haber creado la clase Vehculo podemos crear cualquier nmero de objetos de tipo vehculo a partir de la definicin de la clase. Vamos a describir otro ejemplo que nos ayude a interpretar estos conceptos. Puede identificar algn conjunto de propiedades comunes a todas las personas? Podemos definir las siguientes propiedades: Nombre Apellido Edad Peso Altura
Estas caractersticas sern nuestros atributos y todas las personas tendrn valores distintos para cada uno de estos atributos. Podemos tomar estos atributos y definir una estructura que contenga a estos atributos. Esta estructura representa nuestra clase Persona.
A partir de la definicin de esta clase podemos generar nuevas instancias de tipo Persona:
Juan
Jorge
Laura
Cada uno de estos objetos o instancias tiene valores definidos para los atributos de la clase y representa a una persona en particular.
Una clase no solamente define los atributos que todas las instancias de su tipo tendrn en comn, sino que tambin define qu comportamiento tendrn en comn, es decir qu acciones o mtodos podrn ejecutar las instancias de esta clase.
En nuestra clase Persona podemos definir los siguientes mtodos: Caminar Correr Leer
Dormir Comer
Persona Atributos Nombre Apellido Edad Peso Altura Mtodos Caminar Correr Leer Dormir Comer
Luego de analizar los ejemplos, podemos asociar el concepto de clase como una abstraccin que hacemos de nuestra experiencia sensible. Es una caracterstica natural del ser humano tratar de agrupar o clasificar seres o entidades (objetos) que comparten caractersticas similares en grupos (clases). Pensemos por un momento en la siguiente figura que muestra una clasificacin resumida de los animales:
ANIMALES
Vertebrados
Invertebrados
Peces
Anfibios
Reptiles
Aves
Mamferos
Especialistas de las Ciencias Naturales han decidido realizar esta clasificacin en base a una agrupacin de animales que comparten caractersticas comunes. Desde un enfoque orientado a objetos cada una de estas agrupaciones es una clase y cada una de ellas tiene cualidades o caractersticas que las diferencian de las otras: Vertebrados: Tienen columna vertebral. El sexo est diferenciado.
Invertebrados: No tienen columna vertebral o esqueleto interno articulado. La mayora tienen una proteccin externa como si fuera una armadura.
Teniendo en cuenta las propiedades anteriormente descriptas, si tuviramos que definir las clases Vertebrados e Invertebrados podran figurar de la siguiente forma:
Vertebrados Atributos Columna vertebral Sexo Invertebrados Atributos Carencia columna vertebral Proteccin externa
Como vemos, el ser humano tiene la tendencia a clasificar los objetos del mundo que lo rodean en clases. Tanto los vertebrados y los invertebrados tienen subgrupos. Para el caso de la clase Vertebrados, en el rbol jerrquico figuran varias subclases: Peces, Anfibios, Reptiles, Aves, Mamferos. Todas estas subclases tienen caractersticas comunes y por ello las identificamos a todas ellas como vertebrados, es decir todas ellas comparten las caractersticas que poseen los vertebrados y decimos que estas subclases heredan las caractersticas o atributos de la clase Vertebrados. Este concepto de Herencia es un concepto fundamental del Paradigma Orientado a Objetos y lo explicaremos con mayor profundidad en la Lectura 2.
A su vez, cada una de estas subclases tiene caractersticas particulares que la distinguen y diferencian de otras clases, por ello distinguimos un pez de un mamfero por ejemplo. La clase Mamferos se diferencia del resto de las subclases de Vertebrados en que por ejemplo, su cuerpo est cubierto de pelaje y sus extremidades tienen forma de patas, y comparte ciertos atributos con el resto de los Vertebrados (columna vertebral por ejemplo). Como podemos ver, la clase Mamferos hereda de las clases superiores ciertas cualidades, por ejemplo: columna vertebral (de la clase Vertebrados) y presencia pluricelular (de la clase Animal). Tambin se puede ver que las clases superiores tienen definiciones ms generales que las inferiores, pero a medida que descendemos por el rbol nos encontramos con clases que van agregando ms cualidades y como resultado tienen una definicin ms precisa. Otro concepto importante del Paradigma Orientado a Objetos es el de clase abstracta: se define como aquella clase que es utilizada para derivar a partir de ella otras clases, pero no podemos crear objetos a partir de dicha clase, es decir, no hay instancias directas de la misma. Por ejemplo, podemos ver muchos tipos de animales en la naturaleza, pero en realidad estamos hablando de tipos de animales, es decir, cada vez que analizamos un animal no lo definimos solamente diciendo que es un animal y no hay una forma ms especfica de definirlo, sino que lo definimos haciendo mencin a algn animal especfico: un perro, un gato, un pato, una tortuga, etc. Un objeto animal no existe como tal, no encontramos objetos de tipo animal que sean solamente animales y no sean algn tipo ms especfico de animal. En este caso, la clase Animal es abstracta y a partir de ella se derivan clases concretas que s pueden ser instanciadas (Perro, Gato, Pato, Tortuga, etc.). Generalmente las clases que se hallan en la parte superior de la jerarqua son clases abstractas. Son creadas para que contengan los atributos y mtodos comunes a varias clases. Cumplen el rol de clases bases para que a partir de ellas se definan y puedan derivar las subclases con definiciones ms especficas.
Bibliografa Lectura 1
Booch Grady, (2007), Object-Oriented Analysis and Design with Applications (3a ed.), EE.UU, Editorial Addison-Wesley. Rumbaugh James, (1999), Modelado y Diseo Orientado a Objetos, Espaa, Editorial Librisite. Bruce Eckel, (2006), Thinking in Java (4a ed.), EE.UU, Editorial Prentice Hall. Marco C. Bettoni, (1995), Kant and the software crisis, AI & Society. Wikipedia, (2011), Paradigma, Recuperado el 07/05/2011 de http://es.wikipedia.org/wiki/Paradigma Real Academia Espaola, (2011), Paradigma, Recuperado el 07/05/2011 de http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=paradigm a