programación orientada a objetos - lcc :: …alvarezp/pm/poo.pdfprogramación modular....

27
Programación Orientada a Objetos Departamento de Lenguajes y Ciencias de la Computación E.T.S.I. Informática Universidad de Málaga

Upload: lamdiep

Post on 18-Mar-2018

223 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Orientada a Objetos

Departamento de Lenguajes y Ciencias de la Computación

E.T.S.I. InformáticaUniversidad de Málaga

Page 2: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 2

Contenido

• Introducción histórica• Conceptos básicos de la Programación O. O.• Conceptos avanzados de la Programación O.O.

Page 3: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 3

Introducción Histórica

Page 4: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 4

Evolución de los Lenguajes de ProgramaciónA

BSTRACCIÓN

OPERACIONAL

ABSTRACCIÓN

DE

DATOS

LenguajesMáquina /

Ensamblador

InstruccionesMáquina

Direcciones deMemoria,Registros

FORTRANExpresiones,Funciones

Variables deTipos Predef.,

Arrays

PASCALEstr. Control,Subprogramas

Definición deTipos,

Punteros

MODULA-2ADA

OcultamientoInformación,

Interfaces

TiposAbstractos de

Datos

LenguajesOrientados a

Objetos

Clases,Objetos

Métodos,Mensajes

Page 5: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 5

Evolución de los Lenguajes Orientados a Objetos

• Simula (Nygaard, 60s)• Smalltalk (Xerox PARC, 70s)• Eiffel (Meyer, 80s)• C++ (Stroustrup, 80s)• Java (Sun Microsystems, 90s)• C# (Microsoft, 00s)

Page 6: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 6

Conceptos básicos de laprogramación orientada a objetos

Page 7: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 7

Clases y Objetos

• CLASE = SUBPROGRAMAS + VARIABLES!Criterio de Modularización!Estado + Comportamiento!Entidad estática!Clase ≈ Tipo

• OBJETO = Instancia de una CLASE! Entidad dinámica! Cada objeto tiene su propio estado! Objetos de una misma clase comparten un comportamiento! Objeto ≈ Variable

Page 8: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 8

(1,3)

(2,2)(2,1)

(5,2.5)

ANIMAL

VEHÍCULO

FIGURA

PUNTO

Page 9: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 9

¿Qué es una Clase?

Caja negra que oculta en su implementación:– Atributos: variables que codifican el estado de una

instancia de la clase (objeto)

– Métodos: subprogramas que describen el comportamiento de un objeto de la clase

Una clase es semejante a un tipo:– Atributos: estructura de datos– Métodos: operaciones sobre el tipo

Page 10: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 10

¿Qué es un Objeto?

Instancia de una clase:

– Cada objeto de una clase tiene su propia copia de los atributos (estado propio)

– Todos los objetos de una clase comparten los mismos métodos (comportamiento común)

Page 11: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 11

Implementador frente a Usuario• Las clases son cajas negras con

– Interfaz (uso)– Implementación (funcionamiento)

• El implementador se encarga de definir el interfaz y de desarrollar la implementación

• El usuario empleará los objetos de la clase exclusivamente a través del interfaz

Page 12: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 12

Un ejemplo: la clase Punto

trasladar(a,b)distancia(pto)

Atributos = Estado Propio

Métodos = Comportamiento Común

Punto

R x,y;

(Punto)x= 2y= 3 (Punto)

x= 5y= 7

(Punto)x= -1y= 4

Clase

Objetos

Page 13: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 13

Definición de la clase Punto

INTERFAZ CLASE PuntoMÉTODOS

cambiar_x(E R nx); cambiar_y(E R ny);trasladar(E R dx,dy);R distancia(E Punto p);

FIN Punto;

Comportamiento

Page 14: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 14

Definición de Métodos

• El objeto afectado no aparece como argumento del método:

trasladar(E R dx,dy);

• En realidad, el objeto afectado es un argumento de entrada/salida implícito llamado éste:ALGORITMO trasladar(ES Punto éste,

E R dx,dy);

Page 15: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 15

IMPLEMENTACIÓN CLASE PuntoATRIBUTOSR x,y;

