Title: Introducccin a la POO
1Introducccióna la POO
2Introducción
- Fases del ciclo de vida del software
- 1) Análisis, 6
- 2) Diseño, 5
- 3) Implementación, 7
- 4) Depuración, 15
- 5) Mantenimiento, 67
3Factores calidad del software
- Eficiencia
- Portabilidad
- Verificabilidad
- Integridad (protección contra procesos sin
derecho de acceso) - Facilidad de uso
- Corrección
- Robustez (situaciones anómalas)
- Extensibilidad
- Reutilización
- Compatibilidad, ...
4Abstracción en programación
- Capacidad para encapsular y aislar la información
del diseño y ejecución. - Mecanismos en programación
- Procedimientos y funciones
- Tipos de datos abstractos (TDA)
- Objetos son TDA a los que se añaden mecanismos
como herencia, métodos, etc.
5Otros paradigmas de programación
- Programación estructurada o funcional
- C, Pascal, Lisp,
- Desde principios de los 70
- Dificultad de trabajo en grupo
- No hay correspondencia estrecha entre datos
reales y programas.
6POO
- Ventajas de uso
- Reusabilidad (mecanismos de abstracción y
herencia) - 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.
7Características de POO, I
- Generales
- Construcción de sistemas complejos a partir de
componentes. - Modelización más fiel al mundo real.
- Estimación de reducción de 40 con respecto a la
programación convencional.
8Características de POO, I
- El modelo objeto (Booch, 1994)
- Abstracción
- Las características esenciales del objeto
- Documento insertar, borrar, ...
- Encapsulamiento (ocultación de información)
- Una clase contiene
- una interfaz pública
- una implementación
- Documento
- posicionPrevia
9Características de POO, II
- Modularidad
- Subdivisión de una aplicación en otras más
pequeñas (módulos). - Un módulo es un conjunto de clases
- Editor, Fuente, Documento,
10Características de POO, III
- Jerarquía
- Ordenación de las abstracciones
- Tipos
- Herencia (es-un) generalización/especialización
- Herencia simple o múltiple
- Mensaje es-un Documento
- Agregación (parte-de)
- Mensaje Destinatarios, Asunto, Contenido
11Características de POO, IV
- Polimorfismo
- Una misma operación (método) realizada de
diferente modo - Documento Añadir texto, imagen,
- Mensaje Añadir destinatario,
- Otras propiedades
- concurrencia (multitarea)
- Persistencia (guardar)
- uso de excepciones (errores)
12Importancia de las palabras
- Nombres
- Objetos
- Propiedades de objetos
- Adjetivos
- Valores de las propiedades
- Verbos
- Comportamiento de los objetos
- El coche tiene color rojo y se mueve
- El documento tiene letra grande y se muestra
13Lenguajes de POO
- Cronología resumida
- Fortran (1958)
- LISP (1959)
- BASIC (1964)
- Pascal (1969)
- Prolog (1971)
- C (1986)
- Object Pascal (1988)
- CLOS (1989)
- Java (1995)
14Lenguajes de POO, II
- The journal of object-oriented programming (1988)
- Primeros lenguajes POO
- Simula-67
- Objeto (datosmétodos). Clase. Herencia.
- Smalltalk-80
- Verdadero primer lenguaje de POO
- Concepto de paso de mensajes (activación de
métodos)
15Clasificaciones
- Orientación
- puros (Smalltalk)
- híbridos (C)
- Tipificación
- estática (en tiempo de compilación), Object
Pascal - dinámica (en tiempo de ejecución), C
- Ligadura
- estática (C)
- dinámica (Java, C)
16Paradigmas de POO
- Clase-Elemento
- Ninguna clase es objeto
- C
- Toda clase es un objeto
- Smalltalk, Java
- Prototipo-Elemento
- Todo objeto puede ser prototipo de otros
- Amulet
17Otros aspectos de la POO
- Beneficios
- Mejor mantenimiento
- Estructuras más reales de la información
- Escalabilidad
- Adaptabilidad
18Otros aspectos de la POO, II
- Inconvenientes
- Necesidades de estandarización (OMG, Object
Management Group) - Coste de conversión de software legado
19Conceptos de POO, I
- Conceptos principales
- Clase
- Objeto (una instancia de una clase)
- Jerarquía de herencia entre clases
20Conceptos de POO, II
- Objetos
- objetodatosmétodos
- miembros de un objeto (o clase)
- datos
- métodos
- identificador del objeto
- nombre de variable
21Conceptos de POO, III
- Ejemplo
- Clase Robot
- Datos x (entero), y (entero)
- Métodos
- void avanzar (entero, entero)
- entero posicionX ()
- entero posicionY ()
- Métodos
- void avanzar (entero)
- Constructores
- Robot (entero, entero)
- Robot (entero)
- Instanciación
- objeto robot1 (Robot)
- robot1 Robot(1,2)
22Creación y destrucción de objetos
- Equivalencia de conceptos con programación
clásica - Tipo ?? Clase
- Dato ?? Objeto
- Variable existe en ambos tipos de programación
- Creación (uso de constructor)
- Ejemplo
- robot1 Robot(1,2) robot2 Robot(3)
- Destrucción
- Automática (Java, Garbage collection)
- Explícita (montón) o automática (pila) (C)
23Encapsulamiento
- 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
24Encapsulamiento, II
- Ejemplo
- clase Robot
- Datos
- privado x (entero)
- privado y (entero)
- Constructores
- público Robot (entero, entero)
- público Robot (entero)
25Encapsulamiento, III
- clase Robot (continuación)
- Métodos
- público void avanzar (entero, entero)
- público entero getX ()
- público entero getY ()
- público void avanzar (entero)
26Representación
clase Robot
Datos
x
y
Métodos
Robot (entero, entero)
Robot (entero)
void avanzar (entero, entero)
void avanzar (entero)
entero getY ()
entero getX ()
27Ejecución de métodos
- Un método es un algoritmo que se puede ejecutar a
partir de un objeto. - Se dice que un método se ejecuta cuando el objeto
recibe un mensaje de ejecución del método. - Puede acceder a todos los miembros de la clase y
a sus argumentos, que son otros objetos. - Ejemplo
- Objeto robot1 (Robot)
- robot1Robot(3,2)
- robot1.avanzar(1,2)
28Herencia
- Representa el concepto de ser un tipo especial
de o ser un/a - Se establece mediante la definición de subclases,
que dan lugar a una jerarquía de clases - Ejemplo RobotConFrontera como subclase de Robot
hereda sus miembros (x, y) y métodos (avanzar,
getX, getY)
29Herencia, II
- Ejemplo
- Clase RobotConFrontera
- Clase padre Robot
- Datos
- privado limX (entero)
- privado limY (entero)
30Herencia, III
- Clase RobotConFrontera
- Métodos
- void avanzar (entero, entero)
- void avanzar (entero)
- Constructores
- RobotConFrontera (entero, entero,
- entero,
entero) - RobotConFrontera (entero, entero, entero)
31Herencia, II
- La definición en RobotConFrontera de
- void avanzar (entero, entero)
- void avanzar (entero)
- es un overriding (especialización,
redefinición, etc) de los métodos ya definidos en
la clase Robot
32Herencia, III
- Herencia simple
- Figura, Círculo, Rectángulo, Cuadrado, Triángulo
- Herencia múltiple
- Persona, Profesor, Investigador,
ProfesorUniversitario - Problemas de ambigüedad
33Herencia, IV
- Clase abstracta
- No admite una instancia directa. Ejemplo clase
Figura. Sería inválido - objeto f (Figura)
- fFigura(....)
- aunque sí sería válido
- objeto f (Figura)
- fCuadrado(3)
34Herencia, V
- 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á sobrecargado en
la clase Robot
35Herencia, IV
- Overloading y Overriding son casos de
polimorfismo - El mismo método definido de modos distintos
- Ligadura dinámica
- objeto r (Robot)
- rRobotConFrontera(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)
36Framework
- Conjunto de clases que se coordinan para realizar
una función - Para construir una aplicación hay que
subclasificarlas - El main usualmente incluido en el Framework
- Diagramas de clases
- Necesidad de un estándar de representación gráfica
37UML
- Unified Modeling Language
- Diagramas (condensación gráfica de estructuras de
clases y relaciones entre objetos y clases)