Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

63
Didier Fabián Granados Muñoz Sesión No. 4 Programación Orientada a Objetos Agosto 26 de 2008

Transcript of Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Page 1: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Didier Fabián Granados Muñoz

Sesión No. 4 – Programación Orientada a Objetos

Agosto 26 de 2008

Page 2: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Se originan y apoyan a partir de modelos de programación ó

desarrollos tecnológicos.

Se soportan en mayor o menor grado en los principios de

ingeniería.

Las necesidades del negocio contribuyen a su fortalecimiento.

Generalmente son evolucionistas: apropian las fortalezas de

enfoques anteriores.

Page 3: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Análisis y diseño estructurado como

evolución de la programación

estructurada (Orientada a procesos /

Orientada a datos)

Modularidad alrededor de la

funcionalidad

Análisis y diseño orientado a objetos

como evolución de la programación

orientada a objetos

Modularidad alrededor de las entidades

relevantes del problema

Énfasis en reutilización (herencia)

Énfasis en cohesión y acoplamiento

Page 4: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Procedimientos

Datos

Page 5: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

“Universo de objetos responsables que

se comunican por medio de mensajes para

cumplir unos objetivos”

Page 6: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

IHacerReserva

ITomarReserva

<<comp_espec>>

SistemaReservas

<<comp_espec>>

SistemaFacturacionIFacturacion

<<comp_espec>>

ClienteAdm

IClienteAdm

<<comp_espec>>

HotelAdm

IHotelAdm

• Se hace énfasis en separación de la interfaz (contrato) de la implementación.

• Los servicios provistos por el contenedor (middleware) facilitan la

instanciación de los objetos concretos encargados de prestar los servicios

Contenedor

Desarrollo basado en

componentes CBSE

(Component Based

Software Engineering)

Page 7: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Desarrollo Orientado a

Servicios (SODA)

Cluster de

Servidores de

Aplicaciones

Aplicaciones

Legadas

Servidor de

Procesos

(BPM)

Base de

Datos

Sistema

Batch

Portal de

Servicios Integrados

Énfasis en definición de funcionalidades de granularidad

gruesa, denominadas servicios, que interactúa con

aplicaciones y otros servicios a través de modelos de

comunicación basado en mensajes débilmente acoplados.

Page 8: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Desarrollo orientado a aspectosAproximación que permite analizar los asuntos de interés de un sistema (concerns) y detectar la funcionalidad transversal (crosscutting concerns) en más de un punto del sistema.

Page 9: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos
Page 10: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos
Page 11: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Bueno… y qué es un paradigma?

Un paradigma es un conjunto de teorías generales,

suposiciones, leyes o técnicas de que se vale una escuela de

análisis o comunidad científica para evaluar todas las cosas.

Page 12: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

“Un paradigma es un conjunto de

creencias compartidas o de sabiduría

convencional acerca de las cosas”.

Thomas Kuhn.

Page 13: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Bueno… y entonces…

Page 14: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Es un paradigma de la programación

de computadores.

Hace referencia al conjunto de

teorías, estándares, modelos y

métodos que permiten organizar el

conocimiento.

Proporciona un medio bien definido

para visualizar el dominio del

problema.

Implementa en un lenguaje de

programación la solución a ese

problema.

Page 15: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

En otras palabras…

La Programación Orientada a Objetos es intentar llevar a un

programa de computador una visión de un problema que sea

lo más cercana posible a la realidad, de acuerdo al ámbito en el

que se desarrolla el mismo.

Page 16: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Programación Estructurada

Conocida como programación

tipo “spaguetti”.

El código spaguetti es un término

peyorativo para los programas de

computación que tienen una

estructura de control de flujo

compleja e incomprensible.

Se deriva del hecho que este tipo

de código parece asemejarse a un

plato de spaguettis, es decir, un

montón de hilos intrincados y

anudados.

Page 17: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Programación Estructurada

El elemento básico es la función.

