Programación Orientada a Objetos (P.O.O.) Es un método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son miembros de una jerarquía de clases unidas mediante relaciones de herencia. ¿Cómo se relacionan la A.O.O, D.O.O y P.O.O. ? Los resultados del análisis O.O. sirven como modelos iniciales para un diseño O.O. y éstos a su vez se pueden utilizar como ante proyectos para la implementación completa de un sistema utilizando técnicas de programación O.O. Objetos Como su nombre lo indica la P.O.O se basa fuertemente el concepto de objeto. En nuestras vidas diarias estamos familiarizados con cualquier tipo de objetos: televisores, lámparas, cuadernos, etc. Pero cuando encendemos el televisor, no distinguimos entre sus elementos físicos (selector de canal, tubo de imagen, antena), y su comportamiento (proporcionar sonido e imagen). Simplemente lo encendemos y seleccionamos un canal. Al igual que el televisor, los objetos hacen que los programas sean un reflejo más fiel de la realidad. Para conseguir esta cualidad los objetos dependen de tres conceptos fundamentales. (1) combinación de código y datos (2) herencia (3) encapsulamiento. En la P.O.O., los datos y los procedimientos se combinan en objetos. Un objeto es una entidad que contiene características (sus datos) y comportamiento (sus procedimientos). Así combinando características más comportamiento, el objeto puede realizar cualquier actividad para la cual haya sido definido. Ejemplo: Un avión se puede describir en términos físicos − nº de pasajeros que puede transportar, fuerza de empuje, nº turbinas, etc. − así como también en términos funcionales, − despega, asciende, desciende, aterriza, gira, etc. − . Ni la descripción física ni la funcional captan por separado la esencia de lo que es un avión (son necesarias ambas descripciones). En Pascal tradicional, las características físicas de un avión podrían definirse como una estructura similar a ésta: Type avion = RECORD velocidad: integer; altitud: integer; flaps : (arriba, abajo) end; Y el comportamiento se definiría mediante procedimientos y funciones: Procedure acelera; Procedure desacelera; Begin Begin 1 ...... ...... End; Procedure bajaflaps; End; Procedure bajaflaps; Begin Begin ...... ...... End; End; En la P.O.O., las características (datos) y comportamiento (funciones y procedimientos) se combinan en una entidad única llamada objeto. El objeto contiene declaraciones tanto de los datos como de los procedimientos. En el lenguaje de la P.O.O., los procedimiento y funciones declarados dentro del objeto se denominan métodos. Observe que en Pascal Object la definición del objeto avión sería la sgte.: Type avion = OBJECT velocidad: integer; altitud: integer; flaps : (arriba, abajo); procedure init; procedure acelera; procedure desacelera; procedure asciende; procedure desciende; procedure subeflaps; procedure bajaflaps; end; Una vez definido el objeto, se pueden declarar variables usando el nombre del objeto: var a: avion; En el programa es posible escribir sentencias como : a.inic; a.asciende, a.subeflaps, etc.que activan el comportamiento de cada uno de los objetos. Métodos Como se ha señalado, los métodos corresponden al comportamiento o protocolo que se encarga de ejecutar las acciones que se requieren para que un objeto realice su trabajo. Pensemos en un objetos real, una pelota, la cual posee características propias, tener color, ser redonda o estar inflada. Ahora consideremos cada método como una forma en podemos manipularla: lanzarla, hacerla rodar, 2 inflarla etc. Clases Una clase es una descripción que agrupa a un conjunto de objetos que comparten una estructura y un comportamiento. Considere el sgte. Ejemplo : class Perro{ int peso; char nombre[20]; char raza[15]; void dormir (int tiempo){delay(tiempo);} void comer (int cantidad){peso +=cantidad;} }; La clase perro describe el conjunto de características (peso, nombre, raza) y comportamiento (dormir, comer) para un conjunto de mascotas que pertenezcan a dicha clase. Esta descripción sólo es una plantilla para el objeto, pero no genera objetos por sí sola, para ello es necesario definir una variable de la clase definida: Perro Cachupín, Pluto; Tras esta declaración se han creado dos objetos de la clase Perro, Cachupín y Pluto quienes quedan disponibles para ser utilizados en el programa donde fueron declarados. Teniendo la definición de clase se puede deducir que todos los objetos son ejemplares de una clase y además que éstas pueden organizarse en un árbol jerárquico. Por ejemplo: Herencia En términos simples la herencia en la P.O.O. es la capacidad que tiene los objetos para heredar todas o algunas de sus características (datos) y comportamiento (procedimientos) a sus descendientes o herederos, permitiendo así la reutilización de código lo que en la práctica se traduce en una herramienta muy potente de programación. Esta herencia puede ser a nivel de estado (características) o protocolo (métodos y procedimientos) o ambas. La herencia en la P.O.O tiene sus raíces en el concepto de registros anidados: Type edades: 0..150; InfPersona = RECORD Apellido: integer; Nombre: integer; Edad: edades; end; 3 grados: 0..12; InfEstudiante= RECORD persona: InfPersona; grado: Grados; Profesor: string (30); end; El registro InfPersona contiene campos que se utilizan para describir a cualquier persona. El segundo registro InfEstudiante, incluye el campo Persona, que contiene los campos del registro InfPersona. En la P.O.O., se utiliza el mismo concepto para construir incrementalmente objetos que son capaces de heredar algunas o todas las características de sus ascendientes (objetos padres). Encapsulamiento Uno de los objetivos primordiales de la P.O.O., es la creación de objetos que funcionen como entidades complejas, es decir autosuficientes, una de las reglas del encapsulamiento es que el programador nunca necesita acceder directamente a los datos de un objeto, en vez de ésto se deben definir métodos dentro del objeto que gobiernen toda la manipulación de datos. El encapsulamiento está referido, también, a los métodos de cada objeto en el sentido que su código interno debe ser transparente a la hora de activarse. Mensajes Corresponde a la forma que tienen los objetos para comunicarse entre sí, de esta forma, el objeto que activa el mensaje se llama objeto emisor y el que lo recibe objeto receptor. Cabe señalar que un mensaje debe ser activado o generado desde un método hacia un objeto. En términos generales equivale a la llamada a un procedimiento o función. Forma general de un mensaje: receptor_mensaje.selector_mensaje [(parámetros)] p/e ventana_editor.maximizar; documento1.imprimir(2); Polimorfismo Se refiere a la capacidad que tiene el objeto para hacer lo adecuado después de haber recibido un mensaje, independientemente de quién lo haya enviado. Hay que tener en cuenta que el polimorfismo se mueve a través de la herencia, dicho de otra forma trata de hacer posible enviar mensajes genéricos a objetos y que éstos realicen lo estipulado de acuerdo a su codificación interna, es decir, la acción varía en relación al receptor del mensaje. Ejemplo: Se desea enviar un mensaje a dos objetos distintos (Triángulo y Rectángulo) los cuales podrían ser descendientes de la clase polígono, sin embargo cuando el triángulo reciba la orden area, la ejecución de este método se obtendrá a partir de (b*h)/2 en cambio si se ctiva el mismo método para el rectángulo el valor se calculará a partir de ð *r2 , aún cuando ambos objetos recibieron la misma orden. 4