MÉTODOScambiar_x(E R nx)INICIOx = nx;

FIN

cambiar_y(E R ny)INICIOy = ny;

FIN

Implementación de la clase Punto (1)

acceso alargumentoimplícito

// x == éste.x

// y == éste.y

Estado

Page 16: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 16

trasladar(E R dx,dy)INICIOx = x+dx; y = y+dy;

FIN

R distancia(E Punto p)INICIODEVOLVER sqrt(pow(x-p.x,2) +

pow(y-p.y,2))FIN

FIN Punto;

Implementación de la clase Punto (2)

acceso total a otros objetosde la misma clase

Page 17: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 17

Uso de la clase Punto• El usuario declara objetos como cualquier

otra variable:Punto p1, p2;

• Como usuario, no se puede acceder a la parte privada de los objetos:

p1.X = 2;

• El usuario sólo puede manipular un Puntoa invocando a los métodos del interfaz de la clase Punto (comportamiento)

Error

Page 18: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 18

Invocación de Métodos• Los métodos se invocan mediante paso de

mensajes:

P.trasladar(4,-1) = trasladar(P,4,-1)

• El objeto P es el receptor del mensaje:

trasladar(4,-1) (Punto)x=1y=3

P

Page 19: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 19

Relación de Composición

• la composición permite expresar a una relación de tipo “está compuesto por”

• Por ejemplo, un segmento está compuesto por dos puntos: origen y extremo

Punto

R x,y;

trasladar(a,b)distancia(pto)

Segmento

Punto Orig, Ext;

trasladar(a,b)longitud()

Page 20: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 20

Implementación de la Composición (1)

INTERFAZ CLASE SegmentoMÉTODOS

trasladar(E R dx,dy);R longitud();

FIN Segmento;

Page 21: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 21

Implementación de la Composición (2)IMPLEMENTACIÓN CLASE SegmentoATRIBUTOSPunto Orig, Dest

MÉTODOStrasladar(E R dx,dy)INICIOOrig.trasladar(dx,dy)Ext.trasladar(dx,dy)

FINR longitud();INICIODEVOLVER Orig.distancia(Ext)

FINFIN Segmento;

Page 22: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 22

Conceptos avanzados de la programación orientada a objetos

Page 23: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 23

Herencia

• Posibilidad de reutilizar código• Algo más que:

• incluir ficheros, o • importar módulos

• Distintos tipos de herencia:• simple / múltiple• estricta• selectiva• de implementación/de interfaz

FiguraCerrada

Polígono Elipse

CírculoCuadriláteroPentágono

RomboRectángulo

Page 24: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 24

Herencia

Punto

Partícula

Padres / Ascendientes

Hijos / Descendientes

• Una clase heredera proporciona los atributos y métodos de la clase heredada, y puede añadir otros nuevos.

• La clase heredera puede modificar el comportamiento heredado (por ejemplo, redefiniendo algún método heredado) .

• La herencia es transitiva.• Los objetos de una clase que hereda de

otra pueden verse como objetos de esta última.

Page 25: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 25

Herencia Múltiple• Existen lenguajes con herencia múltiple, lo que

permite que una clase reutilice la funcionalidad ofrecida por varias clases.

Pensionista TrabajadorActivo

MedioPensionista

Page 26: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 26

Herencia y Redefinición

• En la herencia las clases herederas pueden heredar un método o servicio, y luego redefinirlo, modificando su implementación.

Polígono

R perímetro( );

Cuadrado

R perimetro( );

R lado;

Suma de distancias entre puntos consecutivos

Resultado = 4*lado

Page 27: Programación Orientada a Objetos - LCC :: …alvarezp/pm/poo.pdfProgramación Modular. Programación Orientada a Objetos 24 Herencia Punto Partícula Padres / Ascendientes Hijos

Programación Modular. Programación Orientada a Objetos 27

Polimorfismo sobre los datos

• Una variable puede referirse a objetos de clases distintas de la que se ha declarado.

• La restricción dada por la herencia, permite construir estructuras con elementos de naturaleza distinta, pero con un comportamiento común: