Академический Документы
Профессиональный Документы
Культура Документы
es
Depto. de Ingeniera del Software e Inteligencia Artificial disia.fdi.ucm.es
Facultad de Informtica www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es
Mtodos para desarrollar Planificacin Anlisis Especificacin Diseo Codificacin Documentacin Pruebas Implantacin Mantenimiento Reutilizacin
software en serie
No slo es un paradigma de programacin Programacin Orientada a Objetos Es una filosofa que afecta a buena parte del
Adems
de la naturalidad que se obtiene al reflejar objetos reales en objetos software, el DOO incorpora tcnicas de programacin que fomentan la reutilizacin y facilitan la ampliacin/adaptacin de los programas
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
juntos formando lo que llamamos objetos Los objetos se comunican entre ellos, transmitiendo rdenes e informacin (incluso referencias a otros objetos) Los programas se dividen en paquetes de clases (de objetos) similares, que se relacionan de varias formas entre s y se relacionan con las de otros paquetes
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
Abstraccin
Ocultar algunos aspectos de bajo nivel para que se
Encapsulacin
muestren con mayor claridad otros de ms alto nivel Simplificar la realidad que queremos modelar para centrarnos en el comportamiento de los objetos software y no en la implementacin de su cdigo
Ocultar algunos aspectos internos para que se muestren
con mayor claridad otros aspectos ms externos Restringir el acceso a los atributos y mtodos de los objetos para centrarnos en el tipo de rdenes e informacin que se transmiten y no en su estructura y funcionamiento interno
estado y sus comportamientos, o actuando como clientes de la funcionalidad que otros ofrecen
Son siempre ejemplares de una cierta clase Tienen un identificador nico mediante el que
Tienen un estado
con los que comunicarse para dar rdenes, enviar o recibir informacin estado, operar sobre sus atributos o delegar parte del trabajo aprovechndose de los comportamientos de otros objetos
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
Entidades
Relaciones entre clases Generalizacin y su inversa (especializacin) Se realiza mediante la herencia entre clases Composicin (parte de) y su inversa (todo) Se realiza mediante la inclusin de referencias a los objetos que son partes en los atributos del objeto que es todo Asociacin (usa a) y su inversa (es usado por) Tambin se realiza mediante inclusin de referencias a los objetos usados en los atributos del objeto que los usa
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
Proceso
objeto receptor, proporcionarle toda la informacin necesaria (argumentos) y recogiendo los resultados cuando los haya El receptor debe realizar la funcionalidad esperada segn la semntica de la orden dada, o delegar en un tercero dicha responsabilidad (y as sucesivamente)
El mtodo es un bloque de cdigo a ejecutar desde el que se puede acceder a los atributos del objeto y modificar su valor, llamar a mtodos del propio objeto o de otros objetos, etc.
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
1.
2. 3.
Analizar los requisitos del problema Identificar las clases de objetos necesarias Organizar dichas clases
Establecer relaciones de generalizacin (jerarqua de herencia de clases) 2. Establecer relaciones de composicin 3. Establecer relaciones de asociacin
1.
Cohesin
Relacin lgica entre los atributos y los mtodos de una
Acoplamiento
misma clase Cuanto mayor es esta relacin mejor se comprende la clase y mejor se mantiene el cdigo del programa
Relacin lgica entre los atributos y los mtodos de
distintas clases (llamadas clases acopladas) Cuanto menor es esta relacin mejor se comprenden las clases por separado y mejor se mantiene el cdigo del programa
Obviamente siempre debe existir cierto nivel de acoplamiento
10
Filosofa de Divide y vencers Mejor intentarlo con muchas clases pequeas que con
Cuanto
ms fcil de comprender es una clase, ms fcil de usar, probar y reutilizar, y mejor se mantiene el cdigo del programa
Ideal del DOO: Una clase = Un concepto
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
pocas y muy grandes En un programa monoltico compuesto de una sola clase o muy pocas clases grandes, no tiene mucho sentido hablar de encapsulacin
11
Correccin
Simplicidad Claridad
Seguridad
Escalabilidad Optimizacin
12
Polimorfismo
Encapsulacin
Herencia
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
13
14
Proteger
la implementacin interna de una clase tras una interfaz simple ayuda a minimizar el acoplamiento entre clases
En general todos los atributos de una clase deben
15
En la prctica (gracias al compilador) tiene el mismo coste en ejecucin Todo lo que hace la opcin A se puede hacer con la opcin B De hecho la opcin B es ms flexible que la opcin A (si se empieza usando la opcin A, luego para cambiarlo -por ejemplo a la B- se debe cambiar todo el cdigo que accede a x e y)
}
16
Ojo!
(hay acoplamiento con la clase cliente) No hay control sobre las class Circulo { precondiciones de la clase El cliente se puede quedar private Punto _centro; con referencias a estos private int _radio; manipuladores y usarlos public Punto usarCentro() { posteriormente cuando return _centro; se hayan vuelto invlidos
}
}
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
17
Filosofa: En vez de pedir a otro objeto la informacin que necesitas para hacer un trabajo, pdele a dicho objeto que haga el trabajo por ti Por defecto no ofrecer mtodos que accedan o manipulen atributos privados de una clase (get y set)
cambiase la implementacin de esta clase? Es posible reducir ms el nmero de mtodos pblicos que ofrece la clase, para aumentar su proteccin? ...
implemente la clase, para al menos desacoplar a otras clases de posibles cambios en la estructura interna de la clase
18
19
Permite
especializar un programa sin modificar el cdigo existente, tan slo aadiendo clases Favorece la reutilizacin al evitar que se repita cdigo (heredado) entre clases Favorece la extensibilidad y la flexibilidad
Las subclases no slo pueden ampliar el
comportamiento de su superclase (haciendo que esta pueda usarse desde cualquier parte donde pueda usarse la subclase), sino que pueden restringirlo o redefinirlo totalmente
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
20
Principio
1988)
La
herencia crea subclases, y si adems se satisface este principio, crea subtipos Si no se satisface este principio, al hacer una referencia a algn objeto de A nos vemos obligados a tener presente la existencia de la clase B (ms acoplamiento)
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos
situacin se puede sustituir un ejemplar de A por otro de B obtenindose el mismo comportamiento observable
21
Si una relacin entre dos clases se puede expresar de varias formas, debemos usar la relacin ms dbil (menor acoplamiento)
La composicin tiene otras ventajas
La composicin es ms dbil que la herencia
que no puede cambiarse en tiempo de ejecucin Un cambio en alguna de las superclases obliga a la revisin y modicacin de todas las subclases en la jerarqua
Mayor flexibilidad sin afectar de ninguna forma a los clientes Clases ms robustas y seguras
22
Es
Creamos subclases que implementan el estado y el comportamiento de aquella superclase abstracta que queramos aprovechar
En
dependen de las ms estables (los mtodos abstractos) Cambios localizados que no afectan a todo el programa Diseos ms flexibles y modulares
23
24
Capacidad de distintas clases para responder a la misma llamada a mtodo, de modo que cada una lo implementa de distinta forma Permite ocultar distintas implementaciones bajo una interfaz comn y hacer que vare el comportamiento del mtodo segn el objeto que ha recibido la llamada
Al igual que la herencia favorece la flexibilidad, al permitir modificar un comportamiento aadiendo nuevas clases, sin modificar las ya existentes
25
argumentos que reciba o el resultado que devuelva Ocurre en Java y muchos otros lenguajes, en tiempo de compilacin (vinculacin esttica)
Un mtodo que tanto en la superclase como en la subclase tiene los
mismos argumentos En Java el mtodo de la superclase queda redefinido por el de la subclase en tiempo de ejecucin (vinculacin dinmica)
valores(-objeto) luego se podran crear como ejemplares de cualquier subclase o clase que implementa dicho interfaz En Java esto ocurre a menudo, siempre por vinculacin dinmica (salvo en partes especiales como en llamadas a mtodos estticos o privados, que no se pueden sobrescribir o usos de atributos)
26
Aprovechar
instanceof) para luego invocar el mtodo especfico de ese tipo no es hacer polimorfismo
En
general debemos evitar el uso innecesario de instanceof y cualquier otra distincin de casos (switch) por tipo de objeto, o downcasting (conversin de tipo a subtipo)
27