23.02.

11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Conceptos de Programación
Orientada a Objetos

Paradigmas de programación
Prog. orientada a objetos

Abstracción de datos

Programación estructurada

Programación imperativa

2

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Programación estructurada (I)

Valores de entrada

Bloque
principal

Procedimiento

Valores de entrada

Función
Valor(es) de salida

3

Programación estructurada (II)
Abstracción de operaciones
ƒ Estructura
E t t
de
d un módulo:
ód l
– Interfaz

– Implementación

à Datos de entrada

à Datos locales

à Datos de salida
à Descripción funcionalidad

à Secuencia de instrucciones

ƒ Sintaxis del lenguaje:
– Organización del código en bloques de instrucciones
Definición de funciones y procedimientos
– Extensión del lenguaje con nuevas operaciones
Llamadas a nuevas funciones y procedimientos

4

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Programación estructurada: ventajas
ƒ Facilita el desarrollo
– Se evita la repetición del trabajo
– Trabajo de programación compartimentado en módulos independientes
– Diseño top-down: descomposición en subproblemas

ƒ Facilita el mantenimiento
– Claridad del código
– Independencia
I d
d
i d
de llos módulos
ód l

ƒ Favorece la reutilización

5

Programación estructurada: ejemplo
void main ()
{
double u1, u2, m;
u1 = 4;
u2 = -2;
m = sqrt (u1*u1 + u2*u2);
printf (”%lf”, m);
}

double modulo (double u1, double u2)
{
double m;
m = sqrt (u1*u1 + u2*u2);
return m;
}
void main ()
{
printf (”%lf”, modulo (4, -2));
}

6

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Tipos abstractos de datos
Abstracción de datos + abstracción de operaciones
ƒ Un
U tipo
ti abstracto
b t t de
d d
datos
t consiste
i t en:
– Estructura de datos que almacena información para representar un
determinado concepto
– Funcionalidad: conjunto de operaciones que se pueden realizar sobre el tipo
de datos

ƒ Sintaxis del lenguaje:
– Módulos asociados a tipos de datos
– No introduce necesariamente variaciones respecto a la programación modular

7

Abstracción de datos
c
z
a
b

x

y

8

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Abstracción de operaciones
Entrada

arg1

Salida

Entrada

arg1

arg2

arg3

Salida

9

Ejemplo de TAD en C
struct vector {
double x;
double y;
y
};
void construir (vector *u, double u1, double u2)
{
u->x = u1;
u->y = u2;
}
void main ()
{
double modulo (vector u)
vector u;
{
construir (&u, 4, -2);
double m;
printf (”%lf”, modulo (u));
m = sqrt (u.x*u.x + u.y*u.y);
}
return m;
}

10

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Ejemplo de TAD: extensibilidad
...
double producto (vector u, vector v)
{
return u.x * v.x + u.y * v.y;
}
void main ()
{
vector u, v;
construir
t i (
(&u, 4
4, -2);
2)
construir (&v, 1, 5);
printf (”%lf”, producto (u, v));
}

11

Tipos abstractos de datos: ventajas
ƒ Conceptos del dominio reflejados en el código
ƒ Encapsulamiento: ocultación de la complejidad interna y detalles de los
datos y las operaciones
ƒ Especificación vs. implementación: utilización del tipo de datos
independiente de su programación interna
ƒ Mayor modularidad: también los datos
ƒ Mayor facilidad de mantenimiento, reutilización

12

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Programación orientada a objetos
Programación orientada a objetos
=
soporte sintáctico para los tipos abstractos de datos
+
prestaciones asociadas a las jerarquías de clases
+
cambio de perspectiva

13

Programación orientada a objetos (I)

) ƒƒ
)

Soporte sintáctico explícito para la abstracción de datos
Cambia el punto de vista: los programas son apéndices de los datos
ƒ Aparece un nuevo concepto: objeto
Objeto = tipo abstracto de datos con estado (atributos) y
comportamiento (operaciones) propios
ƒ Aparece el concepto de jerarquía de tipos, y con él:
– Herencia de estructura y funcionalidad
– Polivalencia de los tipos
– Polimorfismo

ƒ Sintaxis del lenguaje:



Funciones
Objeto

Definición de clases
Funciones explícitamente asociadas a clases
Creación de objetos
Acceso a atributos, invocación de métodos

Variables

14

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Programación orientada a objetos (II)

15

Programación orientada a objetos:
ejemplo en Java
class Vector {
private double x;
private double y;
Vector (double u1, double u2) { x = u1; y = u2; }
double modulo () { return Math.sqrt (x*x + y*y); }
}
class MainClass {
public static void main (
p
(String
g args
g []) {
Vector u = new Vector (4, -2);
System.out.println (u.modulo ());
}
}

16

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Programación orientada a objetos:
ejemplo en C++
class Vector {
private:
double x;
double y;
public:
Vector (double u1, double u2) { x = u1; y = u2; }
double modulo () { return sqrt (x*x + y*y); }
};
void main ()
{
Vector u (4, -2);
cout << u.modulo ();
}

17

Programación orientada a objetos:
ventajas
ƒ Ventajas de la abstracción de datos + disciplina de programación
Reutilización de código, mantenimiento y extensión de las aplicaciones
Desarrollo e integración de software orientado a componentes
ƒ Potencia del lenguaje: herencia, polimorfismo
ƒ ¿Reflejar conceptos de problemas reales?
ƒ ¿Más fácil de utilizar?

18

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Lenguajes orientados a objetos
ƒ Simula (1967)
ƒ Smalltalk (1980)
ƒ C++ (1983, 1990)
ƒ Object Pascal (1988)
ƒ Lisp CLOS (1989)
ƒ Java (1995, 1997, 1998...)
Lenguajes puros vs. híbridos

19

Elementos de la programación
orientada a objetos
ƒ Objetos: atributos + métodos
ƒ Métodos: operaciones sobre los objetos
ƒ Clases: categorías de objetos con propiedades y operaciones comunes
ƒ Jerarquías de clases
ƒ En algunos lenguajes las clases son objetos
– Caso particular: paradigma prototipo-instancia

ƒ Relaciones, objetos compuestos

20

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Estructura conceptual de un objeto
ƒ Propiedades: valores

nombre
edad
Directivo
división
sueldo bruto

Empleado

ƒ Relaciones con otros objetos

Empleado

ƒ Métodos: código



Acceso al estado del objeto
Cálculos sobre el estado
Empleado
Modificación del estado
Constructores: inicialización

nombre
edad
división
sueldo bruto
categoría

Directivo

Empleado
mostrar
datos
personales
calcular
salario
neto
21

Relaciones entre objetos
ƒ Tipos de relaciones
– Especialización: sólo entre clases
– Agregación: objetos compuestos formados por partes
– Asociación: relaciones arbitrarias (p.e. jefe de empleado)

ƒ Implementación
– Lenguajes con elementos específicos para relaciones
– Atributos que contienen referencias (punteros) a objetos

22

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Objetos: encapsulamiento
ƒ Porción visible: interfaz (protocolo)
– Contrato público de comportamiento
– Descripción de operaciones: información de entrada y de salida

ƒ Porción oculta: implementación
– Estructura de datos para almacenar la información

Datos

– Código
Códi que se ejecuta
j
t para realizar
li
llas operaciones
i

Interfaz
Métodos
23

Ciclo de vida de los objetos
ƒ Creación
Reserva de memoria:

Empleado x = crear Empleado (···)
( )

Inicialización de atributos: constructores

ƒ Manipulación
Acceso a atributos:

x . nombre

Invocación de métodos:

x . salario_neto ( )

ƒ Destrucción
D t

Liberar la memoria
Destruir partes internas, si las hay
Eliminar referencias al objeto destruido (p.e. jefe)
24

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Jerarquías de objetos
Persona

Jerarquía de tipos
Persona x
Empleado y = crear Empleado

Empleado

Cliente

Directivo z = crear Directivo
x=y
x=z

Directivo

25

Herencia de estructura
nombre
edad

división
sueldo bruto

Empleado

categoría

Directivo

Persona

Cliente

nombre empresa
teléfono de contacto

26

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Herencia de funcionalidad
mostrar
datos
personales
especialización

calcular
salario
neto

especialización

Persona

mostrar
datos
personales

Empleado

mostrar
datos
personales

Directivo

Cliente

mostrar
datos
personales

herencia

calcular
salario
neto

27

Facilidad de extensión
Reutilización

Modularidad

mostrar
datos
personales

Persona
e so

calcular
salario
neto

Administrativo

Empleado

Cliente

Directivo

28

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Herencia múltiple
curso
asignaturas
matricularse (asignatura)

Estudiante

Li
Licenciado
i d

año promoción
especialidad
nota media

Alumno
doctorado
año ppromoción
especialidad
nota media
curso
asignaturas
matricularse (asignatura)
29

Herencia múltiple
Resolución de la ambigüedad
x
A

y
t

B

C

y
z

D obj = crear D
obj . x
obj . y

D
x
y
z
t
30

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Polimorfismo
ƒ Sobrecarga

ƒ Ligadura dinámica

Recta r1 = crear Recta
Recta r2 = crear Recta
Vector v = crear Vector
r1.paralela (r2)
r1.paralela (v)

Persona x
Empleado y = crear Empleado
x=y
x.mostrar_datos ( )
y.mostrar_datos ( )

ƒ Sobreescritura (especialización)
Persona x = crear persona
Empleado y = crear Empleado
x.mostrar_datos ( )
y.mostrar_datos ( )

31

Ligadura dinámica (II)
Calcular área de figura seleccionada
área ( )
Figura

Triángulo

Rectángulo

Elipse

área ( )

área ( )

área ( )

32

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Ligadura dinámica de argumentos
Calcular área de la intersección de figuras seleccionadas
Triángulo
double intersección (Triángulo t)
double intersección (Elipse e)
double intersección (Rectángulo r)
Rectángulo
double intersección (Triángulo t)
double intersección (Elipse e)
double intersección (Rectángulo r)
Elipse
double intersección (Triángulo t)
double intersección (Elipse e)
double intersección (Rectángulo r)

33

Ligadura dinámica de argumentos:
ambigüedad (I)
A

B

C

f (A x, B y)
f (B x, A y)

B b1 = crear B
B b2 = crear B

?

C c = crear C
c . f (b1, b2)

34

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Ligadura dinámica de argumentos:
ambigüedad (II)
f (B x)

A

B b = crear B

?
B

b . f (b)

f (A x)

35

Ligadura dinámica de argumentos:
ambigüedad (III)
A

B

D

f (A x)
f (B x)

C

?
C c = crear C
D d = crear D

d . f (c)

36

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Análisis y Diseño Orientado a Objetos
Unified Modeling Language (UML)
ƒ

Lenguaje gráfico estándar para visualizar, especificar, construir y documentar
las partes de un sistema de software
– Con cualquier proceso de desarrollo
– A lo largo de todo el ciclo de vida
– Con distintas tecnologías de implementación
– Herramientas para generar código

ƒ

Partes de un modelo en UML
– El modelo de clases
– El modelo de casos de uso
– El modelo de interacción
– El modelo de estados
– El modelo de implementación
– El modelo de instalación (deployment)
37

Diagramas UML
ƒ Estructurales

ƒ De comportamiento

– Clases

– Casos de uso

– Objetos

– Secuencia

– Componentes

– Colaboración

– Instalación

– Estados
– Actividad

38

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Diagramas UML
ƒ Estructurales

ƒ De comportamiento

– Clases

– Casos de uso

– Objetos

– Secuencia

– Componentes

– Colaboración

– Instalación

– Estados
– Actividad

39

Diagramas de clases y objetos
Clase

Objeto

At ib t
Atributos

At ib t
Atributos

Operaciones

Operaciones

I
Interfaz
f

Dependencia
G
Generalización
l
ó
Asociación
Agregación
Composición
40

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Diagrama de objetos

Diagrama
de clases

Persona

Ordenador

nombre : String
edad : Integer

1..*

0..* nombre : String
memoria : Integer

Utiliza

Usuario1 : Persona

Servidor7 : Ordenador

nombre = "Juan"
fecha nac. = 21/07/76

nombre = "Andromeda"
memoria = 256

Usuario2 : Persona

PC12 : Ordenador

nombre = "Luis“
fecha nac. = 21/07/85

nombre = "Anubis"
memoria = 128

41

Formado por

Figura
{abstract}
* posición : Punto

*

Formado por

Canvas

draw ( ) {abstract}
area ( ) : Integer {abstract}

Grupo

Círculo

Polígono

centro : Punto
radio : Integer
draw ( )
area ( ) : Integer

draw ( )
area ( ) : Integer

Punto
Formado
por

draw ( )
area ( ) : Integer

x : Integer
y : Integer
*

42

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Casos de uso
Cancel appointment
Scheduler
Make appointment
Patient

Request medication

D
Doctor

Pay bill
Clerk
43

Casos de uso
Comunicación

Comunicación
Caso de uso

Cancel appointment
Caso de uso
Actor

Patient

Actor

Scheduler

Make appointment
Caso de uso

Request medication
Caso de uso

Actor

D
Doctor
Actor

Pay bill
Clerk
44

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Secuencia
caller

exchange

receiver

lift receiver
dial tone
dial digit
...

ringing tone

phone rings
answer phone

stop tone

stop ringing

45

Secuencia
caller

Objetos
exchange

receiver

lift receiver
dial tone
dial digit
...

ringing tone

Mensajes

phone rings
answer phone

stop tone

stop ringing

Focos de control
46

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid

23.02.11

Programación Orientada a Objetos (3er curso, grupo 31)
1. Introducción: conceptos de Programación Orientada a Objetos

Estados

digit(n)
start

Partial dial

digit(n)

47

Estados
Estados

I i i
Inicio

Fin

digit(n)
start

Partial dial

digit(n)

Transiciones

48

Pablo Castells

Escuela Politécnica Superior
Universidad Autónoma de Madrid