28
Programación Orientada a Objetos Conceptos teóricos 1 Profesor: David Contreras Bárcena Programación Orientada a Objetos David Contreras Bárcena - ICAI 2 Contenido del Curso (I) 1.- Introducción a la Tecnología Orientada a Objetos 1.1.- Historia 1.2.- Lenguajes 1.3.- Impacto en la Ingeniería del Software 1.4.- Conclusión

poo1

Embed Size (px)

DESCRIPTION

smalltalk

Citation preview

Programación Orientada a Objetos Conceptos teóricos

1

Profesor: David Contreras Bárcena

Programación Orientada a Objetos

David Contreras Bárcena - ICAI

2

Contenido del Curso (I)

1.- Introducción a la Tecnología Orientada a

Objetos

– 1.1.- Historia

– 1.2.- Lenguajes

– 1.3.- Impacto en la Ingeniería del Software

– 1.4.- Conclusión

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

3

Contenido del Curso (II)

2.- Programación Orientada a Objetos

– 2.1.- ¿Qué es la POO?

• 2.1.1.- Origen

• 2.1.2.- Introducción

• 2.1.3.- Conceptos Fundamentales

– Objetos, métodos, mensajes y clases

– 2.2.- Paradigmas de la POO

• 2.2.1.- Abstracción de Datos

• 2.2.2.- Encapsulamiento

• 2.2.3.- Ocultamiento

• 2.2.4.- Herencia

• 2.2.5.- Polimorfismo

David Contreras Bárcena - ICAI

4

Contenido del Curso (y III)

– 2.3.- Reusabilidad

– 2.4.- Ejemplos

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

5

Capítulo 1

Introducción a la Tecnología

Orientada a Objetos

Simula-67 C ++

SmallTalk 80

David Contreras Bárcena - ICAI

6

Coche

Motor

Carrocería

Ruedas Dirección

1.1- Historia

Nace en los años 60 aplicado a simulaciones de

sistemas físicos.

Diseño del programa paralelamente al sistema

físico.

Reduce la complejidad de las modificaciones:

N componentes N módulos

Neumáticos

Llantas

modificación sistema modificación en el modelo

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

7

1.1- Historia (cont.)

Ventajas de estos modelos

– Forma natural de afrontar un programa muy complejo:

• Algo obvio si se parte de la correspondencia entre el sistema y

el modelo

– Mantenimiento pasaba a ser controlable:

• Cambio de componentes sin necesidad de variar el resto del

modelo si no se varía el interfaz (parte visible del objeto).

• Simplifica las distintas variaciones sobre el modelo original.

REUSABILIDAD

David Contreras Bárcena - ICAI

8

1.2- Lenguajes

Estas ideas se implementaron mediante SIMULA 67.

En 1970 surge Smalltalk como entorno de programación.

En 1980 aparece un híbrido entre C y SmallTalk : C++.

En 1990 nace OAK, posteriormente se llamará *7. Actualmente se le conoce como JAVA (También influenciado por SmallTalk /V).

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

9

1.2- Lenguajes (cont.)

Hoy en día todos los lenguajes de programación

tienen su versión orientada a objeto:

– Cobol

– Fortran

– CLOS (Lisp OO)

– C++

David Contreras Bárcena - ICAI

10

1.2- Lenguajes (cont.)

SmallTalk /V CLOS Object Pascal Objetive-C Eiffel

SmallTalk 80

SmallTalk 70

Simula-67 Sketchpad LISP

C

C ++

PASCAL

Algol FORTRAN

Modula-2 Ada

60

70

80

Java .NET

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

11

1.3- Impacto en la Ingeniería del

Software

Los principales autores de metodologías

estructuradas se han pasado a la orientación a

objetos (Yourdon, Mellor, Martin,..).

En el entorno de las bases de datos se está

desarrollando el estándar SQL orientado a objetos:

SQL-3.

En los sistemas operativos: NeXTstep, Windows

2000, Pink y FOOIS (Freedows).

David Contreras Bárcena - ICAI

12

1.3- Características del Software

La complejidad es una característica intrínseca al software.

Sujeto a cambios.

Soluciones para minimizar la complejidad.

– Lenguaje de alto nivel.

– Entornos de programación.

– Lenguajes de 4º Generación (4GL).

– Programación Orientada a Objeto (POO).

– Programación Visual.

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

13

1.3- Complejidad del Software

L. Alto Nivel 4GL POO ....

COMPLEJIDAD

PROGRESO

Grado de

complejidad

David Contreras Bárcena - ICAI

14

1.4 - Conclusión

El software cada vez es más voluminoso y

complejo.

El mantenimiento representa más del 70% del

coste del software, correspondiendo el 40% a

modificaciones producidas por nuevas

especificaciones del usuario.

Gracias a ciertos mecanismos la OO ofrece una

alta reusablidad del código que genera.

Los lenguajes más importantes en la actualidad

emplean esta tecnología.

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

15

Capítulo 2

Programación Orientada a Objetos

David Contreras Bárcena - ICAI

16

2.1.1 - Origen

Antecedentes:

– Tipos abstractos de datos (encapsulamiento,

ocultamiento, abstracción).

– Inteligencia artificial (herencia).

Primer lenguaje:

– Simula 67, construido para simulación de sistemas de

telefonía.

– Smalltalk (1980), materializa conceptos como la

herencia.

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

17

2.1.2 - Introducción

Todo se agrupa como objetos.

Simplificación de la realidad reflejando todo lo

que nos interesa de ella en forma de objetos.

Grado de abstracción del modelo vendrá definido

por el analista del sistema.

Objetivo: productos software de calidad.

David Contreras Bárcena - ICAI

18

2.1.3 - ¿Qué es un objeto?

Cualquier ente real o abstracto.

Identidad única.

Nos interesa su estado y comportamiento.

“un objeto es cualquier cosa real o abstracta del

cual nos interesa su comportamiento y tiene una

identidad única que le distingue de los demás”

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

19

2.1.3 - Ejemplo de objeto

“un objeto es cualquier cosa real o abstracta del

cual nos interesa su comportamiento y tiene una

identidad única que le distingue de los demás”

David Contreras Bárcena - ICAI

20

2.1.3 - Análisis de un problema

IDENTIFICACIÓN Y

ESTUDIO DEL

PROBLEMA GRADO DE

ABSTRACCIÓN

INFORMACIÓN QUE

REVELE SU ESTADO

Y COMPORTAMIENTO

IDENTIFICACIÓN DE

LOS OBJETOS GRADO DE

ABSTRACCIÓN

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

21

2.1.3 – Atributos y métodos de un objeto

OBJETO

Atributos Métodos

Son acciones que van a

manipular los datos. Los

denominaremos métodos.

Van a ser los únicos que

tengan acceso a los datos.

Información que posee cada

objeto que le identifica y

diferencia del resto de objetos

del mismo tipo. A estos datos

sólo se puede acceder haciendo

referencia al propio objeto.

Datos - Variables Miembro Operaciones - Funciones Miembro

David Contreras Bárcena - ICAI

22

2.1.3 - Caso práctico de un objeto

reloj

Atributos Métodos getHora

getDía

incrementarHora

incrementarDía

limpiarPantalla

traducirFrecuencia

...

hora (horas, min, seg)

día (dia, mes, año)

modelo

numSerie

Botón para mostrar la Hora

Botón para mostrar el Día

Modelo Físico

Modelo Informático

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

23

2.1.3 - Estructura de un objeto

OBJETO Métodos u

Operaciones Atributos o

Datos

atributoUno

atributoDos

….

atributoN métodoUno ...

métodoN

métodoDos Estructura

encapsulada de

los datos.

Operaciones

permitidas.

Pueden estar o no

ocultas para el

usuario.

Lo que realmente nos interesa de un objeto es su estado, que viene dada por

su información.

David Contreras Bárcena - ICAI

24

2.1.3 - Estructura de un objeto

reloj

hora

día

numSerie

modelo

getDía

incrementarHora:

getHora

incrementarDía:

limpiarPantalla traducirFrecuencia

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

25

2.1.3 - Métodos

La única manera de acceder a los datos del objeto

es a través de métodos.

Son un conjunto de instrucciones, como una rutina,

al cual se le pueden pasar también argumentos y/o

devolver un resultado.

No debe hacer referencia a los datos de otro objeto.

Cada método manipulará los atributos del objeto

donde se ejecute.

Tiene carácter local, no global. Cualquier variable

creada en él dejará de existir al finalizar dicho

método.

David Contreras Bárcena - ICAI

26

2.1.3 - Métodos

En la definición de métodos, se seguirá la

siguiente nomenclatura:

– getNombreAtributo(): Método que devuelve el valor del

atributo.

– setNombreAtributo(valor): Asigna un valor al atributo.

– isNombreAtributo(): Devuelve un valor booleano.

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

27

2.1.3 - Formato de los Mensajes

OBJETO MÉTODO (ARGUMENTO)

Objeto

Mensaje

Los métodos pueden recibir argumentos o no, dependiendo de su naturaleza

La nomenclatura puede variar dependiendo del lenguaje que utilicemos

SmallTalk /V Java C ++

objeto metodo: argumento objeto.metodo (argumento) objeto.metodo (argumento)

David Contreras Bárcena - ICAI

28

int getDía()

{

return día;

}

void incrementarDía(n)

{

día = día + n;

}

2.1.3 - Métodos

reloj

hora

día

numSerie

modelo

getDía()

incrementarHora()

getHora()

incrementarDía()

limpiarPantalla() traducirFrecuencia()

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

29

2.1.3 - Mensajes

Las solicitudes que invocan los métodos se

denominan mensajes.

Un mensaje va dirigido para realizar una

operación concreta sobre un objeto determinado.

Son el único modo de referirse a un objeto.

Objeto

Destino Mensajes

Dame tu nombre

Toma mi nombre

Objeto

Origen

David Contreras Bárcena - ICAI

30

2.1.3 - Mensajes

Los mensajes que nosotros mandemos al reloj,

llevados a la vida real, serán apretar cada uno de

los botones.

Estoy realizando una operación concreta (mostrar

la hora) sobre un objeto determinado.

Botón para mostrar la Hora

Botón para mostrar el Día

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

31

2.1.3 - Ejemplo Mensajes

Objeto Métodos

coche incrementarGasolina

getNivelAceite

activarAlarma

Argumentos

litros

Mensajes

coche.incrementarGasolina(litros)

coche.getNivelAceite()

coche.activarAlarma()

David Contreras Bárcena - ICAI

32

2.1.3 - Aspecto de los Objetos

I

N

T

E

R

F

A

Z

variableUno . . . . . .

variableX

metodoUno

metodoDos

metodoTres

metodoN

Objeto

Aspecto

INTERNO

Aspecto

EXTERNO

(interfaz)

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

33

2.1.3 - Interfaz

Es la parte del objeto visible o accesible para el

resto los objetos.

También se considera el protocolo para

comunicarnos con el objeto.

Puede estar formado por un método o un conjunto

de ellos.

hora

día Objeto

Origen

I

N

T

E

R

F

A

Z

variableUno . . . . . .

variableX

metodoUno

metodoDos

metodoTres

metodoN

Objeto Destino

Mensaje

David Contreras Bárcena - ICAI

34

2.1.3 - Interfaz

Objeto hora

día

numSerie

modelo

limpiarPantalla getHora

getDia incrementarHora

reloj

mensaje traducirFrecuencia

incrementarDía

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

35

2.1.3 - Ejemplo Modelo

Modelo real

Definimos cuales son los elementos que formarán parte de nuestro modelo

12:00

2:25

1:25

8:00

22:01

David Contreras Bárcena - ICAI

36

2.1.3 - Ejemplo Modelo

Modelo informático

hora

día

numSerie

modelo

mostrarD

ía incrementar

Hora:

mostrarH

ora incrementar

Día:

limpiarPant

alla

traducirFrec

uencia

hora

día

numSerie

modelo

mostrarD

ía incrementar

Hora:

mostrarH

ora incrementar

Día:

limpiarPant

alla

traducirFrec

uencia

hora

día

numSerie

modelo

mostrarD

ía incrementar

Hora:

mostrarH

ora incrementar

Día:

limpiarPant

alla

traducirFrec

uencia

hora

día

numSerie

modelo

mostrarD

ía incrementar

Hora:

mostrarH

ora incrementar

Día:

limpiarPant

alla

traducirFrec

uencia

hora

día

numSerie

modelo

mostrarD

ía incrementar

Hora:

mostrarH

ora incrementar

Día:

limpiarPant

alla

traducirFrec

uencia

Trasladamos elementos de nuestro modelo real a nuestro modelo

informático en forma de objetos

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

37

2.1.3 - Ejemplo Modelo

12:25

1/12/95

546464

34-21

hora

día

numSerie

modelo

mostrarDía

incrementarHora:

mostrarHora

incrementarDía:

limpiarPantalla

traducirFrecuencia

2:25

1/12/92

12346

34-22

1:25

1/1/99

11164

12-21

4:12

4/1/95

54643

34-31

Por lo que creamos un elemento de jerarquía superior a los objetos, la cual contenga la definición de los datos y de los métodos que posean. En realidad el proceso es inverso, a partir de las clases obtenemos los

objetos

Modelo informático

David Contreras Bárcena - ICAI

38

2.1.3 - Clases

Se puede considerar...

– ...”una agrupación de objetos”

– ...una plantilla para un conjunto de objetos estructural y

funcionalmente idénticos

– ...un mecanismo para crear objetos

La creación de objetos se denomina “instanciación”

Cualquier objeto que se instancie de una clase

creará una copia de la definición de datos de la

clase y dispondrá de los métodos definidos en ella

Didáctico. Lo primero

que existe es la

clase y no el objeto

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

39

2.1.3 - Clases

Una clase se puede ver como un molde de un flan

y los objetos, los flanes creados a partir de éste.

Tipos de clases:

– Clases simples.

– Clases abstractas.

– Clases abstractas pura.

David Contreras Bárcena - ICAI

40

2.1.3 - Creación de un objeto

Objeto

Mensaje de creación

de objeto

hora

día

numSerie

modelo

mostrarDía

incrementarHora

mostrarHora

incrementarDía

limpiarPantalla

traducirFrecuencia

hora

día

numSerie

modelo

Objeto,

Instancia u

Ocurrencia de la Clase

CLASE

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

41

2.1.3 - Clases (atributos y métodos)

Toda la información específica de cada objeto se identifica

como atributos de instancia, y los métodos que interactúan

directamente con éstos, métodos de instancia.

La información general a todos los objetos, en lugar de ser

definida para cada objeto y repetirse, se define a nivel de

clase.

Esta información se la denomina como atributos de clase.

Éstos pueden ser manipulados desde los métodos de clase

y también desde los de instancia.

Esto último es posible ya que toda la información de la

clase, también es propia de cada objeto.

David Contreras Bárcena - ICAI

42

2.1.3 - Clases (atributos y métodos)

ocurrencia

Atributos Métodos

getHora

getDía

incrementarHora

incrementarDía

limpiarPantalla

traducirFrecuencia

hora (horas, min, seg)

día (dia, mes, año)

modelo

numSerie

clase

Atributos Métodos

getMarca marca

Todos los objetos que se creen utilizando esta clase serán de la misma marca

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

43

2.1.3 - Clases (atributos y métodos)

hora

día

numSerie

modelo

incrementarHora:

Métodos de Clase

Métodos de Ocurrencia

getDía

getHora

incrementarDía:

limpiarPantalla

traducirFrecuencia

marca

--

hora

día

numSerie

modelo

getMarca

Los métodos de los objetos podrán acceder a sus datos y a los datos de su

clase. Los métodos de la clase sólo podrán acceder a a sus datos

Los datos y métodos pueden

ser de clase o de instancia

(de objetos)

David Contreras Bárcena - ICAI

44

2.1.3 - Clases (atributos y métodos) Representación gráfica de atributos y métodos, de instancia y clase

marca

getMarca

hora

día

numSerie

modelo

CLASE

hora

día

numSerie

modelo

hora

día

numSerie

modelo

Instancia A Instancia B Instancia C

mostrarDí

a incrementarHo

ra:

mostrarHora

incrementarDí

a:

limpiarPantalla traducirFrecuen

cia

mostrarDí

a incrementarHo

ra:

mostrarHora

incrementarDí

a:

limpiarPantalla traducirFrecuen

cia

mostrarDí

a incrementarHo

ra:

mostrarHora

incrementarDí

a:

limpiarPantalla traducirFrecuen

cia

Si un método de clase desea acceder

directamente a un atributo de una

instancia, no sabrá de que ocurrencia

tomarlo. Por lo tanto no se podrá realizar

nunca esta acción.

La única posibilidad que tendrá de realizar

esa consulta será haciéndole una petición

formal a través de un mensaje. Es decir,

comportándose como cualquier otro

objeto.

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

45

2.1.3 - Clases (atributos y métodos)

- Clase Reloj, únicamente con atributos de instancia -

class Reloj

{

//atributos

String modelo;

String hora; //Tomamos un tipo String para simplificar

String dia; //idem

int numSerie;

//métodos

String getDia()

{

return numSerie;

}

void traducirFrecuencia()

{

....

}

//resto de métodos

}

NOTA: Para más información acerca de la estructura de una clase (pág. 64), definición de

tipos (pág. 43), etc., consultar el manual de Java.

David Contreras Bárcena - ICAI

46

2.1.3 - Clases (atributos y métodos)

- Clase Reloj, con atributos de clase-

class Reloj

{

//atributos

static String MARCA; //atributo de clase

String modelo;

String hora; //Tomamos un tipo String para simplificar

String dia; //idem

int numSerie;

//métodos

static String getMARCA() //método de clase

{

return MARCA;

}

String getDia()

{

return numSerie;

}

void traducirFrecuencia()

{

....

}

//resto de métodos

}

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

47

2.1.3 - Constructor

Objeto Mensaje de creación de

objeto

hora

día

numSerie

modelo

mostrar

Día increment

arHora:

mostrar

Hora incrementa

rDía:

limpiarPan

talla

traducirFre

cuencia

hora día

numSerie modelo

Objeto, Instancia u

Ocurrencia de la Clase

Método que permite la

creación e inicializa-

ción de los objetos.

Pueden definirse desde

ninguno a varios constructores.

Dependiendo del lenguaje, podrá ser un método

más de la clase o un método específico de

instancia (mismo nombre que la clase).

SmallTalk: Clase new - Clase new : argumentos

Java: new Clase() - new Clase(argumentos)

David Contreras Bárcena - ICAI

48

2.1.3 - Constructor

La creación de objetos se realiza mediante la

invocación del operador new invocando al

constructor .

El constructor por defecto, aquel que no

inicializa ningún atributo, está disponible

siempre para cada clase (no haría falta definir un

constructor para crear una instancia).

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

49

2.1.3 - Destructor

Método opuesto al constructor que especifica las

operaciones a realizar tras la eliminación de un

objeto.

Muy específico del lenguaje de programación.

David Contreras Bárcena - ICAI

50

2.1.3 - Constructor

Objeto new Reloj()

hora

día

numSerie

modelo

mostrarDía

incrementarHora:

mostrarHora

incrementarDía:

limpiarPantalla

traducirFrecuencia

hora día

numSerie modelo

Ocurrencia unReloj

Clase Reloj

Reloj unReloj;

unReloj = new Reloj()

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

51

2.1.3 - Constructor

class Reloj

{

//atributos

static String MARCA; //atributo de clase

String modelo;

String hora; //Tomamos un tipo String para simplificar

String dia; //idem

int numSerie;

//constructor

Reloj(_mod, _num)

{

modelo=_mod;

numSerie=_num;

}

//métodos

static String getMARCA() //método de clase

{

return MARCA;

}

NOTA: Para más información acerca de constructores consultar el manual de Java.

(pág 65)

David Contreras Bárcena - ICAI

52

2.1.3 - ¿Cuándo utilizar los constructores

y los métodos? Se utiliza constructor para inicializar atributos con

valores por defecto, que puedan variar o no en la vida del objeto, siempre que deban contener valor desde el mismo momento de la creación del objeto. (P.e. Lugar de nacimiento en el caso de una persona)

Se utilizarán métodos para leer aquellos atributos que pueda requerir cualquier objeto (interfaz) o el propio objeto o para asignar valor a atributos que puedan ser nulos en el momento de creación. (P.e.

Número del DNI en el caso de una persona)

Se utilizarán métodos para actualizar los atributos que puedan variar en la vida del objeto.

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

53

2.1.3 - Práctica

Se desea informatizar una biblioteca, más

concretamente la información que tiene el

bibliotecario sobre cada libro.

Nos interesa de cada libro nº hojas, título, autor,

categoría.

También veces que se ha pedido el libro.

Se pide desarrollar el modelo OO.

Recuerda que en un modelo sólo existen clases (con datos y métodos de instancia y clase). Es obvio que de las clases

obtendremos los objetos.

David Contreras Bárcena - ICAI

54

2.1.3 - Práctica

Se omiten los métodos de mostrar información sobre los datos

Clase Libros

título

autor

páginas

peticiones

realizarPetición

Programación Orientada a Objetos Conceptos teóricos

David Contreras Bárcena - ICAI

55

2.1.3 - Práctica

Práctica - Mensajes

Libros unLibro;

unLibro = new Libros();

unLibro.realizarPetición();

Con los métodos definidos, podría invocar estos métodos :

título

autor

páginas

peticiones

Clase Libros

realizarPetición

David Contreras Bárcena - ICAI

56

Resumen

El objeto es una unidad atómica formada por la

unión de un estado y de un comportamiento.

El objeto revela su verdadero papel y su verdadera

responsabilidad cuando, por medio de envío de

mensajes, se inserta en un escenario determinado.

En el diseño se debe buscar una alta cohesión y un

bajo acoplamiento.

OBJETO = ESTADO + COMPORTAMIENTO + IDENTIDAD