Академический Документы
Профессиональный Документы
Культура Документы
Juan Pavn Mestras Dep. Sistemas Informticos y Programacin Universidad Complutense Madrid
Promueve el diseo basado en interfaces y arquitecturas estndares, con una organizacin y un proceso
Tecnologa de objetos
!
Tecnologa de objetos
!
Los objetos permiten representar los conceptos esenciales de una entidad ignorando sus propiedades accidentales
Avances en arquitectura de computadores Avances en lenguajes de programacin (C++, Smalltalk, Ada, Java, ...). Ingeniera del software (modularidad, encapsulado de la informacin, proceso de desarrollo incremental) Los lmites de la capacidad de gestionar la complejidad de los sistemas simplemente con tcnicas de descomposicin algortmica
Durante el desarrollo del sistema lo importante es qu es y qu hace un objeto antes de decidir cmo se implementar
!
Comportamiento: operaciones que los clientes realizarn en el objeto, y operaciones que realizar sobre otros objetos
Un cliente es un objeto que usa los recursos/servicios de otros objetos (servidores)
Tecnologa de objetos
!
Mejoras significativas de la productividad y calidad del cdigo Estabilidad de los modelos respecto a entidades del mundo real Construccin iterativa Promueve la reutilizacin de software y de diseos (componentes, frameworks) Los sistemas OO son generalmente ms pequeos que su equivalente no OO: menos cdigo y ms reutilizacin Permite desarrollar sistemas ms preparados para el cambio Vle para aplicaciones de pequeo y gran tamao
Organizacin de los programas de manera que representan la interaccin de las cosas en el mundo real
! ! !
! !
! ! ! !
! !
Un programa consta de un conjunto de objetos Los objetos son abstracciones de cosas del mundo real Nos interesa qu se puede hacer con los objetos ms que cmo se hace Cada objeto es responsable de unas tareas Los objetos interactan entre s por medio de mensajes Cada objeto es un ejemplar de una clase Las clases se pueden organizar en una jerarqua de herencia
Conceptos generales
! ! ! ! ! ! ! ! ! ! !
Objetos
! ! !
Objetos y clases Atributos Mensajes y mtodos Encapsulado y ocultacin Interfaces Herencia de clases Polimorfismo Vinculacin dinmica Composicin de objetos Modelado con objetos Bibliotecas
Los objetos son cosas Los objetos pueden ser simples o complejos Los objetos pueden ser reales o imaginarios
Hola Mundo
Juan Pavn Mestras Facultad de Informtica UCM, 2004-05 Conceptos de Orientacin a Objetos
Atributos
! !
Mensajes
! !
Valores o caractersticas de los objetos Permiten definir el estado del objeto u otras cualidades
Los objetos se comunican e interaccionen entre s por medio de mensajes Si un objeto desea que otro objeto ejecute un mtodo le enva un mensaje que puede tener informacin adicional en forma de parmetros Componentes de un mensaje
! !
Objeto destinatario del mensaje (miCoche) Mtodo que se debe ejecutar como respuesta (cambiar marcha) Parmetros necesarios del mtodo (segunda)
constantes
variables
Juan Pavn Mestras Facultad de Informtica UCM, 2004-05 Conceptos de Orientacin a Objetos
10
Mtodos (u operaciones)
!
Clases
! !
Los objetos con estados similares y mismo comportamiento se agrupan en clases La definicin de la clase especifica el comportamiento y los atributos de los ejemplares (objetos) de la clase
Arrancar motor Parar motor Acelerar Frenar Girar a la derecha (grados) Girar a la izquierda (grados) Cambiar marcha (nueva marcha)
mtodo
Juan Pavn Mestras Facultad de Informtica UCM, 2004-05 Conceptos de Orientacin a Objetos
argumentos
11
Juan Pavn Mestras Facultad de Informtica UCM, 2004-05
12
void frenar() { // instrucciones para frenar el coche }; void acelerar() { // instrucciones para acelerar el coche }; void girar_derecha(short grados) { // instrucciones para girar a la derecha };
13
14
Un programa en POO
!
Un programa en C++
Un programa consta de un conjunto de instancias o ejemplares de objetos (object instances) y un flujo de control principal (main) Durante la ejecucin del programa:
!
main() { Coche *c=new Coche(); // crea un objeto Coche c-> arrancar // utiliza el objeto // ... dispose(c); // elimina el objeto }
15
16
Un programa en Java
Un programa en POO
class Programa { public static void main(String args[]) { Coche c=new Coche(); // crea un objeto Coche c.arrancar(); // utiliza el objeto // ... } // se elimina el objeto cuando nadie lo puede utilizar // automticamente ! }
17
18
Tcnicas de la POO
!
Clasificacin
!
Herencia de clases
Polimorfismo
Es fundamentalmente un problema de bsqueda de similitudes Al clasificar buscamos grupos de cosas que tienen la misma estructura o muestran un comportamiento similar Mediante la clasificacin, los objetos con la misma estructura de datos y comportamiento se agrupan para formar una clase La clasificacin permite identificar clases y objetos en el desarrollo
Esta es una de las tareas ms difciles del A&D OO
! !
Y adicionalmente
! ! ! !
19
20
Encapsulado y ocultacin
!
Encapsulacin
!
el comportamiento del objeto est definido por los mtodos el estado est definido por los datos o atributos del objeto
Consiste en separar los aspectos externos del objeto (las partes a las que pueden acceder otros objetos) de los detalles de implementacin internos (ocultos a otros objetos)
!
Ocultacin de informacin
!
Los objetos agrupan su estado (los atributos o datos) y su comportamiento (los mtodos)
Relacin clara entre el cdigo y los datos
Las partes necesarias para utilizar un objeto son visibles (interfaz pblica): mtodos Las dems partes son ocultas (privadas)
El volante, el cuentakilmetros, los pedales y la palanca de cambios representan una interfaz pblica hacia los mecanismos de funcionamiento del automvil Para conducir no es necesario conocer la mecnica del automvil (su implementacin)
Modularidad
!
El cdigo de un objeto puede desarrollarse y mantenerse independientemente del cdigo de los otros objetos Slo son visibles las partes necesarias para utilizar un objeto (interfaz pblica): mtodos y atributos Las dems partes son ocultas (privadas). No es necesario saber como esta hecho para utilizarlo
Conceptos de Orientacin a Objetos
Ocultacin de informacin
!
21
22
Encapsulacin
!
Abstraccin
!
Definicin parcial del estado y del comportamiento Declaracin del comportamiento (interfaz)
Ejemplo
El volante, el cuentakilmetros, los pedales y la palanca de cambios representan una interfaz pblica hacia los mecanismos de funcionamiento del automvil Para conducir no es necesario conocer la mecnica del automvil (su implementacin)
!
Clases abstractas
!
Especificacin de datos y comportamiento comn a un conjunto de clases Forzar a que las subclases proporcionen un comportamiento especfico Declaracin de mtodos a incorporar en las clases que implementen la interfaz Definicin de constantes
Interfaces
!
23
24
Interfaces
! !
Herencia de clases
!
La interfaz define un conjunto de mtodos Una clase de objetos puede implementar una o varias interfaces
!
Se extiende un tipo de datos, heredando las caractersticas comunes y especificando las diferencias Permite la reutilizacin de cdigo
!
!
25
26
Herencia de clases
!
Polimorfismo
!
Los mtodos y atributos de la superclase son heredados por las subclases, pero, en la especializacin:
!
Polimorfismo inclusivo
Un objeto de un tipo dado (tipo esttico) puede ser sustituido por otro del mismo tipo, pero de distinta clase
Las interfaces definen tipos Las clases definen implementaciones
Polimorfismo paramtrico
Un mtodo puede actuar sobre diversos tipos Ejemplo: el mtodo insertar() de una lista ordenada funciona sobre cualquier clase que tenga implementado el mtodo menor()
Sobrecarga de mtodo
un mismo nombre de mtodo y varias implementaciones del mismo (en la misma o distintas clases) Ejemplo: el mtodo insertar() implementado en una lista, en una lista ordenada, en un conjunto y en una tabla.
27
28
Vinculacin
!
Vinculacin dinmica
!
Puede ser
!
Cuando una variable de un tipo Coche posee una referencia a un objeto de clase Taxi (siendo Taxi descendiente de Coche) y se invoca a un mtodo por medio de la variable, cul se ejecuta si hay una implementacin en Coche y otra en Taxi (p.ej. Arranca)?
Los lenguajes con vinculacin dinmica tratan de asociar la ejecucin al tipo ms especfico, por tanto a Taxi El mecanismo general de bsqueda es empezar por el tipo dinmico de la variable receptora y remontarse por la jerarqua de herencia hasta encontrar una implementacin vlida
29
30
Clases abstractas
!
Implementacin de interfaces
! ! !
Describen partes de objetos Se usan en la jerarqua de herencia de clases Utilizadas en polimorfismo para definir operaciones comunes No pueden crearse objetos directamente de una clase abstracta
la clase Automvil permite definir qu se puede hacer con objetos de las subclases pero los objetos son ejemplares de clases concretas: Taxi, Camin, etc.
Las interfaces slo definen la signatura de un conjunto de mtodos Las clases implementan interfaces Facilitan la definicin de bibliotecas de componentes reutilizables y armazones software (frameworks)
31
32
Composicin de objetos
! !
Todas las clases que implementan una interfaz pueden responder a un mismo conjunto de peticiones Los clientes no tienen que preocuparse de las clases especficas de los objetos que utilizan
!
Agregar o componer varios objetos para obtener una mayor funcionalidad Un objeto se puede construir a partir de otros objetos
La implementacin del cliente est menos atada a la evolucin de dichas clases Es posible incluso cambiar unas clases por otras (siempre que implementen las operaciones de la interfaz)
Declarar variables del tipo de interfaces, no de clases Utilizar patrones de creacin que abstraigan el proceso de creacin de objetos concretos
33
34
! !
Reutilizacin de caja blanca: los aspectos internos de la superclase son visibles a las subclases Soportada por el lenguaje de programacin Esttica: se define en tiempo de compilacin
! !
! !
Reutilizacin de caja negra: no hay visibilidad de los aspectos internos de los objetos (objetos como cajas negras) Requiere interfaces bien definidas Dinmica: se define en tiempo de ejecucin
La herencia impone al menos una parte de la representacin fsica a las subclases Cambios en la superclase pueden afectar a las subclases Las implementaciones de superclase y subclases estn ligadas Si hacen falta cambios para reutilizar una clase en nuevos dominios de aplicacin habr que cambiarla Limita la flexibilidad y al final la reutilizacin
35
36
Los objetos adquieren referencias de otros objetos Los objetos tienen que respetar las interfaces de los otros objetos
Exige un diseo cuidadoso de las interfaces
! !
Hay menos dependencias de implementacin Habr ms objetos en el sistema y por tanto el comportamiento del sistema depender de las interacciones entre objetos en vez de estar definido en una clase
Sin embargo,
!
El conjunto de componentes (objetos) no suele ser lo suficientemente rico en la prctica Mediante herencia se pueden crear nuevos componentes que componer con los existentes
37
38
En la delegacin un objeto que recibe una peticin delega la ejecucin del mtodo a otro objeto (el delegado)
En el fondo esto es lo que hace una subclase respecto a la superclase (al objeto this)
Ejemplo: la clase Ventana, en vez de heredar de Rectangulo (aunque las ventanas son rectangulares) tiene una referencia a un objeto asociado de esa clase y delega algunas operaciones en ella
Si hiciera falta cambiar la forma de la ventana en tiempo de ejecucin, por ejemplo a Circulo, bastara con cambiar la referencia del objeto correspondiente
VentanaGUI area()
rectangulo
VentanaGUI area()
return rectangulo.area()
39
40
Cundo usar...?
!
Relacin es parte de Implica que ambos objetos tienen el mismo tiempo de vida Un objeto puede solicitar una operacin en otro objeto pero no es responsable de l La relacin de asociacin es ms dbil que la de agregacin
! !
La diferencia es ms de intencin que de implementacin Normalmente hay menos agregaciones que asociaciones pero son ms duraderas
!
41
42
Bibliotecas
!
Dependiendo del sistema que pretendemos implementar realizaremos unas u otras abstracciones del mundo real
!
Bibliotecas estndar:
! !
El constructor de automviles definir como objetos las partes del motor, las ruedas, el chsis, la transmisin, etc. El conductor ver el volante, el panel de mandos, los pedales, etc. El guardia civil considerar la velocidad y la matrcula
Estn probadas, son robustas y eficientes Suelen adaptarse bien a mltiples dominios
Fciles de comprender Verificables por el usuario que define los requisitos del sistema
43
44
Concurrencia
!
Ada: package Smalltalk: clase Process C++: utilizacin de libreras que llaman al sistema Java: clase Thread e interfaz Runnable
Objeto activo: tiene su propio hilo de ejecucin y contorla su flujo de aplicacin Objeto pasivo (modelo clsico): slo est activo cuando recibe un mensaje de otro objeto (que le presta el flujo de ejecucin)
45
46
Persistencia
!
Genericidad
!
En algn proceso se crea el objeto Se guarda su estado en algn repositorio (fichero, BD) Otros procesos pueden recrearlo y volver a guardarlo
!
Ejemplo: con Lista<item> se puede crear Lista<int>, Lista<persona>, Lista<Lista<persona>> La plantilla se puede parametrizar por otras clases, tipos y operaciones
47
48
Excepciones
! !
Situaciones anormales o excepcionales que tienen lugar durante la invocacin de un mtodo Existen en C++, Ada y Java
Cobol
Algol - w
Smalltalk 80
Ada Modula 2
C ++
Ansi C ++
Ada 95
Delphi
Java
Juan Pavn Mestras Facultad de Informtica UCM, 2004-05 Conceptos de Orientacin a Objetos
C#
Conceptos de Orientacin a Objetos
49
50
C++
Si Multiple Si Fuerte Dinmica y esttica No No Si No
Java
Si Simple No Fuerte Dinmica Si Si Si No
Smalltalk
No Simple No Sin tipos Dinmica No Si No No
Smalltalk
52
Bibliografa
!
! ! ! ! !
Un programa orientado a objetos es un conjunto de clases que describen el comportamiento de los objetos del sistema La computacin se realiza por objetos que se comunican entre s, solicitando que otros objetos realicen determinadas acciones Los objetos se comunican mediante mensajes Cada objeto tiene su propio estado, que consta de otros objetos Cada objeto es un ejemplar de una clase (agrupacin de objetos) Todos los objetos que son ejemplares de una misma clase pueden realizar las mismas acciones Las clases estn organizadas en una jerarqua de herencia
Conceptos de Orientacin a Objetos
T. Budd, An introduction to Object-Oriented Programming (Third Edition). Pearson Education, 2001 E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Paterns: Elements of Reusable Object-Oriented Software. AddisonWesley, 1994 B. Stroustrup, The C++ Programming Language (Third Edition). Addison-Wesley, 1997 Agustn Froufe. Java 2. Manual de usuario y tutorial. Ed. Ra-Ma J. Snchez, G. Huecas, B. Fernndez y P. Moreno, Iniciacin y referencia: Java 2. Osborne McGraw-Hill, 2001. B. Meyer, Object-Oriented Software Construction (Second Edition). Prentice Hall, 1997
! !
53
54