Buscadores, SEM SEO: el desafío de ser visto en la web
2 intro poo
1. Introducción a la Programación
Orientada a Objetos
Tema 1
TACC II
1
TACC II
Curso 2008/09
2. 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 Objetos
Encapsulamiento.
HerenciaHerencia.
Polimorfismo.
Frameworks y Notaciones.
2
y
3. Ciclo de Vida del SoftwareCiclo de Vida del Software
Conjunto de fases por las que pasa el sistema
que se está desarrollando desde que nace la
idea inicial hasta que el software es retirado o
reemplazado:
Análisis.
Diseño.
Codificación.
Pruebas.
Mantenimiento.
3Construir Software no es sólo programar.
4. Ciclo de Vida del Software
Distribución del Esfuerzo
Distribucióndel esfuerzoduranteel ciclodevida
Análisis ≈ 6% 40
25
30
35
40
45
oRelativo(
Análisis ≈ 6%.
Diseño ≈ 5%.
Codificación ≈ 7% 11
7
15 13 14
0
5
10
15
20
ño
ón
s
r
r
r
Esfuerzo
Codificación ≈ 7%.
Pruebas ≈ 15%.
Mantenimiento 67%
Análisis
y
diseñoIm
plem
entación
Pruebas
Adaptar
M
ejorar
C
orregir
Mantenimiento ≈ 67%.
4
5. Calidad del Software
Efi i i
Factores de Calidad
Eficiencia
Portabilidad
Facilidad de pruebaFacilidad de prueba
Integridad (protección contra procesos sin derecho de
acceso)acceso)
Facilidad de uso
Corrección
Fiabilidad (situaciones anómalas)
Extensibilidad
Reutilización
Compatibilidad
5
...
6. 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 Objetos
Encapsulamiento.
HerenciaHerencia.
Polimorfismo.
Frameworks y Notaciones
6
Frameworks y Notaciones.
7. Paradigmas de Programacióng g
Abstracción
Capacidad para encapsular y aislar la
información del diseño y ejecución.y j
Mecanismos en programación:
P di i t f iProcedimientos y funciones
Tipos abstractos de datos (TAD)
Clases: son TAD a los que se añaden
mecanismos como herencia, métodos, etc.
7
8. Paradigmas de ProgramaciónParadigmas de Programación
EstructuradaEstructurada.
Fortran.
Basic.
Pascal Desde principios de los 70.Pascal.
C.
…
Funcional
esde p c p os de os 0
Dificultad 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.
…
9. 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 Objetos
Encapsulamiento.
Herencia.e e c a
Polimorfismo.
Frameworks y Notaciones.
9
y
10. 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 procedimientos
Adecuació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
11. Programación Orientada a Objetosg j
Caracterí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
12. Programación Orientada a Objetosg j
Caracterí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
13. Ejemplo
I
Ejemplo
Persona
- nombre
- edad
Persona
nformaci
+mostrar()
+setNombre(string)
Interfaz
- id
- setID()
+mostrar()
tN b ( t i )
ónprivad
+getNombre(): string
+setEdad(int)
+getEdad(): int
zpública
+setNombre(string)
+getNombre(): string
+setEdad(int)
+getEdad(): int
da
getEdad(): int
Clases,
Tipos especificación
p1 Personap2 Persona
Objetos,
“instancias”
especificación
ejecución
p1 : Persona
- nombre=“Pedro”
- edad=23
id=“3456789K”
p2 : Persona
- nombre=“María”
- edad=25
id=“55567876G”
13
- id= 3456789K- id= 55567876G
14. Programación Orientada a Objetos
Modularidad:
g j
Caracterí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ía
Ordenación de las abstracciones
Tipos:
Herencia (“es-un”); generalización/especialización
• Herencia simple o múltiple
Agregación (“parte-de”)g g ( p )
Polimorfismo
Una misma operación (método) realizada de diferente modo
( l ó ) l ífcomer (vaca, persona, león); clase mamífero
dibujar (triángulo, cuadrado); clase figura
Otras propiedades
14
Otras propiedades
concurrencia (multitarea), persistencia, uso de excepciones
15. EjemploEjemplo
nombre
Persona
+ mostrar()
- nombre
- edad
()
- sueldo_bruto - nombre_empresa
telefono de contacto
Empleado Cliente
subordinados
+mostrar()
+ mostrar ()
+ calcular_salario_neto()
- telefono_de_contacto
empleados clientes
- categoria
Directivo
Empresa
15+ mostrar ()
categoria
- nombre
17. Programación Orientada a Objetosg j
Modelado del mundo real
Nombres:
Objetos
Propiedades 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”
18. 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 POO
C t d d j ( ti ió d ét d )
18
Concepto de paso de mensajes (activación de métodos)
19. Lenguajes de POO
O i t ió
g j
Clasificaciones
Orientación:
puros (Smalltalk)
híbridos (C++)
Tipificación:Tipificación:
estática (en tiempo de compilación), Object
Pascal
dinámica (en tiempo de ejecución), Python
Ligadura:Ligadura:
estática (C++)
dinámica (Java C++)
19
dinámica (Java, C++)
20. Lenguajes de POOg j
Paradigmas
Clase-Elemento
Ninguna clase es objetog j
C++
Toda clase es un objetoToda clase es un objeto
Smalltalk, Java
Prototipo-Elemento
Todo objeto puede ser prototipo de otrosTodo objeto puede ser prototipo de otros
Amulet
20
21. 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
22. 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
23. 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 Objetos
Encapsulamiento.
Herencia.
Polimorfismo.
Frameworks y Notaciones
23
Frameworks y Notaciones.
24. 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
25. Conceptos de POOConceptos de POO
Objetos:
objeto=datos+métodosj
miembros de un objeto (o clase):
datos (atributos)datos (atributos)
métodos
identificador del objetoidentificador del objeto
nombre de variable
25
26. Conceptos de POO
Clase: Robot
p
Ejemplo
Clase: Robot
Datos: 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)
27. Creación y Destrucción de ObjetosCreación y Destrucción de Objetos
Equivalencia de conceptos con programaciónEquivalencia de conceptos con programación
clásica:
Tipo ClaseTipo Clase
Dato Objeto
Variable: 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.
28. EncapsulamientoEncapsulamiento
Miembros privados y públicos
Interfaz pública de una clase (miembros públicos, datos y métodos)
Se pueden invocar desde fuera de la clase
Ejemplo (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)
30. 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
( , )
31. HerenciaHerencia
Representa el concepto de “ser un tipo
especial de” o “ser un/a”.p
Se 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
33. 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
34. Herencia
Tipos
Herencia simple:
Figura, Círculo, Rectángulo, Cuadrado, Triángulo
Herencia múltiple:
Persona Profesor Investigador ProfesorUniversitarioPersona, Profesor, Investigador, ProfesorUniversitario
Problemas de ambigüedad
34
35. EjemploEjemplo Figura
dib j ()+dibujar()
+rotar(grad)
Circulo
radio: 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
( )
37. Herencia
Clases Abstractas
Clase abstracta:
No admite una instancia directa. Ejemplo: clasej p
Figura. 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
38. 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
39. Polimorfismo
En la programación convencional también existe
Polimorfismo
En la programación convencional, también existe
“overloading”:
Ejemplo: Pascalj p
println(“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)
40. FrameworksFrameworks
Conjunto de clases que se coordinan para
realizar una función
Para 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 Framework
Diagramas de clases
N id d d tá d d t ió áfi
40
Necesidad de un estándar de representación gráfica
41. UMLUML
Diagramas 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