Este documento presenta una introducción a la programación orientada a objetos. Explica conceptos clave como clases, objetos, encapsulamiento, herencia y polimorfismo. También describe los paradigmas de programación, lenguajes orientados a objetos, y las ventajas y desventajas de este paradigma.
1. Introducción a la Programación
Orientada a Objetos
Tema 1
TACC 1
II
Curso 2008/09
2. Indice
zzCiclo de Vida y Calidad del
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.
{ Polimorfismo.
{ Frameworks y
Notaciones.
2
3. 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.
3 z Construir Software no es sólo programar.
4. Ciclo de Vida del Software
Distribución del Esfuerzo
Distribución del esfuerzo durante el ciclo de vida
z Análisis ≈ 6% 45
40
40
35
30
25
o Relativo(
6%.
z Diseño ≈ 5%.
z Codificación ≈ 7% 11
7
15 13 14
20
15
10
0 5
ño
ón
s
r
r
r
Esfuerzo
7%.
z Pruebas ≈ 15%.
z Mantenimiento 67%
Análisis y diseño
Impl ementación
Pruebas
Adapt ar
Mej orar
Corregir
≈ 67%.
4
5. Calidad del Software
Factores de Calidad
z Efi i i
Eficiencia
z Portabilidad
zz 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
5
z ...
6. Indice
z Ciclo de Vida y Calidad del Software.
zParadigmas de Programación.
z Programación Orientada a Objetos.
zz Conceptos de Programación Orientada a
Objetos.
{{ Clases y Objetos
{ Encapsulamiento.
{{ Herencia.
{ Polimorfismo.
{ Notaciones
6
Frameworks y Notaciones.
7. Paradigmas de Programación
Abstracción
zCapacidad para encapsular y aislar la
información del diseño y ejecución.
zMecanismos en programación:
{{ Procedimientos 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ón
zz Estructurada.
{ Fortran.
{ Basic.
{{ Pascal. z Desde principios de los 70.
{ C.
{ …
z Funcional
esde p c p os os 0
z Dificultad para el trabajo en grupo.
z No hay correspondencia estrecha entre
Funcional. d t l
{ Lisp.
{ …
z Lógica
datos reales y programas.
Lógica.
{ Prolog.
{ …
zz POO.
{ Smalltalk.
{ C++.
{ Java
8
Java.
{ …
9. Indice
z Ciclo de Vida y Calidad del Software.
z Paradigmas de Programación.
zProgramación Orientada a Objetos.
zz Conceptos de Programación Orientada a
Objetos.
{{ Clases y Objetos
{ Encapsulamiento.
{ Herencia.
{ Polimorfismo.
{ Frameworks y
Notaciones.
9
10. Programación Orientada a Objetos
zVentajas de uso:
{ Reusabilidad (mecanismos de abstracción y
herencia)
zz En programación convencional: uso de
funciones y procedimientos
{{ Adecuación a entornos de bases de datos.
{ Idónea para tratamiento de Interfaces de Usuario.
{{ Adecuada en prototipos y simulación.
10
11. Programación Orientada a Objetos
Características Generales
zConstrucción de sistemas complejos a
partir de componentes.
zModelado más fiel del mundo real.
zEstimación de reducción de 40% con
respecto a la programación convencional.
11
12. Programación Orientada a Objetos
Características
z El modelo objeto (Booch, 1994):
{{ Abstracción
z Las características esenciales del objeto:
•• Documento: insertar, borrar, ...
• Una grapadora: rellenar, grapar, ...
{{ Encapsulamiento (ocultación de información)
• Una clase contiene:
una interfaz pública.
una implementación.
12
13. Ejemplo
I
Persona
Persona
- nombre
- edad
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(): da
int
Clases,
Tipos especificación
Objetos,
“instancias”
ejecución
p1 : Persona
- nombre=“Pedro”
- edad=23
id=“3456789K”
p2 : Persona
- nombre=“María”
- edad=25
id=“55567876G”
13
- id= 55567876G - id= 3456789K
14. g Programación Orientada a j
Objetos
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
zAgregación (“parte-de”)
z Polimorfismo
{ Una misma operación (método) realizada de diferente modo
zcomer (vaca, persona, león); clase mamífero
z dibujar (triángulo, cuadrado); clase figura
z propiedades
14
Otras { concurrencia (multitarea), persistencia, uso de excepciones
15. Ejemplo
Persona
- - edad
nombre
+ mostrar()
Empleado Cliente
- sueldo_bruto - nombre_empresa
()
telefono de contacto
subordinados
+mostrar()
+ mostrar + calcular_salario_neto()
- telefono_de_empleados clientes
Directivo
- categoria
Empresa
- nombre
+ mostrar () 15
17. Programación Orientada a Objetos
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”
“Eld tti l t d t ”
17
El documento tiene letra grande y se muestra”
18. Lenguajes de POO
zz Cronología:
{ Fortran (1958), LISP (1959), BASIC (1964), Pascal (1969),
Prolog (1971), 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-), etc.
{ Muchas conferencias científicas sobre el tema: OOPSLA,
ECOOP, etc.
z Primeros lenguajes POO:
{ Simula-67
zz Objeto (datos+métodos). Clase. Herencia.
{ Smalltalk-80
z Verdadero primer lenguaje de POO
z C t d d j ti ió d étd )
18
Concepto de paso de mensajes ( activación de métodos)
19. g j
Lenguajes de POO
Clasificaciones
zO i t ió
Orientación:
{puros (Smalltalk)
{híbridos (C++)
zTipificación:
{estática (en tiempo de compilación), Object
Pascal
{dinámica (en tiempo de ejecución), Python
zzLigadura:
{estática (C++)
{dinámica (Java 19
Java, C++)
20. Lenguajes de POO
Paradigmas
zClase-Elemento
{ Ninguna clase es objeto
z C++
{{Toda clase es un objeto
z Smalltalk, Java
zPrototipo-Elemento
{{Todo objeto puede ser prototipo de otros
zAmulet
20
21. Otras Ventajas de POO
z Mejor mantenimiento.
zz Estructuras más reales de la información.
z Escalabilidad.
z Adaptabilidad.
zz Más apropriada para aplicaciones
dirigidas por eventos.
21
22. Inconvenientes de POO
zNecesidades de estandarización:
{ Notación de Modelado (OMG, Object
Management Group).
{{ Lenguajes de Programación.
zCoste de conversión de software legado
22
23. Indice
zz Ciclo de Vida y Calidad del Software.
z Paradigmas de Programación.
zz Programación Orientada a Objetos.
zConceptos de Programación Orientada
a Objetos.
{ Clases y Objetos
{ Encapsulamiento.
{ Herencia.
{ Polimorfismo.
{ Notaciones
23
Frameworks y Notaciones.
24. 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
25. Conceptos de POO
zObjetos:
{objeto=datos+métodos
{miembros de un objeto (o clase):
zzdatos (atributos)
zmétodos
{{identificador del objeto
znombre de variable
25
26. Conceptos de POO
z p
Ejemplo
Clase: Robot
z Datos: x (entero), y (entero)
zz Métodos:
• void avanzar (entero, entero)
• entero posicionX ()
• entero posicionY ()
• void avanzar (entero)
• Constructores:
Robot (entero, entero)
Robot (entero)
zInstanciación:
• objeto “robot1” (Robot)
• robot1 = Robot(1,2)
zDatos de 26
clase:
• numeroRobots (entero)
27. Creación y Destrucción de Objetos
zz Equivalencia de conceptos con programación
clásica:
{{Tipo ÅÅÆÆ Clase
{Dato ÅÆ Objeto
{Variable: existe en ambos tipos de programación
z Creación (uso de constructor):
{{Ejemplo:
robot1 = Robot(1,2) robot2 = Robot(3)
z Destrucción
{Automática (Java, Garbage collection)
{Explícita ( montón) o automática (pila) (C++).
27
p ) p )( )
Destructores.
28. Encapsulamiento
z Miembros privados y públicos
z Interfaz pública de una clase (miembros públicos, datos y métodos)
zSe pueden invocar desde fuera de la clase
zz Ejemplo (clase Robot)
zDatos:
• privado x (entero)
• privado y (entero)
zMétodos:
• público void avanzar (entero, entero)
• público entero posicionX ()
• público entero posicionY ()
• público void avanzar (entero)
zConstructores:
• entero 28
público Robot (entero, entero)
• público Robot (entero)
29. Encapsulamiento
p
Representación
clase: Robot
Datos
x
Mét d
y
Métodos
Robot (entero, entero)
Robot (entero)
void avanzar (entero, entero)
void avanzar (entero)
entero posicionY ()
29 entero posicionX ()
30. Ejecución de Métodos
zUn 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
método.
{Puede acceder a otros miembros de la clase.
zEjemplo:
{Objeto robot1 (Robot)
{robot1=Robot(3,2)
{robot1.avanzar(1,2)
30
( , )
31. Herencia
zRepresenta el concepto de “ser un tipo
especial de” o “ser un/a”.
zSe establece mediante la definición de
subclases, que dan lugar a una jerarquía
de clases.
zLas subclases hijas heredan los datos y
métodos de las clases padre.
31
33. Herencia
zLa definición en RobotConFrontera de:
zvoid avanzar (entero, entero)
zvoid avanzar (entero)
{{es un “overriding” (especialización, redefinición,
etc) de los métodos ya definidos en la clase
Robot
33
35. Ejemplo Figura
+dibujar()
+rotar(grad)
Circulo
Rectangulo
-alto: real
Triangulo
-radio: real
-tam1: +Circulo(r) -ancho: real
+dibujar()
+Rectangulo(alto, ancho)
+rotar(grad)
+dibujar()
t ( d)
real
-tam2: real
-tam3: real
+Triangulo(t1, t2, t3)
(g ) +rotar(grad) +dibujar()
+rotar(grad)
Cuadrado
+Cuadrado(lado)
35
( )
36. Ejemplo
Persona
- nombre
- edad
Profesor Investigador
- titulacion - tit l i
titulacion
- centro
ProfesorUniversitario
- categoria
36
37. Herencia
Clases Abstractas
zClase abstracta:
{No admite una instancia directa. Ejemplo: clase
Figura. Sería inválido
• objeto f (Figura)
• f=Figura(....)
aunque sí sería válido
• objeto f (Figura)
• f=Cuadrado(3)
37
38. Polimorfismo
zSobrecarga (overloading) de un método:
{En una clase, el mismo nombre de método
definido de modos distintos
zzEjemplo: el método “avanzar” está
sobrecargado en la clase Robot
38
39. Polimorfismo
z convencional En la programación convencional, también existe
“overloading”:
{Ejemplo: Pascal
zprintln(“aldfkja”)
zprintln(34)
z ““Overloading”” y ““Overriding”” son casos de polimorfismo:
{El mismo método definido de modos distintos
zz 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)
• de ligad dinámica)
39
la RobotConFrontera (ligad.
40. 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++).
{AWT, Swing (Java).
zz El “main” usualmente incluido en el Framework
z Diagramas de clases
{N id dd tá d d t ió áfi
40
Necesidad de un estándar de representación gráfica
41. UML
z Diagramas de Estructura
{ Diagramas de clase (condensación gráfica de estructuras de
clases y relaciones entre objetos y clases)
z Diagramas de Comportamiento.
41