Académique Documents
Professionnel Documents
Culture Documents
Orientada a Objetos
Tema 1
TACC II
Curso 2008/09
1
Indice
zCiclo
zCi l de
d Vida
Vid y Calidad
C lid d del
d l
Software.
z Paradigmas de Programación.
z Programación Orientada a Objetos.
z Conceptos de Programación Orientada a
Objetos.
{ Clases y Objetos
{ Encapsulamiento.
{ Herencia.
Herencia
{ Polimorfismo.
{ Frameworks y Notaciones.
2
Ciclo de Vida del Software
z Análisis ≈ 6%.
6% 45 40
o Relativo(
40
z Diseño ≈ 5%. 35
30
z Codificación ≈ 7%.
25
7%
Esfuerzo
20 15 14
11 13
15
z Pruebas ≈ 15%. 10 7
5
0
z Mantenimiento ≈ 67%.
67%
ón
ño
r
ar
r
ta
gi
ci
se
ba
or
ta
re
ap
ue
di
ej
en
or
Ad
M
y
Pr
C
em
is
is
pl
ál
Im
An
4
Calidad del Software
Factores de Calidad
z Eficiencia
Efi i i
z Portabilidad
z Facilidad de prueba
z Integridad (protección contra procesos sin derecho de
acceso)
z Facilidad de uso
z Corrección
z Fiabilidad (situaciones anómalas)
z Extensibilidad
z Reutilización
z Compatibilidad
z ...
5
Indice
z Ciclo
Ci l de
d Vid
Vida y Calidad
C lid d d
dell S
Software.
ft
zParadigmas
Paradigmas de Programación.
z Programación Orientada a Objetos.
z Conceptos de Programación Orientada a
Objetos.
{ Clases y Objetos
{ Encapsulamiento.
{ Herencia.
Herencia
{ Polimorfismo.
{ Frameworks y Notaciones
Notaciones.
6
Paradigmas
g de Programación
g
Abstracción
7
Paradigmas de Programación
z Estructurada.
Estructurada
{ Fortran.
{ Basic.
{ Pascal
Pascal. z Desde
esde p principios
c p os de los
os 70.
0
{ C. z Dificultad para el trabajo en grupo.
{ … z No hay correspondencia estrecha entre
z Funcional.
Funcional d t reales
datos l y programas.
{ Lisp.
{ …
z Lógica.
Lógica
{ Prolog.
{ …
z POO.
POO
{ Smalltalk.
{ C++.
{ Java
Java.
{ … 8
Indice
z Ciclo
Ci l de
d Vid
Vida y Calidad
C lid d d
dell S
Software.
ft
z Paradigmas de Programación.
zProgramación Orientada a Objetos.
z Conceptos de Programación Orientada a
Objetos.
{ Clases y Objetos
{ Encapsulamiento.
{ Herencia.
e e ca
{ Polimorfismo.
{ Frameworks y Notaciones.
9
Programación Orientada a Objetos
zVentajas de uso:
{ Reusabilidad ((mecanismos de abstracción y
herencia)
z En programación convencional: uso de
funciones y procedimientos
{ Adecuación a entornos de bases de datos.
datos
{ Idónea para tratamiento de Interfaces de Usuario.
{ Adecuada
Ad d en prototipos
t ti y simulación.
i l ió
10
Programación
g Orientada a Objetos
j
Características Generales
zModelado
M d l d más
á fifiell d
dell mundo
d real.
l
11
Programación
g Orientada a Objetos
j
Características
Información privad
Persona
- nombre
Persona - edad
- id
Interfazz pública
+mostrar() - setID()
+setNombre(string) +mostrar()
+setNombre(string)
tN b ( t i )
da
+getNombre(): string
+setEdad(int) +getNombre(): string
+getEdad(): int +setEdad(int)
+getEdad():
getEdad(): int
Clases,
Tipos especificación
ejecución
Objetos,
“instancias”
p2 : Persona p1 : Persona
- nombre=“María” - nombre=“Pedro”
- edad=25 - edad=23
- id=
id=“55567876G”
55567876G - id=
id=“3456789K”
3456789K
13
Programación
g Orientada a Objetos
j
Características
z Modularidad:
{ Subdivisión de una aplicación en otras más pequeñas (módulos).
{ Un módulo es un conjunto de clases.
z Jerarquía
{ Ordenación de las abstracciones
{ Tipos:
z Herencia (“es-un”); generalización/especialización
• Herencia simple o múltiple
z Agregación
g g ((“parte-de”)
p )
z Polimorfismo
{ Una misma operación (método) realizada de diferente modo
z comer (vaca,
( persona, león);
l ó ) clase
l mamífero
íf
z dibujar (triángulo, cuadrado); clase figura
z Otras propiedades
{ concurrencia (multitarea), persistencia, uso de excepciones 14
Ejemplo
Persona
- nombre
- edad
+ mostrar()
Empleado Cliente
subordinados
- sueldo_bruto - nombre_empresa
+ mostrar () - telefono_de_contacto
telefono de contacto
+ calcular_salario_neto()
+mostrar()
empleados clientes
Directivo
Empresa
- categoria
- nombre
+ mostrar () 15
Ejemplo
e2 : Empleado e1 : Empleado
- nombre=“María” - nombre=“Pedro”
- edad=25 - edad=23
- sueldo_bruto
sueldo bruto=36000
36000 - sueldo_bruto
sueldo bruto=30000
30000
subordinados empleados empleados
d1 : Directivo empleados
Empresa
- nombre=“Luis” - nombre=“HGJ”
- edad=35
- sueldo_bruto=36000
- categoria=“C1” clientes
c1
1 : Cli
Cliente
t
- nombre=“Luis”
- edad=35
- nombre empresa=“Macroware”
nombre_empresa= Macroware
- telefono_de_contacto=91555666 16
Programación
g Orientada a Objetos
j
Modelado del mundo real
z Nombres:
{Objetos
{Propiedades de objetos
z Adjetivos:
{Valores de las propiedades
z Verbos:
{Comportamiento de los objetos
zOrientación:
O i t ió
{puros (Smalltalk)
{híbridos (C++)
zTipificación:
Tipificación:
{estática (en tiempo de compilación), Object
Pascal
{dinámica (en tiempo de ejecución), Python
zLigadura:
{estática (C++)
{dinámica (Java,
(Java C++)
19
Lenguajes
g j de POO
Paradigmas
zClase-Elemento
{ Ninguna
g clase es objeto
j
z C++
{Toda clase es un objeto
z Smalltalk, Java
zPrototipo-Elemento
{Todo objeto puede ser prototipo de otros
zAmulet
20
Otras Ventajas de POO
z Mejor mantenimiento.
z Estructuras más reales de la información
información.
z Escalabilidad.
z Adaptabilidad.
z Más apropriada para aplicaciones
dirigidas por eventos.
21
Inconvenientes de POO
zNecesidades de estandarización:
{ Notación de Modelado ((OMG,, Object
j
Management Group).
{ Lenguajes de Programación.
22
Indice
z Ciclo
Ci l dde Vid
Vida y C
Calidad
lid d d
dell S
Software.
ft
z Paradigmas de Programación.
z Programación Orientada a Objetos
Objetos.
zConceptos de Programación Orientada
a Objetos.
Obj t
{ Clases y Objetos
{ Encapsulamiento.
{ Herencia.
{ Polimorfismo.
{ Frameworks y Notaciones
Notaciones.
23
Conceptos de POO
zConceptos principales:
{Clase.
zSimilar al concepto de estructura en Pascal.
zAdemás de datos ((atributos),), se añaden funciones
(métodos) que operan sobre esos datos.
zEstructuración (herencia).
{Objeto (una instancia de una clase)
{Jerarquía de herencia entre clases.
zHerencia de atributos y métodos.
24
Conceptos de POO
zObjetos:
{objeto=datos+métodos
j
{miembros de un objeto (o clase):
zdatos (atributos)
zmétodos
{identificador del objeto
znombre de variable
25
Conceptos
p de POO
Ejemplo
z Clase: Robot
z Datos: x (entero), y (entero)
z Métodos:
• void avanzar (entero, entero)
• entero posicionX ()
• entero posicionY ()
• void avanzar (entero)
• Constructores:
R b t ((entero,
Robot t entero)
t )
Robot (entero)
zInstanciación:
• objeto “robot1” (Robot)
• robot1 = Robot(1,2)
zDatos de clase:
• numeroRobots (entero) 26
Creación y Destrucción de Objetos
z Equivalencia de conceptos con programación
clásica:
{Tipo ÅÆ Clase
{Dato ÅÆ Objeto
{Variable: existe en ambos tipos
p de p
programación
g
z Creación (uso de constructor):
{Ejemplo:
robot1 = Robot(1,2) robot2 = Robot(3)
z Destrucción
{Automática (Java, Garbage collection)
{Explícita
p ((montón)) o automática (p
(pila)) ((C++).
)
Destructores. 27
Encapsulamiento
z Miembros privados y públicos
z Interfaz pública de una clase (miembros públicos, datos y métodos)
z Se pueden invocar desde fuera de la clase
z Ejemplo (clase Robot)
z Datos:
• privado x (entero)
• privado y (entero)
z Métodos:
• público void avanzar (entero
(entero, entero)
• público entero posicionX ()
• público entero posicionY ()
• público void avanzar (entero)
z Constructores:
• público Robot (entero
(entero, entero)
• público Robot (entero) 28
Encapsulamiento
p
Representación
clase: Robot
Datos
x
y
Mét d
Métodos
Robot (entero, entero)
Robot (entero)
void avanzar (entero, entero)
void avanzar (entero)
entero posicionY ()
entero posicionX () 29
Ejecución de Métodos
zUn
U método
ét d es una d
definición
fi i ió dde una
función.
{Se dice que un método se ejecuta cuando el
objeto recibe un mensaje de ejecución del
método.
ét d
{Puede acceder a otros miembros de la clase.
zEjemplo:
{Objeto
j robot1 ((Robot))
{robot1=Robot(3,2)
{robot1.avanzar(1,2)
( , )
30
Herencia
31
Herencia
Ejemplo
z Clase: RobotConFrontera
{ Clase padre: Robot
{ Datos:
z privado limX (entero)
z privado limY (entero)
{ Métodos:
z void avanzar (entero, entero)
z void avanzar (entero)
z Constructores:
C t t
• RobotConFrontera (entero, entero,
entero, entero)
• RobotConFrontera (entero, entero, entero)
{ Instanciación:
z objeto
j “robot4” ((RobotConFrontera))
z robot4 = RobotConFrontera(1,2,0,0) 32
Herencia
33
Herencia
Tipos
zHerencia simple:
zFigura, Círculo, Rectángulo, Cuadrado, Triángulo
zHerencia múltiple:
zPersona, Profesor
zPersona Profesor, Investigador
Investigador, ProfesorUniversitario
zProblemas de ambigüedad
34
Ejemplo Figura
+dibujar()
dib j ()
+rotar(grad)
Cuadrado
+Cuadrado(lado)
( )
35
Ejemplo
Persona
- nombre
- edad
Profesor Investigador
- titulacion - titulacion
tit l i
- centro
ProfesorUniversitario
- categoria
36
Herencia
Clases Abstractas
zClase abstracta:
{No admite una instancia directa. Ejemplo:
j p clase
Figura. Sería inválido
• objeto f (Figura)
• f=Figura(....)
aunque síí sería
í válido
álid
• objeto f (Figura)
• f=Cuadrado(3)
37
Polimorfismo
38
Polimorfismo
z En la programación convencional
convencional, también existe
“overloading”:
{Ejemplo:
j p Pascal
zprintln(“aldfkja”)
zprintln(34)
z “Overloading”
“O l di ” y “O “Overriding”
idi ” son casos dde polimorfismo:
li fi
{El mismo método definido de modos distintos
z 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
(ligad. dinámica)
39
Frameworks
41