220 likes | 401 Views
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
E N D
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: • Abstracción • Herencia • Polimorfismo • Encapsulamiento • Además debe tener las capacidades para • Enviar mensajes • Asociarse • 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 Interfase agregarRopa() Encendido() 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.