Vous êtes sur la page 1sur 41

Introducción a la Programación

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 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.

z Construir Software no es sólo programar. 3


Ciclo de Vida del Software
Distribución del Esfuerzo

Distribución del esfuerzo durante el ciclo de vida

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

zCapacidad para encapsular y aislar la


información del diseño y ejecución.
j
zMecanismos en programación:
{ Procedimientos
P di i t y ffunciones
i
{ Tipos abstractos de datos (TAD)
{ Clases: son TAD a los que se añaden
mecanismos como herencia, métodos, etc.

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

zConstrucción de sistemas complejos a


partir de componentes.
p p

zModelado
M d l d más
á fifiell d
dell mundo
d real.
l

zEstimación de reducción de 40% con


respecto a la programación con
convencional.
encional

11
Programación
g Orientada a Objetos
j
Características

z El modelo objeto (Booch, 1994):


{ Abstracción
z Las características esenciales del objeto:
• Documento: insertar,
insertar borrar,
borrar ...
• Una grapadora: rellenar, grapar, ...
{ Encapsulamiento
E l i t ((ocultación
lt ió d de iinformación)
f ió )
• Una clase contiene:
una interfaz pública.
una implementación.
12
Ejemplo

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

“El coche tiene color rojo y se mueve”


“El documento
d t tiene
ti l t grande
letra d y se muestra”
t ”
17
Lenguajes de POO
z Cronología:
C l í
{ Fortran (1958), LISP (1959), BASIC (1964), Pascal (1969),
g ((1971),
Prolog ), C (1973),
( ), Smalltalk-80 ((1980),
), C++ (1986),
( ),
Object Pascal (1988), CLOS (1989), Java (1995).
{ The jounal of object-oriented programming (1988). Journal of
Object Technology (2002
(2002-)), etc.
etc
{ Muchas conferencias científicas sobre el tema: OOPSLA,
ECOOP, etc.
z Primeros lenguajes POO:
{ Simula-67
z Objeto (datos+métodos).
(datos+métodos) Clase.
Clase Herencia
Herencia.
{ Smalltalk-80
z Verdadero primer lenguaje de POO
z Concepto
C t dde paso dde mensajes
j ((activación
ti ió dde métodos)
ét d )
18
Lenguajes
g j de POO
Clasificaciones

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.

zCoste de conversión de software legado

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

zRepresenta el concepto de “ser un tipo


p
especial de” o “ser un/a”.
zSe establece mediante la definición de
subclases que dan lugar a una jerarquía
subclases,
de clases.
zLas subclases hijas heredan los datos y
métodos de las clases padre.

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

zLa definición en RobotConFrontera de:


zvoid avanzar ((entero,, entero))
zvoid avanzar (entero)
{es un “overriding”
overriding (especialización,
(especialización redefinición
redefinición,
etc) de los métodos ya definidos en la clase
Robot

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)

Circulo Rectangulo Triangulo


-radio:
radio: real -alto: real -tam1:
tam1: real
-ancho: real -tam2: real
+Circulo(r) -tam3: real
+dibujar() +Rectangulo(alto, ancho)
+rotar(grad)
(g ) +dibujar() +Triangulo(t1, t2, t3)
+rotar(grad)
t ( d) +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

zSobrecarga (overloading) de un método:


{En una clase,, el mismo nombre de método
definido de modos distintos
zEjemplo: el método “avanzar”
avanzar está
sobrecargado en la clase Robot

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

z Conjunto de clases que se coordinan para


realizar una función
z Para construir una aplicación hay que
subclasificarlas.
z Ejemplo:
{MFC (C++).
(C ).
{AWT, Swing (Java).
z El “main”
main usualmente incluido en el Framework
z Diagramas de clases
{N
{Necesidad
id d d
de un estándar
tá d d de representación
t ió gráfica
áfi
40
UML
z Diagramas
g de Estructura
{ Diagramas de clase (condensación gráfica de estructuras de
clases y relaciones entre objetos y clases)
z Diagramas
g de Comportamiento.
p

41

Vous aimerez peut-être aussi