Você está na página 1de 37

Mdulo 1 Introduccin al Paradigma Orientado a Objetos

Programacin Orientada a Objetos Ing. de las Heras, Sebastin

1.1- Conceptos de Orientacin a Objetos


1.1.1- Qu es el Paradigma Orientado a Objetos?
El POO (Paradigma Orientado a Objetos) representa un modelo de desarrollo de resolucin de problemas que se acerca al modelo utilizado por las personas sobre cmo piensan y ven el mundo real. En los viejos modelos de programacin, el programador deba resolver un problema a travs de la identificacin de un conjunto de tareas que deban ser ejecutadas en un orden para resolver el problema. La programacin consista en identificar una secuencia de instrucciones para lograr determinadas tareas y de esta forma lograr el objetivo. Este esquema de desarrollo implicaba un gran desafo a medida que aumentaba la complejidad de los problemas. Esta concepcin sobre cmo resolver un problema cambia desde el Paradigma Orientado a Objetos, ya que en lugar de tareas nos encontramos con objetos (que representan entidades) que tienen comportamiento e informacin y adems pueden interactuar entre ellos. Desde este punto de vista, la programacin (o resolucin de problemas) consiste en disear un conjunto de objetos que modelen el problema en cuestin. Estos objetos pueden representar entidades reales o abstractas del problema. El Paradigma Orientado a Objetos hace modelos de los objetos del mundo real mediante sus contrapartes en software (Deitel, 1995, p. 595).

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 2

Qu lugar ocupa Java en estos conceptos?

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 3

1.1.2- Origen del Paradigma Orientado a Objetos


Origen de los Paradigmas de resolucin
El ser humano, a lo largo de la historia, tuvo que lidiar con obstculos y problemas y en su evolucin ha desarrollado sistemas que le han permitido resolver estos problemas con mayor facilidad. Es as como ha llegado a desarrollar sistemas informticos para resolver problemas en forma rpida y precisa.

Cmo se resuelve un problema por medio de una computadora?

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 4

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

Paradigma Orientado a Objetos

Expresiones literarias Lenguaje de programacin Lenguaje de alto nivel Expresiones algebraicas

0100100 1100100 1001010 0010010 1010100

Secuencia de instrucciones

Lenguaje de bajo nivel

Programacin Orientada a Objetos de las Heras, Sebastin | 5

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

Cmo fueron evolucionando los paradigmas de programacin?

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 por procedimientos

Paradigma: Es un modelo o patrn en cualquier disciplina cientfica u otro contexto epistemolgico (Wikipedia, 2011).
Paradigma modular

Ejemplo o ejemplar (RAE, 2011).

Paradigma Orientado a Objetos

Programacin Orientada a Objetos de las Heras, Sebastin | 6

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 7

Paradigma por procedimientos


Lenguajes posteriores introdujeron el concepto de subprogramas por medio de funciones, procedimientos o subrutinas. Se empezaron a extraer las secuencias y se les asignaba un nombre para identificar al conjunto, para que por medio de una llamada se pueda obtener el flujo de secuencias necesarias referentes al conjunto.

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 8

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 9

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 10

Complejidad del Software


La industria del software tiene que lidiar con muchas variables durante el desarrollo de software. En la dcada del 80, hubo un importante avance en el desarrollo de hardware, pero los avances en materia de software no se daban en la misma medida. La disponibilidad de hardware con mayores prestaciones implicaba tambin que los requerimientos fueran demandados con mayores niveles de exigencias, pero el software producido no cumpla con los niveles de calidad pretendidos. Esto desencaden la denominada crisis del software, caracterizada por la inhabilidad de desarrollar proyectos de software que cumplieran con los requerimientos planteados. Un estudio de mercado para la poca desarrollado por Sage y Palmer haba arrojado los siguientes resultados1: 1) Solamente el 2% del software producido es utilizado en produccin despus de su entrega. 2) El 3% del software producido es utilizado en produccin despus de aplicarle modificaciones. 3) El 19% requiere modificaciones crticas. 4) El 47% del software producido deja de ser utilizado despus de un corto periodo de actividad. 5) El 29% del software producido es incorrecto.

1 Marco C Bettoni, Kant And The Software Crisis, AI & Society, 1995

Programacin Orientada a Objetos de las Heras, Sebastin | 11

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 12

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 13

1.2- Identificacin de los elementos de un modelo OO


