450 likes | 766 Views
Introduccción a la POO (OOP). 1) Web Servicies 2) SOA – Arquitectura Orientada a Servicios 3) PHP 4) JSP 5) Javascript 6) Eclipse (plugins C++, C, PHP,..) 7) Qt / C++ y QtJambi 8) NETBEANS. Introducción. Fases del ciclo de vida del software: 1) Análisis, 6% 2) Diseño, 5%
E N D
1) Web Servicies 2) SOA – Arquitectura Orientada a Servicios 3) PHP 4) JSP 5) Javascript 6) Eclipse (plugins C++, C, PHP,..) 7) Qt / C++ y QtJambi 8) NETBEANS
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.
Programación Orientada a Objetos (POO) • 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) Clases de Objetos • 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) • 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 colorrojo y se mueve” “El documento tiene letragrande 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 Métodos: void avanzar (entero) Constructores: Robot (entero, entero) Robot (entero) Instanciación: objeto “robot1” (Robot) robot1 = Robot(1,2) • Ejemplo: • Clase: Robot • Datos: x (entero), y (entero) • Métodos: • void avanzar (entero, entero) • entero posicionX () • entero posicionY ()
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ón clase: Robot Datos x y Métodos Robot (entero, entero) Robot (entero) void avanzar (entero, entero) void avanzar (entero) entero getY () entero getX ()
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)