2 Poo 2024
2 Poo 2024
2 Poo 2024
DATOS
Función 1 Función 2
Función 3 Función 4
Formas de Manejar la Complejidad
Jerarquías
Inconvenientes de la
Descomposición Funcional
Un sistema difícilmente se puede caracterizar
por una sola función (ej. comportamiento colaborativo)
Las funciones tienden a ser la parte más
volátil de los requerimientos
El método ataca directamente el “cómo”, sin 4
detenerse en el “qué”
No promueve la extensibilidad, reusabilidad
La propuesta OO:
Usar abstracciones como CONCEPTOS
(objetos) y no funciones como base para
descomponer los sistemas. Con ello logramos
incrementos sustanciales de :
– Cercanía
• Entre “el problema” y “la solución”
– Extensibilidad, Reusabilidad
• Por basar estructura en conceptos
– Mantenibilidad
• Por tener una arquitectura más sólida y robusta frente a
cambios de requerimientos
5
Principio del Objeto/Clase
Cápsula Cápsula
(Encapsulamiento):
Barrera alrededor de las
Interface funciones y datos que ayuda
OPERACIONES al proceso de Abstracción
Y DATOS
ENCAPSULADAS Interface:
DEL OBJETO Ventana que deja ver sólo la
parte pública de la clase
NO SI 6
Características Básicas de la OO
Todo es un objeto
– Mantiene estado (atributo/datos)
– Ejecuta operaciones (métodos)
Errores de
análisis
ANALISIS Y
ESPECIFICACION
INFORMAL
ESPECIFICACION DE
REQUERIMIENTOS
VALIDADA Errores de
diseño
DISEÑO
DISEÑO
VALIDADO
Errores de
codificación 9
IMPLEMENTACION
CODIGO
VALIDADO
(Producto liberado)
A todas las
MANTENIMIENTO fases
Modelo en cascada. Fases
Análisis del sistema.
¿Qué debe hacer el sistema?
El software suele formar parte de un sistema
mayor:
– Identificar los requisitos de todos los elementos
del sistema (Sw, Hw).
– Asignar un subconjunto de dichos requisitos al
software.
Prueba.
¿Se ha construido el sistema que se
deseaba?
– Prueba interna.
– Prueba externa.
Modelo clásico
Retrasos innecesarios
Modelo clásico
Ventajas:
Extraer nuevas
Añadir las nuevas
clases si existen
clases a la
Evaluación del cliente Ingeniería
biblioteca
Desarrollar
las clases
si no existen
Análisis OO
Diseño OO
Programación OO
Pruebas OO
• Hincapié en la reutilización
• Notación uniforme en todas las fases de desarrollo.
Ciclo de vida OO
Booch 94 (Macroproceso)
Establecer requisitos Desarrollar un modelo del
básicos comportamiento deseado
Prototipo
(conceptualización) desechable (análisis)
Especificar Identificar la
interfaces e semántica de clases y
implementación de objetos
clases y objetos
Cuenta
codigo
saldo
nombreCliente
UltimoCodigo
depósito()
extracción()
ultimasOperaciones()
verSaldo()
18
Ejemplo de Diagrama de Clases
Pedido
info Cliente
pagoAdelantado? : Boolean
nombre
numero : String
direccion
precio : Dinero
* 1..1
tipo:String()
entregar()
cerrar()
1..1
Empresa Personal
Nombre tarjetaCredito
if Pedido.cliente.tipo="Pobre"
tipo
then Pedido.pagoAdelantado?
creditoLimite
= true
Empleado
*
1..1 Producto
● Pilares de la OO:
– Abstracción
• Clases y Objetos
• Atributos, Métodos, y Mensajes
– Herencia
– Polimorfismo
– Encapsulamiento y Ocultamiento de 19
Información
38
Abstracción (Figura tomada de Booch 94)
Abstracción
Objeto Real
40
Abstracción
41
Abstracción
● Una abstracción denota los elementos
principales de un objeto que lo distingue de
los otros tipos de objetos y así provee límites
conceptuales bien definidos, relativo a la
perspectiva de un observador
42
Abstracción Fundamental en OO
Clases
Componentes de un clase
● Atributos
– Representan las variables (y constantes) que
determinarán el estado interno para cada objeto de
una clase
● Operaciones (Métodos)
– Representan el comportamiento, las posibles
acciones u operaciones aplicables a cada objeto de
una clase
– Único modo de acceder a los atributos 23
Ejemplo: Al modelar un banco, encontramos objetos Cuenta. Todos
los objetos Cuenta tienen atributos comunes:
• atributos: saldo, titular, ...
• operaciones: extracción, depósito, …
46
Ejemplo: Definiendo la Clase Cuenta
Estado Interface
NombreCliente:String
Codigo:String
Saldo:Entero depósito() {...}
UltimaOper: Lista verSaldo() {...}
extracción() {...}
Operaciones
depósito() { ...}
extracción() { ...}
verSaldo() { ...}
calculaInteres() { ...}
NO SI
Cuenta
codigo
saldo
nombreCliente
ultimoCodigo
depósito()
extracción(
ultimasOperaciones()
)
verSaldo()
24
48
DECLARACIÓN DE UNA CLASE
La primera palabra que aparece es lógicamente class que sirve para declarar una
clase. Su uso es parecido a la ya conocida struct:
class <identificador de clase> [<:lista de clases
base>]
{
<lista de miembros>
} [<lista de objetos>];
La lista de clases base se usa para derivar clases, de momento no le prestes
demasiada
atención, ya que por ahora sólo declararemos clases base.
La lista de miembros será en general una lista de funciones y datos.
25
Ejemplo de Clase en C++
class Circulo{
};
51
53
Características de la POO
Encapsulamiento
Ocultación de datos
27
Los datos están ocultos y sólo a través de
los métodos es posible acceder a ellos.
Encapsulamiento
Ocultar los detalles de la implementación,
el interior de la clase está oculto, sólo se
pueden ver la interfases externas por los
otros objetos.
Permite modificar la implementación,
siempre y cuando mantenga la interfaz.
La clase define la estructura y el
comportamiento (datos + código)
Cada miembro de la clase puede ser
privado o público. La interfaz pública
representa lo que los usuarios de la clase
pueden acceder.
Especificadores de Acceso
28
Especificadores de Acceso
Private
Un miembro declarado private puede ser
utilizado solamente por los métodos
miembro de su propia clase, pero no
puede ser utilizado por funciones externas
o de una clase derivada aunque esta haya
heredado dichos miembros.
Public
Un miembro declarado public es accesible
por cualquier objeto de la clase desde
cualquier parte del programa donde exista
dicho objeto.
Mensajes y Métodos
Cuando alguien llama al método X de un
objeto se dice que le está pasando el
mensaje X.
No sólo el programador llama a los
métodos (pasa mensajes) de los objetos.
También el sistema puede ejecutar
algunos métodos. Por ejemplo, cuando el
usuario mueve el ratón el sistema llamará
29
a algún método determinado (ya lo
veremos) con ciertos parámetros (por
ejemplo, coordenadas) para indicar que el
ratón ha sido movido.
Tarea
Describir el escenario, identificar los
objetos con sus datos y métodos en las
transacciones:
Pago de cheque.
Apertura de cuenta.
Solicitud de Crédito.
Apertura de Póliza.
Herencia
Polimorfismo
Objetos
Auto
instancias
Avión
65
cuentaCorriente cliente
:empleado :cuentaAhorro
33
:cuentaCorriente :cliente
métodos()
Acciones
Objeto Point
setXY 1
x
Mensajes getX
2
getY y
Interface Implementación
privada 67
● Variables de Instancia
34
– Cada objeto de una clase tiene su copia.
68
Métodos
Están compuestos por:
– Signatura: Nombre, Parámetros y Tipo
– Cuerpo: Bloque de instrucciones
Ejemplo (C++):
69
70
Objetos y mensajes
Objeto :punto
Objeto :circulo
setXY 10
......
......
point.setXY(1, x
point.setXY(1, 2)
2) getX
......
...... 20
getY y
Interface Implementación
privada
Mensaje
71
Mensajes
● Mecanismo básico de computación OO.
● Mecanismo básico de invocación de un
método de un objeto.
● La modificación o consulta del estado de un
objeto se realiza mediante mensajes.
● Formado por tres partes:
36
– Objeto receptor
– Selector e identificador (Nombre) del método a
aplicar
– Argumentos 72
Sintaxis de los mensajes
73
unaCuenta.deposito (100000)
deposito(unaCuenta,100000)
37
● En un mensaje se tiene el mecanismo especial
de: “objeto receptor”
74
Modelo de ejecución
● Para obtener un código ejecutable se deben
ensamblar las clases para formar sistemas.
● Un sistema viene dado por:
– Un conjunto de clases
– La clase raíz (en donde se inicia la ejecución)
– El procedimiento de creación de la clase raíz.
75
Modelo de ejecución
● ¿Cómo empieza la ejecución de un programa OO?
– Creación de un “objeto raíz”
– Aplicar mensaje sobre “objeto raíz”
Herencia: Introducción
La herencia organiza las clases en una estructura jerárquica:
Jerarquías de clases
Ejemplos:
Publicación
Libro Revista
81
Herencia: Introducción
A Si B hereda de A entonces B incorpora la estructura
(atributos) y comportamiento (métodos) de la clase A, pero
puede incluir adaptaciones:
Tipos de herencia
A ● Herencia simple
– Una clase puede heredar de una única
B C superclase.
● Herencia múltiple
B C – Una clase puede heredar de varias 42
superclases.
● Especialización
Se detecta que una clase es un caso especial de otra (p.ej.
Rectangulo de Polígono)
87
Circulo Elipse
Elipse Circulo 44
(a) (b)
Vehículo
Terrestre Acuático
89
● Realización
91
Lámpara
92
Encapsulamiento (Figura tomada de Booch 94)
Encapsulamiento
ABSTRACCION ENCAPSULAMIENTO
Encapsulamiento: Ejemplo
Cuenta
Estado
NombreCliente:String
Codigo:String
Saldo:Entero
UltimaOper: Lista Interface
(Parte visible de un objeto)
Métodos
depósito() { ...} depósito()
extracción() { ...} verSaldo()
verSaldo() { ...}
calculaInteres() { ...} extracción()
48
● Niveles de Acceso
– Privado
– Público
– Protegido
97
Ocultamiento de Información
Objeto :circulo
Objeto :point
......
......
point.setXY(1,
point.setXY(1, 2)
2)
...... setXY 10
......
x
getX
20
......
point.y = 5 getY y
......
Interface Implementación 49
privada
98
Polimorfismo
99
Polimorfismo Estático
● También llamado sobrecarga de funciones
● Es el nombre del método lo que es polimórfico: un
mismo nombre, diferentes comportamientos ()
● El comportamiento a invocar se resuelve en tiempo
de compilación, según los argumentos utilizados (la
signatura de la función).
100
Polimorfismo Estático
● Ej.: Utilizar una única interfaz que permita realizar
depósitos bancarios en diferentes monedas:
En el caso por defecto los depósitos se realizan en
la moneda de la cuenta
Si el depósito se realiza en una moneda diferente a
la de la cuenta, la misma deberá ser especificada.
CuentaBancaria
- nombreCliente: String
- codigo: String
- saldo: double
- operaciones: List Cuenta
- moneda:String Bancaria
+ depositar(monto:double); depositar()
+ depositar(monto:double, moneda:String);
+ extraer() …
+ verSaldo()
- calcularInteres()
Interfaz Pública
Implementación
Polimorfismo Dinámico
● Enfoque simplista
cuando instancias de distintas clases de una
misma jerarquia de herencia responden de
manera diferente a un mismo mensaje
51
102
Polimorfismo Dinámico
Un mismo método se comporta diferente para
distintos objetos
Restringido a métodos delegados/redefinidos
en una jerarquia de herencia
Se puede utilizar el comportamiento de una
superclase para enviar mensajes a objetos de
las subclases.
Polimorfismo Dinámico
• Un método definido (abstracto o concreto) en una
clase es redefinido en todas las subclases que la
extienden.
• La definición del método (en la superclase) provee la
interfaz común
• El método heredado y redefinido en cada una de las
subclases provee las diferentes implementaciones
● El comportamiento a invocar se resuelve en tiempo de
ejecución, según el objeto que reciba el mensaje 52
● Importante para escribir código genérico
– reúso de interfaces
104
Polimorfismo Dinámico
Transporte
acelerar()
Bicicleta Automóvil
acelerar() acelerar()
105
Polimorfismo Dinámico
● sea x una variable que referencia a un objeto
de tipo (clase) Transporte
● sea el mensaje
x.acelerar()
106
Polimorfismo Dinámico
● Invocación Dinámica
Transporte x
+acelerar()
Bicicleta Transporte x = new Bicicleta();
void acelerar() { x.acelerar();
//pedalear mas rápido
}
Transporte x
+acelerar()
Transporte x = new Automovil();
Automóvil
x.acelerar();
void acelerar() {
//dejar pasar más combustible
}
Polimorfismo Dinámico
Atributos
origen
color
....
Operaciones
dibujar()
borrar()
54
mover()
rotar()
....
108
Polimorfismo Dinámico
● Supongamos que tenemos las siguientes
declaraciones:
– Poligono p; Rectangulo r; Triangulo t;
● y la creación de objetos
– Rectangulo r = new Rectangulo ();
– Triangulo t = new Triangulo ();
● Entonces, las siguientes asignaciones son válidas:
– p = r; p = t;
● Def.: Un tipo T es compatible con un tipo P sólo si la
clase de T es un descendiente de la clase base de P.
Además, todo parámetro de T debe ser compatible con
el correspondiente parámetro formal en P. 109
Relaciones
Relación de Herencia
de otra(s) clase(s).
También se denomina relación “es
un/a” (is a)
Relación de Herencia (vocabulario)
Clase base o superclase: clase de la cual se
hereda
Clase derivada o subclase: clase que hereda
Herencia simple: Hereda de una sola clase
Herencia múltiple: Hereda de varias clases
Java solo la soporta parcialmente
Presenta diversos problemas (¿qué hacer cuando se
hereda más de una vez de la misma clase?)
Clase abstracta: La que no lleva, ni puede
llevar, ningún objeto asociado
Polimorfismo: Posibilidad de usar
indistintamente todos los objetos de un clase y
derivadas.
Equilátero
Polimorfismo
Figura plana
Escaleno
Herencia simple 57
Rectángulo Cuadrado
Superclase Subclase
Relación de Agregación
Relación de Agregación
Un coche está hecho de
Volante
Palanca de cambio Volante
Motor
Ruedas
Marchas
Coche
Motor 58
Ruedas
Relación de Instanciación
Técnica CRC
Clase-Responsabilidad-Colaboración
• Técnica utilizada para obtener un diseño OO a
partir de un enunciado/especificación que describe
un sistema.
• Pasos:
• Encontrar clases
• Encontrar responsabilidades
• Encontrar colaboraciones
59
118
Técnica CRC
Clase-Responsabilidad-Colaboración
• Encontrar Clases
• Objetivo: crear las clases que modelarán el dominio de la
aplicación
Técnica CRC
Clase-Responsabilidad-Colaboración
• Encontrar Clases - Ejemplo
Clase: Dibujo
Responsabilidades Colaboraciones
Clase: ATM
Responsabilidades Colaboraciones 60
Técnica CRC
Clase-Responsabilidad-Colaboración
• Encontrar Responsabilidades
• Objetivo: Asignar responsabilidades a cada clase
encontrada reafirmando su propósito y su rol en el sistema
• Que son responsabilidades?:
• El conocimiento que mantiene una clase/objeto
• Las acciones que una clase/objeto puede realizar
• Registrar verbos que representen accione que el sistema
debe realizar
• Tener en cuenta que las clases identificadas sugieren una
responsabilidad dentro del sistema
• La definición o propósito de la clase puede sugerir
responsabilidades adicionales
• Asignar cada responsabilidad a la clase a la cual esta
asociada lógicamente (ver el contexto en el que se menciona
la responsabilidad) 121
Técnica CRC
Clase-Responsabilidad-Colaboración
• Encontrar Responsabilidades (cont.)
• Tener en cuenta:
• Distribuir las responsabilidades de forma balanceada
• Enunciar las responsabilidades lo suficientemente
generales
• Tener en cuenta responsabilidades relacionadas
61
122
Técnica CRC
Clase-Responsabilidad-Colaboración
• Encontrar Responsabilidades - Ejemplo
Clase: Dibujo
Responsabilidades Colaboraciones
Conocer que elementos contiene
elementos
Clase: ATM
Responsabilidades Colaboraciones
Crear e iniciar transacciones
Emitir Recibo
Liberar tarjeta
Técnica CRC
Clase-Responsabilidad-Colaboración
• Encontrar Colaboraciones
• Objetivo: Establecer las relaciones entre las clases/objetos
necesarias para realizar las responsabilidades identificadas
• Que es una colaboración:
• Solicitudes del estilo cliente/servidor basadas en una
relación entre dos clases
• Examinar en la especificación las interacciones de cada
clase
• Determinar las dependencias que surgan de cada
responsabilidad
• Establecer relaciones entre clases que posean 62
resposabilidades dependientes entre si.
124
Técnica CRC
Clase-Responsabilidad-Colaboración
• Encontrar Colaboraciones - Ejemplo
Clase: Dibujo
Responsabilidades Colaboraciones
Conocer que elementos contiene Elemento de Dibujo
elementos
Clase: ATM
Responsabilidades Colaboraciones
Crear e iniciar transacciones Transacción
63