Si nos detenemos a pensar sobre cualquier problema que se nos puede presentar en el mundo real podemos ver que en estos escenarios hay entidades que interactan entre s. Imaginemos la siguiente situacin: Usted se encuentra cursando la materia Programacin Orientada a Objetos y en este momento est leyendo el presente material de estudio. Esta materia cuenta con un docente, quien adems de preparar el material de estudio, tiene la responsabilidad de aclarar cualquier duda que los alumnos puedan tener referente a la materia. Vamos a suponer que usted tiene una pregunta sobre los contenidos de la materia y para ello presenta dicha inquietud al profesor. Lo que Usted desea saber es: Qu caractersticas tiene el Paradigma Orientado a Objetos? El profesor, ante esta solicitud, responde la pregunta elaborada por el alumno.

1) Pregunta

Alumno

2) Respuesta

Profesor

Programacin Orientada a Objetos de las Heras, Sebastin | 14

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 15

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 16

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 17

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 18

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

4) Pedido (Resultado de Tomar pedido)

Objeto Mozo
2) Preparar comida

3) Comida (Resultado de Preparar comida)

Objeto Cocinero

Qu propiedades o atributos se pueden identificar de las entidades u objetos? Objeto: Cliente Atributos: - Apellido - Nombre - Nmero de cliente

Programacin Orientada a Objetos de las Heras, Sebastin | 19

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).

Programacin Orientada a Objetos de las Heras, Sebastin | 20

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 21

1.3- Clase, objeto, atributos, mtodos


1.3.1- Objeto
Un objeto es una unidad lgica compuesta por un conjunto de atributos (o propiedades) y mtodos (o funciones) que se relacionan entre s.

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

Programacin Orientada a Objetos de las Heras, Sebastin | 22

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

Color: Azul Velocidad actual: 50 km/h

Modelo: BB

Vehculo BB

Color: Verde Velocidad actual: 30 km/h

Modelo: CC

Vehculo CC

Color: Amarillo Velocidad actual: 30 km/h

Programacin Orientada a Objetos de las Heras, Sebastin | 23

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

Color: Azul Velocidad actual: 50 km/h

Estado inicial

Se ejecuta el mtodo frenar

Modelo: AA

Vehculo AA

Color: Azul Velocidad actual: 0 km/h

Estado posterior

Programacin Orientada a Objetos de las Heras, Sebastin | 24

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 25

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).

En un programa orientado a objetos, la comunicacin entre objetos se da por medio de mensajes.

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

Programacin Orientada a Objetos de las Heras, Sebastin | 26

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.

Desacelerar (10 km/h)

Conductor

Vehculo

Emisor Resultado (velocidad actual: 30 km/h)

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)

Programacin Orientada a Objetos de las Heras, Sebastin | 27

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 28

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 29

A partir del ejemplo descripto podemos definir la clase Vehculo.

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.

Tipo de vehculo: Automvil

Auto

Modelo: AA Color: Azul Velocidad actual: 50 km/h

Tipo de vehculo: Bicicleta

Bicicleta

Modelo: BB Color: Rojo Velocidad actual: 15 km/h

Tipo de vehculo: Moto

Moto

Modelo: MM Color: Verde Velocidad actual: 30 km/h

Programacin Orientada a Objetos de las Heras, Sebastin | 30

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.

Cules son las diferencias entre una clase y un objeto?


El siguiente cuadro describe las diferencias que hay entre una clase y un objeto: Diferencias entre clase y objeto Clase Es un tipo de dato. Su estructura es utilizada para definir nuevas instancias de objetos. Es un prototipo o modelo. No ocupa lugar en memoria. Objeto Es una instancia de una clase. Le da vida a una clase. Es un contenedor que almacena valores para los atributos de la clase a la que pertenece. Ocupa lugar en memoria.

Programacin Orientada a Objetos de las Heras, Sebastin | 31

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.

Persona Atributos Nombre Apellido Edad Peso Altura

Programacin Orientada a Objetos de las Heras, Sebastin | 32

A partir de la definicin de esta clase podemos generar nuevas instancias de tipo Persona:

Nombre: Juan Apellido: Barrios

Juan

Edad: 18 Peso: 80 k Altura: 1,76 m

Nombre: Jorge Apellido: Montero

Jorge

Edad: 24 Peso: 88 k Altura: 1,82 m

Nombre: Laura Apellido: Ceballos

Laura

Edad: 21 Peso: 62 k Altura: 1,64 m

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

Programacin Orientada a Objetos de las Heras, Sebastin | 33

Dormir Comer

De esta forma nuestra clase Persona queda definida de la siguiente manera:

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

Programacin Orientada a Objetos de las Heras, Sebastin | 34

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 35

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.

Programacin Orientada a Objetos de las Heras, Sebastin | 36

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

Programacin Orientada a Objetos de las Heras, Sebastin | 37

Você também pode gostar