Download Introducción

Document related concepts

Polimorfismo (informática) wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Common Lisp wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Visitor (patrón de diseño) wikipedia , lookup

Transcript
INTRODUCCION A LA
PROGRAMACION ORIENTADA A
OBJETOS (POO)
Presentación basada en:
Capítulos 3 y 5. Programación Orientada a objetos. Luis Joyanes Aguilar. 2a ed.
1998.
1.
Introducció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%
„
Factores en la 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, etc.
1
Abstracción en programación
„
„
Capacidad para encapsular y aislar la
información del diseño y ejecución.
Mecanismos en programación:
„
„
„
„
Programación Imperativa
Programación Estructurada
Abstracción de Datos
Programación Orientada a Objetos
Evolución
Programación estructurada(1)
„
Desde principios de los 70. Dificultad de
trabajo en grupo. No hay correspondencia
estrecha entre datos reales y programas.
2
Programación estructurada(2)
„
Abstracción de operaciones
„
Estructura de un módulo:
„
Interfaz
„
„
„
„
Implementación
„
„
„
Datos de entrada
Datos de salida
Descripción funcionalidad
Datos locales
Secuencia de instrucciones
Sintaxis del lenguaje:
„
Organización del código en bloques de instrucciones
„
Extensión del lenguaje con nuevas operaciones
„
„
Definición de funciones y procedimientos
Llamadas a nuevas funciones y procedimientos
Tipos abstractos de datos(1)
„
Se fundamenta en:
„
„
Un tipo abstracto de datos consiste en:
„
„
„
Abstracción de Datos + Abstracción de Operaciones
Estructura de datos que almacena información para
representar un determinado concepto
Funcionalidad: conjunto de operaciones que se pueden
realizar sobre el tipo de datos
Sintaxis del lenguaje:
„
„
Módulos asociados a tipos de datos
No introduce necesariamente variaciones respecto a la
programación modular
3
Tipos abstractos de datos(2)
„
Abstracción de los datos
„
Abstracción de las operaciones
La POO (1)
„
Programación orientada a objetos
„
„
Soporte sintáctico para los tipos abstractos de
datos + Prestaciones asociadas a las jerarquías
de clases + Cambio de perspectiva
Se basa en el concepto de objeto
„
Objeto = tipo abstracto de datos con estado
(atributos) y comportamiento (operaciones)
propios
Funciones
Objeto
Variables
4
La POO (2)
„
Aparece el concepto de jerarquía de tipos, y
con él los conceptos de:
„
„
„
„
Herencia de estructura y funcionalidad
Polivalencia de los tipos
Polimorfismo
Sintaxis del lenguaje:
„
„
„
„
Definición de clases
Funciones explícitamente asociadas a clases
Creación de objetos
Acceso a atributos, invocación de método
La POO (2)
„
Ejemplo en Java
„
Ejemplo en C++
5
La POO (3)
„
Ventajas del uso de la POO
„
„
„
„
„
Adecuada en prototipos y simulación.
Reusabilidad (mecanismos de abstracción
y herencia)
En programación convencional: uso de
funciones y procedimientos
Adecuada para entornos de bases de
datos y en sistemas Cliente/Servidor
Idónea para tratamiento de Interfaces de
Usuario.
Características de la POO(1)
„
Generales:
„
„
„
„
Construcción de sistemas complejos a partir de
componentes.
Modelado más fiel al mundo real.
Estimación de reducción de 40% con respecto a la
programación convencional.
El modelo objeto (Booch, 1994):
„
Abstracción
„
„
„
„
Los paradigmas clasicos estructurados usan una abstracción
funcional (procedimental) por un lado, y una de datos por otro.
El paradigma objetual define un objeto como una abstracción
de datos y funciones, separando además su implementación
de su apariencia externa.
Las características esenciales del objeto
Una grapadora: Color, Número de ganchos, rellenar, grapar,
etc.
6
Características de la POO(2)
„
Encapsulamiento
„
„
„
El contenido de alguna información está oculto
Barrera conceptual sobre colección de datos que solo me
permite modificarlos a través de las operaciones definidas por
esa barrera
Una clase contiene:
„
„
„
una interfaz pública
una implementación
Ventajas:
„
„
Reducción de la cohesión entre distintos objetos, lo que implica la
construcción de objetos independientes. Cambiar un objeto no
afecta al resto, sólo al objeto en cuestión.
Localización: la información relativa a un objeto está centrada en
la definición de él mismo y no distribuida en otros objetos. Esto
implica fácil modificación, fácil adaptación a los cambios, rápida
ubicación de lo que hay que cambiar.
Características de la POO(3)
„
„
Protección Integridad: sólo permite cambiar el estado por sí
mismo, a través de sus operaciones propias. Esto asegura la
integridad y la consistencia de la Data.
Modularidad
„
Subdivisión de una aplicación en otras más pequeñas
(módulos).
„
Un módulo es un conjunto de clases
7
Características de la POO(4)
„
Jerarquía
„
„
Ordenamiento de las abstracciones
Tipos:
„
„
„
Polimorfismo
„
„
„
Herencia (“es-un”); generalización/especialización
„
Herencia simple o múltiple
Agregación (“parte-de”)
Una misma operación (método) realizada de diferente modo
comer (hombre, vaca, delfin, tigre); clase mamífero
Otras propiedades
„
Concurrrencia (multitarea), Persistencia, Uso de excepciones
Lenguajes OO
„
Cronología:
„
„
„
„
„
„
„
Simula (1967)
Smalltalk (1980)
C++ (1983, 1990)
Object Pascal (1988)
Lisp CLOS (1989)
Java (1995, 1997, 1998)
Primeros lenguajes POO:
„
Simula-67
„
Smalltalk-80
„
„
„
„
Objeto (datos+métodos). Clase. Herencia.
Verdadero primer lenguaje de POO
Concepto de paso de mensajes (activación de métodos)
Orientación:
„
„
Puros (Smalltalk)
Híbridos (C++)
8
Conceptos de la POO (1)
„
Principales:
„
„
„
„
„
„
Objeto (una instancia de una clase): atributos +
métodos
Métodos: operaciones sobre los objetos
Clases: categorías de objetos con propiedades y
operaciones comunes
Jerarquía de herencia entre clases
Relaciones, objetos compuestos
Conceptos equivalentes:
„
„
Programación (tipo, variable)
POO (clase, objeto)
Conceptos de la POO (2)
„
Ciclo de vida de los objetos
„
Creación
„
„
„
Manipulación
„
„
„
Empleado x = crear Empleado (···)
Constructores: inicialización de atributos
Acceso a atributos: x . nombre
Invocación de métodos: x . salario_neto ( )
Destrucción
„
„
„
Explícita (C++)
Automática (Java)Æ garbage collection
Ejemplo: Al desaparecer un directivo, actualizar relación
de subordinados
9
Conceptos de la POO (3)
„
Encapsulamiento
„
„
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)
„
Datos:
„
„
„
privado x (entero)
privado y (entero)
Métodos:
„
„
„
„
público void avanzar (entero, entero)
público entero posicionX ()
público entero posicionY ()
público void avanzar (entero)
Conceptos de la POO (4)
NO Los
puede
Accesar
Los puede
Accesar
Objeto X
10
Conceptos de la POO (5)
„
La Herencia
„
„
Herencia de
Estructura:
Herencia de
Funcionalidad:
Conceptos de la POO (6)
„
„
„
Clase Abstracta:No admite una instancia directa.
Ejemplo: clase Figura. Sería inválido
Clase Concreta: Admite la creación de Instancias
Herencia Múltiple:
11
Conceptos de la POO (7)
„
Ligadura
„
„
Se refiere a la conexión entre una llamada
a una función y el código real ejecutado
como resultado de la llamada
Tipos:
„
Ligadura Estática
„
„
El compilador y el enlazador definen directamente la
posición fija del código que se ejecuta en cada
llamada a la función
Sinónimo: Ligadura temprana, anticipada.
Conceptos de la POO (7)
„
Ligadura Dinámica
„
„
„
El compilador no defina la posición a llamar, sino
que espera hará el tiempo de ejecución para decidir
cual es la posición real seleccionada entre una lista
de posiciones.
El propio código debe deducir en tiempo de
ejecución cual es la función a invocar e invocarla a
continuación.
Esta característica permite definir y manejar
jerarquías de clases de un modo simple
12
Conceptos de la POO (7)
„
Ligadura Dinámica:
„
Calcular área de figura seleccionada
Conceptos de la POO (8)
„
Calcular área de la intersección de figuras
seleccionadas
13
Análisis y diseño OO-UML (1)
Análisis y diseño OO-UML (2)
14
Análisis y diseño OO-UML (3)
Trabajo próxima clase
„
Lectura:
„
„
Trabajo:
„
„
„
„
Capitulo 3: Conceptos fundamentales de la
programación orientada a objetos.
Resumen escrito del capitulo (3 hojas a espacio
sencillo).
Solucionar los problemas del punto 3.2
Fecha de entrega: Febrero 11
Integrantes: 3 estudiantes (ni más ni menos)
15