Download - Modular i Dad
-
Programacin Orientada a Objetos
Tema 2: Modularidad
1
Modularidad:
Tipos abstractos de datos
TEMA 2
-
Programacin Orientada a Objetos
Tema 2: Modularidad
2
CONTENIDOS
1. Abstraccin
2. Tipos de datos
3. Tipos abstractos de datos
4. Modularidad
5. Reutilizacin
6. Paradigmas y lenguajes
7. Diseo estructurado vs. OO
-
Programacin Orientada a Objetos
Tema 2: Modularidad
3
Abstraccin
Supresin intencionada, u ocultamiento, de algunos detalles de un proceso o artefacto, con el objeto de destacar de manera ms clara otros aspectos, detalles o estructuras.
Capacidad de centrarse en las caractersticas esenciales de las distintas partes de un sistema, ignorando sus propiedades accidentales.
Permite dividir la informacin en componentes aislados que posteriormente se ensamblan para construir el todo.
Limitacin de la capacidad humana para operar la complejidad:
Ordenando el caos: divide et impera.
En SW: Abstraccin Modularidad
-
Programacin Orientada a Objetos
Tema 2: Modularidad
4
Abstraccin
Arbol
- altura
- tipo de madera
- tipo de hoja
- tipo de fruto
Castao
Olmo
Abeto
Chopo
Abedul
Haya
Pino
Persona
DNI
Nombre
Edad
calcularEdad()
-
Programacin Orientada a Objetos
Tema 2: Modularidad
5
Abstraccin aplicada:
Diferentes niveles: Nos centramos en los elementos ms
grandes e importantes.
Progresivamente: Tratamos volmenes de informacin
menores que revelen ms detalles.
Diferentes tipos: Funcional o procedural,
de Datos.
Abstraccin
-
Programacin Orientada a Objetos
Tema 2: Modularidad
6
Abstraccin
Encapsulacin:
Proceso de almacenar en un mismo
compartimento los elementos de una
abstraccin que constituyen su estructura y su
comportamiento [Booch96]
-
Programacin Orientada a Objetos
Tema 2: Modularidad
7
Tipos de Datos
Un tipo de dato es un conjunto de valores y un
conjunto de operaciones definidas por sus
valores.
Tipo de dato = Representacin + Operaciones.
Ejemplos:
Tipo de datos entero, operaciones de +,-,*,/.
Tipo cadena, operaciones de concatenacin,
subcadena, etc.
-
Programacin Orientada a Objetos
Tema 2: Modularidad
8
Tipos Abstractos de Datos
Los TADs permiten ampliar los tipos de datos definidos por el lenguaje de programacin.
Un tipo de dato definido por el programador se denomina TAD.
Un TAD es un tipo de datos que consta de datos y operaciones que se pueden realizar sobre esos datos.
Los TADs ocultan la implementacin de las operaciones definidas por el usuario asociadas con el tipo de datos.
La ocultacin de informacin de un TAD significa que poseen interfaces pblicos (operaciones que se pueden realizar), sin embargo, las implementaciones de esos interfaces son privados.
-
Programacin Orientada a Objetos
Tema 2: Modularidad
9
Un TAD consta de :
TIPO: tipo (=cjto de objetos) que se est especificando
FUNCIONES: signatura (tipo de los argumentos y resultado)
AXIOMAS: definicin implcita del valor de la funcin
INVARIANTES: condicin booleana que debe mantenerse con exactitud
PRECONDICIONES
POSTCONDICIONES
Tipos Abstractos de Datos
-
Programacin Orientada a Objetos
Tema 2: Modularidad
10
Ejemplo TAD Pila
TIPO Pila[X]
FUNCIONES
poner: Pila[X] x X Pila[X]
vacia: Pila[X] Boolean
item: Pila[X] X
new: Pila[X]
AXIOMAS
Para x: T, s: Pila[T];
item(poner(s,x)) = x
vacia(new)
not vacia(poner(s,x))
PRECONDICIONES
item (s:Pila[T]) requiere not vacia(s)
Tipos Abstractos de Datos
-
Programacin Orientada a Objetos
Tema 2: Modularidad
11
Modularidad
Propiedad que tiene un sistema que ha sido descompuesto en un conjunto de mdulos cohesivos y dbilmente acoplados [Booch96]
Alta cohesin:
Un mdulo con responsabilidades altamente relacionadas y que no hace una gran cantidad de trabajo.
Bajo acoplamiento: Un mdulo que no depende de demasiados otros mdulos.
Favorece: Comprensin modular: Es posible entender un mdulo sin conocer los otros.
Continuidad modular: Un cambio en la especificacin afecta slo a un mdulo o a unos pocos.
Proteccin modular: El efecto de una situacin anormal producida en un mdulo afecta slo a ste o a unos pocos.
Los mdulos se comunican mediante interfaces bien definidas.
-
Programacin Orientada a Objetos
Tema 2: Modularidad
12
Modularidad
Programa modular: formado por un conjunto de mdulos.
Mdulo: unidad bsica de descomposicin de un sistema software. Los mdulos deben ser lo ms independientes posibles.
Un mtodo de construccin de software es modular si ayuda a producir sistemas software a partir de elementos autnomos interconectados por una estructura simple y coherente.
La programacin modular trata de descomponer un programa en un pequeo nmero de abstracciones coherentes que pertenecen al dominio del problema y cuya complejidad interna esta oculta por el interfaz.
-
Programacin Orientada a Objetos
Tema 2: Modularidad
13
Modularidad
Un mdulo se estructura mediante una interfaz y una
implementacin.
Esta compuesto por un conjunto de operaciones y
atributos.
Primitivas de
acceso
Atributos Operaciones Seccin
Privada
Interfaz
-
Programacin Orientada a Objetos
Tema 2: Modularidad
14
Modularidad
Reglas para obtener mdulos:
Unidades modulares:
El lenguaje debe proporcionar estructuras modulares con las cuales se puedan describir las diferentes unidades.
POO Clases.
Ocultacin de informacin:
Todos los mdulos deben seguir el principio de ocultacin de informacin.
Una abstraccin de datos puede verse como que tiene dos caras:
Interfaz: operaciones que definen el comportamiento (cliente)
Implementacin (programador)
-
Programacin Orientada a Objetos
Tema 2: Modularidad
15
Modularidad
Principio abierto-cerrado: Un mdulo se considera a
la vez cerrado (terminado, til o activo) y abierto
(cambios y modificaciones). No debe afectar a los
dems mdulos.
Un mdulo est abierto si est disponible para ampliarlo.
Un mdulo est cerrado si est disponible para su uso.
Los dos objetivos son incompatibles con las tcnicas
tradicionales:
o est abierto no se puede utilizar todava.
o se cierra cualquier cambio provoca cambios en cadena.
-
Programacin Orientada a Objetos
Tema 2: Modularidad
16
Representacin
NombreCli:String
Codigo:String
Saldo:Entero
Operaciones
reintegro()
ingreso()
verSaldo()
calculaIntereses()
Interfaz
reintegro()
ingreso()
verSaldo()
NO SI
EJEMPLO: Mdulo que define cuentas bancarias
Un modulo incluye una
estructura de datos junto con
un conjunto de operaciones
para manipularla.
Modularidad
-
Programacin Orientada a Objetos
Tema 2: Modularidad
17
Reutilizacin
Por qu el software no es como el hardware
(catlogos de dispositivos que se combinan)?
Por qu cada nuevo proyecto software arranca de la
nada?
Creciente importancia de los componentes en la
industria del software: (COM, JavaBeans, ).
Internet favorece la reutilizacin.
La tecnologa OO har realidad en un futuro
cercano el sueo de una industria basada en
componentes.
-
Programacin Orientada a Objetos
Tema 2: Modularidad
18
Reutilizacin
Beneficios esperados de la reutilizacin:
CONSUMIR elementos reutilizables:
Oportunidad (se reduce el tiempo de desarrollo).
=> Mejora la productividad.
Disminuye el esfuerzo del mantenimiento.
Aumenta fiabilidad.
Aumenta eficiencia.
PRODUCIR elementos reutilizables:
Inversin: preservar la experiencia de los mejores desarrolladores.
Si un elemento software se utilizar en muchos proyectos es rentable invertir en mejorar su calidad.
Consumir antes de producir
-
Programacin Orientada a Objetos
Tema 2: Modularidad
19
Reutilizacin
Qu debemos reutilizar?
PERSONAL:
La experiencia previa ayuda en el nuevo desarrollo.
DISEO:
Difcil garantizar compatibilidad diseo-implementacin.
Seguir un enfoque donde la diferencia entre mdulo diseo y mdulo de implementacin desaparece.
Necesidad de generalidad en los componentes.
PATRONES DE DISEO:
Ideas aplicables a toda una gama de dominios.
Un patrn propone una solucin para un problema de diseo.
-
Programacin Orientada a Objetos
Tema 2: Modularidad
20
Reutilizacin
Por qu no es comn la reutilizacin? Naturaleza repetitiva de la programacin (ordenar, buscar, recorrer, ...)
Cuntas veces en los ltimos 6 meses has escrito cdigo para buscar un elemento en una coleccin?
Obstculos: Sndrome N.I.H. (Not Invented Here): Reaccin cautelosa frente a componentes
nuevos. Coste adicional de aprendizaje.
Econmicos: Se centran en los costes a corto plazo.
Estrategias de las compaas software: Y si el cliente no vuelve a necesitarnos?.
Dificultades tcnicas: Disear cdigo reutilizable es difcil.
Hacemos las mismas cosas pero no de la misma forma.
Difcil captura de las similitudes.
Permitir adaptacin.
La nocin correcta de mdulo debe reconciliar: abierto - cerrado
reutilizacin - extensibilidad
-
Programacin Orientada a Objetos
Tema 2: Modularidad
21
Paradigmas - Lenguajes A lo largo del tiempo se han utilizado diferentes maneras de construir sistemas
(paradigmas) persiguiendo parecidos objetivos.
Paradigma de Construccin de un Sistema:
Coleccin de conceptos que guan el proceso de construccin de un sistema,
determinando su estructura. Estos conceptos controlan la forma en que pensamos y
formulamos los sistemas.
Un lenguaje de programacin refleja un paradigma:
PARADIGMA
Imperativo
Funcional
Lgico
Orientado a Objetos
LENGUAJE
COBOL, Pascal, C
Lisp, Miranda, Haskel
Prolog
Smalltalk, Eiffel, C++, Java
ELEMENTOS
Algoritmos
Funciones-Reglas If-Then
Predicados-Reglas If-Then
Clases y Objetos
-
Programacin Orientada a Objetos
Tema 2: Modularidad
22
La abstraccin es la clave para disear buen software.
Los lenguajes de programacin de alto nivel permiten al
programador abstraerse de la arquitectura de la mquina
donde se ejecuta el software (de propsito general).
Mecanismos para disear programas modulares:
Procedimientos o funciones Mdulos
Tipos abstractos de datos (TADS)
Objetos
Paradigmas - Lenguajes
-
Programacin Orientada a Objetos
Tema 2: Modularidad
23
Diseo estructurado vs. OO
Qu criterio usamos para encontrar los mdulos?
Objetos/
Datos
Acciones/
Funciones
Procesadores
A) Unidades de descomposicin funcional Enfoque tradicional
B) Basndose en los principales tipos de datos Enfoque OO
Las tres fuerzas de la computacin
-
Programacin Orientada a Objetos
Tema 2: Modularidad
24
Diseo estructurado vs. OO
A
B C D
E H G F
Secuencia
Bucle Condicional
Abstraccin funcional de ms alto nivel
Refin
am
iento
s sucesivo
s
Descomposicin funcional:
Respuesta tradicional a la cuestin de modularizacin
Responde a los requisitos de modularidad?
-
Programacin Orientada a Objetos
Tema 2: Modularidad
25
Diseo estructurado vs. OO
Inconvenientes de la descomposicin funcional:
Funcin principal: Cima del sistema
El programa principal es una propiedad voltil
Sistemas reales no tienen cima
Mejor la visin de un conjunto de servicios
Centrado en la interfaz
Primera pregunta: Que har el sistema?
La arquitectura del software debe basarse en
propiedades ms profundas.
Ordenacin temporal prematura
EX
TE
NS
IBIL
IDA
D
-
Programacin Orientada a Objetos
Tema 2: Modularidad
26
Diseo estructurado vs. OO
Inconvenientes de la descomposicin funcional:
Se desarrollan elementos software para satisfacer necesidades
especficas de otro elemento del nivel superior.
Cultura del proyecto actual
Las estructuras de datos son descuidadas.
Funciones y datos deben jugar un papel complementario.
Cuando un sistema evoluciona los datos son ms estables que
los procesos.
RE
UT
ILIZ
AC
IN
-
Programacin Orientada a Objetos
Tema 2: Modularidad
27
Diseo estructurado vs. OO
Ventajas de la descomposicin funcional:
Disciplina de pensamiento lgica y bien organizada.
Tcnica simple, fcil de aplicar.
til para pequeos programas y algoritmos individuales.
Buena para documentar diseos (describir algoritmos).
Promueve el desarrollo ordenado de sistemas
Adecuada para dominar la complejidad
-
Programacin Orientada a Objetos
Tema 2: Modularidad
28
Diseo estructurado vs. OO
En la programacin tradicional tenemos por un lado
los datos y por otro las operaciones sobre esos datos,
pero son entidades independientes.
datos operaciones
-
Programacin Orientada a Objetos
Tema 2: Modularidad
29
En la programacin OO agrupamos (encapsulamos)
conjuntos de datos relacionados entre s y operaciones
sobre esos datos en entidades que llamamos objetos.
Objeto
Los datos normalmente estn
ocultos y nicamente son
accesibles dentro del propio
objeto
Algunas operaciones estn
tambin ocultas, y representan
servicios de utilidad dentro del
propio objeto
Ciertas operaciones son accesibles desde
el exterior y constituyen servicios que
el objeto ofrece a otros objetos
Diseo estructurado vs. OO
-
Programacin Orientada a Objetos
Tema 2: Modularidad
30
Con la orientacin a objetos, construimos pequeos
modelos software de la realidad y simulamos sta.
Un sistema O.O. es un conjunto de objetos que
interactan entre s envindose mensajes mediante
los cules se solicitan servicios unos a otros.
Diseo estructurado vs. OO
-
Programacin Orientada a Objetos
Tema 2: Modularidad
31
Las abstracciones funcionales son ms voltiles que las de datos.
Esa es una de las ventajas de la OO.
Diseo estructurado vs. OO
-
Programacin Orientada a Objetos
Tema 2: Modularidad
32
Desarrollo de software orientado a objetos :
Definicin
Mtodo de desarrollo de software que basa la arquitectura del
sistema en mdulos deducidos de los tipos de objetos que se
manipulan (en lugar de basarse en la funcin o funciones a las que
el sistema est destinado a asegurar).
Hay que centrar la atencin no sobre lo que HACE el sistema,
sino principalmente sobre lo que ES el sistema, en trminos de
datos, de componentes, en trmino de manejo de entidades, de
reaccin a las solicitudes.
Orientacin a Objetos