2 intro poo

41
Introducción a la Programación Orientada a Objetos Tema 1 TACC II 1 TACC II Curso 2008/09

Upload: rober-alonso-carrion-chamba

Post on 21-Jul-2015

184 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: 2 intro poo

Introducción a la Programación Orientada a Objetos

Tema 1

TACC II1

TACC IICurso 2008/09

Page 2: 2 intro poo

IndiceIndice

Ci l d Vid C lid d d lCiclo de Vida y Calidad del Software.Paradigmas de Programación.Programación Orientada a Objetos.Conceptos de Programación Orientada a Objetos.

Clases ObjetosClases y ObjetosEncapsulamiento.HerenciaHerencia.Polimorfismo.Frameworks y Notaciones.

2

y

Page 3: 2 intro poo

Ciclo de Vida del SoftwareCiclo de Vida del Software

Conjunto de fases por las que pasa el sistemaque se está desarrollando desde que nace laidea inicial hasta que el software es retirado oreemplazado:

Análisis.Diseño.Codificación.Pruebas.Mantenimiento.

3Construir Software no es sólo programar.

Page 4: 2 intro poo

Ciclo de Vida del SoftwareDistribución del Esfuerzo

Distribución del esfuerzo durante el ciclo de vida

Análisis ≈ 6% 40

2530354045

o R

elat

ivo(

Análisis ≈ 6%.Diseño ≈ 5%.Codificación ≈ 7%

117

15 13 14

05

101520

ño ón s r r r

Esfu

erzoCodificación ≈ 7%.

Pruebas ≈ 15%.Mantenimiento 67%

Análi

sis y

diseñ

oIm

plemen

tación

Prue

bas

Adap

tar

Mejorar

Correg

irMantenimiento ≈ 67%.

4

Page 5: 2 intro poo

Calidad del Software

Efi i i

Factores de Calidad

EficienciaPortabilidadFacilidad de pruebaFacilidad de pruebaIntegridad (protección contra procesos sin derecho de acceso)acceso)Facilidad de usoCorrecciónFiabilidad (situaciones anómalas)ExtensibilidadReutilizaciónCompatibilidad

5...

Page 6: 2 intro poo

IndiceIndice

Ci l d Vid C lid d d l S ftCiclo de Vida y Calidad del Software.

Paradigmas de Programación.Paradigmas de Programación.Programación Orientada a Objetos.Conceptos de Programación Orientada aConceptos de Programación Orientada a Objetos.

Clases y ObjetosClases y ObjetosEncapsulamiento.HerenciaHerencia.Polimorfismo.Frameworks y Notaciones

6

Frameworks y Notaciones.

Page 7: 2 intro poo

Paradigmas de Programacióng gAbstracción

Capacidad para encapsular y aislar la información del diseño y ejecución.y jMecanismos en programación:

P di i t f iProcedimientos y funcionesTipos abstractos de datos (TAD)Clases: son TAD a los que se añaden

mecanismos como herencia, métodos, etc.

7

Page 8: 2 intro poo

Paradigmas de ProgramaciónParadigmas de ProgramaciónEstructuradaEstructurada.

Fortran.Basic.Pascal Desde principios de los 70.Pascal. C.…

Funcional

esde p c p os de os 0Dificultad para el trabajo en grupo.No hay correspondencia estrecha entre d t lFuncional.

Lisp.…

Lógica

datos reales y programas.

Lógica.Prolog.…

POOPOO.Smalltalk.C++.Java

8

Java.…

Page 9: 2 intro poo

IndiceIndice

Ci l d Vid C lid d d l S ftCiclo de Vida y Calidad del Software.Paradigmas de Programación.Programación Orientada a Objetos.Conceptos de Programación Orientada aConceptos de Programación Orientada a Objetos.

Clases y ObjetosClases y ObjetosEncapsulamiento.Herencia.e e c aPolimorfismo.Frameworks y Notaciones.

9

y

Page 10: 2 intro poo

Programación Orientada a ObjetosProgramación Orientada a Objetos

