2. Objetivos
1. Conocer y Entender los conceptos fundamentales
de la Programación orientada a objetos.
2. Aplicar los conceptos de POO para el diseño y
programación.
3. Analizar los diferentes niveles de reutilización que
permite la POO.
3. Palabras Clave
• Objetos y Clases
• Atributos
• Mensajes y Métodos
• Encapsulamiento y ocultamiento
• Interfaces
• Herencia de clases
• Polimorfismo
• Composición de Objetos
6. - Frecuentemente
sigue el método
de resolución de
problemas de la
vida real.
Preliminar
P.O.O
- El análisis y
diseño OO modela
el mundo en
función a objetos
con: algún estado,
comportamiento y
determinados
eventos.
8. - Organización de los
programas tratando de
representar el mundo
real.
- Un programa se
compone de un conjunto
de objetos que
interactúan por
mensajes.
- Cada objeto es una
abstracción del mundo
real y realiza una única
tarea.
¿Que es POO?
- Interesa que se
puede hacer con
los objetos mas
que como se
hace.
- Cada objeto es
un ejemplar de
una clase.
- Las clases se
pueden organizar
en una jerarquía
de herencia.
9.
10. 2. CONCEPTOS BASICOS
Definición
(Booch)
Pilares de la
Poo
Abstracción
(Que es mas importante que el Como)
Encapsulamiento
(Atributos + Métodos)
Ocultamiento
( 3 Niveles)
Modularidad
Herencia
(Derivación)
Polimorfismo
(2 tipos)
11. La POO es el método de implementación en el que los
programas se organizan como colecciones cooperativas
de objetos, cada uno de los cuales representa un
ejemplar de una clase y cuyas clases son miembros de
una jerarquía de clases unidas mediante relaciones de
herencia
.
2.1 Definición de Booch
La unidad lógica de
programación es el objeto.
Los objetos tienen
relaciones.
Los objetos con
características idénticas
serán una Clase.
Las clases pertenecen a una
jerarquía (son las clases las
que heredan y no los
objetos).
13. 2.2.1 Abstracción
Es el conocimiento que se tiene de una cosa prescindiendo de
las demás que estén con ella.
La abstracción localiza y oculta los detalles de un modelo o
diseño para generar y manipular objetos
Se puede conocer un objeto observando sin necesidad de ver su
interior, su implementación o su forma de construcción.
Existen dos tipos de abstracción: de datos y funcional.
La abstracción
se enfoca a la
vista exterior de
un objeto
«Este objeto es ….»
14. Abstracción de datos
Es utilizar los datos sin
preocuparse por los
detalles de su
implementación, lo
importante es saber que
tipo de información se
puede utilizar y no como
está almacenado
Abstracción Funcional
Es saber que es lo que hace
un determinado proceso,
pero no como lo hace.
Por ejemplo el proceso
Buscar de la clase Lista, se
sabe que buscara un
elemento sin importar como
lo hará.
Que Atributo
Como Campo
Que Método
Como Algoritmo
Identificar los objetos principales
Definir atributos y métodos principales de cada objeto
Clasificar los objetos según sus semejanzas y diferencias
Establecer como se relacionan y como se comunican entre si
(eventos)
15. 2.2.2 Encapsulamiento
Es el resultado de ocultar los detalles
de implementación (estado interno)
de un objeto respecto de su usuario
El empaque conjunto de datos y
métodos se llama encapsulación
El objeto esconde (protege) sus datos
de los demás objetos y permite el
acceso a los datos mediante sus
propios métodos. Esto es lo que se
llaman ocultamiento de la información
y evita la corrupción de los datos de un
objeto.
Este pilar de POO
definitivamente facilita el
cambio y mejora la modularidad
El encapsulamiento
permite a otros objetos
ver su interior «Este
objeto tiene …»
16. Ocultamiento
Consiste en no permitir el acceso a los
componentes de una clases :atributos
y métodos
Esto se logra con la visibilidad que
ofrecen los lenguajes de programación.
Privado: Solo los miembros de la clase tienen
acceso
Protegido: Solo los miembros de la clase y sus
derivados tienen acceso
Público: Todos tienen acceso
17. 2.2.3 Modularidad
Este concepto ya viene desde la
programación estructurada, y se refiere al
hecho de realizar un programa por partes,
a las cuales se las denomina módulos.
Un módulo es un archivo que contiene un
conjunto de declaraciones y/o procesos.
Una Clase será un modulo independiente.
18. 2.2.4 Herencia
Es una propiedad que permite que los
objetos sean creados a partir de otros ya
existentes, obteniendo características
(métodos y atributos) similares a los ya
existentes.
El gato y el Perro
tendrían la
herencia (métodos
y atributos) del
Mamífero.
Mamífero
Gato Perro
Es la capacidad de crear nuevas clases basándose en
clases previamente definidas, de las que se aprovechan
ciertos datos y métodos, se desechan otros y se añaden
nuevos.
20. 2.2.5 Polimorfismo
Es la capacidad que tienen los objetos de una clase
de responder al mismo mensaje o evento de acuerdo
a los parámetros utilizados durante su invocación.
Hay dos tipos:
• Dinámico: es el que el código no incluye ningún
tipo de especificación sobre el tipo de datos.
TEMPLATE
• Estático: es el que los tipos a los que se aplica el
polimorfismo deben ser explícitamente indicados y
declarados uno por uno antes de ser utilizados.
proceso VS función.
21.
22. 3. DIAGRAMA DE CLASES
Diagrama de
Clases
Partes del DC
Clase Objeto
Atributos
Método
Herencia
Generalización
Especialización
Relación entre
clases
Asociación
La Clase
asociación
Asociación
Reflexiva
Agregación Composición
23. • Es en realidad un complemento de UML
(Lenguaje Unificado de Modelado: estándar
para describir un "plano" del sistema)
• Representa un lenguaje gráfico para
visualizar, especificar, construir y documentar
un sistema.
• Representa las clases, sus partes y la forma
en la que las clases de los objetos están
relacionados uno con otro.
• Es la fuente de generación de código.
Los Diagramas de Clase
24. Partes de un DC
Clases: Una clase es una definición de un tipo de objeto. Es una
descripción generalizada de un conjunto de objetos similares
• Atributos: describe las características de una clase de
objetos.
• Métodos: define el comportamiento de una clase de objetos
Herencia: Permite organizar las definiciones de la clase
para simplificar y facilitar su implementación.
Relación entre clases: Es un término formal para un tipo
de relación.
25. 3.1 Clase
Es la descripción de un conjunto de objetos que
comparten una estructura ( atributos, operaciones,
relaciones y semántica) y un comportamiento.
La estructura de un objeto se define en su clase, por
lo que un objeto es en realidad la instancia de una
clase
Luis Joyanes Aguilar
“Una Clase es un tipo definido por el
usuario(programador) que determina las
estructuras de datos y las operaciones
asociadas con este tipo”
26. 3.1.1 Objeto
Entidad que contiene los atributos que describen el estado de un
objeto del mundo real y las acciones que se asocian con el
objeto del mundo real.
Un objeto es designado con un nombre o un identificador.
Los datos deberían estar ocultos en el objeto, y las operaciones
serían el interface del objeto con el exterior, pero estas
operaciones están encapsuladas en "cajas negras".
OBJETO = DATOS + OPERACIONES
Taylor
Jourdon Booch
27. 3.1.2 Elementos de un Objeto
1. Atributos
Son las características que definen a la clase, es lo que el usuario
(de la clase) puede ver. Es la abstracción.
Son variables que están dentro de los objetos. También son
llamados: propiedades o datos miembro.
Ejemplo: La Fecha definido por 3 datos dia, mes y año
2. Método
Es la forma en que actúa y reacciona ante sus cambios de estado
e intercambio de mensajes con otros objetos.
Son los procesos (funciones o procedimientos) que permiten
trabajar con los datos de los objetos.
La visibilidad de una función viene dada por:
Public (+) permite el acceso desde otras clases.
Private (-) limita el acceso a la clase, solo operaciones de la clase tienen
acceso.
Protected (#) permite el acceso por las subclases. En el caso de
generalización (herencia), las subclases deben tener acceso a los atributos
y operaciones de la superclase, por ello se los define con protected..
29. Generalización Vs Especialización
• Cuando dos clases tienen atributos en común se
debe analizar la relación que guardan entre si:
Las clases con atributos en común pueden conformar una
superclase Una superclase es entonces la
generalización de varias subclases.
De una clase puede derivarse otra llamada Subclase.
30. Asociación: Es una relación semántica (significativa)
entre objetos. Cuando un objeto accede a los atributos y
métodos de otro objeto estamos definiendo una
asociación entre ellos.
Agregación: Es una relación que define que un objeto es
parte de otro objeto. Cuando definimos que un objeto
tiene como atributo otro objeto decimos que es una
agregación. A través de la agregación se definen objetos
compuestos.
3.3 Relación entre clases
31. 3.3.1 Asociaciones entre Clases
Es una relación entre instancias(objetos) de clases,
especificando que los objetos de una clase deben
“conocer'' de alguna manera los objetos de la otra.
El mensaje es el modo en que se comunican e
interrelacionan los objetos entre si.
Por ejemplo:
Un objeto de la clase X envía un mensaje a un objeto
de la clase Y.
Un objeto de la clase Y crea un objeto de la clase X.
Un objeto de la clase X recibe un mensaje con un
objeto de la clase Z como argumento
32. Simbología
• El nombre de la Asociación va debajo
de la línea que la representa.
• Una flecha rellena indica la dirección
de la relación
• Los roles se ubican cerca del final de
la asociación. Estos representan la
manera en que dos clases se ven
entre ellas.
• Normalmente no se ponen el nombre
de la asociación y los roles.
• Cuando la asociación es calificada, el
símbolo correspondiente se coloca al
final de la asociación, contra la clase
que hace de calificador.
• Un calificador en una asociación que
resuelve el problema de la búsqueda. En
el UML la información de identidad se
conoce como calificador, su símbolo es un
pequeño rectángulo adjunto a la clase que
hará la búsqueda-
33. Multiplicidad
• Las notaciones utilizadas
para señalar la
multiplicidad se colocan
cerca del final de una
asociación.
• Estos símbolos indican el
numero de instancias de
una clase vinculadas a una
de las instancias de la otra
clase
• Por ejemplo: Una
empresa puede tener uno
o mas empleados, pero
cada empleado trabaja
para una sola empresa.
34. Navegabilidad
Representa asociaciones bidireccionales (ambos sentidos) o
unidireccionales(un solo sentido).
La navegabilidad bidireccional se representa con una línea
La navegabilidad unidireccional se expresa con una punta de
flecha abierta puesta en el lado de la clase a la que se llega.
La clase Fecha no tiene información de la clase Socio por lo que
la navegabilidad desde la clase Fecha no es posible.
Sin embargo, la clase Socio tiene una referencia a la clase
Fecha por lo que si es viable la navegabilidad en este sentido.
35. La Clase Asociación
Cuando se modela una asociación entre clases, a veces es
necesario incluir otra clase que contiene información valiosa
acerca de la relación.
La siguiente figura muestra una clase asociación para el
ejemplo de los vuelos.
La asociación entre la clase Flight y FrequentFlyer es a través de
una clase llamada MileageCredit. Obsérvese que esto se da en
asociaciones Muchos a Muchos en las que es necesario
almacenar cierta información derivado de la asociación.
36. Asociación Reflexiva
Una clase puede asociarse con sí
misma. Una clase Empleado puede
relacionarse con sí misma a través del
rol gerente/dirige.
No significa que una instancia está
relacionada consigo misma, sino que
una instancia de la clase está
relacionada con otra instancia de la
misma clase.
Una instancia de Employee puede ser
el gerente de otras instancias de
Employee. Como el rol manages tiene
una multiplicidad de 0…*, significa que
puede no tener otros empleados a
quien dirigir.
Una instancia de Employee tiene 1
sólo gerente ó un solo director.
37. 3.3.2 Agregación Básica
Es un tipo especial de asociación utilizado para modelar una
relación “whole to its parts”.
Por ejemplo, Coche es una entidad “whole” y Llanta es una
parte del Coche.
Una asociación con una agregación indica que una clase es
parte de otra clase.
En este tipo de asociación, la clase hijo puede sobrevivir sin
su clase padre.
Para representar una relación de agregación, se dibuja una
línea sólida de la clase padre (total) a la clase hijo (parte),
y con un diamante en el lado de la clase padre.
Una llanta puede existir sin automóvil
38. 3.3.3 Composición
En este caso el ciclo de vida de una
instancia de la clase hijo depende
del ciclo de vida de una instancia
de la clase padre.
A diferencia de la agregación
básica, para representarla el
diamante es lleno.
Por ejemplo:
Una instancia de la clase Company debe
tener al menos una en la clase
Departamento.
En este tipo de relaciones, si una la
instancia Company se elimina,
automáticamente la instancia
Departamento también se elimina.
Otra característica importante es
que la clase hijo solo puede
relacionarse con una instancia de la
clase padre.
Fecha Persona
40. LOGO
No es un bug, es una característica
no documentada.
(anónimo)
Editor's Notes
La reusabilidad de código y la herencia ahorran tiempo y dinero en el desarrollo
Integridad Gracias al encapsulamiento protege sus objetos contra procesos sin derechos de accesos
Pensar en objetos El diseñador no se preocupa de detalles de bajo nivel
Programación mas sencilla Se crea a partir de pequeñas piezas.
La idea básica de este paradigma de programación es agrupar los datos y los procedimientos para manejarlos en una única entidad: el objeto. Cada programa es un objeto, que a su vez está formado de objetos que se relacionan entre ellos.
Es la capacidad de crear nuevas clases basándose en clases previamente definidas, de las que se aprovechan ciertos datos y métodos, se desechan otros y se añaden nuevos.
Veremos que es posible diseñar nuevas clases basándose en clases ya existentes. En C++ esto se llama derivación de clases, y en POO herencia. Cuando se deriva una clase de otras, normalmente se añadirán nuevos métodos y datos. Es posible que algunos de estos métodos o datos de la clase original no sean válidos, en ese caso pueden ser enmascarados en la nueva clase o simplemente eliminados. El conjunto de datos y métodos que sobreviven, es lo que se conoce como herencia.
Herencia simple Heredan de una sola clase
Herencia multipo Heredan de mas de una o mas clases
Un objeto es una unidad que engloba en sí mismo datos y procedimientos necesarios para el tratamiento de esos datos.