Didier Fabián Granados Muñoz
Sesión No. 4 – Programación Orientada a Objetos
Agosto 26 de 2008
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.
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
Procedimientos
Datos
“Universo de objetos responsables que
se comunican por medio de mensajes para
cumplir unos objetivos”
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)
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.
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.
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.
“Un paradigma es un conjunto de
creencias compartidas o de sabiduría
convencional acerca de las cosas”.
Thomas Kuhn.
Bueno… y entonces…
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.
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.
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.
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.
El mundo está lleno de objetos reales, los
cuales se pueden representar como tales
en una solución computarizada.
Por ejemplo… un automóvil¿Qué características puede tener?
Color
Marca
Clase
Línea
Modelo
Placa
Carrocería
Cilindraje
Y… ¿qué tal algo más familiar?Un computador tiene, entre otras cosas:
Marca
Disco duro
Procesador
Memoria
Teclado
Mouse
Monitor
Parlantes
O ustedes mismos…Un estudiante tiene muchas características,
entre ellas:
Nombre
Apellidos
Edad
Teléfono
Dirección
Carrera
…
Los objetos enunciados anteriormente no solo tienen
sus características. También tienen la capacidad de
ejecutar diferentes acciones.
Un automóvil puede…
Correr
Hacer ruido
Encender las luces
Bajar vidrios
Limpiar su parabrisas
Frenar
Pitar
Estacionarse
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...
Un estudiante puede…
Hablar
Leer
Escribir
Hacer preguntas
Desplazarse
Ver
Escuchar
…
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.
Clase Objeto
“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.
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.
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.
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.
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
Automóvil
Mazda 3 Chevrolet Aveo Renault Twingo
Esta es la clase
Y estos son objetos o instancias de la clase Automóvil:
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.
Automovil
Automovil Mazda3 = new Automovil()
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
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
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.
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
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
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
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.
Herencia [2]
Un ejemplo sencillo…
Automóvil
Barco
Medios de Transporte
AvionetaMotocicleta
Herencia [3]
O algo más complejo…
Mamíferos Aves
Reptiles
Animales
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.
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)
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.
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.
class Domain Objects
Automóv il
Motor
Renault
Mazda
Chev rolet
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.
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.
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.
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
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.
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.
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!
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.
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.