Presta atención al conjunto de

acciones que manipulan el flujo de

datos (desde la situación inicial a la

final)

Programación Orientada a Objetos

El elemento básico es el objeto.

Presta atención a la interrelación que

existe entre los datos y las acciones a

realizar con ellos.

Page 18: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

El mundo está lleno de objetos reales, los

cuales se pueden representar como tales

en una solución computarizada.

Page 19: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Por ejemplo… un automóvil¿Qué características puede tener?

Color

Marca

Clase

Línea

Modelo

Placa

Carrocería

Cilindraje

Page 20: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Y… ¿qué tal algo más familiar?Un computador tiene, entre otras cosas:

Marca

Disco duro

Procesador

Memoria

Teclado

Mouse

Monitor

Parlantes

Page 21: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

O ustedes mismos…Un estudiante tiene muchas características,

entre ellas:

Nombre

Apellidos

Edad

Teléfono

Dirección

Carrera

Page 22: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Los objetos enunciados anteriormente no solo tienen

sus características. También tienen la capacidad de

ejecutar diferentes acciones.

Page 23: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Un automóvil puede…

Correr

Hacer ruido

Encender las luces

Bajar vidrios

Limpiar su parabrisas

Frenar

Pitar

Estacionarse

Page 24: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Por un computador se puede…

Iniciar su sistema operativo

Mostrar los archivos

Ejecutar programas

Navegar por internet

Colocar música

Escribir documentos

Ver fotografías

Chatear...

Page 25: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Un estudiante puede…

Hablar

Leer

Escribir

Hacer preguntas

Desplazarse

Ver

Escuchar

Page 26: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

La POO brinda a través de sus herramientas, la

facilidad de concebir, analizar, modelar, diseñar e

implementar el mundo real de manera fiel a como se

presenta en la realidad.

La POO trata de amoldarse al modo de pensar del

hombre y no al de la máquina.

Cada forma de pensar y ver el mundo es diferente,

sin embargo no se trata de programar orientado a

objetos, se trata de programar bien aprovechando

las ventajas de POO.

Page 27: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos
Page 28: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Clase Objeto

Page 29: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

“Una clase representa a

un conjunto de objetos

que comparten estructura

y comportamiento

común” [Booch].

Es el molde o plantilla

con el que se puede

construir objetos. En

otras palabras, son

abstracciones de objetos.

Page 30: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Un objeto es cualquier cosa. Y es

en serio! Un objeto es cualquier

cosa de la cual podamos emitir

un concepto, o descripción.

En términos formales de la POO,

un objeto es una instancia de

una clase, llamando instanciar al

hecho de producir y completar un

objeto llenando con valores sus

atributos.

Page 31: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos
Page 32: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Características o atributos

Son los campos o propiedades de una

clase.

Ayudan a definir su estructura y permite

diferenciarlo de otros objetos.

Se define con un identificador y un tipo,

el cual indica los valores que puede

almacenar.

El conjunto de valores de los campos

definen el estado del objeto.

Page 33: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Acciones o Comportamientos

Servicios, Métodos, Funciones o

Procedimientos.

Estos son los servicios que provee

una clase, la forma en que es posible

comunicarse con un objeto.

Son la implementación algoritmos que representa una

operación o función que un objeto realiza.

El conjunto de los métodos de un objeto determinan su

comportamiento.

Page 34: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Atributos

Color

Marca

Clase

Línea

Modelo

Placa

Carrocería

Cilindraje

No. de Puertas

Clase: Automóvil

Acciones

Correr

Hacer ruido

Encender las luces

Bajar vidrios

Limpiar su

parabrisas

Frenar

Pitar

Estacionarse

Automóvil

Page 35: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Automóvil

Mazda 3 Chevrolet Aveo Renault Twingo

Esta es la clase

Y estos son objetos o instancias de la clase Automóvil:

Page 36: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Instanciación

Es la acción de construir un objeto de una clase.

