Introduccción a la POO (OOP). 1) Web Servicies 2) SOA – Arquitectura Orientada a Servicios 3) PHP...

42
Introduccción a la POO (OOP)

Transcript of Introduccción a la POO (OOP). 1) Web Servicies 2) SOA – Arquitectura Orientada a Servicios 3) PHP...

Page 1: 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,..)

Introducccióna la POO (OOP)

Page 2: 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,..)

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

Page 3: 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,..)

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%

Page 4: 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,..)

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, ...

Page 5: 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,..)

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.

Page 6: 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,..)

● 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)

Page 7: 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,..)

● 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)

Page 8: 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,..)

● 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)

Page 9: 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,..)

● 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)

Page 10: 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,..)

¿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)

Page 11: 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,..)

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)

Page 12: 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,..)

● 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

Page 13: 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,..)

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.

Page 14: 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,..)

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

Page 15: 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,..)

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, …

Page 16: 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,..)

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

Page 17: 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,..)

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)

Page 18: 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,..)

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”

Page 19: 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,..)

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)

Page 20: 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,..)

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)

Page 21: 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,..)

Otros aspectos de la POO

● Beneficios: Mejor mantenimiento Estructuras más reales de la información Escalabilidad Adaptabilidad

Page 22: 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,..)

Otros aspectos de la POO, II

● Inconvenientes: Necesidades de estandarización (OMG, Object

Management Group)

Coste de conversión de software legado (legacy)

Page 23: 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,..)

Conceptos de POO, I

● Conceptos principales: Clase Objeto (una instancia de una clase) Jerarquía de herencia entre clases

Page 24: 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,..)

Conceptos de POO, II

● Objetos: objeto=datos+métodos miembros de un objeto (o clase):

● datos● métodos

identificador del objeto ● nombre de variable

Page 25: 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,..)

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)

Page 26: 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,..)

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)

~

~

Page 27: 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,..)

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

Page 28: 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,..)

Encapsulamiento, II● Ejemplo

clase Robot● Datos:

privado x (entero) privado y (entero)

● Constructores: ● público Robot (entero, entero)● público Robot (entero)

Page 29: 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,..)

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)

Page 30: 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,..)

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)

Page 31: 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,..)

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)

Page 32: 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,..)

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)

Page 33: 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,..)

Herencia, II

● Ejemplo: Clase: RobotConFrontera Clase padre: Robot Datos:

● privado limX (entero)● privado limY (entero)

Page 34: 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,..)

Herencia, III Clase: RobotConFrontera Métodos:

● void avanzar (entero, entero)● void avanzar (entero)● Constructores:

RobotConFrontera (entero, entero,

entero, entero) RobotConFrontera (entero, entero, entero)

Page 35: 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,..)

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

Page 36: 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,..)

Herencia, III

● Herencia simple:● Figura, Círculo, Rectángulo, Cuadrado, Triángulo

● Herencia múltiple:● Persona, Profesor, Investigador, ProfesorUniversitario● Problemas de ambigüedad

Page 37: 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,..)

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)

Page 38: 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,..)

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

Page 39: 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,..)

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)

Page 40: 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,..)

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

Page 41: 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,..)

UML● Unified Modeling Language

● Diagramas (condensación gráfica de estructuras de clases y relaciones entre objetos y clases)

Page 42: 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,..)

UML● Unified Modeling Language

● Diagramas (condensación gráfica de estructuras de clases y relaciones entre objetos y clases)