Post on 21-Jul-2015
transcript
Introducción a la Programación Orientada a Objetos
Tema 1
TACC II1
TACC IICurso 2008/09
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
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.
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
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...
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.
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
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.…
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
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
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
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
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
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
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
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
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”
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)
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++)
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
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
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
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.
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
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
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)
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.
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)
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 ()
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
( , )
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
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)
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
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
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
( )
EjemploEjemplo- nombre
Persona
- edad
tit l i
Profesor Investigador
- titulacion - titulacion- centro
ProfesorUniversitario
- categoria
ProfesorUniversitario
36
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
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
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)
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
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