Вы находитесь на странице: 1из 28

Federico Peinado www.federicopeinado.

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

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

No slo es un paradigma de programacin Programacin Orientada a Objetos Es una filosofa que afecta a buena parte del

proceso de desarrollo de software


Diseo Orientado a Objetos

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

Diseo Estructurado (DE) tipo Pascal o C


Datos y procedimientos estn separados Los procedimientos se pasan datos y operan sobre ellos Los programas se dividen en mdulos de procedimientos

Diseo Orientado a Objetos (DOO) tipo Java o C++


Datos (= atributos) y procedimientos (= mtodos) estn

similares, que se usan entre s y usan a los de otros mdulos

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

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

Entidades software dinmicas responsables de una parte de la funcionalidad del programa


Combinan tanto datos como procedimientos Se relacionan con otros objetos heredando su

Tienen identidad propia

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

otros objetos pueden referenciarlos

Atributos: valor de los datos que contienen o referencias a otros objetos

Tienen ciertos comportamientos

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

Mtodos: procedimientos que es capaz de ejecutar pudiendo, segn su

Entidades

software que definen la estructura de un tipo concreto de objetos


Describe sus atributos y sus mtodos Es el punto de partida para crear nuevos objetos

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

formal por el que un objeto proporciona ordenes a otro objeto


El objeto cliente debe llamar al mtodo apropiado del

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.

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

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

Ideal del DOO: Maximizar cohesin y minimizar acoplamiento


Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

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

y en general todas las bondades que persigue la Ingeniera del Software


Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

12

Polimorfismo

Encapsulacin

Herencia
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

13

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

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

declararse como privados


Lo

ms importante es disear esta interfaz

Todo lo dems se puede disear ms tarde


Si est mal diseada, una vez se haya usado por

otras clases ser mucho ms difcil arreglarlo todo


Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

15

// Opcin A class Punto { public int _x; public int _y; }


// Opcin B class Punto { private int _x; private int _y;


public int leeX(){ return _x; } public int leeY(){ return _y; } public void ponX(int x){ _x = x; } public void ponY(int y){ _y = y; }

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)
}

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

16

Ojo!

Aqu estamos devolviendo manipuladores de los atributos privados


No estamos ocultando realmente la implementacin

(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

La encapsulacin indica la flexibilidad de una clase


Cuanto cdigo externo a esta clase deberamos cambiar si

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? ...

Y si son necesarios, es preferible que estn en alguna interfaz que

implemente la clase, para al menos desacoplar a otras clases de posibles cambios en la estructura interna de la clase

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

18

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

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)

de Sustitucin de Liskov (Liskov,

Si B es un subtipo de A entonces en cualquier

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

La herencia impone una relacin muy fuerte


El comportamiento heredado se ja de manera esttica, de modo

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

Pero la herencia es necesaria para ciertas cosas


Acceso a miembros protegidos Sobrecarga de mtodos
Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

Mayor flexibilidad sin afectar de ninguna forma a los clientes Clases ms robustas y seguras

22

Es

recomendable hacer jerarquas de clases abstractas


Gracias a la herencia habr varios grados de

generalizacin, facilitando la reutilizacin

Las partes ms inestables (la implementacin)

Creamos subclases que implementan el estado y el comportamiento de aquella superclase abstracta que queramos aprovechar

En

Java tambin es recomendable hacer jerarquas de herencia mltiple de interfaces


Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

dependen de las ms estables (los mtodos abstractos) Cambios localizados que no afectan a todo el programa Diseos ms flexibles y modulares

23

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

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

El objeto cliente slo sabe que el objeto receptor sabe

Al igual que la herencia favorece la flexibilidad, al permitir modificar un comportamiento aadiendo nuevas clases, sin modificar las ya existentes

responder a la orden dada El objeto receptor es el responsable de ejecutar la orden adecuadamente

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

25

Ad hoc: Sobrecarga de mtodos (overloading)


Un mismo mtodo tiene mltiples implementaciones, segn los

Por inclusin: Sobrescritura de mtodos (overriding)

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

Puro: Variables polimrficas

mismos argumentos En Java el mtodo de la superclase queda redefinido por el de la subclase en tiempo de ejecucin (vinculacin dinmica)

Variables(-referencia) declaradas segn una clase o interfaz, cuyos

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)

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

26

Aprovechar

las variables polimrficas de Java con su vinculacin dinmica


Ojo! Consultar el tipo de un objeto (mediante

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)

Laboratorio de Programacin de Sistemas Ing. Software Orientada a Objetos

27

Federico Peinado www.federicopeinado.es

Вам также может понравиться