Ventajas de uso:Reusabilidad (mecanismos de abstracción y( y

herencia)En programación convencional: uso deEn programación convencional: uso de

funciones y procedimientosAdecuación a entornos de bases de datosAdecuación a entornos de bases de datos.Idónea para tratamiento de Interfaces de Usuario.Ad d t ti i l ióAdecuada en prototipos y simulación.

10

Page 11: 2 intro poo

Programación Orientada a Objetosg jCaracterísticas Generales

Construcción de sistemas complejos a partir de componentes.p p

M d l d á fi l d l d lModelado más fiel del mundo real.

Estimación de reducción de 40% con respecto a la programación con encionalrespecto a la programación convencional.

11

Page 12: 2 intro poo

Programación Orientada a Objetosg jCaracterísticas

El modelo objeto (Booch, 1994): AbstracciónAbstracción

Las características esenciales del objeto:• Documento: insertar borrar• Documento: insertar, borrar, ...• Una grapadora: rellenar, grapar, ...

E l i t ( lt ió d i f ió )Encapsulamiento (ocultación de información)• Una clase contiene:

una interfaz pública. una implementación.

12

Page 13: 2 intro poo

Ejemplo IEjemploPersona

- nombre- edad

Persona

nformaci

+mostrar()+setNombre(string)

Interfaz

- id- setID()+mostrar()

tN b ( t i )

ón privad

+getNombre(): string+setEdad(int)+getEdad(): int

z pública

+setNombre(string)+getNombre(): string+setEdad(int)+getEdad(): int

da

getEdad(): int

Clases, Tipos especificación

p1 Personap2 Persona

Objetos, “instancias”

especificaciónejecución

p1 : Persona- nombre=“Pedro”- edad=23

id=“3456789K”

p2 : Persona- nombre=“María”- edad=25

id=“55567876G”

13

- id= 3456789K- id= 55567876G

Page 14: 2 intro poo

Programación Orientada a Objetos

Modularidad:

g jCaracterísticas

Modularidad:Subdivisión de una aplicación en otras más pequeñas (módulos). Un módulo es un conjunto de clases.

JerarquíaOrdenación de las abstraccionesTipos:

Herencia (“es-un”); generalización/especialización• Herencia simple o múltiple

Agregación (“parte-de”)g g ( p )

PolimorfismoUna misma operación (método) realizada de diferente modo

( l ó ) l ífcomer (vaca, persona, león); clase mamíferodibujar (triángulo, cuadrado); clase figura

Otras propiedades14

Otras propiedadesconcurrencia (multitarea), persistencia, uso de excepciones

Page 15: 2 intro poo

EjemploEjemplonombre

Persona

+ mostrar()

- nombre- edad

()

- sueldo_bruto - nombre_empresatelefono de contacto

Empleado Clientesubordinados

+mostrar()

+ mostrar ()+ calcular_salario_neto()

- telefono_de_contacto

empleados clientes

- categoria

DirectivoEmpresa

15+ mostrar ()

categoria- nombre

Page 16: 2 intro poo

Ejemploe1 : Empleadoe2 : Empleado

Ejemploe1 : Empleado

- nombre=“Pedro”- edad=23- sueldo bruto=30000

e2 : Empleado- nombre=“María”- edad=25- sueldo bruto=36000 sueldo_bruto 30000sueldo_bruto 36000

subordinados empleados empleados

d1 : Directivo- nombre=“Luis”

Empresa- nombre=“HGJ”

empleados

- edad=35- sueldo_bruto=36000- categoria=“C1”

1 Cli tclientes

c1 : Cliente- nombre=“Luis”- edad=35

nombre empresa=“Macroware”

16

- nombre_empresa= Macroware- telefono_de_contacto=91555666

Page 17: 2 intro poo

Programación Orientada a Objetosg jModelado del mundo real

Nombres: ObjetosPropiedades de objetos

Adjetivos: Valores de las propiedades

Verbos: Comportamiento de los objetos

“El coche tiene color rojo y se mueve”“El d t ti l t d t ”

17“El documento tiene letra grande y se muestra”

Page 18: 2 intro poo

Lenguajes de POOLenguajes de POO

C l íCronología: Fortran (1958), LISP (1959), BASIC (1964), Pascal (1969), Prolog (1971), C (1973), Smalltalk-80 (1980), C++ (1986), g ( ), ( ), ( ), ( ),Object Pascal (1988), CLOS (1989), Java (1995).The jounal of object-oriented programming (1988). Journal of Object Technology (2002-) etcObject Technology (2002 ), etc.Muchas conferencias científicas sobre el tema: OOPSLA, ECOOP, etc.

Primeros lenguajes POO:Simula-67

Objeto (datos+métodos) Clase HerenciaObjeto (datos+métodos). Clase. Herencia. Smalltalk-80

Verdadero primer lenguaje de POOC t d d j ( ti ió d ét d )

18

Concepto de paso de mensajes (activación de métodos)

Page 19: 2 intro poo

Lenguajes de POO

O i t ió

g jClasificaciones

Orientación: puros (Smalltalk)híbridos (C++)

Tipificación:Tipificación:estática (en tiempo de compilación), Object Pascaldinámica (en tiempo de ejecución), Python

Ligadura:Ligadura:estática (C++)dinámica (Java C++)

19

dinámica (Java, C++)

Page 20: 2 intro poo

Lenguajes de POOg jParadigmas

Clase-ElementoNinguna clase es objetog j

C++Toda clase es un objetoToda clase es un objeto

Smalltalk, JavaPrototipo-Elemento

Todo objeto puede ser prototipo de otrosTodo objeto puede ser prototipo de otrosAmulet

20

Page 21: 2 intro poo

Otras Ventajas de POOOtras Ventajas de POO

Mejor mantenimiento.Estructuras más reales de la informaciónEstructuras más reales de la información.Escalabilidad.Adaptabilidad.Más apropriada para aplicacionesMás apropriada para aplicaciones dirigidas por eventos.

21

Page 22: 2 intro poo

Inconvenientes de POOInconvenientes de POO

Necesidades de estandarización:Notación de Modelado (OMG, Object ( , j

Management Group).Lenguajes de Programación.Lenguajes de Programación.

Coste de conversión de software legado

22

Page 23: 2 intro poo

IndiceIndice

Ci l d Vid C lid d d l S ftCiclo de Vida y Calidad del Software.Paradigmas de Programación.Programación Orientada a ObjetosProgramación Orientada a Objetos.

Conceptos de Programación Orientada Obj ta Objetos.

Clases y ObjetosEncapsulamiento.Herencia.Polimorfismo.Frameworks y Notaciones

23

Frameworks y Notaciones.

Page 24: 2 intro poo

Conceptos de POOConceptos de POO

Conceptos principales:Clase.

Similar al concepto de estructura en Pascal.Además de datos (atributos), se añaden funciones( ),(métodos) que operan sobre esos datos.Estructuración (herencia).

Objeto (una instancia de una clase)Jerarquía de herencia entre clases.Jerarquía de herencia entre clases.

Herencia de atributos y métodos.

24

Page 25: 2 intro poo

Conceptos de POOConceptos de POO

Objetos: objeto=datos+métodosjmiembros de un objeto (o clase):

datos (atributos)datos (atributos)métodos

identificador del objetoidentificador del objeto nombre de variable

25

Page 26: 2 intro poo

Conceptos de POO

Clase: Robot

pEjemplo

Clase: RobotDatos: x (entero), y (entero)Métodos:Métodos:

• void avanzar (entero, entero)• entero posicionX ()

entero posicionY ()• entero posicionY ()• void avanzar (entero)• Constructores:

R b t ( t t )Robot (entero, entero)Robot (entero)

Instanciación: • objeto “robot1” (Robot)• robot1 = Robot(1,2)

Datos de clase:26

Datos de clase:• numeroRobots (entero)

Page 27: 2 intro poo

Creación y Destrucción de ObjetosCreación y Destrucción de ObjetosEquivalencia de conceptos con programaciónEquivalencia de conceptos con programación clásica:

Tipo ClaseTipo ClaseDato ObjetoVariable: existe en ambos tipos de programaciónp p g

Creación (uso de constructor):Ejemplo:Ejemplo:

robot1 = Robot(1,2) robot2 = Robot(3)DestrucciónDestrucción

Automática (Java, Garbage collection)Explícita (montón) o automática (pila) (C++).

27

p ( ) (p ) ( )Destructores.

Page 28: 2 intro poo

EncapsulamientoEncapsulamientoMiembros privados y públicosInterfaz pública de una clase (miembros públicos, datos y métodos)

Se pueden invocar desde fuera de la claseEjemplo (clase Robot)Ejemplo (clase Robot)

Datos: • privado x (entero)• privado y (entero)

Métodos: • público void avanzar (entero entero)público void avanzar (entero, entero)• público entero posicionX ()• público entero posicionY ()• público void avanzar (entero)

Constructores: • público Robot (entero entero)

28

público Robot (entero, entero)• público Robot (entero)

Page 29: 2 intro poo

Encapsulamiento

clase: Robot

pRepresentación

clase: RobotDatos

x

Mét d

xy

MétodosRobot (entero, entero)

void avanzar (entero, entero)Robot (entero)

void avanzar (entero)entero posicionY ()

29entero posicionX ()

Page 30: 2 intro poo

Ejecución de MétodosEjecución de Métodos

U ét d d fi i ió dUn método es una definición de una función.

Se dice que un método se ejecuta cuando el objeto recibe un mensaje de ejecución del

ét dmétodo.Puede acceder a otros miembros de la clase.

Ejemplo:Objeto robot1 (Robot)j ( )robot1=Robot(3,2)robot1.avanzar(1,2)

30

( , )

Page 31: 2 intro poo

HerenciaHerencia

Representa el concepto de “ser un tipo especial de” o “ser un/a”.pSe establece mediante la definición de subclases que dan lugar a una jerarquíasubclases, que dan lugar a una jerarquía de clases.Las subclases hijas heredan los datos y métodos de las clases padre.métodos de las clases padre.

31

Page 32: 2 intro poo

Herencia

Clase: RobotConFrontera

Ejemplo

Clase: RobotConFronteraClase padre: RobotDatos:

privado limX (entero)privado limY (entero)

Métodos:Métodos: void avanzar (entero, entero)void avanzar (entero)C t tConstructores:

• RobotConFrontera (entero, entero, entero, entero)

• RobotConFrontera (entero, entero, entero)Instanciación:

objeto “robot4” (RobotConFrontera)32

j ( )robot4 = RobotConFrontera(1,2,0,0)

Page 33: 2 intro poo

HerenciaHerencia

La definición en RobotConFrontera de: void avanzar (entero, entero)( , )void avanzar (entero)

es un “overriding” (especialización redefiniciónes un overriding (especialización, redefinición, etc) de los métodos ya definidos en la clase RobotRobot

33

Page 34: 2 intro poo

HerenciaTipos

Herencia simple:Figura, Círculo, Rectángulo, Cuadrado, Triángulo

Herencia múltiple:Persona Profesor Investigador ProfesorUniversitarioPersona, Profesor, Investigador, ProfesorUniversitarioProblemas de ambigüedad

34

Page 35: 2 intro poo

EjemploEjemploFigura

dib j ()+dibujar()+rotar(grad)

Circuloradio: real

Rectangulo-alto: real

Triangulo-tam1: real-radio: real -alto: real

-ancho: real+Circulo(r)+dibujar()+rotar(grad)

+Rectangulo(alto, ancho)+dibujar()

t ( d)

tam1: real-tam2: real-tam3: real+Triangulo(t1, t2, t3)

dib j ()(g ) +rotar(grad) +dibujar()+rotar(grad)

Cuadrado

+Cuadrado(lado)

35

( )

Page 36: 2 intro poo

EjemploEjemplo- nombre

Persona

- edad

tit l i

Profesor Investigador

- titulacion - titulacion- centro

ProfesorUniversitario

- categoria

ProfesorUniversitario

36

Page 37: 2 intro poo

HerenciaClases Abstractas

Clase abstracta:No admite una instancia directa. Ejemplo: clase j pFigura. Sería inválido

• objeto f (Figura)objeto f (Figura)• f=Figura(....)

í í álidaunque sí sería válido• objeto f (Figura)• f=Cuadrado(3)

37

Page 38: 2 intro poo

PolimorfismoPolimorfismo

Sobrecarga (overloading) de un método:En una clase, el mismo nombre de método ,definido de modos distintos

Ejemplo: el método “avanzar” estáEjemplo: el método avanzar está sobrecargado en la clase Robot

38

Page 39: 2 intro poo

Polimorfismo

En la programación convencional también existe

Polimorfismo

En la programación convencional, también existe “overloading”:

Ejemplo: Pascalj pprintln(“aldfkja”)println(34)

“O l di ” “O idi ” d li fi“Overloading” y “Overriding” son casos de polimorfismo:El mismo método definido de modos distintos

Ligadura dinámica:Ligadura dinámica: objeto r (Robot)r=RobotConFrontera(2,3,0,0)Al ejecutar r.avanzar(3), ¿qué definición se aplica?

• la de Robot (ligadura estática)• la de RobotConFrontera (ligad dinámica)

39

• la de RobotConFrontera (ligad. dinámica)

Page 40: 2 intro poo

FrameworksFrameworks

Conjunto de clases que se coordinan para realizar una funciónPara construir una aplicación hay que subclasificarlas.Ejemplo:

MFC (C++).MFC (C ).AWT, Swing (Java).

El “main” usualmente incluido en el FrameworkEl main usualmente incluido en el FrameworkDiagramas de clases

N id d d tá d d t ió áfi40

Necesidad de un estándar de representación gráfica

Page 41: 2 intro poo

UMLUMLDiagramas de Estructurag

Diagramas de clase (condensación gráfica de estructuras de clases y relaciones entre objetos y clases)

Diagramas de Comportamiento.g p

41