¿Cómo se hace en POO?

Generalmente se utiliza la palabra clave “new”.

Clase instancia = new Clase();

Esto no necesariamente aplica para todas las clases, pues hay tipos que

no se dejan instanciar… pero eso se verá luego.

Page 37: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Automovil

Automovil Mazda3 = new Automovil()

Page 38: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Atributos

Rojo

Chevrolet

Particular

Aveo GTI

2009

MON377

Hatchback

1600

3 puertas

Estado del Objeto: Chevrolet Aveo

Acciones

Correr

Hacer ruido

Encender las luces

Bajar vidrios

Limpiar su

parabrisas

Frenar

Pitar

Estacionarse

Chevrolet Aveo

Page 39: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Atributos

Gris

Renault

Particular

Twingo U

2007

FGW924

Hatchback

1600

3 puertas

Estado del Objeto: Renault Twingo

Acciones

Correr

Hacer ruido

Encender las luces

Bajar vidrios

Limpiar su

parabrisas

Frenar

Pitar

Estacionarse

Renault Twingo

Page 40: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos
Page 41: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Encapsulamiento [1]

Consiste en ocultar los detalles de

la implementación de un objeto,

a la vez que se provee una

interfaz pública por medio de sus

métodos permitidos.

También se define como la

propiedad de los objetos de

permitir acceso a su estado

solamente a través de su interfaz

o de relaciones preestablecidas

con otros objetos.

Page 42: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Encapsulamiento [2]

Tipos de encapsulamiento.

Privado: Atributo o método con

el acceso privado solo puede ser

modificado por medio de los

métodos del mismo objeto que

lo contiene. De esta manera si

tenemos un atributo y queremos

cambiar su valor con un método

de otro objeto nos dará error de

acceso.Lo que está dentro de

la casa es privado

Page 43: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Encapsulamiento [3]

Tipos de encapsulamiento.

Público: Un método o atributo

publico puede ser accedido y

usado desde cualquier objeto, sin

restricciones, desde cualquier

parte del programa.

Puertas, ventanas, techo…

los ve todo el mundo

Page 44: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Encapsulamiento [4]

Tipos de encapsulamiento.

Protegido: Un atributo o

método protegido es accesible

por el objeto en sí y por sus

clases derivadas, las que heredan

de el.

El concepto de herencia se verá a

continuación…

Los vidrios de las ventanas

están protegidos por rejas

Page 45: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Herencia [1]

Es uno de los mecanismos de la

programación orientada a objetos,

por medio del cual una clase se deriva

de otra, compartiendo los atributos y

métodos de la primera.

La clase desde la cual se hace la

derivación se llama superclase o

clase padre, de manera que extiende

su funcionalidad.

La clase derivada se llama clase hija

o subclase.

Page 46: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Herencia [2]

Un ejemplo sencillo…

Automóvil

Barco

Medios de Transporte

AvionetaMotocicleta

Page 47: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Herencia [3]

O algo más complejo…

Mamíferos Aves

Reptiles

Animales

Page 48: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Polimorfismo

Una misma operación puede

realizarse de formas distintas en

clases distintas. La semántica es

común pero la implementación varía

en cada clase.

Así como la herencia está relacionada

con las clases y su jerarquía, el

polimorfismo se relaciona con los

métodos.

Page 49: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Sobrecarga de métodos

Es la capacidad que posee una clase

de tener varios métodos con el

mismo nombre y con igual retorno,

pero que se diferencian en sus

argumentos.

De esta manera el objeto al que se

envía el mensaje sabe que método es

el que debe de ejecutar.

Pueden comportarse de forma

distinta según la naturaleza de estos

argumentos. cambiarColor(rojo, gris)

cambiarColor(negro)

Page 50: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Tipificación

Es la aplicación de las características de la clase al objeto, de tal

manera que los objetos de distintos tipos no pueden

intercambiarse, o sólo se pueden intercambiar en forma

restringida.

Existen diferentes formas de tipificación:

Tipificación estática: se hace en tiempo de compilación.

Tipificación fuerte:

Asociación dinámica: se hace en tiempo de ejecución.

Page 51: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Concurrencia

Es la propiedad que distingue a un objeto activo de otro que no

está activo. Se puede considerar el activar al mismo tempo a

varios objetos realizando diferentes tareas para un mismo

proceso.

Persistencia

Es la propiedad que tiene un objeto de trascender en el tiempo,

ya que continúa existiendo después de que su creador deja de

existir, o en el espacio, donde el objeto sigue existiendo aún y

cuando no exista el espacio donde fue creado.

Page 52: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

class Domain Objects

Automóv il

Motor

Renault

Mazda

Chev rolet

Page 53: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

En UML, una clase está representada por un rectángulo con tres

secciones.

La primera sección

corresponde al nombre de la

clase.

En la segunda sección se

ubican los atributos de la

clase.

Y en la tercera sección se

ubican los métodos de la

clase.

Page 54: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Los atributos se ingresan en la primera sección.

Deben ir acompañados de sus correspondientes tipos de datos y

encapsulamiento.

• Nótese el orden de

aparición:

Primero aparece el tipo

de encapsulamiento:

+ Público

- Privado

# Protegido

Luego, el nombre del

atributo, seguido de

dos puntos.

Y por último, el tipo del

atributo.

Page 55: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Los atributos se ingresan en la segunda sección.

Se representan de la misma manera que los atributos, aunque con

características adicionales..

Primero aparece el tipo de

encapsulamiento:

+ Público

- Privado

# Protegido

Luego, el nombre del

método, seguido de los

tipos de sus parámetros

correspondientes en

paréntesis.

Y por último, el tipo del

atributo, después de los dos

puntos.

Page 56: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Las subclases deben tener una línea terminada en una flecha grande que

apunta hacia la clase padre.

class System

Chev rolet

Automóv il

Mazda Renault

Page 57: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Las subclases solo deben representar sus elementos propios, ya que, por la

representación UML, se entiende que contiene los elementos de la clase

padre.

Un taxi es un automóvil con número de operación y que trabaja para una empresa.

Page 58: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Es la manera como se relacionan dos o

más clases.

Un objeto conoce otro (tiene una

referencia).

Un objeto puede solicitar una operación

en otro objeto pero no es responsable

de él.

La relación de asociación es más débil

que la de agregación…. Y qué es la

agregación?

Un automóvil sabe qué es un motor, pero este

posee igualmente sus especificaciones.

Page 59: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Un objeto es propietario o responsable

de otro objeto.

La relación empleada aquí es la

siguiente: "es parte de".

Implica que ambos objetos tienen el

mismo tiempo de vida.

En UML se representa con un rombo

vacío, el cual se coloca en el extremo

contrario a la clase que es parte de la

otra.

Efectivamente, un motor es parte de un automóvil!

Page 60: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Es dinámica, en tiempo de ejecución.

Los objetos adquieren referencias de

otros objetos.

Los objetos tienen que respetar las

interfaces de los otros objetos.

Exige un diseño cuidadoso de las interfaces.

Hay menos dependencias de

implementación.

Habrá más objetos en el sistema y por

tanto el comportamiento del sistema

dependerá de las interacciones entre

objetos en vez de estar definido en una

clase.

En UML se representa de manera similar

a la agregación, pero con el rombo

lleno.

Efectivamente, un automóvil está compuesto, entre otras

cosas, de un motor.

Page 61: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos

Hubo varios conceptos de los que no se habló en clase, pero

es bueno que lo consulten, ya que son importantes en las

relaciones entre clases:

Genericidad.

Excepciones.

Interfaces.

Clases abstractas.

Page 62: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos
Page 63: Desarrollo de Aplicaciones Web II - Sesión 04 - Programación Orientada a Objetos