INTRODUCCION A LA ORIENTACION A OBJETOS Tomás Bradanovic La orientación a objetos es la teoría principal para el desarrollo de software en.

Download Report

Transcript INTRODUCCION A LA ORIENTACION A OBJETOS Tomás Bradanovic La orientación a objetos es la teoría principal para el desarrollo de software en.

INTRODUCCION A LA ORIENTACION A OBJETOS
Tomás Bradanovic
La orientación a objetos es la teoría principal para el desarrollo de software
en sistemas grandes, algunas de sus ventajas son:
- Ayuda al desarrollo por componentes
- Desarrollo modular
- Permite crear objetos reutilizables
La orientación a objetos es un modelo, un paradigma que se usa para
muchas cosas, desde los modelos lógicos hasta los lenguajes de
programación orientados a objetos, este modelo se basa en ciertos
principios fundamentales.
Un objeto es cualquier cosa concreta o virtual, el mundo se compone de
objetos y específicamente en el software creamos objetos que imitan o
representan a otros objetos reales
Un objeto es la instancia de una clase (por ejemplo una persona es una
instancia de la clase “seres humanos”), las clases son objetos de otras
clases mayores
Los objetos tienen características que pueden ser
-Atributos (o propiedades)
-Acciones
-Una clase, además de agrupar a los objetos de una cierta categoría, sirve
como “molde” para fabricar nuevos objetos. Esta es una característica
importante al escribir software: las clases sirven para crear nuevas
instancias
El modelo se puede
hacer más exacto
agregando más
atributos y acciones
relevantes
Para que un objeto cumpla con los requisitos del paradigma debe tener las
siguientes características:
1. Abstracción
2. Herencia
3. Polimorfismo
4. Encapsulamiento
Además debe tener las capacidades para
1. Enviar mensajes
2. Asociarse
3. Agregarse
Abstracción: quitar todas las propiedades de un objeto dejando solo las
que son necesarias. Las propiedades relevantes dependen del problema
ejemplo lavadora
Herencia: las clases heredan sus propiedades hacia abajo, por eso una
clase es una plantilla que sirve para crear nuevos objetos, esto evita repetir
las propiedades, basta con que sea una subclase para que las propiedaes
sean heredadas por defecto ejemplo electrodomésticos – lavadora
Superclase
Las Supercalses
pueden ser
Subclases de otras
Aspiradoras
Tostadoras
Subclase
Polimorfismo: una operación puede tener el mismo nombre en diferentes
clases, en cada clase puede operar de manera distinta, por ejemplo la
operación abrir(). Cada clase debe “saber” como funcionan sus operaciones,
ejemplo: abrir un archivo, abrir una ventana, abrir un acceso a base de datos
son operaciones distintas que llevan el mismo nombre, ´la clase donde están
define como opera.
Encapsulamiento: consiste en ocultar el funcionamiento interno de sus
operaciones, el objeto muestra una funcionalidad pero no da acceso al
prodedimiento detallado, el encapsulamiento permite la integridad y la
interoperabilidad entre objetos, ejemplo a una función
abrirBaseDatos(nombre,#registro) solo tenemos acceso a sus parámetros,
pero no a su funcionamiento interno. El encapsulamiento también se llama
ocultamiento.
El mundo real está lleno de ejemplos de encapsulamiento, usamos autos,
teléfonos, vemos televisión, etc. sin saber en detalle como funcionan, solo nos
interesa conocer sus funcionalidades.
Envío de mensajes: los objetos se comunican entre sí enviándose
mensajes a través de interfaces.
Interfase
Encendido()
Interfase
agregarRopa()
Ejemplo, al usar un control remoto estamos enviando un mensaje al televisor
para que cambie de canal, este mensaje lleva un parametro (el número de
canal al que queremos cambiar) y es nuestra forma de comunicar al objeto
persona con el objeto televisor
Asociaciones: dos objetos se pueden asociar entre si mediante una
relación, la asociación se materializa a través de mensajes, pero se
diferencia en que la asociación se refiere más bien a la naturaleza de los
mensajes. Las asociaciones tienen direción –pueden ser en una sola
dirección o en dos direcciones o vías- también dos objetos pueden asociarse
en más de una forma, ejemplo Pedro y Juan pueden ser colegas de trabajo,
pero también amigos o compañeros de equipo de fútbol, etc.
Un solo objeto o clase se puede asociar con otros varios, esto se llama
multiplicidad o diversificación, es decir pueden haber asociaciones uno a uno,
uno a muchos, o muchos a uno.
Agregación: consiste en la asociación de varios objetos que funcionan para
un fin común, ejemplo, en un programa de inventario puede haber un objeto
leerRegistro(), grabarRegistro(), listarInventario(), etc. todos trabajan
asociados. La composición agrupa a todos los componentes que son vitales
para que la agregación funcione, por ejemplo un sistema de inventario no
puede funcionar sin un objeto leerRegistro()
Orientación a objetos=objetos+clasificación+herencia+comunicación
Abstracciones de datos (atributos) y procedimientos=modularidad
Ocultamiento de la información (encapsulamiento) minimiza el impacto de
los cambios, ejemplo, compartimientos estancos en los barcos
Los métodos (operaciones) manipulan los atributos, que son limitados
(cohesión interna). La clase forma una “muralla” alrededor de los métodos,
que solo son accesibles por las “puertas” de sus parámetros a través de
mensajes. Esto produce un bajo acoplamiento con los demás componentes
del sistema.
Las clases se organizan en jerarquías, como muestra la figura
Ejemplo de uso del polimorfismo
Supongamos que tenemos un objeto que debe recibir datos y hacer uno de
los siguientes gráficos: barra, torta, líneas o nube de puntos, por el método
tradicional debería programarse algo como:
case of tipo_grafico:
if tipo_grafico=grafico_barra then DibujarBarras(datos);
if tipo_grafico=grafico_torta then DibujarTorta(datos);
if tipo_grafico=grafico_linea then DibujarLinea(datos);
if tipo_grafico=grafico_nube then DibujarNube(datos);
End case
Si definimos una clase Grafico y cuatro subclases para cada tipo,
podríamos reemplazar todo esto por una sola línea
tipo_grafico dibujar
Donde la operación dibujar será distinta para cada tipo_grafico
Objetos y componentes
Como dijimos la Teoría de Orientación a Objetos es un paradigma, muy bien
estructurado con bases matemáticas en la Teoría de Conjuntos, por esto tiene
definiciones y requisitos estrictos que definen cuales enfoques on orientados a
objeto y cuales no (deben cumplir con los requisitos de abstracción, herencia,
polimorfismo, encapsulación, etc.)
Existe un desarrollo teóricamente más relajado que toma muchas de las
definiciones y métodos de la orientación a objetos aunque no cumple
estrictamente con todos los requisitos, es el desarrollo modular de
componentes.
Por ejemplo los lenguajes de programación C++, C#, Visua Basic.net son
orientados a objetos, mientras el Visual Basic.6 o el Visual Basic Para
Aplicaciones son lenguajes orientados a componentes, que no cumplen con
algunos de los requisitos de la Teoría de Objetos
Visual Basic 6 no implementa de manera nativa la herencia ni el polimorfismo,
aunque se pueden simular ambos requisitos, la crítica fundamental es que VB
6 no restringe y permite crear objetos que violen estos dos requisitos. Se
puede decir que VB6 es un lenguaje orientado a eventos que usa objetos y
muchos de los conceptos de la Teoría de Objetos
Como el Visual Basic 6 y VBA son los lenguajes más usados para
desarrollar aplicaciones comerciales a nivel de micro y mini
aplicaciones (inventarios, cuentas corrientes, etc.) los usaremos como
ejemplos para mostrar como se aplica la orientación a objetos en el
desarrollo de software
Clases y objetos
Las palabras "clase" y "objeto" se utilizan con tanta frecuencia en la
programación orientada a objetos que es fácil confundir los términos.
En general, una class es una representación abstracta de algo,
mientras que un objeto es un ejemplo utilizable de lo que representa la
clase. La única excepción a esta regla la constituyen los miembros de
clases compartidas, que pueden utilizarse en instancias de una clase y
en variables de objeto declaradas como tipo de la clase.
Campos, propiedades, métodos y eventos
Las clases se componen de campos, propiedades, métodos y eventos.
Los campos y propiedades representan información que contiene un
objeto. Los campos se parecen a las variables en que se pueden leer y
establecer directamente.
Por ejemplo, si tiene un objeto denominado “Auto", podría almacenar su
color en un campo denominado "Color".
Las propiedades se recuperan y establecen como los campos, pero se
implementan mediante los procedimientos Get propiedad
y Set propiedad, que proporcionan más control sobre la forma en que
los valores se establecen o se devuelven. Ejemplos:
Get Auto.Color
Set Auto.Color=“Rojo”
Los métodos representan acciones que un objeto puede realizar. Por
ejemplo, un objeto “Auto" podría tener los métodos “encenderMotor",
“conducir" y “apagarMotor". Los métodos se definen agregando
procedimientos, ya sean rutinas o funciones Sub, a la clase. Ejemplo
Sub encenderMotor(), Sub conducir(40)
Los eventos son notificaciones que un objeto recibe de, o transmite a,
otros objetos o aplicaciones. Los eventos permiten a los objetos
realizar acciones siempre que se produce un acontecimiento
específico. Un ejemplo de evento para la clase “Auto" sería un evento
"Check_Engine". Como Microsoft Windows es un sistema controlado
por eventos, éstos pueden proceder de otros objetos, aplicaciones o
entradas de usuario realizadas al hacer clic con el mouse (ratón) o al
presionar teclas. Ejemplo
Sub BotonComando1_Click()
Se usa para escribir lo que debe ocurrir cuando se haga un click con
el mouse en el objeto BotonComando1
Ejemplo: si insertamos un
Userform y un
CommandButton1, luego
hacemos click al Userform1
En la parte inferior izquierda
aparece la ventana con todas
las propiedades del objeto
Userform1
Backcolor, Bordercolor,
Borderstyle, Caption, etc.
Estas propiedades las
podemos cambiar en esa
ventana o bien dentro de otro
objeto Sub por medio de un
mensaje
Ejemplo de cambio de
propiedades de Userform1
Si ahora hacemos click sobre
el CommandButtom1, la
ventana de propiedades
cambia y aparecen las
propiedades asociadas a ese
objeto
Ejemplo de cambio de
propiedades de
CommandButtom1
Aún cuando VB6 no es un lenguaje orientado estrictamente a objetos,
nos permite ver de manera clara algunas de las ventajas de la Teoría
de Orientación a Objetos.
Por ejemplo vemos como hay al menos dos objetos (son muchísimos
más como veremos más adelante) predefinidos, de uso general, uno
de ellos es la UserForm, que es una ventana a la que le podemos
alterar sus propiedades así como su comportamiento, el otro es un
CommandButtom que también tiene propiedades y operaciones,
veamos por ejemplo el CommandButtom1 que ocurre cuando hacemos
doble click en él
En este caso aparece a la derecha
Private Sub CommandButtom1_Click()
End sub
Aquí escribimos el procedimiento que hara el objeto
CommandButtom al recibir un click del mouse
En el extremo derecho aparece una serie de “eventos” que pueden
ser programados para el botón CommandButtom, por ejemplo
Dblclick, Enter, Error, Exit, Keydown, Keypress, Keyup, etc.
O sea tenemos una Clase, que también es un Objeto, el cual tiene
propiedades y hace distintas operaciones de acuerdo a los mensajes
que se le envían a través de los eventos
Ejemplo de programación de CommandButtom1
Ya vimos como el VB6 nos permite usar algunos objetos
predeterminados, bien sea usando “Insert” en el menú, o bien
arrastrándolos desde una caja de herramientas, pero ¿de donde vienen
estos objetos? ¿podemos crear objetos nuevos, que sirvan para alguna
aplicación particular nuestra?. Si hacemos click en “Herramientas”,
“Controles Adicionales”, aparece un larga lista de objetos, muchos que
no son de Microsoft
Los que están chequeados son
los que ya aparecen en la caja
de herramientas, los que no
están chequeados son los que
podemos agregar
La idea de programar con componentes es una extensión de las
subrutinas de propósito general, por ejemplo, imaginemos que hay que
programar varios sistemas diferentes pero todos ellos necesitarán usar
ventanas, botones de control, desplegar listas, etc. entonces en lugar
de programar para cada aplicación desde cero todas las ventanas,
botones y listas lo que se hace es una “library” (biblioteca) con objetos
genéricos –o clases- por ejemplo en mi biblioteca incluyo un objeto
llamado Ventana que tendrá propiedades variables (color, tamaño,
ubicación en la pantalla, etc.) y también tendrá métodos (acciones,
operaciones), como por ejemplo aparecer, desaparecer, cambiar de
color, etc.
También uno mismo puede programar algún componente especial que
necesite (por ejemplo un objeto genérico que lea los registros de un
archivo), estos componentes se encapsulan con la extensión .ocx
Por ejemplo todos los programas que funcionan en Windows
aprovechan los cientos de bibliotecas de funciones genéricas .dll que
están en C:\Windows y sus sub carpetas, pero además tienen sus
propias .dll y .ocx según necesiten.
Así muchos programas diferentes pueden llamar a estas bibliotecas
por medio de mensajes, diciendo que objeto quieren usar, cuales
deben ser sus propiedades y que operación desean que haga, los
diferentes programas serán mucho más sencillos pues no necesitan
repetir todo lo que requieren desde cero, basta con que llamen a la
biblioteca correspondiente.
Estas bibliotecas son los archivos con extensión .dll y otras que
acompañan a la mayoría de los programas
Tenemos entonces las .dll, .ocx y similares que nos evitan tener que
reescribir código repetidamente desde cero para cada aplicación.
Como estas bibliotecas y componentes están encapsulados, no
tenemos acceso a sus procedimientos internos, sino que funcionan
como una caja negra que permite solo cierto tipo de entradas y salidas
Es como un televisor que podemos usar, pero nunca lo desarmamos,
para encender, apagar, cambiar el canal, volumen, etc.tenemos una
forma de enviarle “mensajes” sin que sea necesario modificar los
circuitos, esa es la idea de la encapsulación.