3. 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.
4. 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. Beneficios de la POO
Reutilización
(herencia)
Integridad
(Encapsula)
Programas
mas sencillos
Por que usar ?
Pensar en
Objetos
9. - 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.
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
12. • La unidad lógica de programación es el objeto.
• 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).
• Los objetos tienen relaciones.
2.2 Pilares de la Poo
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 Tipos
Igualdad de
Identidad y estado
Herencia
Generalización
Especialización
Relación entre
clases
Asociación
Asociación Genérica
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.
Asociación: 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.
OBJETO = DATOS + OPERACIONES
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".
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.
Los objetos definidos tienen partes públicas, privadas y
protegidas.
La parte pública o visible por los demás objetos
representa la interfaz.
28. Método
• El mensaje es el modo en que se comunican e
interrelacionan los objetos entre si.
• 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..
30. 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.
31. 3.3 Relación 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.
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
34. 3.3.2 Navegabilidad
Hay que ver si desde una clase se puede ir a la otra.
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.
La navegabilidad se expresa con una punta de flecha abierta
puesta en el lado de la clase a la que se llega.
35. 3.3.3 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. 3.3.4 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. 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.5 Tipos de relación
38. 3.3.5.1 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
39. 3.3.5.2 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.
40. 1. Agregación Es una relación en la que la clase “Todo” juega un rol mas
importante que la Clase “Parte”
2. Composición Permite expresar una relación de tipo “está compuesto por”.
Por ejemplo, un segmento está compuesto por dos puntos: origen y extremo
(el Objeto base se construye a partir del objeto incluido).
Fecha Persona
42. LOGO
No es un bug, es una característica
no documentada.
(anónimo)
Notas del editor
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.
Se trata de otro concepto de POO, los mensajes que lleguen a un objeto se procesarán ejecutando un determinado método de ese objeto.
1. La composición permite expresar una relación de tipo “está compuesto por”
• Por ejemplo, un segmento está compuesto por dos puntos: origen y extremo
2. Composición (el Objeto base se construye a partir del objeto incluido). El tiempo de vida del objeto incluido está condicionado por el tiempo de vida del que lo incluye.(no puede ser compartido entre ensamblados)
Agregación (el objeto base utiliza al incluido para su funcionamiento). El tiempo de vida del objeto incluido es independiente del que lo incluye. (puede aparecer en varios ensamblados)