Introducccióna la POO (OOP)
1) Web Servicies
2) SOA – Arquitectura Orientada a Servicios
3) PHP
4) JSP
5) Javascript
6) Eclipse (plugins C++, C, PHP,..)
5) Qt / C++ y QtJambi
http://es.wikipedia.org/wiki/Portada
TEMAS PARA EXPOSIONES
Mónica Gonzalez y Violetta
Javier Rojas y
Maximiliano Rodriguez
Elba Guerray Christian Poliycroniadys
Efrain Vasquez y Christian Becles
Laura García y Edar Castro
Rafael Andara y Aldo Grazzina
27 y 28 de Noviembre
[Presentación 15min]
Contenido● Qué es?● Areas de aplicación● Ejemplos Básicos● Relaciones con otras herramientas
(versiones, plungins, interfaces)
TEMAS PARA EXPOSIONES26 y 28 de Noviembre
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 calidad del software● Eficiencia● Portabilidad● Verificabilidad● Integridad (protección contra procesos sin derecho de acceso)
● Facilidad de uso● Robustez (situaciones anómalas)
● Extensibilidad● Reutilización● Compatibilidad, ...
Abstracció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.
● La programación orientada a objetos trata de
amoldarse al modo de pensar del hombre y no
al de la máquina.
● Esto es posible gracias a la forma racional con
la que se manejan las abstracciones que
representan las entidades del dominio del
problema, y a propiedades como la jerarquía o
el encapsulamiento.
Programación Orientada a Objetos (POO)
● El elemento básico de este paradigma no es la
función (elemento básico de la programación
estructurada), sino un ente denominado Objeto.
Programación Orientada a Objetos (POO)
● Un objeto es la representación de un concepto para
un programa, y contiene la información necesaria
para abstraer dicho concepto:
los datos que describen su estado
las operaciones que pueden modificar dicho estado, y
determinan las capacidades del objeto.
Programación Orientada a Objetos (POO)
● Un objeto es un trocito de programa
● Un programa es un conjunto de objetos
● Se programan cosas que pueden ser muy complejas
y para mantener esa complejidad bajo control hay
que partir el problema en piezas controlables
Divide y vencerásl
Programación Orientada a Objetos (POO)
¿Los objetos son objetos?
● Los objetos de programación NO son objetos materiales
● Inicialmente los objetos se inventaron para estructurar
programas de simulación flujo viales: un auto, un peatón,
una calle, un semáforo, ...
● Actualmente se usan para estructurar objetos materiales,
servicios, conceptos, ..., en general cualquier abstracción
mental.
Programación Orientada a Objetos (POO)
Ejemplos de objetos
● Una estructura algebraica (ej. un grupo)
● Un ámbito de trabajo (ej. colores)
● Un objeto material (ej. un satélite)
● Un servicio inmaterial (ej. www)
● Algo muy “real”: una cuenta corriente
Programación Orientada a Objetos (POO)
● Habitualmente un programa emplea muchos objetos de
la misma clase
muchos coches, muchos satélites, muchas conexiones
www, muchos transistores, ...
● Los programadores definen clases
class Car { ... detalles ... }
● Y luego crean objetos de las clases definidas
Car miAuto = new Car (...);
Car autoDeElisa = new Car (...);
Programación Orientada a Objetos (POO) Clases de Objetos
Programación Orientada a Objetos (POO)
● 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.
Características de POO, I● El modelo objeto (Booch, Object-Oriented Analysis and Design with Applications,1994):
Abstracción
Las características esenciales del objeto
Documento: insertar, borrar, ... Encapsulamiento (ocultamiento de información)
Una clase contiene:
+ una interfaz pública
+ una implementación
Documento: posicionPrevia
Caracterí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, …
Características de POO, III Jerarquía
● Ordenamiento 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
Caracterí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)
Importancia 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”
Lenguajes de POO● Cronología resumida:
Fortran (1958) LISP (1959) BASIC (1964) Pascal (1969) Prolog (1971) C++ (1986) Object Pascal (1988) CLOS (1989) Java (1995)
Lenguajes de POO, II● The journal of object-oriented programming (1988)● Primeros lenguajes POO:
Simula-67● Objeto (datos+métodos). Clase. Herencia.
Smalltalk-80● Verdadero primer lenguaje de POO● Concepto de paso de mensajes (activación de métodos)
Otros aspectos de la POO
● Beneficios: Mejor mantenimiento Estructuras más reales de la información Escalabilidad Adaptabilidad
Otros aspectos de la POO, II
● Inconvenientes: Necesidades de estandarización (OMG, Object
Management Group)
Coste de conversión de software legado (legacy)
Conceptos de POO, I
● Conceptos principales: Clase Objeto (una instancia de una clase) Jerarquía de herencia entre clases
Conceptos de POO, II
● Objetos: objeto=datos+métodos miembros de un objeto (o clase):
● datos● métodos
identificador del objeto ● nombre de variable
Conceptos 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)
Creació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)
~
~
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
Encapsulamiento, II● Ejemplo
clase Robot● Datos:
privado x (entero) privado y (entero)
● Constructores: ● público Robot (entero, entero)● público Robot (entero)
Encapsulamiento, 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)
Representaciónclase: Robotclase: Robot
DatosDatos
MétodosMétodos
xx
yy
void avanzar (entero, entero)
void avanzar (entero)
entero getX ()
entero getY ()
Robot (entero, entero)
Robot (entero)
Ejecució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) robot1=Robot(3,2) robot1.avanzar(1,2)
Herencia● 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)
Herencia, II
● Ejemplo: Clase: RobotConFrontera Clase padre: Robot Datos:
● privado limX (entero)● privado limY (entero)
Herencia, III Clase: RobotConFrontera Métodos:
● void avanzar (entero, entero)● void avanzar (entero)● Constructores:
RobotConFrontera (entero, entero,
entero, entero) RobotConFrontera (entero, entero, entero)
Herencia, 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
Herencia, III
● Herencia simple:● Figura, Círculo, Rectángulo, Cuadrado, Triángulo
● Herencia múltiple:● Persona, Profesor, Investigador, ProfesorUniversitario● Problemas de ambigüedad
Herencia, IV
● Clase 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)
Herencia, 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
Herencia, IV● “Overloading” y “Overriding” son casos de polimorfismo:
El mismo método definido de modos distintos● 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. dinámica)
Framework● 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
UML● Unified Modeling Language
● Diagramas (condensación gráfica de estructuras de clases y relaciones entre objetos y clases)
UML● Unified Modeling Language
● Diagramas (condensación gráfica de estructuras de clases y relaciones entre objetos y clases)