Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
POO
Indice
El progreso de la abstraccin
Definicin de la abstraccin Lenguajes de programacin y niveles de abstraccin Principales paradigmas de programacin Mecanismos de abstraccin en los lenguajes de programacin
Lenguajes orientados a objetos (LOO). Caractersticas bsicas LOO: Caractersticas opcionales Historia de los LOO Metas de la programacin orientada a objetos (POO)
El progreso de la abstraccin
Definicin
Abstraccin
Supresin intencionada (u ocultacin) de algunos detalles de un proceso o artefacto, con el fin de destacar ms claramente otros aspectos, detalles o estructuras.
En cada nivel de detalle cierta informacin se muestra y cierta informacin se omite. Ejemplo: Diferentes escalas en mapas.
El progreso de la abstraccin
Lenguajes de programacin y niveles de abstraccin
Los diferentes niveles de abstraccin ofertados por un lenguaje, dependen de los mecanismos proporcionados por el lenguaje elegido:
Perspectiva funcional
Perspectiva de datos
Perspectiva de servicios
El progreso de la abstraccin
Espacio del problema Lenguajes Orientados a Objetos (LOO) LOO Puros Smalltalk, Eiffel
Espacio de la solucin Lenguajes Ensamblador Lenguajes Imperativos (C, Fortran, BASIC) Lenguajes Especficos (LISP, PROLOG)
El progreso de la abstraccin
Principales paradigmas
PARADIGMA: Forma de entender y representar la realidad. Conjunto de teoras, estndares y mtodos que, juntos, representan un modo de organizar el pensamiento.
Lisp y sus dialectos (p. ej. Scheme), Haskell, ML Prolog C, Pascal Java, C++, Smalltalk,
Paradigma Lgico
El progreso de la abstraccin
Mecanismos de abstraccin en los lenguajes de programacin
OCULTACIN DE INFORMACIN:
Omisin intencionada de detalles de implementacin tras una interfaz simple.
Cuando adems existe una divisin estricta entre la vista interna de un componente (objeto) y su vista externa hablamos de ENCAPSULACIN.
INTERFAZ: QU sabe hacer el objeto. Vista externa IMPLEMENTACIN: CMO lo hace. Vista interna
Favorece la intercambiabilidad. Favorece la comunicacin entre miembros del equipo de desarrollo y la interconexin de los artefactos resultantes del trabajo de cada miembro.
El progreso de la abstraccin
Mecanismos de abstraccin en los lenguajes de programacin
Objeto
9
Indice
El progreso de la abstraccin
Definicin de la abstraccin Lenguajes de programacin y niveles de abstraccin Principales paradigmas de programacin Mecanismos de abstraccin en los lenguajes de programacin
Caractersticas bsicas de los lenguajes orientados a objetos (LOO). Caractersticas opcionales de los LOO Historia de los LOO Metas de la programacin orientada a objetos (POO)
11
Metodologa de desarrollo de aplicaciones en la cual stas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representan una instancia de alguna clase, y cuyas clases son miembros de jerarquas de clases unidas mediante relaciones de herencia. (Grady Booch)
Cambia
No basta con utilizar un lenguaje OO para programar orientado a objetos. Para eso hay que seguir un paradigma de programacin OO.
12
POO se ha convertido durante las pasadas dos dcadas en el paradigma de programacin dominante, y en una herramienta para resolver la llamada crisis del software Motivos
POO escala muy bien. POO proporciona un modelo de abstraccin que razona con tcnicas que la gente usa para resolver problemas (metforas)
14
Ejemplo: Supongamos que Luis quiere enviar flores a Alba, que vive en otra ciudad.
Luis va a la floristera ms cercana, regentada por un florista llamado Pedro. Luis le dice a Pedro qu tipo de flores enviar a Alba y la direccin de recepcin.
El mecanismo utilizado para resolver el problema es Encontrar un agente apropiado (Pedro) Enviarle un mensaje conteniendo la peticin (enva flores a Alba). Es la responsabilidad de Pedro satisfacer esa peticin. Para ello, es posible que Pedro disponga de algn mtodo (algoritmo o conjunto de operaciones) para realizar la tarea. Luis no necesita (ni le interesa) conocer el mtodo particular que Pedro utilizar para satisfacer la peticin: esa informacin est OCULTA.
As, la solucin del problema requiere de la cooperacin de varios individuos para su solucin.
La definicin de problemas en trminos de responsabilidades incrementa el nivel de abstraccin y permite una mayor independencia entre objetos.
15
Agentes y comunidades Mensajes y mtodos Responsabilidades Objetos y clases Jerarquas de clases Enlace de mtodos
16
Agentes y comunidades
Un programa OO se estructura como una comunidad de agentes que interaccionan (OBJETOS). Cada objeto juega un rol en la solucin del problema. Cada objeto proporciona un servicio o realiza una accin que es posteriormente utilizada por otros miembros de la comunidad.
17
Mensajes y mtodos
A un objeto se le envan mensajes para que realice una determinada accin. El objeto selecciona un mtodo apropiado para realizar dicha accin. A este proceso se le denomina Paso de mensajes
18
Mensajes y mtodos
En un mensaje siempre hay un receptor, lo cual no ocurre en una llamada a procedimiento. La interpretacin de un mismo mensaje puede variar en funcin del receptor del mismo. Por tanto un nombre de procedimiento/funcin se identifica 1:1 con el cdigo a ejecutar, mientras que un mensaje no. Un ejemplo:
19
Responsabilidades
20
Objetos y clases
El mtodo invocado por un objeto en respuesta a un mensaje viene determinado por la clase del objeto receptor.
21
Jerarquas de clases
En la vida real, mucho conocimiento se organiza en trminos de jerarquas. Este principio por el cual el conocimiento de una categora ms general es aplicable a una categora ms especfica se denomina generalizacin, y su implementacin en POO se llama herencia.
Pedro, por ser florista, es un dependiente (sabe vender y cobrar) Los dependientes normalmente son humanos (pueden hablar) Los humanos son mamferos (Pedro respira oxgeno)
Las clases de objetos pueden ser organizadas en una estructura jerrquica de herencia. Una clase hijo hereda propiedades de una clase padre ms alta en la jerarqua (ms general):
Mamifero
Humano
Dependiente
Florista
22
Enlace de mtodos
Instante en el cual una llamada a un mtodo es asociada al cdigo que se debe ejecutar
La asignacin a la variable juego depende de la interaccin con el usuario (tiempo de ejecucin). El mensaje repartirCartas deber tener enlace dinmico.
23
Indice
El progreso de la abstraccin
Definicin de la abstraccin Principales paradigmas de programacin Lenguajes de programacin y niveles de abstraccin Mecanismos de abstraccin en los lenguajes de programacin
Caractersticas bsicas de los lenguajes orientados a objetos LOO: Caractersticas opcionales Historia de los LOO Metas de la programacin orientada a objetos (POO)
24
Todo es un objeto Cada objeto es construdo a partir de otros objetos. Todo objeto es instancia de una clase Todos los objetos de la misma clase pueden recibir los mismos mensajes (realizar las mismas acciones). La clase es el lugar donde se define el comportamiento de los objetos y su estructura interna. Las clases se organizan en una estructura arbrea de raz nica, llamada jerarqua de herencia.
1.
2.
3.
4.
5.
P. ej: puesto que un crculo es una forma, un crculo siempre aceptar todos los mensajes destinados a una forma.
6.
25
Polimorfismo
Enlace dinmico
Genericidad
Gestin de Errores
Tratamiento de condiciones de error mediante excepciones Expresiones que especifican qu hace el software en lugar de cmo lo hace
Aserciones
Precondiciones:propiedades que deben ser satisfechas cada vez que se invoca una servicio Postcondiciones:propiedades que deben ser satisfechas al finalizar la ejecucin de un determinado servicio Invariantes: aserciones que expresan restricciones para la consistencia global de sus instancias.
26
POO
Se asegura en tiempo de compilacin que un objeto entiende los mensajes que se le envan.
Recogida de basura (garbage collection) Permite liberar automticamente la memoria de aquellos objetos que ya no se utilizan. Concurrencia Permite que diferentes objetos acten al mismo tiempo, usando diferentes threads o hilos de control.
27
POO
Normalmente implica el uso de algn tipo de base de datos para almacenar objetos.
En la programacin tradicional, las instrucciones de un programa son ejecutadas y sus datos son manipulados. Si vemos a las instrucciones como datos, tambin podemos manipularlas.
28
POO
Orientacin a objetos no es una condicin booleana: un lenguaje puede ser ms OO que otro.
29
Indice
El progreso de la abstraccin
Definicin de la abstraccin Principales paradigmas de programacin Lenguajes de programacin y niveles de abstraccin Mecanismos de abstraccin en los lenguajes de programacin
Caractersticas bsicas de los lenguajes orientados a objetos (LOO). LOO: Caractersticas opcionales Historia de los LOO Metas de la programacin orientada a objetos (POO)
30
1970s
Smalltalk
Alan Kay
Bjarne Stroustrup
1985
C++
1986
90s
Sun
POO se convierte en el paradigma dominante. Java: Ejecucin sobre mquina virtual Ms de 170 lenguajes OO Lista TIOBE (Del Top 10, 9 son OO)
00->
31
Indice
El progreso de la abstraccin
Definicin de la abstraccin Principales paradigmas de programacin Lenguajes de programacin y niveles de abstraccin Mecanismos de abstraccin en los lenguajes de programacin
Caractersticas bsicas de los lenguajes orientados a objetos (LOO). LOO: Caractersticas opcionales Historia de los LOO Metas de la programacin orientada a objetos (POO)
38
Metas de la P.O.O.
Parmetros de Calidad (Bertrand Meyer) La meta ltima del incremento de abstraccin de la POO es
39
Metas de la P.O.O.
Correccin: capacidad de los productos software para realizar con exactitud sus tareas, tal y como se definen en las especificaciones. Robustez: capacidad de los sistemas software de reaccionar apropiadamente ante condiciones excepcionales.
Correccin: Si un sistema no hace lo que se supone que debe hacer, de poco sirve todo lo dems. La correccin tiene que ver con el comportamiento de un sistema en los casos previstos por su especificacin. La robustez caracteriza lo que sucede fuera de tal especificacin.
40
Metas de la P.O.O.
Extensibilidad: facilidad de adaptar los productos de software a los cambios de especificacin. Simplicidad de diseo Reutilizacin: Capacidad de los elementos software de servir para la construccin de muchas aplicaciones diferentes. Las aplicaciones a menudo siguen patrones similares
41
Conclusiones
Lo que conocemos por P.O.O. no es un conjunto de rasgos aadidos a los lenguajes de programacin. Ms bien es un nuevo modo de organizar el pensamiento acerca del modo de descomponer problemas y desarrollar soluciones de programacin. La POO ve un programa como un conjunto de agentes dbilmente acoplados (objetos). Cada objeto es responsable de un cjto de tareas. La computacin se realiza gracias a la interaccin de estos objetos. Por tanto, en cierto sentido, programar consiste en simular un modelo del universo. Un objeto es una encapsulacin de un estado (valores de los datos) y comportamiento (operaciones). As, un objeto es en muchos sentidos similar a un ordenador de propsito especfico. El comportamiento de los objetos viene dictado por su clase. Todos los objetos son instancias de alguna clase. Todas las instancias de la misma clase se comportarn de un modo similar (invocarn el mismo mtodo) en respuesta a una peticin similar. La interpretacin de un mensaje es decidida por el objeto, y puede diferir de una clase de objeto a otra.
45
Conclusiones
Las clases pueden enlazarse unas a otras mediante la nocin de jerarquas de herencia. En estas jerarquas, datos y comportamiento asociados con clases ms altas en la jeraqua pueden ser accedidas y usadas por clases que descienden de ellas. El diseo de un programa OO es como organizar una comunidad de individuos. Cada miembro de la comunidad tiene ciertas responsabilidades. El cumplimiento de las metas de la comunidad como un todo viene a travs del trabajo de cada miembro y de sus interacciones. Mediante la reduccin de la interdependencia entre componentes software, la POO permite el desarrollo de sistemas sw reutilizables. Estos componentes pueden ser creados y testados como unidades independientes, aisladas de otras porciones de la aplicacin software.
46
Conclusiones
Los componentes reutilizables permiten al programador tratar con problemas a un nivel de abstraccin superior. Podemos definir y manipular objetos simplemente en trminos de mensajes, ignorando detalles de implementacin. Este principio de ocultacin de informacin ayuda en la comprensin y construccin de sistemas seguros. Tambin favorece la mantenibilidad del sistema. Se ha comprobado que a las personas con ciertos conocimientos tradicionales sobre computacin les resulta ms difcil aprender los nuevos conceptos que aporta la P.O.O. que a aqullos que no saben nada, ya que el modo de razonar a la hora de programar es una metfora del modo de razonar en el mundo real. La P.O.O. est fuertemente ligada a la Ingeniera del Software, con el objetivo de conseguir aplicaciones de mayor calidad.
47
Bibliografa
Captulo 1
Captulos 1 y 2
48