Gambas/Programación Orientada a Objetos
De Wikilibros, la colección de libros de texto de contenido libre.
Durante esta sección estarás escarbando en el IDE de Gambas y aprendiendo algunos conceptos clave en tu aprendizaje de Gambas. Aprenderás un concepto de programación importantísimo, conocido como Objetos.
El termina de programación Objeto, probablemente es nuevo para ti hasta este momento. Entre mas trabajes con Gambas mas tu escucharas (y aprenderás) sobre objetos, porque como ya se menciono antes, Gambas es un lenguaje que soporta programación orientada a objetos (OOP por sus siglas en ingles). Puesto que la programación orientada a objetos es un tema muy complejo y va mas alla del alcance de este libro, solo se cubrirá en un sentido muy general. Aun así, no deja de ser un tanto complicado. El reto ahora para ti es aprender acerca de objetos al mismo tiempo que aprendes Gambas. De hecho, asi todo en Gambas es un objeto y pertenece a una colección de objetos. Todos los objetos tienen propiedades (también conocidas como atributos), la mayoría también tienen métodos (también llamados comportamientos), y muchos tienen eventos. Sin importar si crearas una aplicación sencilla o una solución de gran escala, debes entender que es un objeto y como funciona.
Contenido |
[editar] Objetos
Un objetos es una estructura de programación que encapsula datos y funcionalidad como una unidad singular y por lo tanto el único acceso público a ella es a través de sus interfases: propiedades, métodos y eventos. Los objetos usados mas comúnmente son los formularios y los componentes de interfase gráfica. En lecciones anteriores se explico como trabajar con formularios y sus componentes e incluso se mostró como fijar sus propiedades.
Otra importante característica de los objetos es el uso de clases. Una clase es un machote o plantilla usado para crear un objeto. Cada objetos de la misma clase tendrán características parecidas. En las clases se definen todas las características particulares del objeto. Cuando escribes un programa en un lenguaje orientado a objetos no defines objetos individuales. En vez de eso, defines clases usadas para crear esos objetos. Cuando agregras una caja de imagen llamada PictureBox1, lo que en realidad estas haciendo es usar la clase PictureBox y crear una instancia de ella.
[editar] Propiedades o Atributos
Las propiedades son datos que diferencias un objeto de otro. Todos los objetos tienen atributos usados para especificar e informar sobre el estado del objeto. Estos pueden ser usados para determinar la apariencia, estado, y otras cualidades de objetos que pertenece a tal clase. En una clase, las propiedades son definidas por variables (lugares para almacenar información en un programa de computacion). Las variables instanciadas son propiedades que tienen valores que difieren de un objeto a otro. En otras lecciones ya has usado algunas de ellas al usar el visor de Propiedades del IDE. La ventana de propiedades esta disponible en "tiempo de diseño", y es usado solo para manipular las propiedades del formulario y sus componentes. También puedes modificar las propiedades en "tiempo de ejecucion" usando algo de codigo. Cuando hacemos referencia a las propiedades en codigo primero se especifica el nombre del objeto (propiamente hablando, el nombre de la instancia del objeto), seguido de un punto "." y después el nombre de la propiedad, como en el siguiente ejemplo:
NombreDelObjeto.Propiedad
O como en la siguiente linea de código valido de Gambas:
FileChooser1.Filter = [“*.png;*.jpg;*.jpeg;*.bmp”, “Picture files”]
Asumamos que tenemos un objeto llamado HeroesCharacter con las siguientes propiedades: Nombre, InterpretadoPor & Habilidad. Ahora tenemos dos instancias de ese objetos llamadas Heroe1 y Heroe2. Para asignar valores a las propiedades de esos objetos usando codigo hariamos algo parecido a lo siguiente:
Heroe1.Nombre = “Claire Bennet” Heroe1.InterpretadoPor = “Hayden Panettiere” Heroe1.Habilidad = “Rápida regeneración celular” Heroe2.Nombre = “Hiro Nakamura” Heroe2.InterpretadoPor = “Masi Oka” Heroe2.Habilidad = “Manipulacion del espacio-tiempo: teletransportación y viajar por el tiempo”
[editar] WITH - END WITH
La estructura WITH - END WITH nos facilita la asignación de variables de objetos pues en vez de teclear vez tras vez el nombre del objeto (de la instancia, propiamente dicho) solo hacemos mención de el al principio, hacemos todas las asignaciones necesarias y por ultimo cerramos la estructura de asignación.
El ejemplo anterior usando WITH - END WITH se haría de la siguiente manera:
WITH Heroe1 .Nombre = "Claire Bennet" .InterpretadoPor = "Hayden Panettiere" .Habilidad = "Rápida regeneración celular" END WITH
[editar] Comportamiento o Métodos
El comportamiento se refiere a las cosas que la clase del objeto puede hacer a ella misma o a otros objetos. Los métodos pueden ser usados para cambiar las propiedades de un objeto, recibir información de otros objetos, enviar mensajes a otros objetos y/o pedirles que realicen tareas. En otras palabras, los métodos son acciones que los objetos puede hacer, en contraste con las propiedades que solo describen a los objetos. El comportamiento de una clase es implementado usando métodos. Los objetos se comunican entre ellos usando métodos. Piensa en los métodos como funciones. Cuando invocas un métodos algún código es ejecutado. Puedes pasar datos o parámetros a los métodos, y ellos pueden devolver valores. Sin embargo, un método no necesariamente debe aceptar parámetros ni necesariamente debe devolver algún valor. Invocar un método es muy similar a hacer referencia al valor de una propiedad; primero haces referencia al nombre del objeto, después un punto "." y por ultimo el nombre del método seguido de paréntesis, los cuales opcionalmente puede contener parámetros que serán pasados al método.
NombreDelObjeto.Metodo()
Regresemos a nuestro objeto HeroesCharacter. Imagina que nuestra instancia Heroe2 tiene un método llamado ViajarEnTiempo() que acepta dos parámetros: fecha y lugar.
Heroe2.ViajarEnTiempo(“5/2/2009”, “México”)
Cuando invoques este método nuestro amigo Hiro viajara en el tiempo y el espacio a Mayo 2 del 2009 a la ciudad de México.
Las propiedades y los métodos trabajan de la mano, y algunas veces un método en particular se hace no disponible debido al valor de una o mas propiedades. Por ejemplo, si la propiedad Habilidad de Heroe2 se cambiará a "Ninguna" el método ViajarEnTiempo() se volveria obviamente inaplicable. Aun podrías llamar al método, pero al hacerlo podrías causar un error o la llamada seria ignorada.
[editar] Crear una clase
Con algo de suerte, solo necesitaras un par de ejemplos para entender mejor estos conceptos (objetos, clases, propiedades y métodos). Crea un nuevo proyecto como una aplicación de linea de comando llamado Objetos. Cuando creas un proyecto de esta manera se genera una aplicación sin ningun formulario, solo contendrá un modulo llamado MMain. Dentro del IDE de Gambas, has click derecho sobre el directorio Clases sobre el visor del Proyecto, selecciona Nuevo... en el menu contextual y has click sobre Clases... bajo el cambo Nombre teclea HeroesCharacter y despues OK. Despues bajo el folder Clases un nuevo archivo de clase es agregado. Aquí es donde declararas tres propiedades y un unico metodo como sigue:
PUBLIC Nombre AS String PUBLIC InterpretadoPor AS String PUBLIC Habilidad AS String PUBLIC FUNCTION ImprimeMe() PRINT (“Hola mi nombre es “ & Nombre & “; Mi personaje es interpretado por “ & InterpretadoPor & “; y mi habilidad es “ & Habilidad) END
Ahora has doble click en el modulo MMain y declara dos instancias de la clase HeroesCharacter antes de PUBLIC SUB Main().
PRIVATE Heroe1 AS NEW HeroesCharacter PRIVATE Heroe2 AS NEW HeroesCharacter
Dentro de las lineas PUBLIC SUB Main() y END asigna valores a las propiedades del mismo modo como ya habiamos comentado.
WITH Heroe1 .Nombre = "Claire Bennet" .InterpretadoPor = "Hayden Panettiere" .Habilidad = "Rápida regeneración celular" END WITH WITH Heroe2 .Nombre = "Hiro Nakamura" .InterpretadoPor = "Masi Oka" .Habilidad = "Rápida regeneración celular" END WITH Heroe2.Name = “” Heroe2.Playedby = “Masi Oka” Heroe2.Ability = “Manipulación del espacio-tiempo: teletransportación y viajar por el tiempo”
Después de estas lineas ahora invocaras el método ImprimeMe() como sigue:
Heroe1.ImprimeMe() Heroe2.ImprimeMe()
Ejecuta el programa y en la consola apareceran dos lineas de codigo desplegando los valores de las propiedades de nuestros objetos
Hola mi nombre es Claire Bennet; Mi personaje es interpretado por Hayden Panettiere; y mi habilidad es Rápida regeneración celular. Hola mi nombre es Hiro Nakamura; Mi personaje es interpretado por Masi Oka; y mi habilidad es Manipulación del espacio-tiempo: teletransportación y viajar por el tiempo.
La cosa importante para recordar aquí es que los métodos son acciones que los objetos pueden hacer, en este caso imprimir en la consola algún texto y las sus propiedades. En contraste, las propiedades describen el objeto, en esta practica nos dicen acerca de las características de los objetos Heroe1 y Heroe2. Si esta es la primer vez que escuchas sobre programación orientada a objetos, probablemente parezca un tanto teórico y un poco abrumador. Hasta este punto, debieras haber adquirido un entendimiento basico de clases, objetos, propiedades y métodos. Si no es asi, lee nuevamente la seccion y has las practicas, porque usaras estos conceptos en las secciones siguientes.
[editar] Abstracción de Datos
[editar] Encapsulación
[editar] Polimorfismo
[editar] Herencia
La herencia es uno de los conceptos mas cruciales en la programación orientada a objetos. Tiene un efecto directo en como diseñarás y escribirás tus propias clases. La herencia es el mecanismo que permite a una subclase heredar las propiedades y métodos de una superclase.
Vemos el siguiente ejemplo: