Está en la página 1de 46

Core Java

Cdigo del Curso: CY420 Versin: 1.0

Gua del Estudiante

Apndice: Principios de Programacin Orientada a Objetos

IBM IT Education Services Worldwide Certified Material

Informacin Sobre la Publicacin Esta publicacin ha sido producida usando Microsoft Word 2000 y Microsoft PowerPoint 2000 para Windows. Marcas Registradas IBM es una marca registrada por International Business Machines Corporation. Otras compaas, productos, y nombre de servicios pueden ser marcas registradas o marcas de servicios de otros. Trademarks of International Business Machines Corporation DB2 Lotus Script Informix Net.data

Marcas Registradas de otras Compaas Windows, Microsoft Visual Studio Sybase Edicin Agosto 2006 La informacin contenida en este documento no ha sido sometida a ninguna prueba formal de IBM y es distribuida bsicamente como es" sin ninguna garanta ya sea expresa o implcita. El uso de esta informacin o la implementacin de cualquiera de estas tcnicas es responsabilidad del comprador y depender de la habilidad de ste para su evaluacin e integracin en el ambiente operacional del comprador. A pesar de que cada tema ha sido revisado por IBM para su exactitud en una situacin especfica, no hay garanta de que obtener el mismo resultado o uno similar a ste en otra situacin. Los compradores que intenten adaptar estas tcnicas a sus propios ambientes lo hacen bajo su propio riesgo. Copyright International Business Machines Corporation, 2006. All rights reserved. Este documento no puede ser reproducido en su totalidad o en parte sin el previo permiso escrito de IBM. Instrucciones Especiales para la Impresin de este Curso: No elimine pginas en blanco que puedan aparecer al final de cada unidad entre unidades. Estas pginas fueron insertadas intencionalmente. Microsoft Corporation Sybase Inc.

Gua del Estudiante

Core Java

Contenido
Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos ............... 1
Objetivos de Aprendizaje 1. Introduccin 2. Paradigmas de Programacin 3. Abstraccin 4. Encapsulamiento 5. Modularidad 6. Jerarqua 7. Polimorfismo 8. Ventajas del Desarrollo del Sistema Orientado a Objeto 9. Beneficios de la Tecnologa Orientada a Objetos Resumen Objetivos de Aprendizaje 1. Introduccin 2. Clases 3. Objeto 4. Mtodos 5. Mensajes 6. Clases Abstractas 7. Identificacin de Clases Resumen Objetivos de Aprendizaje Ejercicios de Laboratorio 1 2 2 5 7 9 10 18 19 20 21 23 24 24 29 30 30 32 33 40 41 42

Unidad 2: Clases y Objetos ............................................................................. 23

Unidad 3: Laboratorio de Clases y Objetos ................................................... 41

i Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Gua del Estudiante

Core Java

Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos


Objetivos de Aprendizaje
Al final de esta unidad, usted ser capaz de: Explicar la necesidad de la orientacin a objetos. Describir la tecnologa orientada a objetos. Definir el concepto de encapsulamiento y sealar sus beneficios. Discutir la abstraccin, agregacin, herencia y polimorfismo. Describir los beneficios de la tecnologa orientada a objetos.

Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Gua del Estudiante

1. Introduccin
Hay varias razones que explican el surgimiento de la tecnologa orientada a objetos. En primer lugar, el rpido crecimiento de la industria de hardware no coincide con el crecimiento de la industria de software. El hardware consiste de un conjunto de componentes fsicos, cada uno de ellos ensamblado por separado. Los diversos componentes fsicos pueden ser reutilizados en diversas formas. En la industria de software no se encontraban componentes similares. Por ejemplo, cada banco desarrollaba su propio software y cada universidad desarrollaba su propio paquete interno de software, todos independientes y sin capacidad de reutilizacin. En segundo lugar, los dominios de los problemas han cambiado. En lugar de problemas matemticos o cientficos, hoy los programas de cmputo se utilizan en sistemas de control, fabricacin y diseo asistidos por computadoras y simuladores de vuelo, entre otras aplicaciones. Estos programas son complejos por naturaleza, porque los problemas que enfrentan son complejos en s mismos. Para tales dominios de problemas, era necesaria una nueva forma de construccin de soluciones de software. Se requera de una perspectiva diferente de programacin y desarrollo de sistemas, concebida para manejar la complejidad, permitir la reutilizacin de componentes, aumentar la productividad de los programadores y facilitar el desarrollo de soluciones de software acordes con las demandas que imponen los nuevos escenarios y problemas por resolver. Ante esta necesidad, aparece la orientacin a objetos como alternativa vlida de solucin, proponiendo nuevos esquemas de desarrollo, metodologas de anlisis y formas de programacin para la construccin de un sistema a partir de un conjunto coherente de objetos relacionados. Esto deriva en el surgimiento de la tecnologa orientada a objetos. La tecnologa orientada a objetos usa metforas del mundo real para proporcionar soluciones a sus problemas.

2. Paradigmas de Programacin
2.1 Programacin Orientada a Procedimientos
Otro tipo de programacin es la programacin orientada a procedimientos o procedural, en la cual un programa es estructurado a base de sus funciones. Esta tcnica permite el diseo, organizacin e implementacin de funciones que constituyen un programa. Considere el siguiente ejemplo que presenta el uso de la programacin orientada a procedimientos. Ejemplo 1.1 Dadas las siguientes figuras geomtricas bsicas: Un Crculo de color verde y radio igual a 3.6. Un Tringulo del tipo rectngulo de color rojo, base igual a 2.0 y altura igual a 4.0. Un Rectngulo de color azul, un lado igual a 3.5 y el otro lado igual a 2.5.
2

Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Gua del Estudiante

Core Java

Escribir un programa en lenguaje C para calcular el rea de cada una de las figuras geomtricas suministradas.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. } /* Cdigo ejemplo de Programacin Procedimental */ #include <stdio.h> #define pi 3.14159 /* Funcin para calcular el rea del crculo */ float areaCirculo(float radio){ return(pi * radio * radio); } /* Funcin para calcular el rea del Tringulo */ float areaTriangulo(float base, float altura){ return(base * altura / 2.0); } /* Funcin para calcular el rea del rectngulo */ float areaRectangulo(float lado1, float lado2){ return(lado1 * lado2); } /* Funcin main */ int main(void){ printf("Area del Circulo:%2.2f\n", areaCirculo(3.6)); printf("Area del Triangulo:%2.2f\n", areaTriangulo(2.0, 4.0)); printf("Area del Rectangulo:%2.2f\n", areaRectangulo(3.5, 2.5)); return 0;

Fin del Ejemplo 1.1 La salida del cdigo anterior es la siguiente:


Area del Circulo: 40.72 Area del Triangulo: 4.00 Area del Rectangulo: 8.75

Note como se escribieron tres funciones (procedimientos) distintas para acometer la tarea de calcular el rea de cada una de las figuras geomtricas dadas, una para cada una de las tres figuras. Suponga por un momento que se tiene escrito cdigo para calcular el rea de 100 figuras geomtricas diversas. De acuerdo al ejemplo anterior se tendran unas 100 funciones diferentes, cada una con un nombre distinto y con un nmero variable de argumentos en cada una de ellas. En este escenario, el programador debe recordar la sintaxis exacta de cada funcin con el fin de calcular el rea de una figura geomtrica cualquiera, en otras palabras, debe tener presente el nombre de la funcin, as como, el
Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Gua del Estudiante

orden, el tipo y el nmero de los argumentos que esa funcin recibe. En la medida que los programas crecen en complejidad, as como, el nmero de funciones existentes recordar la sintaxis exacta se vuelve una tarea difcil y adems es una fuente frecuente de errores de compilacin.

2.2 La Programacin Orientada a Objetos


La programacin orientada a objetos es un mtodo por el cual los programas pueden ser implementados y organizados como una coleccin cooperativa de entidades, cada una representando algn elemento (entidad) en el mundo real. Usualmente se resuelven los problemas haciendo uso de elementos intangibles, tales como: conceptos, nociones, ideas y elementos fsicos tangibles, entre las cuales se encuentran las cosas, herramientas u objetos. Cada uno de estos elementos son conocidos como entidades en el mundo real. Las entidades tienen asociadas propiedades y valores, as como, las operaciones o funciones que se pueden realizar con ellas. Resulta natural usar entidades en la resolucin de problemas cotidianos. Por ejemplo, s se identifica que el motor de un automvil tiene una tuerca floja, entonces se busca la herramienta adecuada para ajustarla, as de sencillo. Es posible incluso, conducir perfectamente bien un vehculo sin tener realmente idea de cmo trabaja internamente un automvil, de hecho no es necesario saberlo, basta con que se conozcan los diversos controles y su operacin. Es mucho ms fcil aun ver la hora de ese fabuloso reloj digital de mueca, sin tener que ser tcnicos en electrnica para hacerlo. El paradigma de la programacin orientada a objetos persigue simular o representar esas entidades del mundo real y su uso en forma natural en la resolucin de un problema de computacin. El paradigma de la programacin orientada a objetos usualmente tiene las siguientes caractersticas: Simula actividades del mundo real. Tiene tipos de datos definidos por los usuarios. Esconde los detalles de la implementacin. Reutiliza cdigo a travs de la herencia. Permite el mismo nombre para diferentes funcionalidades.

Algunas de estas caractersticas se estudiarn con ms detalle a medida que se aprenda mejor acerca de los cuatro pilares fundamentales de la orientacin a objetos, los cuales son: Abstraccin. Encapsulamiento. Modularidad. Herencia.
4

Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Gua del Estudiante

Core Java

Nota: Seguidamente, se estudiarn los conceptos generales de la orientacin a objetos, que no son especficos a ningn lenguaje de programacin. El trmino entidad ser usado para denotar objetos o metforas del mundo real.

3. Abstraccin
El modelo orientado a objetos se desarroll usando el concepto de abstraccin. Este concepto se aplica para manejar la complejidad. En los problemas del mundo real siempre se encuentran presentes un sin nmero de caractersticas o factores que pueden intervenir o no en el problema, y a la larga formar parte o quedar fuera de la solucin. La abstraccin es la tcnica que permite reconocer los elementos esenciales para la solucin de un problema dejando de lado los detalles irrelevantes. Considere el enunciado del ejemplo 1.1. De all se desprende que se tiene una entidad llamada Crculo, que contiene los atributos (caractersticas) color y radio. Tambin, se establece que se puede calcular el rea del crculo. Por otra parte, se tiene una entidad denominada Tringulo, que posee los atributos color, base y altura, al que tambin se le puede calcular el rea. Por ltimo, se tiene la entidad denominada Rectngulo, que posee los atributos color, lado1 y lado2 al que tambin se le puede calcular el rea. La Figura 1.1 representa grficamente las entidades Crculo, Tringulo y Rectngulo.
Entidad: Crculo Atributos: Color = verde Radio = 3.6 Funciones: area() = pi * radio * radio Entidad: Tringulo Atributos: color = rojo tipo = rectngulo base = 2.0 altura = 4.0 Funciones: area() = base * altura / 2.0 Entidad: Rectngulo Atributos: color = azul lado1 = 3.5 lado2 = 2.5 Funciones: area()= lado1 * lado2

Figura 1.1: Las Entidades Crculo, Tringulo y Rectngulo.

Para estas entidades se pide calcular el rea de las mismas, luego de aplicar el proceso de abstraccin, se verifica que los atributos color del Crculo, color y tipo del Tringulo, adems de color del Rectngulo no son relevantes para el clculo del rea. La Figura 1.2 representa grficamente las entidades Crculo, Tringulo y Rectngulo luego del proceso de abstraccin. La abstraccin consiste en crear un modelo simplificado de las entidades del mundo real, dejando de lado lo irrelevante para concentrarse en los elementos esenciales a la solucin del problema.

Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Gua del Estudiante

Entidad: Crculo Atributos: radio = 3.6 Funciones: area() = pi * radio * radio

Entidad: Tringulo Atributos: base = 2.0 altura = 4.0 Funciones: area() = base * altura / 2.0

Entidad: Rectngulo Atributos: lado1 = 3.5 lado2 = 2.5 Funciones: area()= lado1 * lado2

Figura 1.2: Las Entidades Crculo, Tringulo y Rectngulo Despus de la Abstraccin.

A medida que las entidades se hacen ms complejas, se hace necesario esconder algunos de los detalles no esenciales de la entidad para el usuario. Cada entidad por lo general consta de dos elementos que son la interfaz y la implementacin. La interfaz es lo que la entidad le muestra al usuario para que este ltimo la pueda usar, permitindole as a la entidad cumplir su cometido de acuerdo a la implementacin interna que ella posee. En otras palabras, el usuario slo necesita conocer la interfaz para usar la entidad. Los detalles de la implementacin quedan ocultos. Elementos de una entidad: Interfaz: El mtodo adoptado en la presentacin de una entidad en el mundo real. Implementacin: El procedimiento adoptado para facilitar a una entidad la ejecucin de sus funciones.

Para entender la abstraccin considere el siguiente ejemplo del mundo real. Ejemplo 1.2 Asuma que una persona, Tom, desea volar de Nueva York a Chicago. Naturalmente, l contactar un agente de viajes para hacer su reservacin y que ste le enve el boleto a casa. Obviamente, l escoge un agente de viajes, y no un cocinero para comprar su boleto, ya que l es consciente de la interfaz que tiene un agente de viajes y un cocinero en el mundo real. Una vez escogido al agente de viajes para reservar el boleto de vuelo, Tom esperar que el boleto le sea enviado. Como se presenta en la interfaz, el agente de viaje tiene un procedimiento para hacerse cargo de sus responsabilidades. Los boletos son enviados a Tom, una vez que estos procedimientos son aplicados. Fin del Ejemplo 1.2 Este ejemplo ilustra cmo las actividades del mundo real se basan en interfaces e implementaciones. Muchas de las actividades que se desarrollan se basan en el conocimiento de cmo procede la entidad en la cual se est interesado. Un punto importante a destacar en este ejemplo es que, como usuarios del servicio, es necesario conocer qu provee la entidad, y no cmo la entidad atender el
Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 6

Gua del Estudiante

Core Java

requerimiento. 'Qu' describe la interfaz de la entidad, y 'Cmo' provee la implementacin de la entidad. Esta distincin es crucial para el desarrollo de la orientacin a objetos. Ms adelante se detallarn aspectos relacionados a esta distincin. En forma simple, abstraer es eliminar lo innecesario. Para entender mejor el concepto de abstraccin, se emplear el objeto libro del mundo real. Un libro en una librera se ver diferente a un libro en una editorial. En la librera, el libro puede ser visto por su nombre, el nombre de la editorial, fecha de publicacin, nmero de edicin, precio y autor. El mismo libro, desde el punto de vista del editor, puede ser observado por su nombre, nmero de pginas, contenido, rea de impresin y otros aspectos relacionados al libro en edicin. As en una aplicacin, una abstraccin de entidad se basa en su significado contextual.

4. Encapsulamiento
El encapsulamiento es el concepto que ayuda a mantener juntos los datos y las funciones (procedimientos) que operan sobre stos. Las funciones y procedimientos que pertenecen a una entidad cualquiera se conocen como funciones miembro o mtodos. En C++ se usa el trmino funciones miembro, en otros lenguajes, como por ejemplo Java, se utiliza el trmino mtodo. En la programacin procedural convencional, los datos y las operaciones se consideran independientes uno del otro. De hecho, en una estructura de datos la coleccin de valores y las operaciones que los definen son independientes una de la otra. Aqu, los datos son vistos como elementos pasivos que se encuentran inactivos hasta que son requeridos en alguna operacin. Las operaciones son ejecutadas como funciones o procedimientos, de aqu el dato puede ser sujeto de cualquier funcin o procedimiento dentro de este campo. En una estructura de datos, hay una pequea o ninguna relacin entre los datos y las operaciones que actan sobre ellos. En el ejemplo 1.1, se observa como cada funcin empleada para el clculo del rea es independiente de los datos y debe recibir como argumentos o parmetros los valores necesarios para cumplir con su cometido o tarea. En el paradigma procedural, los datos y las operaciones permanecen separados, como se muestra en la Figura 1.3.
Implementacin Definicin de Datos y Estructuras de Operaciones sobre Datos y Estructuras

Figura 1.3: El Paradigma Procedural Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Gua del Estudiante

En el paradigma de la orientacin a objetos, tanto los datos como las operaciones que actan sobre ellos estn envueltos en una cpsula, tal como se presenta en la Figura 1.4.
Implementacin Definicin de Datos y Estructuras de Operaciones sobre Datos y Estructuras

Figura 1.4: El Paradigma de la Orientacin a Objetos

Las Figuras 1.3 y 1.4 dan una representacin grfica de la forma cmo las entidades son manejadas en estos paradigmas de programacin. Para entender mejor la diferencia entre la forma de pensar procedural y la orientada a objetos, considere la entidad Crculo del Ejemplo 1.1 desde el punto de vista de la programacin orientada a objetos. En esta etapa, no se har nfasis en la sintaxis de las estructuras empleadas en el ejemplo. Ejemplo 1.3
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. } // Funcin main } public void setRadio(float rad){ // Para modificar el radio if (rad > 0.0) radio= rad; else return; // Radio debe ser mayor que cero // Establece el valor del radio // Declaracin de clase Crculo (Entidad) public class Circulo{ private float radio; // Interfaz public float area(){ } public float getRadio(){ return radio; // Atributos privados

private final float pi= 3.14159f; // No recibe parmetros

return(pi * radio * radio); //retorna el rea // Para leer el radio // Retorna el valor del radio

18. public static void main(String args[]){ 19. Circulo objCirc_1= new Circulo(); //Instanciar un objeto de Crculo Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Gua del Estudiante 20. objCirc_1.setRadio(3.6f);

Core Java // Establecer el radio en 3.6

21. System.out.println("El Area del Circulo de radio 3.6 es: "+ objCirc_1.area()); //Impresin por pantalla 22. 23. } }

Fin del Ejemplo 1.3 El ejemplo muestra que la entidad Crculo se define como una clase (tipo de dato definido por el usuario) y que sus operaciones existen dentro del mbito de la definicin de la entidad Crculo. Incluso note que la operacin area()no toma a radio u otro valor del tipo float como un argumento. sta es la esencia de la orientacin a objetos, ejecutada a travs del encapsulamiento debido a que la entidad Crculo posee dentro de s todos los elementos necesarios para cumplir con sus propsitos y responsabilidades, exponiendo al usuario slo aquellos mtodos definidos en la interfaz. El encapsulamiento en la orientacin a objetos, ayuda a colocar juntos tanto los datos como las operaciones o funciones que operan sobre ellos. Esto tambin enfatiza la definicin del concepto de un tipo de dato. Un tipo de dato es un conjunto de valores y las operaciones definidas sobre ellos. Despus de todo, las entidades en la orientacin a objetos son simplemente tipos de datos definidos por el usuario.

5. Modularidad
La modularidad implica la desintegracin del sistema de software completo, con el propsito de simplificarlo en piezas manejables llamados mdulos. El mtodo por el cual los mdulos se comunican entre s es importante y es la base de la funcionalidad de todo el sistema. Las conexiones entre los mdulos se denominan contratos. Los contratos incluyen las caractersticas inherentes a cada mdulo individual en virtud a sus interacciones con los dems mdulos. Existe un acuerdo o protocolo establecido entre los mdulos en comunicacin. El encapsulamiento y la modularidad se complementan entre s. Mdulos pequeos y auto-contenidos son viables slo cuando las entidades encapsulan suficiente informacin esencial. Nuevamente, es el encapsulamiento el que preside sobre los contratos que los mdulos tienen entre s. Para acceder a la informacin encapsulada, se tienen que manejar las interfaces que las entidades ofrecen. Esto conlleva al paso de mensajes a travs de los mdulos. Los objetos se comunican entre s a travs de mensajes. Un mensaje es el mecanismo usado por un objeto para tomar una tarea llevada a cabo por otro objeto. El trmino modularidad adquiere diferente sentido si se refiere a mdulos individuales en el paradigma procedural o en el paradigma de la orientacin a objetos. El paradigma estructurado usa el concepto de subprogramas. Los subprogramas son mdulos que se comunican entre s para ejecutar una tarea. Los subprogramas que ejecutan tareas similares se agrupan juntos y ligeramente acoplados unos a otros.

Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Gua del Estudiante

En el paradigma de orientacin a objetos, las entidades se empaquetan fsicamente en unidades. Estas unidades pueden ser vistas como las bien definidas y documentadas fronteras dentro del programa. Cada lenguaje se diferencia en la forma de incorporar los mdulos, es decir principalmente los archivos de cabecera y archivos fuentes en el caso C++. Un archivo de cabecera contiene todas las interfaces y los archivos fuente proveen las implementaciones para las interfaces. En cambio la modularidad se presenta en Java mediante paquetes y archivos .jar que son agrupaciones de elementos java (clases). A su vez los mdulos son vistos como paquetes en el lenguaje Ada. Los paquetes se constituyen con una especificacin y un cuerpo. El trmino especificacin se refiere a la estructura del mdulo y a los enlaces o conexiones que tiene con los otros mdulos. Esta especificacin es, entonces, la base sobre la cual un mdulo tiene conexin con el otro. Lenguajes como C++, CLOS, Ada y Java soportan la modularidad. En estos lenguajes, los mdulos sirven como la base de la arquitectura fsica del sistema; por tanto, es esencial diferenciar entre la ubicacin y la implementacin de la interfaz. Algunos lenguajes no soportan la modularidad, por ejemplo Smalltalk. Existe sinergia entre la abstraccin, el encapsulamiento y el modulado. La abstraccin resulta en la formacin de entidades que tienen una frontera lgica bien definida. El encapsulamiento y la modularidad ayudan a proveer seguridad alrededor de las abstracciones; el encapsulamiento esconde los detalles de la implementacin, y la modularidad habilita la agrupacin de abstracciones lgicamente relacionadas. As, el encapsulamiento y el modulado aseguran que una interfaz limpia est disponible para cualquier usuario de la entidad. Los mensajes transitan a travs de estas interfaces, asegurando el estado de la entidad. El estado de una entidad est definido por las propiedades y los valores que estas toman en cualquier instante de tiempo dado. Este tema ser detallado en la Unidad 2: Clases y Objetos de este volumen.

6. Jerarqua
El encapsulamiento esconde la visin interior de una entidad mientras maneja la complejidad en cierta medida. La modularidad en cambio, ayuda al ordenamiento de abstracciones en una forma lgica, para formar el sistema completo. Sin embargo, en el caso de un incremento en el nmero de abstracciones, se necesita un mtodo ms efectivo para manejar esta complejidad. El ordenamiento de las abstracciones entra en juego cuando se considera la jerarqua. Las abstracciones que constituyen el sistema completo se basan en un orden particular. En un ordenamiento descendente, las entidades genricas aparecen encima, mientras que las entidades ms especficas se encuentran en el nivel inferior. Con la jerarqua se asocian dos estructuras, la es un y la tiene un. La jerarqua es un se le refiere tambin como la jerarqua tipo de, y la tiene un se le refiere tambin como la jerarqua parte de.
Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 10

Gua del Estudiante

Core Java

A continuacin se discutirn algunos ejemplos de las jerarquas es un y tiene un.

6.1 Herencia
La herencia pertenece a la jerarqua es un. La herencia implica que una entidad B comparte la estructura y comportamiento de una entidad A. En este contexto, la entidad A es llamada la superclase (o la clase base), y la entidad B es llamada la subclase (o la clase derivada). Algunas veces, la entidad A es vista como la entidad padre, y la entidad B como la entidad hija. La Figura 1.5 describe la herencia entre las entidades Vehculo y Automvil.
Superclase

Vehculo es-un

Subclase

Automvil

Figura 1.5: Herencia entre Vehculo y Automvil

La subclase necesita no slo heredar la estructura y el comportamiento como se defini en la superclase; sta puede, y generalmente lo hace, redefinir el comportamiento provisto por el padre. Alternativamente, la subclase puede incluso aumentar los servicios proporcionados por la superclase. Ahora, por qu una entidad debe heredar la estructura y el comportamiento de alguna otra entidad?. Esto es porque la superclase publica algunas caractersticas que son generales por naturaleza. Las subclases pueden especializar algunas caractersticas especficas heredando las caractersticas de la entidad original, de la superclase y redefiniendo dichas caractersticas. La herencia se refiere, de esta manera, a una relacin generalizacin-especializacin entre entidades. En el Ejemplo 1.1, se tiene que Crculo es-una Figura Geomtrica, Tringulo es-una Figura Geomtrica y Rectngulo esuna Figura Geomtrica. Esto sugiere la existencia de una entidad de nivel superior denominada Figura_Geometrica. Vea la Figura 1.6

Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

11

Core Java

Gua del Estudiante

Figura_Geometrica Atributos: Funciones: area()

es-un

es-un

es-un

Circulo Atributos: radio = 3.6 Funciones: area()= pi*radio*radio

Triangulo Atributos: base = 2.0 altura = 4.0 Funciones: area()= base*altura/2.0

Rectangulo Atributos: lado1 = 3.5 lado2 = 2.5 Funciones: area()= lado1*lado2

Figura 1.6: Jerarqua de Figuras Geomtricas.

La entidad Figura_Geometrica es la superclase de la jerarqua propuesta, es una generalizacin. Ntese que en ella se declara la funcin area() y que cada una de las subclases redefine el area() segn su propia conveniencia y naturaleza. Si se desea calcular dentro del programa el rea de cualquier entidad que sea una Figura_Geometrica, no importa cuantas figuras geomtricas diferentes se tengan, existe ahora una interfaz nica y comn a toda la jerarqua para recordar y con la cual trabajar. Considere un ejemplo del mundo real para entender esto. Animal es una categora general de la cual Perro se deriva. La idea es modelar el hecho de que Perro es un Animal. En forma similar, el hecho de que guila es una clase de Ave puede realizarse heredando guila de Ave. La idea es muy simple. Cuando se piensa en un guila, de inmediato visualiza algo que tiene alas y puede volar. El hecho que un guila tiene alas y puede volar es vital en todas las aves. El comportamiento general de vuelo est encapsulado en un Ave y es verdadero en cualquier cosa que es un Ave. En forma similar, la estructura de un Ave, esto es, que tiene alas, est tambin encapsulado en el Ave. Ahora, el guila debe especializarse en esta estructura y comportamiento, porque ella tiene su propia forma de volar. As, se puede decir que el guila es un Ave. La jerarqua heredada especifica la relacin es un entre la subclase y la superclase. Es posible para la subclase sea a su vez la superclase de otra clase. Esto se muestra en la Figura 1.7.

Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

12

Gua del Estudiante

Core Java

Humano

Europeo

Asitico

Francs

Italiano

Hind

Coreano

Siciliano

Napolitano

Figura 1.7: Jerarqua Heredada

En la Figura 1.7, se observa una jerarqua heredada que confirma que cada subclase es un tipo de la superclase. Por ejemplo, la figura muestra los siguientes hechos: Europeo es un Humano. Italiano es un Europeo. Napolitano es un Italiano.

Puesto que Napolitano es un Italiano y Europeo es un Humano, Napolitano es un Humano. As, en la jerarqua heredada, todos los nodos hojas (especializaciones) comparten una relacin es un con el nodo raz (Generalizacin). Los siguientes son ejemplos de jerarquas es un en el mundo real: Bsqueda binaria es un tipo de algoritmo de bsqueda. Estudiante es una persona. El ser humano es un animal. El ser humano es un mamfero. Un automvil es un vehculo. Un pantaln es un vestido. Un lapicero es un instrumento para escribir.

La jerarqua de herencia permite a la subclase heredar tanto los datos miembros como las operaciones. La herencia de un comportamiento muestra el concepto de extensibilidad. Las entidades que son cuidadosamente diseadas para ser generales
Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

13

Core Java

Gua del Estudiante

pueden ser re-usadas en muchas circunstancias, ahorrando esfuerzos en los problemas de programacin futuros. La herencia vista hasta ahora es conocida como una herencia nica. Pero es posible para una subclase heredar de dos o ms superclases. Esto se conoce como herencia mltiple. Vea la Figura 1.8. Animal

Animal Terrestre

Animal Acutico

Animal Anfibio
Figura 1.8: Ejemplo de Herencia Mltiple

En este ejemplo, la entidad Animal Anfibio hereda su forma de Animal Terrestre y de Animal Acutico. Un ejemplo de este tipo de animal es el cocodrilo, que puede sobrevivir tanto en tierra como en el agua. En muchas aplicaciones del mundo real se pueden encontrar ejemplos de herencias mltiples. Un ejemplo de una universidad tpica es presentado a continuacin en la Figura 1.9.
Profesor Estudiante

Preparador

Figura 1.9: Otro Ejemplo de Herencia Mltiple

Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

14

Gua del Estudiante

Core Java

Vale la pena mencionar que no todos los lenguajes de programacin orientados a objetos permiten la herencia mltiple. En el caso de Java solo se permite la herencia simple, mientras que C++ si permite el tipo de herencia simple y mltiple, trayendo esto consigo ventajas y desventajas, como principal desventaja podemos mencionar el problema del diamante como se muestra en la Figura 1.8, el cual consiste en heredar de forma repetida segn la grafica los atributos de la clase Animal.

6.2 Agregacin
Se ha visto que la herencia provee la relacin generalizacin-especializacin y pertenece a la jerarqua es un. Tambin es posible para una entidad contener a otra entidad. Asuma que se tienen cuatro entidades, Automvil, Puerta, Asiento y Maletero. Se puede afirmar que la entidad Automvil contiene Puertas, Asientos y Maletero. Esto se denomina una relacin tiene un entre entidades, de modo, que la agregacin pertenece a la jerarqua tiene un. En otras palabras, se puede decir que Un Automvil tiene Puertas, Asientos y un Maletero. Ver la Figura 1.10.

Automvil

Puerta

Asiento

Maletero

Figura 1.10: Ejemplo de una relacin tiene un

La Figura 1.10 describe la relacin tiene un entre Automvil y las otras entidades. Denota que la entidad Automvil contiene Puertas, Asientos y Maletero. La relacin tiene un est referida tambin como la relacin conteniente. Considere la Figura 1.11 para ver otro ejemplo de agregacin basado en la jerarqua de figuras geomtricas que se ha desarrollado hasta ahora. Aqu se agrega una nueva entidad denominada Regla partiendo de la entidad Rectngulo existente y haciendo una composicin para que la Regla contenga una entidad Crculo dentro de si.

Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

15

Core Java

Gua del Estudiante

Figura Geomtrica

Crculo

Tringulo

Rectngulo

Regla

Figura 1.11: Jerarqua de Figuras Geomtricas con la Entidad Regla.

En la Figura 1.11, la entidad Regla es-un Rectngulo e internamente tiene-un Agujero que es-un Crculo. En este contexto, el rea de la Regla est definida como el rea del Rectngulo menos el rea del Agujero. Este es un ejemplo de agregacin debido a que la Regla contiene un Crculo, en otras palabras el Agujero es-parte de la Regla. Considere un ejemplo que involucra dos entidades, Persona y Trago. Se dice que una persona tiene un trago. En este caso, esto no quiere decir que la entidad Persona contiene a la entidad trago. Lo que se quiere decir por contiene es que la entidad contenida es parte de la entidad contenedora. Esto no es cierto para Persona y Trago. stas existen por separado, y la Persona es capaz slo de tomarse un Trago, no de contener la entidad Trago. En forma similar, es incorrecto decir que un Lapicero tiene un color. Color es un atributo de Lapicero, no una entidad. Las caractersticas de cada entidad se definen como la entidad tiene caractersticas. Sin embargo, esto no califica a las caractersticas para ser definidas como entidades. Las jerarquas es un y tiene un existen slo entre entidades, no entre sus caractersticas. Los siguientes son algunos ejemplos de relaciones tiene un en el mundo real: Un libro tiene prrafos. Un prrafo tiene palabras. Una computadora tiene un teclado. Las aves tienen alas.
16

Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Gua del Estudiante

Core Java

Las casas tienen cuartos.

La distincin entre las relaciones es un y tiene un son muy importantes para el desarrollo de un sistema orientado a objetos. Ahora que se han entendido los cuatro conceptos principales de orientacin a objetos, se proceder a explicar los conceptos complementarios: Ocultamiento de Informacin. Polimorfismo.

6.3 Ocultamiento de Informacin


Sin encapsulamiento no puede haber ocultamiento de informacin. Debido al encapsulamiento, los datos y la implementacin de las operaciones se ocultan al usuario. Teniendo los datos miembros y sus operaciones encapsuladas, el usuario slo necesita saber cmo acceder a las operaciones. Esto se muestra en el Ejemplo 1.3, donde la implementacin est contenida en la definicin de la entidad Crculo y as est escondida. En el Ejemplo 1.3, dentro de la declaracin de la entidad Crculo se define el radio como un atributo float y se indica adems que es un atributo privado (private), tal como se muestra en el siguiente fragmento de cdigo:
1. public class Circulo{ 2. private float radio; 3. // Resto de la definicin // Atributos privados

Esto se traduce en que el atributo radio, no puede ser accedido desde fuera de la declaracin de la clase, por lo que permanece oculto y protegido del resto del programa. Ahora, por qu esconder el radio? Por qu no dejar que pueda ser accedido libremente desde cualquier parte del programa?. Matemticamente no tiene sentido, adems de que no es posible tener un crculo con un radio menor o igual a cero. S el atributo radio se puede acceder libremente entonces es posible, por medio de una variable del tipo Circulo, asignarle un valor negativo a dicho radio, lo que redundara a la larga en resultados adversos o por lo menos extraos en el programa. Pero s el atributo est oculto y no puede ser modificado directamente desde fuera de la definicin de la entidad, Cmo se hace para asignarle un valor vlido cualquiera?. Para resolver este dilema la entidad debe declarar en su interfaz una serie de funciones pblicas, que son visibles desde cualquier parte del programa, que se encarguen de permitir que los atributos ocultos sean ledos y modificados realizando las validaciones pertinentes. De esta forma la entidad garantiza que los valores asignados a sus atributos de carcter crtico sean siempre vlidos. Observe el siguiente fragmento de cdigo para notar como se logra lo antes expuesto en el Ejemplo 1.3.
Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

17

Core Java 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. // Interfaz public float getRadio(){ return radio;

Gua del Estudiante

// Para leer el radio // Retorna el valor del radio

} public void setRadio(float rad){ // Para modificar el radio if (rad > 0.0) radio= rad; else return; } // Resto de la definicin // Radio debe ser mayor que cero // Establece el valor del radio

En este fragmento de cdigo la funcin getRadio() se usa para retornar o leer el valor que actualmente posee el atributo radio de la entidad Crculo. As mismo, la funcin setRadio() recibe un nmero de punto flotante y al realizar las validaciones adecuadas, se lo asigna al atributo radio de la entidad. Ambas funciones estudiadas son de carcter pblico y forman parte de la interfaz de la entidad Crculo. Este es un claro ejemplo de cmo ocultar la informacin y de cmo las interfaces se unen para garantizar la seguridad de los datos y el cumplimiento de las reglas y validaciones en el uso de las entidades.

7. Polimorfismo
Polimorfismo es la tcnica de usar una interfaz para mltiples implementaciones. Es importante porque permite a las entidades tener diferentes estructuras internas para compartir la misma interfaz externa. El polimorfismo en un lenguaje de programacin le permite al programador generar componentes reutilizables de alto nivel, que son diseados para adaptarse a las diferentes aplicaciones cambiando sus partes de menor nivel. Seguidamente se presenta un ejemplo. Las fechas pueden ser creadas de cualquiera de estas formas: Tres nmeros enteros distintos, es decir, da, mes y ao (1, 1, 2002). Un nexo ('01/01/2002'), donde cada parte, da, mes y ao, debe ser extrada. Un nmero entero (01012002), del cual cada parte debe ser extrada.

En el paradigma de programacin procedural se requiere proveer diferentes nombres para las tres funciones, tales como fechaEnteros, fechaCadenas y fechaLarga. Pero con el concepto de polimorfismo, se puede proporcionar slo un nombre, fecha y realizar tres diferentes funciones. La relacin entre la llamada actual y la implementacin de la funcin depender de los argumentos pasados con la llamada. Se puede decir tambin que polimorfismo significa un nombre y mltiples funciones. En el Ejemplo 1.1 se crearon tres nombres diferentes de funciones para calcular el rea de las diferentes figuras geomtricas indicadas en el problema. La Figura 1.12 muestra cmo un slo nombre de funcin se puede usar para manejar diferentes nmeros y diferentes

Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

18

Gua del Estudiante

Core Java

tipos de argumentos; una palabra tiene diferentes significados en diferentes contextos. La jerarqua juega un papel muy importante en el polimorfismo.

Figura_Geomtrica Atributos: Funciones: area()

es-un

es-un

es-un

Crculo Atributos: radio Funciones: area()= pi*radio*radio

Tringulo Atributos: base altura Funciones: area()= base*altura/2.0

Rectngulo Atributos: lado1 lado2 Funciones: area()= lado1*lado2

Figura 1.12: Ejemplo de Polimorfismo

La superclase Figura_Geometrica y las subclases Circulo, Triangulo y Rectangulo tienen una operacin area() definida. An cuando el nombre es el mismo, sus implementaciones pueden ser diferentes. El mtodo area() en Crculo es equivalente a areaCirculo() y area() en Rectngulo es equivalente a areaRectangulo() y as sucesivamente con las dems entidades de la jerarqua. Sin embargo, el usuario de esas identidades no necesita recordar los diferentes nombres de la misma interfaz. Conceptualmente, se est calculando slo el rea de una figura geomtrica. El hecho de que la figura sea un crculo o un rectngulo se conoce slo en el tiempo. El polimorfismo es el nico mecanismo a travs del cual se puede lograr el paso obligatorio de mtodos a entidades en una jerarqua de herencia.

8. Ventajas del Desarrollo del Sistema Orientado a Objeto


Existen dos grandes ventajas del desarrollo del sistema orientado a objetos, estas son: Capacidad de Reutilizacin. Prototipos Rpidos.

8.1 Capacidad de Reutilizacin


Cuando el comportamiento de una entidad se hereda de otra entidad, el cdigo no necesita ser re-escrito. Esto permite ahorrar en los costos de mantenimiento y prueba, adems de ser ms confiable, puesto que todos los usuarios comparten el cdigo. La
Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

19

Core Java

Gua del Estudiante

herencia y la agregacin facilitan la reutilizacin. En el pasado, se extenda la funcionalidad existente, sin necesidad de re-escribirla. Ahora se reutiliza la funcionalidad existente, en su totalidad como parte de otra abstraccin.

8.2 Prototipos Rpidos


Cuando un sistema de software se disea a partir de componentes reutilizables, el tiempo de programacin puede ser utilizado eficientemente para entender el nuevo sistema. Cuando las metas y requerimientos del sistema son poco claros, solo contribuyen con un estilo particular de programacin.

9. Beneficios de la Tecnologa Orientada a Objetos


Los siguientes son beneficios de la tecnologa orientada a objetos: Ofrece un mayor nivel de productividad del programador, mejor calidad de software y menor costo de mantenimiento. Los programas pueden ser construidos en mdulos de trabajo estndares que se comunican unos con otros, ms que teniendo que empezar desde un borrador. Esto ayuda a ahorrar tiempo de desarrollo y a aumentar la productividad. Es fcil aportar trabajo en un proyecto basado en entidades. Es posible para mltiples instancias de una entidad coexistir sin ninguna interferencia. Usando el principio de ocultamiento de informacin, el programador est en la capacidad de construir programas seguros que no pueden ser invalidados por cdigos de otras partes del programa. La herencia elimina cdigos redundantes y extiende el uso de las entidades existentes. El diseo centralizado de los datos permite capturar ms detalles de la modularidad en el modo de implementacin.

Apndice: Principios de Programacin Orientada a Objetos Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

20

Gua del Estudiante

Core Java

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Explicar la necesidad de la orientacin a objetos. Describir la tecnologa orientada a objetos. Definir el concepto de encapsulamiento e indicar sus beneficios. Discutir acerca de abstraccin, agregacin, herencia y polimorfismo. Describir los beneficios de la tecnologa orientada a objetos.

Unidad 1: Revisin de los Conceptos de la Orientacin a Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

21

Gua del Estudiante

Core Java

Unidad 2: Clases y Objetos


Objetivos de Aprendizaje
Al final de esta unidad, usted ser capaz de: Describir las clases y objetos, adems de su uso en los sistemas orientados a objetos. Discutir el uso de mensajes y mtodos. Explicar la tcnica de depuracin de sustantivos para la identificacin de clases.

Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

23

Core Java

Gua del Estudiante

1. Introduccin
En la Unidad 1: Conceptos de la Orientacin a Objetos, se discutieron los conceptos bsicos de la tecnologa orientada a objetos. Los conceptos como el uso de la herencia, la agregacin, el encapsulamiento y el ocultamiento de Informacin, hacen la tecnologa orientada a objetos diferente al paradigma procedural. Aunque el paradigma procedural incorpora algunos de estos conceptos utilizamos su verdadero significado en la tecnologa orientada a objetos. Habiendo aprendido los conceptos bsicos de la tecnologa orientada a objetos, ahora se estudiarn los mecanismos con los que pone en funcionamiento la tecnologa orientada a objetos. Clases, objetos, mensajes y mtodos forman el cuerpo de esta tecnologa. A medida que se explican los conceptos de clases y objetos en esta unidad, algunos de los conceptos aprendidos en la unidad anterior sern tambin brevemente explicados.

2. Clases
Las entidades existen en el mundo real. Algunos ejemplos de entidades en el mundo real son: Florista Estudiante Libro Tarjeta de registro Formato de reservacin Cliente Cuenta de ahorros Taln de retiro Reloj Tabla Miembro de biblioteca Tarjeta de biblioteca Flor

Es evidente que la lista de entidades en el mundo real es infinita. Cada una de estas entidades sirve a un propsito y juega un papel en el mbito de su uso. Es posible agrupar algunas de las entidades de la lista anterior en las siguientes categoras: Estudiantes, Tarjeta de registro Miembro de biblioteca, Tarjeta de biblioteca, Libro Cliente, Taln de retiro, Cuenta de ahorros Florista, Flor

Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

24

Gua del Estudiante

Core Java

Las entidades son agrupadas de acuerdo a su papel en una aplicacin. En este punto es de mayor inters cada entidad individual ms que los grupos de entidades. Considerando la entidad Estudiante, se sabe que un estudiante tiene un nombre, edad, direccin, la disciplina en la que fue admitido, cursos registrados en un semestre, y as sucesivamente. Con la entidad Estudiante se asocia cierto comportamiento, que ser vlido para muchas entidades Estudiante en el mundo real, pero no ser verdadero para una entidad Cliente o Florista ya que estas ltimas poseen su propio comportamiento por ser entidades de naturaleza distinta. Inconscientemente, se han identificado entidades del mundo real con comportamientos asociados. Cuando es necesario comprar pan, vamos a una panadera, pero cuando necesitamos medicinas, buscamos una farmacia. Esto es porque el comportamiento de una panadera refiere a que provee productos de pan. Se entiende por comportamiento, todas aquellas responsabilidades de una entidad en el mundo real. Los trminos comportamiento y responsabilidades son normalmente usados indistintamente cuando se discute la tecnologa orientada a objetos. En el anlisis, dentro del entorno del problema, existen entidades que representan elementos del mundo real. En el entorno de la solucin, dentro del sistema programado existen las clases como tipos de datos definidos por el usuario. Todos los conceptos estudiados en la Unidad 1: Conceptos de la Orientacin a Objetos, se aplican a las clases. Las clases son la descripcin de un tipo de dato. Las variables creadas a partir de un tipo de dato clase, son denominadas instancias u objetos de la clase. En trminos sencillos, las clases son tipos de datos agregados definidos por el usuario. Las clases en la tecnologa orientada a objetos representan las entidades del mundo real. Dado el entorno de un problema, la solucin en tecnologa orientada a objetos contendr clases que son identificadas como entidades en ese mbito. Seguidamente se explicar un ejemplo de un sistema bancario para entender esto. Los bancos permiten a sus clientes operar diferentes tipos de cuentas, tales como ahorros, cuentas corrientes y depsitos a plazo fijo. Los clientes usan formularios de depsito para depositar dinero y formularios de retiro para retirar dinero de los bancos. Se puede transferir fondos de una cuenta a otra en el mismo banco usando un formulario especial para este propsito. La perspectiva dada aqu es desde el punto de vista del cliente del banco. Internamente, el banco tendr muchas otras formas de hacer sus tareas. A partir de esta corta descripcin, se pueden conjugar algunas de las entidades del mundo real y sus guas de clases en el mundo orientado a objetos. Vea la Figura 2.1.

Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

25

Core Java

Gua del Estudiante

Mundo Real
Cliente del Banco

Mundo Orientado a Objetos

Cuenta de Ahorros

Cliente
Cuenta de Ahorros Cuenta Corriente Planilla de Deposito

Cuenta Corriente

Planilla de Depsito

Figura 2.1: Relacin entre el Mundo Real y el Mundo Orientado a Objetos - (Escenario Bancario)

En el desarrollo de muchas aplicaciones orientadas a objetos, se observa que las entidades del mundo real corresponden directamente a una clase en el mundo orientado a objetos. Pero esto puede no ser suficiente para encontrar una solucin utilizando tecnologa orientada a objetos. Es posible tener que derivar un nmero de clases y colocarlas juntas para hacerlas trabajar. Las clases conocidas de las entidades del mundo real se hacen corresponder, y entonces, se encuentran las clases desconocidas en el sistema. Ms adelante, se identificarn las clases conocidas y las desconocidas del escenario del mundo real. Las clases contienen tanto los datos miembro representando los tipos, como las funciones miembro que implementan operaciones en esos tipos. Es posible ver las clases como modelos de los tipos de datos definidos por el usuario. Una clase es similar a una estructura en C. En una clase se tienen tanto los datos como las funciones miembro (mtodos), mientras que en una estructura slo se tienen los datos miembro. Sin embargo, ambos son tipos de datos definidos por el usuario. Para describir el tipo de dato Estudiante definido por el usuario, se pueden identificar los siguientes datos miembro: Nombre del estudiante. Edad del estudiante. Direccin del estudiante. Disciplinas en las que el estudiante fue admitido.
26

Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Gua del Estudiante

Core Java

Cursos registrados por el estudiante en un semestre.

Las caractersticas o atributos de una entidad son denominados como datos miembro de una estructura o una clase. Las responsabilidades o comportamientos de la entidad son las operaciones definidas sobre estos datos. En la definicin de una estructura, se tendra slo una lista de variables con sus tipos de datos. Las operaciones en stas seran definidas e implementadas como funciones fuera de la frontera de la estructura. Pero en una clase, las caractersticas son definidas como una estructura, y las operaciones son tambin definidas dentro de las fronteras de la clase. As, se dice que los datos y las operaciones sobre los datos estn encapsulados. La Figura 2.2 proporciona una visin de una clase que tiene tpicamente dos partes: datos y operaciones.

Comportamiento (Funciones miembro)

Atributos (Datos miembro)

Figura 2.2: Vista de una Clase

El comportamiento es la interfaz que una clase presenta a sus usuarios. Otra vista de una clase se muestra en la Figura 2.3.
Implementacin (Privada, escondida)

Interfaz (Pblica, revelada)

Figura 2.3: Otra vista de una Clase

La implementacin de las interfaces est escondida para los usuarios de la clase, as se asegura el ocultamiento de la informacin. Una clase, entonces, es una entidad que encapsula tanto los datos como las operaciones, revelando slo la interfaz y escondiendo la implementacin. La implementacin del comportamiento significa escribir el algoritmo actual para realizar la tarea.

Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

27

Core Java

Gua del Estudiante

Habiendo entendido el concepto de clase, a continuacin se presenta la definicin para la clase Crculo en el Ejemplo 1.3 que usamos para el encapsulamiento en la Unidad 1 Revisin de los Conceptos de la Orientacin a Objetos. Ejemplo 2.1
1. // Declaracin de clase Crculo (Entidad) 2. public class Circulo{ private float radio; // Atributos privados 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. } // Funcin main private final float pi= 3.14159f; // Interfaz public float area(){ } public float getRadio(){ return radio; // No recibe parmetros

return(pi * radio * radio); //retorna el rea // Para leer el radio

// Retorna el valor del radio

} public void setRadio(float rad){ // Para modificar el radio if (rad > 0.0) radio= rad; else return; // Radio debe ser mayor que cero // Establece el valor del radio

17. public static void main(String args[]){ 18. Circulo objCirc_1= new Circulo(); //Instanciar un objeto de Crculo 19. objCirc_1.setRadio(3.6f); // Establecer el radio en 3.6 20. System.out.println("El Area del Circulo de radio 3.6 es: "+ objCirc_1.area()); //Impresin por pantalla 21. 22. } }

La interfaz para la operacin area() que se revela para la clase Circulo es float area(); El usuario de la clase debe conocer slo esta interfaz. Al calcular el rea para una figura geomtrica cualquiera el usuario debe preocuparse solamente por invocar la funcin miembro adecuada, sin reparar en los detalles de como fue implementada esa funcin dentro de la clase. Esta es la diferencia entre la interfaz y la implementacin. Fin del Ejemplo 2.1 Una clase, es entonces, un modelo que provee los medios para crear instancias para trabajar, estas son las variables de la clase u objetos que sern usados en nuestro sistema para que cumpla con su propsito. Esto es similar a crear un tipo de dato
Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 28

Gua del Estudiante

Core Java

definido por el usuario a travs de una estructura (struct) en lenguaje C y entonces crear variables del tipo de dato definido por la estructura, para as poder operar o trabajar sobre ella. Entonces se ver cmo el marco que la clase provee puede ser utilizado en una aplicacin.

3. Objeto
Una definicin simple de un objeto es que constituye una instancia de una clase. Los objetos interactan unos con otros para proveer una solucin a un problema en la orientacin a objetos. Tome por ejemplo la clase Crculo. Este tipo de dato definido por el usuario puede ser usado slo cuando se han creado instancias (variables) del tipo de dato. As, es posible crear por ejemplo circulo_I, circulo_II, objCirculo y miCirculo como instancias de la clase Crculo. Es el objeto el que ocupa memoria en el computador. La clase es slo la descripcin del tipo de dato. Al momento de crear instancias o variables de la clase, el compilador, basado en la descripcin suministrada por la definicin de la clase, reserva la cantidad de memoria adecuada para el tipo de dato solicitado. Un objeto ofrece cumplir o completar el contrato ofrecido por la clase, de la cual es una instancia. Cada objeto puede ser definido en trminos del comportamiento que muestra o que se espera que muestre. El objeto automvil tiene un comportamiento para moverse, acelerar, transportar personas, as como, para detenerse y girar. Basado en este comportamiento, es fcil caracterizar un automvil tanto en movimiento como estacionado. Adicionalmente, se puede hacer que el objeto automvil muestre otras propiedades fsicas como el modelo, ao de fabricacin, capacidad del tanque de combustible, nmero de pistones, sistema de seguridad, nmero de registro y seguro, entre otras caractersticas. De un objeto puede decirse que tiene lo siguiente: Estado en un momento dado. Identidad, la cual es nica entre objetos del sistema. Comportamiento, que usualmente son las operaciones sobre los datos de esa clase.

As, se puede decir que un objeto tiene un estado, comportamiento e identidad. La estructura y comportamiento de objetos similares se definen en su clase comn. En los ejemplos suministrados los trminos objetos e instancias son intercambiables.

3.1 Estado
El estado de un objeto son las propiedades y los valores que estas propiedades toman en un momento dado. En el Ejemplo 1.3 de la clase Crculo, el objeto objCirc_1 declarado en la funcin main() tiene la propiedad oculta radio. Los valores que el
Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

29

Core Java

Gua del Estudiante

radio puede tomar son de naturaleza dinmica, pues estos valores pueden cambiar en el tiempo. En un momento dado, un objeto conoce su estado. En la orientacin a objetos, un objeto conoce acerca de s mismo y revela su estado a travs de su interfaz.

3.2 Identidad
La identidad de un objeto se refiere a la manera nica por la cual el objeto es conocido, referido y distinguido de todos los dems objetos del sistema. Los objetos circulo_I y circulo_II son identificados como diferentes objetos en el sistema, puesto que tienen su propio espacio de memoria y estado.

3.3 Comportamiento
El comportamiento se refiere a las responsabilidades que el objeto puede asumir y cumplir. Es tambin, la forma cmo un objeto reacciona a los cambios de estado. Las operaciones area() y getX() definidas en Circulo son dos de los comportamientos presentados por la clase, los cuales son representados por objetos especficos. Para resumir, una clase es un marco o modelo y los objetos son las manifestaciones concretas de ese marco o modelo. Una clase bien definida debe existir para todos los objetos a ser creados y que tendrn relacin unos con otros. El sistema orientado a objetos funciona por completo a travs de la interaccin de los objetos.

4. Mtodos
En muchos lenguajes orientados a objetos, las operaciones que un cliente puede hacer con un objeto son tpicamente declaradas como mtodos y son parte de la declaracin de la clase. Los mtodos son los algoritmos usados por la clase para implementar las tareas ofrecidas por la interfaz. As, en el ejemplo de la clase Crculo, la implementacin para obtener el rea se define como un mtodo.

5. Mensajes
Los objetos se comunican entre s a travs de mensajes. Un mensaje es el mecanismo usado por un objeto para tomar una tarea llevada a cabo por otro objeto. El objeto iniciador conoce la interfaz del objeto donde esta accin se defini. El objeto receptor satisface el pedido del objeto iniciador aceptando e implementando la tarea. Un mensaje puede cambiar el estado del objeto receptor. Un mensaje puede tomar ninguno o ms argumentos especficos. Cuando un mensaje es enviado, el nombre del objeto es asociado con el mensaje. Este objeto es conocido como el objeto receptor, que es el argumento implcito. El mensaje retorna un valor de algn tipo, posiblemente vaco, al emisor del mensaje. Tpicamente, un mensaje contiene lo siguiente: El nombre del objeto receptor. El nombre del mensaje.

Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

30

Gua del Estudiante

Core Java

Los argumentos que se pasan al objeto receptor (esto es opcional, adems de pasar los mismos objetos como argumentos).

Ejemplo 2.2 Como ejemplo, considere la tarea de enviar una caja de chocolates de Detroit a un amigo residente en Washington el da de San Valentn. Hay varias formas de ejecutar esta tarea. Una de ellas es tomar un vuelo a Washington, comprar algunos chocolates, manejar a la casa de nuestro amigo y presentarle el regalo. Otra forma es contactar un agente que lleve a cabo esta tarea por nosotros. Podemos revisar las pginas amarillas del directorio telefnico, llamar al agente, quien tomar la orden y la direccin de nuestro amigo. Si el agente reside en Detroit, ser muy costoso para l hacer el viaje completo a Washington para entregar la caja de chocolates. Una forma ms simple y eficiente para el agente de efectuar esta tarea, es localizar otro agente en Washington, cerca de la casa de nuestro amigo y pasarle el mensaje con alguna informacin vital, como la fecha de entrega y la direccin como argumentos. Ahora, este agente en Washington implementar un mtodo, tal como comprar una caja de chocolates, empacarla y entregarla a un mensajero para que lleve a cabo la tarea final. Esta forma de trabajo es conocida generalmente como responsabilidad conducida, en reconocimiento al hecho de que los objetos pueden cumplir sus responsabilidades asignadas. Fin del Ejemplo 2.2 Lo que se ha aprendido de este ejemplo es que, usted y los usuarios de los servicios del agente, slo envan un mensaje, por ejemplo: enva chocolates y no se preocupan por la forma en la que la tarea se ejecuta. Sea que el agente enve a alguien de Detroit para entregar los chocolates o contacta otro agente en Washington para realizar la tarea, no es importante para nosotros. Puede imaginar qu hubiera pasado si usted seleccionaba a su peluquero para efectuar la misma tarea? Ejemplo 2.3 En un programa de cmputo, usted puede estar enviando el mensaje area() a un objeto miCirculo. Al recibir el mensaje, el objeto trata de encontrar si existe un mtodo area() en su lista de mtodos. Si encuentra el mtodo, el objeto ejecuta este mtodo y regresa al objeto llamado. Sin embargo, qu hubiera pasado si enva el mensaje area() a un objeto miTriangulo de la clase Triangulo? Es de esperar que el objeto revise que un mtodo llamado area() exista en miTriangulo y, si lo encuentra, lo ejecute adecuadamente. En trminos de comportamiento, la forma cmo miCirculo calcula el rea, puede ser, y de hecho lo es, bastante diferente de la forma cmo miTriangulo
Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

31

Core Java

Gua del Estudiante

lo hace. Varios tipos de objetos pueden entender el mismo mensaje, pero responder de diferentes formas en trminos de comportamiento. Fin del Ejemplo 2.3 As, los objetos son mecanismos tiles para hacer que las cosas trabajen en un sistema orientado a objetos. El fundamento de usar objetos para el desarrollo de sistemas es la forma cmo los objetos del mundo real interactan entre s para lograr ejecutar una tarea.

6. Clases Abstractas
A veces se requiere que las clases sean declaradas para encapsular el comportamiento general de ciertas entidades. Estas clases en s mismas pueden no requerir ser instanciadas como objetos. Ellas simplemente proveen una interfaz que la clase derivada hereda e implementa. Estas clases son tiles para describir el comportamiento general de las entidades del mundo real al ms alto nivel, adems constituyen las generalizaciones. Estas clases son referidas como clases abstractas. La clase Figura_Geometrica presentada en la Figura 1.12 de la Unidad 1 de este volumen, es un ejemplo de una clase abstracta. Las instancias de la clase Figura_Geometrica no pueden ser creadas en el sistema, puesto que no est definido plenamente cmo realizar el clculo del rea para objetos de esta clase. Las clases derivadas Circulo, Triangulo y Rectangulo se pueden usar para crear instancias en el sistema debido a que todas ellas realizan su propia implementacin de la funcin para el clculo del rea. La superclase Figura_Geometrica representa el comportamiento general de las formas geomtricas. Las clases derivadas proveen las actuales funcionalidades de un crculo, un tringulo o un rectngulo. Los objetos de las clases abstractas no pueden ser creados, pero deben ser heredados para crear objetos concretos en el sistema. Las clases abstractas existen para que el comportamiento comn de un nmero de clases pueda ser agrupado en forma encapsulada, permitiendo a las subclases aadir funcionalidades especficas de cada comportamiento. Las clases abstractas pueden existir de dos formas. Una de ellas es proveyendo implementaciones del comportamiento, pero requieren clases concretas de las cuales ser derivadas. Las subclases, por cierto, pueden redefinir las implementaciones para proveer funcionalidades especficas. Otra forma en la que las clases abstractas pueden ser tiles en un sistema, es proveyendo modelos de comportamiento que pueden ser definidos en mtodos especficos de subclases. La Figura 2.4 muestra clases abstractas en una jerarqua heredada.

Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

32

Gua del Estudiante

Core Java

Vehculo

Clases Abstractas

Vehculo Terrestre

Vehculo Areo

Vehculo Acutico

Vehculo de dos Ruedas

Vehculo de cuatro Ruedas Aeroplano

Bicicleta

Automvil

Clases Concretas

Figura 2.4: Clases Abstractas en una Jerarqua Heredada

Es posible tener clases abstractas en ms de un nivel. Pero al menos en algn nivel es necesario tener clases concretas para crear objetos.

7. Identificacin de Clases
El primer paso en la construccin de un modelo orientado a objetos es identificar las clases relevantes para el dominio de la aplicacin. Al identificar las clases, se pueden establecer las fronteras del problema. Los objetos pueden ser entidades fsicas o conceptuales, pero un punto importante a notar es que todas las clases deben tener pleno significado en el dominio de la aplicacin. Las clases afectan toda la estructura y enfoque del problema. Es un hecho aceptado que para que un sistema sea exitoso, debe tener una estructura estable. Por lo tanto, el escenario de objetos agrupados en clases debe ser estable. El paso ms importante en el desarrollo de un sistema orientado a objetos es la identificacin de las clases. Cada aspecto del entorno del problema debe ser
Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

33

Core Java

Gua del Estudiante

plenamente entendido. A partir de las especificaciones de los requerimientos del problema, el listado de las abstracciones es crucial. Uno de los mtodos ms simples para identificar clases es listar los sustantivos en el planteamiento del problema. Las clases en la lista se conocen como clases candidatas del sistema. Sobre esta lista se aplica el conocimiento orientado a objetos para abstraer las clases requeridas, agregar ms clases desconocidas y eliminar clases no deseadas. Tpicamente, todas las clases son sustantivos. Por ejemplo, esVacia no puede ser el nombre de una clase. Se han visto algunos nombres de clases y todos eran sustantivos. Los siguientes son una lista de algunos ms: Automvil Persona Facultad Vehculo Ave Crculo

Los objetos son tambin sustantivos, pero son la manifestacin concreta de las abstracciones. A veces los objetos son calificados como se lista a continuacin: miAutomovil facultadAgronomia suVehiculo aveVoladora circuloMenor

Los mtodos son verbos pues denotan las responsabilidades de una abstraccin. Ejemplos de ellos se listan a continuacin: mover dibujar volar mostrar almacenar acelerar

De los ejemplos anteriores, tambin se notan los diferentes esquemas de identificacin usados para clases, objetos y mtodos. Esta es la prctica general y es seguida como un estndar por la mayora de los desarrollos orientados a objetos. Con el fin de entender este complejo paso en orientacin a objetos, se tiene el ejemplo de un simple sistema matemtico. Se presenta slo una pequea muestra de los requerimientos y esto no es de ninguna manera una especificacin completa de un sistema matemtico. Con la ayuda de este ejemplo, se aprender a identificar y depurar clases.
Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 34

Gua del Estudiante

Core Java

Ejemplo 2.4 El objetivo de este ejemplo es presentar los requerimientos para desarrollar un sistema que permita calcular el rea y el permetro de las figuras geomtricas bsicas, tales como: Crculo, Tringulo y Rectngulo, as como el rea y el permetro para la figura compuesta Regla de medicin. El programa debe permitir al usuario seleccionar el tipo de objeto con el que desea trabajar, para ello, debe presentar una lista de opciones numeradas que permitan Trabajar con Crculos, Trabajar con Tringulos, Trabajar con Rectngulos y Trabajar con Reglas. Una vez que el usuario ha seleccionado la opcin adecuada de acuerdo a la figura con que desea trabajar, el sistema proceder a solicitar los datos pertinentes a la figura correspondiente, luego se procede a presentar los valores del rea y del permetro para la figura geomtrica seleccionada segn los valores ingresados. Seguidamente, el sistema deber preguntarle al usuario si desea seguir trabajando con esa figura geomtrica o si prefiere retornar al men principal. El men principal tambin debe incluir una opcin Salir que permita terminar la sesin de trabajo y salir del sistema. En este escenario se entiende que la regla es una figura geomtrica que desciende de rectngulo y posee un agujero en su extremo izquierdo. Dicho agujero es a su vez un crculo. Esta jerarqua descrita es similar a la presentada en la Figura 1.11 de la Unidad 1. El rea para un crculo est definida por la formula:
pi * radio * radio

El permetro est definido por la formula:


2 * pi * radio

Donde la constante pi tiene un valor aproximado de: 3.14159, y el radio es la distancia que hay desde el centro del crculo hasta el borde exterior. El rea para un tringulo esta definida por las formulas:
(pm * ((lado1-pm) + (lado2-pm) + (lado3-pm))

Donde pm representa el valor del permetro medio, el cual se calcula dividiendo el valor del permetro entre dos. El lado1, lado2 y lado3 representan la longitud de los lados del tringulo. base * altura / 2.0 Donde la base es el lado inferior del tringulo y la altura est definida por el seno del ngulo que forman la base y la hipotenusa del tringulo. El permetro del tringulo est definido por la formula:
lado1 + lado2 + lado3

El rea para un rectngulo est definida por la formula:


Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

35

Core Java lado1 x lado2

Gua del Estudiante

El permetro del rectngulo est definido por la formula:


(2 * lado1) + (2 * lado2)

Donde lado1 y lado2 representan la longitud de los lados del rectngulo. El rea para una regla est definida por la formula:
areaRectangulo areaAgujero

Donde areaRectangulo representa el clculo del rea para el rectngulo que forma la regla. El areaAgujero representa el clculo del rea para el crculo que representa el agujero de la regla. El permetro est definido por la formula:
perimetroRectangulo

Donde perimetroRectangulo representa el clculo del permetro para el rectngulo que forma la regla. Fin del Ejemplo 2.4 Para empezar el anlisis orientado a objetos, es necesario identificar varias clases que modelen el dominio de la aplicacin. Los diversos elementos mencionados en las especificaciones de los requerimientos deben ser considerados al inicio. La tarea es leer las especificaciones de los requerimientos e identificar todas las frases nominales. Se pueden encontrar elementos mencionados en forma singular y plural. No se har distincin y se cambiarn todos los plurales a singulares para construir una lista inicial de frases nominales. Este mtodo de identificar clases candidatas en un sistema es llamado anlisis de frases nominales o tcnica de depuracin de sustantivos. Es del todo posible que mientras se construye esta lista se encuentren que algunas son clases obvias. Algunas de las frases nominales pueden no ser deseadas y de otras frases no se puede estar seguro. Se iniciar con la lista completa de frases nominales identificadas de las especificaciones de los requerimientos del sistema planteado. Ms adelante, se discutirn las formas de retenerlas o descartarlas caso por caso. La siguiente lista es un conjunto de sustantivos y frases nominales que han sido identificadas entre las especificaciones de requerimientos suministradas: Sistema rea Permetro Figura Geomtrica Crculo Tringulo Rectngulo
36

Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Gua del Estudiante

Core Java

Figura Compuesta Regla de Medicin Programa Usuario Lista de opciones numeradas Objeto Opcin Figura Valor del rea Valor del permetro Figura correspondiente Figura geomtrica seleccionada Valor ingresado Men principal Opcin salir Sesin de Trabajo Regla Agujero Extremo Izquierdo Formula Constante pi Radio Lado1 Lado2 Lado3 Base Altura Permetro medio

La lista anterior es un verdadero cctel de elementos. Es necesario depurar esta lista basndose en el sentido comn y de algunos criterios como gua. Los siguientes son algunos de estos criterios gua que se pueden usar para depurar la larga lista de clases candidatas: Los sustantivos que representan objetos fsicos del mundo real son candidatos para ser clases vlidas en el mundo orientado a objetos. Los objetos del mundo real, tales como teclado, impresora, ratn y pantalla son clases vlidas en el sistema.

Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

37

Core Java

Gua del Estudiante

Los requerimientos tpicamente contienen sustantivos representando entidades fsicas y conceptuales. Existe la posibilidad de querer convertir algunas de estas entidades conceptuales a clases. Las entidades como Figura geomtrica, Crculo, Tringulo y Rectngulo pueden ser incluidas como clases. En los requerimientos se puede tener la misma palabra usada en diferentes lugares. Idealmente, todos los sinnimos de una palabra deben tomarse como una sola entidad y se debe escoger un nombre apropiado para la clase. Tmese por ejemplo medio de impresin y dispositivo de presentacin, ambos referidos a la misma entidad. De ser necesario, escoja el ms apropiado de los dos. Los atributos de una entidad no son clases. Atributos tales como radio, lado1, lado2, lado3, permetro medio, base y altura son simplemente atributos y por lo tanto, no sern considerados como clases. Un nombre calificado con muchos adjetivos puede ser una sola clase en el sistema o podra conducir a una herencia. Las entidades como Figura Seleccionada y Figura Correspondiente pueden ser modeladas como una sola clase Figura Geomtrica con seleccionada como atributos, por ejemplo. Otra forma es derivar Figura Seleccionada como subclase de Figura Geomtrica. Ignorar sustantivos irrelevantes, vagos o redundantes.

Clases Depuradas El resultado de aplicar las guas es la primera lista tentativa de clases en el programa. Observe que no todos estos candidatos sern clases finales en el diseo final. Se puede determinar que algunas no sern deseadas en el diseo final. Es tambin importante notar que el proceso puede haber revisado otras clases que podran haber surgido en el diseo final. Es necesario aplicar un juicio propio a los resultados de este proceso. El diseo pasar por muchas iteraciones. La siguiente es la lista de clases candidatas luego del ejercicio de depuracin: Figura Geomtrica Crculo Tringulo Rectngulo Regla Men principal Programa

La anterior es la lista preliminar de clases candidatas. Lista de opciones numeradas Opcin Opcin salir

Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

38

Gua del Estudiante

Core Java

Agujero Constante pi Radio Lado1 Lado2 Lado3 Base Altura Permetro medio

Han sido removidas por ser atributos. Sistema rea Permetro Figura Compuesta Regla de Medicin Objeto Figura Valor del rea Valor del permetro Figura correspondiente Figura geomtrica seleccionada Valor ingresado Sesin de Trabajo Extremo Izquierdo Formula

Han sido removidas por ser redundantes o irrelevantes para el propsito del programa. Usando este simple mtodo de anlisis de frases nominales, se pueden identificar las clases candidatas de las especificaciones del documento, depurarlas usando la gua propuesta y tener una primera lista corta de clases tentativas. Este es slo el primer paso del anlisis y diseo orientado a objetos. Se ha estudiado un ejemplo simple para ilustrar cmo los sustantivos se pueden usar para formar un primer juego de clases candidatas para el sistema.

Unidad 2: Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

39

Core Java

Gua del Estudiante

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Describir clases y objetos, as como, su uso en sistemas orientados a objetos. Discutir el uso de mensajes y mtodos. Explicar la tcnica de depuracin de sustantivos para la identificacin de clases.

Apndice: Principios de Programacin Orientada a Objetos Unidad 2: Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

40

Gua del Estudiante

Core Java

Unidad 3: Laboratorio de Clases y Objetos


Objetivos de Aprendizaje
Al final de esta unidad, usted ser capaz de: Usar clases, objetos y mensajes en una situacin prctica. Identificar clases de una lista de requerimientos dada. Usar la tcnica de depuracin de sustantivos para identificar clases. Listar las clases candidatas para el sistema.

Unidad 3: Laboratorio de Clases y Objetos Apndice: Principios de Programacin Orientada a Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

41

Core Java

Gua del Estudiante

Ejercicios de Laboratorio
1) A continuacin presentamos varios pares de entidades. Establezca cules de ellas denotan una jerarqua es un o tiene un. Si no tiene ninguna de stas, explique la razn. Libro, Captulos Persona, Reloj Vehculo, Movimiento Vela, Barco Lila, Planta Editor, Cursor Procesador de texto, Men Men, Drop Down Men Crculo, Radio Telfono, Instrumento

2) Identifique las clases para el siguiente texto usando la tcnica de depuracin de sustantivos. Liste a continuacin las clases candidatas y escriba una breve nota donde los nombres sean tiles para ser convertidos a clases. Tic-Tac-Toe es un juego de mesa. Tiene dos jugadores. Cada jugador tiene un cono que representan un cero (0), y una cruz (x). El tablero est dividido en 3*3 cuadrados, y cada cuadrado puede ser ocupado por un cono. Si tres conos del mismo tipo aparecen en una fila horizontal, vertical o diagonal, el dueo del cono ser declarado como ganador por el sistema. Si todos los cuadrados del tablero se llenan y ningn usuario es el ganador, el juego es declarado como un empate. Si un jugador se retira del juego, entonces el oponente ser declarado el ganador por el sistema. Apenas empieza el juego, el sistema debera permitir al jugador realizar movimientos o retirarse. Ejemplo del juego TicTac-Toe con un ganador:

Apndice: Principios de Programacin Orientada a Objetos Unidad 3: Laboratorio de Clases y Objetos Copyright IBM Corp. 2006 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

42

También podría gustarte