martes, 5 de julio de 2016
"INTRODUCCION"
El siguiente artículo es una visión de las
funcionalidades de la orientación a objetos, cuyos fines son escolares
La programación orientada a objetos (POO)
ofrece elementos que facilitan el desarrollo de software en aspectos tales como
modularización, reutilización de piezas de código y encapsulamiento
"OBJETO"
En el paradigma de programación orientada a
objetos (POO, o bien OOP en inglés), un objeto es una unidad dentro de un
programa de computadora que consta de un estado y de un comportamiento, que a
su vez constan respectivamente de datos almacenados y de tareas realizables
durante el tiempo de ejecución. Un objeto puede ser creado instanciando una
clase, como ocurre en la programación orientada a objetos, o mediante escritura
directa de código y la replicación otros objetos, como ocurre en la
programación basada en prototipos.
Estos objetos interactúan unos con otros, en
contraposición a la visión tradicional en la cual un programa es una colección
de subrutinas (funciones o procedimientos), o simplemente una lista de
instrucciones para el computador. Cada objeto es capaz de recibir mensajes,
procesar datos y enviar mensajes a otros objetos de manera similar a un
servicio.
En el mundo de la programación orientada a
objetos (POO), un objeto es el resultado de la instanciación de una clase.1 Una
clase es el anteproyecto que ofrece la funcionalidad en ella definida, pero
ésta queda implementada sólo al crear una instancia de la clase, en la forma de
un objeto. Por ejemplo: dado un plano para construir sillas (una clase de
nombre clase_silla), entonces una silla concreta, en la que podemos sentarnos,
construida a partir de este plano, sería un objeto de clase_silla. Es posible
crear (construir) múltiples objetos (sillas) utilizando la definición de la
clase (plano) anterior. Los conceptos de clase y objetos son análogos a los de
tipo de datos y variable; es decir, definida una clase podemos crear objetos de
esa clase, igual que disponiendo de un determinado tipo de dato (por ejemplo el
tipo entero),
podemos definir variables de dicho tipo:
int a,b;
( 'int' es un tipo de dato y 'a' y 'b' son
variables de tipo entero con las que podemos operar)
Para utilizar la funcionalidad definida en
una clase en particular (salvo en las clases abstractas), primeramente es
necesario crear un objeto de esa clase. De la misma manera, para una persona
que desea sentarse, las especificaciones para construir una silla serán de poca
utilidad; lo que se necesita es una silla real construida a partir de esas
especificaciones. Siguiendo con la analogía anterior, también se puede decir
que para hacer operaciones aritméticas, de nada sirve por sí solo el tipo
entero (int); para ello necesitamos variables (o constantes) con las que
operar. Un objeto en POO representa alguna entidad de la vida real, es decir,
alguno de los objetos que pertenecen al negocio con que estamos trabajando o al
problema con el que nos estamos enfrentando, y con los que podemos interactuar.
A través del estudio de ellos se adquiere el conocimiento necesario para,
mediante la abstracción y la generalización, agruparlos según sus
características en conjuntos. Estos conjuntos determinan las clases de objetos
con las que estamos trabajando. Primero existen los objetos; luego aparecen las
clases en función de la solución que estemos buscando. Ésta es la forma más
común de adquirir conocimiento aunque no es la única. En ocasiones, cuando el
observador es un experto del negocio (o del problema), el proceso puede ser a
la inversa y comenzar el análisis en una base teórica abstracta, sustentada por
el conocimiento previo que da lugar primeramente a clases de objetos que
satisfagan las necesidades de la solución.
Estos conceptos son parte de la base teórica
de la idea de objeto y clase utilizados en la POO. Los objetos tienen
características fundamentales que nos permiten conocerlos mediante la
observación, identificación y el estudio posterior de su comportamiento; estas
características son:
Identidad
Comportamiento
Estado
En las ramas de las ciencias de la
computación más estrictamente matemáticas, el término objeto es usado en
sentido puramente matemático para referirse a cualquier "cosa". Esta
interpretación resulta útil para discutir sobre teorías abstractas, pero no es
suficientemente concreta para servir como definición de un tipo primitivo en
discusiones de ramas más específicas, como en la programación, que está más
cerca de cálculos reales y el procesamiento de información.
Identidad
La identidad es la propiedad que permite
diferenciar a un objeto y distinguirse de otros. Generalmente esta propiedad es
tal, que da nombre al objeto. Tomemos por ejemplo el "verde" como un
objeto concreto de una clase color; la propiedad que da identidad única a este
objeto es precisamente su "color" verde. Tanto es así que para
nosotros no tiene sentido usar otro nombre para el objeto que no sea el valor
de la propiedad que lo identifica.
En programación la identidad de los objetos
sirve para comparar si dos objetos son iguales o no. No es raro encontrar que
en muchos lenguajes de programación la identidad de un objeto esté determinada
por la dirección de memoria de la computadora en la que se encuentra el objeto,
pero este comportamiento puede ser variado redefiniendo la identidad del objeto
a otra propiedad.
Comportamiento
El comportamiento de un objeto está
directamente relacionado con su funcionalidad y determina las operaciones que
este puede realizar o a las que puede responder ante mensajes enviados por
otros objetos. La funcionalidad de un objeto está determinada, primariamente,
por su responsabilidad. Una de las ventajas fundamentales de la POO es la
reusabilidad del código; un objeto es más fácil de reutilizarse en tanto su
responsabilidad sea mejor definida y más concreta.
Una tarea fundamental a la hora de diseñar
una aplicación informática es definir el comportamiento que tendrán los objetos
de las clases involucradas en la aplicación, asociando la funcionalidad
requerida por la aplicación a las clases adecuadas.
Estado
El estado de un objeto se refiere al conjunto
de atributos y sus valores en un instante de tiempo dado. El comportamiento de
un objeto puede modificar el estado de este. Cuando una operación de un objeto
modifica su estado se dice que esta tiene "efecto colateral".
Esto tiene especial importancia en
aplicaciones que crean varios hilos de ejecución. Si un objeto es compartido
por varios hilos y en el transcurso de sus operaciones estas modifican el
estado del objeto, es posible que se deriven errores del hecho de que alguno de
los hilos asuma que el estado del objeto no cambiará (Véase Condición de
carrera).
Relaciones entre objetos
Como ya se ha dicho antes, un sistema
orientado a objetos está caracterizado por objetos que interactúan entre sí.
Estas interacciones suponen ciertos tipos de relaciones entre los objetos del
sistema. La semántica que expresa un objeto en el sistema está determinada, en
primer lugar, por las relaciones que éste establece con otros objetos o
conjuntos de objetos. Tomemos como ejemplo un objeto fecha, del que sin
establecer ningún tipo de relación, podría decirse que significa un día del año
particular. Pero si relacionamos ese objeto fecha con un objeto Persona de
manera que represente la fecha en que esa persona nació, en ese contexto dado,
el mismo objeto fecha adoptaría un significado diferente, el de un cumpleaños;
aunque sigue siendo una fecha, ahora tiene otra idea asociada. Las relaciones
entre objetos no solo están definidas por los objetos que participan y la
circunstancia que los relaciona, sino también por la cantidad de objetos
(cardinalidad de la relación) y la dirección de la misma. Una relación puede
tener cardinalidad:
uno a uno, ejemplo: un auto tiene un motor.
uno a muchos, ejemplo: un auto tiene muchas
ruedas.
muchos a muchos, ejemplo: un auto se puede
servir en muchas gasolineras y una gasolinera puede servir a muchos autos.
y direccionalidad:
unidireccional, ejemplo: un auto tiene cuatro
ruedas.
bidireccional
Las relaciones entre objetos más generales
son las siguientes:
Composición
La composición (también conocida como
relación asociativa) es un tipo de relación que se establece entre dos objetos
que tienen comunicación persistente. Se utiliza para expresar que un par de
objetos tienen una relación de dependencia para llevar a cabo su función, de
modo que uno de los objetos involucrados está compuesto por el otro.
De manera práctica, es posible reconocer
asociatividad entre dos objetos A y B si la proposición "A tiene un
B" (o viceversa) es verdadera. Por ejemplo: "una computador tiene un
disco duro" es verdadero; por tanto, un objeto computador tiene una
relación de composición con al menos un objeto disco duro.
Uso
Un objeto usa (conoce) a otro cuando puede
enviarle mensajes, por ejemplo, para requerir de este algún servicio. La
composición puede verse como un caso particular de esta relación.
Delegación
En ocasiones, para lograr flexibilidad de
diseño, un objeto es implementado de forma tal que este delegue parte de su
funcionalidad en otro objeto. Esto es muy común en aplicaciones que hacen uso
de interfaces gráficas de usuario, en las que los controles gráficos generales
delegan la acción que se ejecutará ante determinado estímulo en otro objeto.
Operando con un objeto[editar]
Una vez que tenemos un objeto de
'Aritmetica', podemos usarlo para realizar cálculos sobre dos números. En C++
contamos con dos objetos de ejemplo: "calculador" y
"calculador1"; en esta última variable en realidad hemos almacenado
la dirección de memoria del objeto creado. En este lenguaje esto sienta
diferencias a la hora de utilizar el objeto.
Para calcular la suma entre 78 y 69 usando un objeto "calculador" necesitaríamos un código como el siguiente en C++:
int resultado = 0;
resultado = calculador.sumar(78, 69);
#Otra manera usando punteros
resultado = calculador1->sumar(78, 69);
ahora usando Python para sumar dos números
con el objeto calculador:
resultado = calculador.sumar(78, 69)
Otro ejemplo del mundo real de un objeto
podría ser "mi perro", el cual es una instancia de un tipo (una
clase) llamada "perro", la que es una subclase de la clase
"animal". En el caso de un objeto polimórfico, algunos detalles de su
tipo pueden ser ignorados; por ejemplo, el objeto "mi perro" puede
ser usado en un método que espera recibir un "animal". También podría
usarse un objeto "gato", puesto que esta también pertenece a la clase
"animal". Pero mientras es accedido como un "animal",
algunos atributos de un "perro" o un "gato" permanecerán no
disponibles, como la "cola", porque no todos los animales tienen
cola.
"OBJETO"Explicacion..
"CLASE"
En informática, una clase es una plantilla para la
creación de objetos de datos según un modelo predefinido. Las clases se
utilizan para representar entidades o conceptos, como los sustantivos en el
lenguaje. Cada clase es un modelo que define un conjunto de variables -el
estado, y métodos apropiados para operar con dichos datos -el comportamiento.
Cada objeto creado a partir de la clase se denomina instancia de la clase.
Las clases son un pilar fundamental de la programación
orientada a objetos. Permiten abstraer los datos y sus operaciones asociadas al
modo de una caja negra. Los lenguajes de programación que soportan clases
difieren sutilmente en su soporte para diversas características relacionadas
con clases. La mayoría soportan diversas formas de herencia. Muchos lenguajes
también soportan características para proporcionar encapsulación, como
especificadores de acceso.
Una clase también puede tener una representación
(metaobjeto) en tiempo de ejecución, que proporciona apoyo en tiempo de
ejecución para la manipulación de los metadatos relacionados con la clase.
Componentes[editar]
Las clases se componen de elementos, llamados
genéricamente «miembros», de varios tipos:
campos de datos: almacenan el estado de la clase por
medio de variables, estructuras de datos e incluso otras clases.
métodos: subrutinas de manipulación de dichos datos.
ciertos lenguajes permiten un tercer tipo de miembro: las
«propiedades», a medio camino entre los campos y los métodos.
Utilizando un símil con el lenguaje, si las clases
representan sustantivos, los campos de datos pueden ser sustantivos o
adjetivos, y los métodos son los verbos.
EJEMPLO:
La sintaxis típica de una clase es:
class Nombre {
// Variables
miembro (habitualmente privadas)
miembro_1;
//lista de miembros
miembro_2;
miembro_3;
// Funciones o
métodos (habitualmente públicas)
funcion_miembro_1( ); // funciones miembro conocidas
funcion_miembro_2 ( ); // funciones como métodos
// Propiedades
(habitualmente públicas)
propiedad_1;
propiedad_2;
propiedad_3;
propiedad_4;
}
Campos de datos
Los campos de datos se utilizan para contener datos que
reflejan el estado de la clase. Los datos pueden estar almacenados en
variables, o estructuras más complejas, como structs, uniones e incluso otras
clases.
Habitualmente, las variables miembro son privadas al
objeto (siguiendo las directrices de diseño del Principio de ocultación) y su
acceso se realiza mediante propiedades o métodos que realizan comprobaciones
adicionales.
Métodos en las clases
Los métodos implementan la funcionalidad asociada al
objeto. Los métodos son el equivalente a las funciones en programación
estructurada. Se diferencian de ellos en que es posible acceder a las variables
de la clase de forma implícita.
Cuando se desea realizar una acción sobre un objeto, se
dice que se le manda un mensaje invocando a un método que realizará la acción.
Propiedades
Las propiedades son un tipo especial de métodos. Debido a
que suele ser común que las variables miembro sean privadas para controlar el
acceso y mantener la coherencia, surge la necesidad de permitir consultar o
modificar su valor mediante pares de métodos: GetVariable y SetVariable.
Los lenguajes orientados a objetos más modernos (por ejemplo Java o C#) añaden la construcción de propiedad, que es una sintaxis simplificada para dichos métodos:
tipo Propiedad {
get {
}
set {
}
}
Declaración de una clase
Esta clase podría ser definida de la siguiente manera en
C++:
class Aritmetica
{
public:
inline int sumar (int a, int b) const
{
return a + b;
}
inline int restar (int a, int b) const
{
return a - b;
}
inline float multiplicar (int a, int b)
const
{
return a * b;
}
inline float dividir (int a, int b)
const
{
return
a / b;
}
};
o como sigue en Python:
class Aritmetica:
def sumar(self, a, b):
return a + b
def restar(self, a, b):
return a - b
def multiplicar(self, a, b):
return a * b
def dividir(self, a, b):
return a / b
Instanciación de una clase en un objeto
Para crear un objeto de tipo 'Aritmetica' (instanciar Aritmetica) en C++ se haría de la siguiente forma:
Aritmetica calculador = Aritmetica();
#Otra manera usando punteros
Aritmetica* calculador1 = new Aritmetica();
la misma operación usando python sería así:
calculador = Aritmetica()
"INTRODUCCIÓN A CLASES EN POO"
HERENCIA
El concepto de HERENCIA
La herencia es
específica de la programación orientada a objetos, donde una clase nueva se
crea a partir de una clase existente. La herencia (a
la que habitualmente se denomina subclases) proviene del hecho de que la
subclase (la nueva clase creada) contiene las atributos y métodos de la clase
primaria. La principal ventaja de la herencia es la capacidad para definir
atributos y métodos nuevos para la subclase, que luego se aplican a los atributos
y métodos heredados.
Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger las datos miembro usando la encapsulación).
Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger las datos miembro usando la encapsulación).
Jerarquía de clase
La
relación primaria-secundaria entre clases puede representarse desde un punto de
vista jerárquico, denominado vista de clases en árbol. La vista en árbol
comienza con una clase general llamada superclase (a la que algunas veces se
hace referencia como clase primaria, clase
padre, clase
principal, o clase madre; existen muchas metáforas
genealógicas). Las clases derivadas (clase
secundaria o subclase)
se vuelven cada vez más especializadas a medida que van descendiendo el árbol.
Por lo tanto, se suele hacer referencia a la relación que une a una clase
secundaria con una clase primaria mediante la frase "es
una" x o y.
Herencia múltiple
Algunos
lenguajes orientados a objetos, como C++ permiten herencias múltiples, lo que
significa que una clase puede heredar los atributos de otras dos superclases.
Este método puede utilizarse para agrupar atributos y métodos desde varias
clases dentro de una sola.
"HERENCIA EXPLICACIÓN"
CONCEPTOS FUNDAMENTALES
Clase
Definiciones de las propiedades y comportamiento de un tipo
de objeto concreto. La instanciación es la lectura de estas definiciones y la
creación de un objeto a partir de ella.
Herencia
Por ejemplo, herencia de la clase C a la clase D, es la
facilidad mediante la cual la clase D hereda en ella cada uno de los atributos
y operaciones de C, como si esos atributos y operaciones hubiesen sido
definidos por la misma D. Por lo tanto, puede usar los mismos métodos y
variables públicas declaradas en C. Los componentes registrados como
"privados" (private) también se heredan, pero como no pertenecen a la
clase, se mantienen escondidos al programador y sólo pueden ser accedidos a
través de otros métodos públicos. En el caso de los componentes registrados
como "protegidos" (protected) también se heredan, pero solo para esa
clase, no para futuras clases heredadas. Esto es así para mantener hegemónico
el ideal de POO.
Objeto
Instancia de una clase. Entidad provista de un conjunto de
propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos),
los mismos que consecuentemente reaccionan a eventos. Se corresponden con los
objetos reales del mundo que nos rodea, o con objetos internos del sistema (del
programa).
Método
Algoritmo asociado a un objeto (o a una clase de objetos),
cuya ejecución se desencadena tras la recepción de un "mensaje".
Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un
método puede producir un cambio en las propiedades del objeto, o la generación
de un "evento" con un nuevo mensaje para otro objeto del sistema.
Evento
Es un suceso en el sistema (tal como una interacción del
usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja
el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir
como evento la reacción que puede desencadenar un objeto; es decir, la acción
que genera.
Características que tiene la clase.
Mensaje
Una comunicación dirigida a un objeto, que le ordena que
ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo
generó.
Propiedad o atributo
Contenedor de un tipo de datos asociados a un objeto (o a una
clase de objetos), que hace los datos visibles desde fuera del objeto y esto se
define como sus características predeterminadas, y cuyo valor puede ser
alterado por la ejecución de algún método.
Estado interno
Es una variable que se declara privada, que puede ser
únicamente accedida y alterada por un método del objeto, y que se utiliza para
indicar distintas situaciones posibles para el objeto (o clase de objetos). No
es visible al programador que maneja una instancia de la clase.
Componentes de un objeto
Atributos, identidad, relaciones y métodos.
Identificación de un objeto
Un objeto se representa por medio de una tabla o entidad que
esté compuesta por sus atributos y funciones correspondientes.
En comparación con un lenguaje imperativo, una
"variable" no es más que un contenedor interno del atributo del
objeto o de un estado interno, así como la "función" es un
procedimiento interno del método del objeto.
"CONCEPTOS "YOUTUBE"
"CUESTIONARIO"
Preguntas clave "CARACTERÍSTICAS DE LA POO"
Elije la respuesta correcta...
1.-¿Qué es una abstracción?
a) Denota las características esenciales de un objeto, donde se capturan
sus comportamientos
b) La técnica por la cual el entorno de objetos se encarga de destruir
automáticamente
c) Programación Orientada a Objetos como C++ u Object.
2.-¿Que es un Encapsula-miento?
a) Cada objeto está aislado del exterior, es un módulo
natural, y cada tipo de objeto expone una "interfaz" a otros objetos
que especifica cómo pueden interactuar con los objetos de la clase.
b) Significa
reunir todos los elementos que pueden considerarse pertenecientes a una misma
entidad, al mismo nivel de abstracción.
c) La técnica por la cual el entorno de objetos se encarga
de destruir automáticamente
3.-¿Característica de un Polimorfismo?
a) Denota las características esenciales de un objeto, donde
se capturan sus comportamientos
b) Cada objeto está aislado del exterior, es un módulo
natural, y cada tipo de objeto expone una "interfaz" a otros objetos
que especifica cómo pueden interactuar con los objetos de la clase.
c) Comportamientos diferentes, asociados a objetos
distintos, pueden compartir el mismo nombre; al llamarlos por ese nombre se
utilizará el comportamiento correspondiente al objeto que se esté usando. O,
dicho de otro modo, las referencias y las colecciones de objetos pueden
contener objetos de diferentes tipos, y la invocación de un comportamiento
4.-¿Que es una herencia?
a) Las clases no se encuentran aisladas, sino que se
relacionan entre sí, formando una jerarquía de clasificación. Los objetos
heredan las propiedades y el comportamiento de todas las clases a las que
pertenecen. La herencia organiza y facilita el polimorfismo y el
encapsulamiento.
b) Se denomina "modularidad" a la propiedad que
permite subdividir una aplicación en partes más pequeñas (llamadas módulos)
c) La recolección de basura (garbage collection) es la
técnica por la cual el entorno de objetos se encarga de destruir
automáticamente, y por tanto desvincular la memoria asociada, los objetos que
hayan quedado sin ninguna referencia a ellos.
5.-¿Característica de una modularidad?
a) Se denomina "modularidad" a la propiedad que
permite subdividir una aplicación en partes más pequeñas (llamadas módulos),
cada una de las cuales debe ser tan independiente como sea posible de la
aplicación en sí y de las restantes partes.
b) Cada objeto está aislado del exterior, es un módulo
natural, y cada tipo de objeto expone una "interfaz" a otros objetos
que especifica cómo pueden interactuar con los objetos de la clase.
c) La recolección de basura (garbage collection) es la
técnica por la cual el entorno de objetos se encarga de destruir
automáticamente, y por tanto desvincular la memoria asociada, los objetos que
hayan quedado sin ninguna referencia a ellos.
6.-¿Qué es un principio de ocultación?
a) La recolección de basura (garbage collection) es la
técnica por la cual el entorno de objetos se encarga de destruir
automáticamente, y por tanto desvincular la memoria asociada, los objetos que
hayan quedado sin ninguna referencia a ellos.
b) Cada objeto está aislado del exterior, es un módulo
natural, y cada tipo de objeto expone una "interfaz" a otros objetos
que especifica cómo pueden interactuar con los objetos de la clase. El
aislamiento protege a las propiedades de un objeto contra su modificación por
quien no tenga derecho a acceder a ellas; solamente los propios métodos
internos del objeto pueden acceder a su estado
c) Se denomina "modularidad" a la propiedad que
permite subdividir una aplicación en partes más pequeñas (llamadas módulos),
cada una de las cuales debe ser tan independiente como sea posible de la
aplicación en sí y de las restantes partes.
lunes, 4 de julio de 2016
"CARACTERÍSTICAS DE LA POO"
Existe un acuerdo acerca de qué características contempla la "orientación a objetos". Las características siguientes son las más importantes:
Abstracción:
Denota las
características esenciales de un objeto, donde se capturan sus comportamientos.
Cada objeto en el sistema sirve como modelo de un "agente" abstracto
que puede realizar trabajo, informar y cambiar su estado, y
"comunicarse" con otros objetos en el sistema sin revelar
"cómo" se implementan estas características. Los procesos, las
funciones o los métodos pueden también ser abstraídos, y, cuando lo están, una
variedad de técnicas son requeridas para ampliar una abstracción. El proceso de
abstracción permite seleccionar las características relevantes dentro de un
conjunto e identificar comportamientos comunes para definir nuevos tipos de
entidades en el mundo real. La abstracción es clave en el proceso de análisis y
diseño orientado a objetos, ya que mediante ella podemos llegar a armar un
conjunto de clases que permitan modelar la realidad o el problema que se quiere
atacar.
Encapsula miento:
Significa reunir
todos los elementos que pueden considerarse pertenecientes a una misma entidad,
al mismo nivel de abstracción. Esto permite aumentar la cohesión (diseño
estructurado) de los componentes del sistema. Algunos autores confunden este
concepto con el principio de ocultación, principalmente porque se suelen
emplear conjuntamente.
Polimorfismo:
Comportamientos
diferentes, asociados a objetos distintos, pueden compartir el mismo nombre; al
llamarlos por ese nombre se utilizará el comportamiento correspondiente al
objeto que se esté usando. O, dicho de otro modo, las referencias y las
colecciones de objetos pueden contener objetos de diferentes tipos, y la
invocación de un comportamiento en una referencia producirá el comportamiento
correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo
de ejecución", esta última característica se llama asignación tardía o
asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en
"tiempo de compilación") de polimorfismo, tales como las plantillas y
la sobrecarga de operadores de C++.
Herencia:
Las clases no se
encuentran aisladas, sino que se relacionan entre sí, formando una jerarquía de
clasificación. Los objetos heredan las propiedades y el comportamiento de todas
las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo
y el encapsulamiento, permitiendo a los objetos ser definidos y creados como
tipos especializados de objetos preexistentes. Estos pueden compartir (y
extender) su comportamiento sin tener que volver a implementarlo. Esto suele
hacerse habitualmente agrupando los objetos en clases y estas en árboles o
enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más
de una clase se dice que hay herencia múltiple; siendo de alta complejidad
técnica por lo cual suele recurrirse a la herencia virtual para evitar la
duplicación de datos.
Modularidad:
Se denomina
"modularidad" a la propiedad que permite subdividir una aplicación en
partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicación en sí y de las restantes
partes. Estos módulos se pueden compilar por separado, pero tienen conexiones
con otros módulos. Al igual que la encapsulación, los lenguajes soportan la
modularidad de diversas formas.
Principio de ocultación:
Cada objeto está
aislado del exterior, es un módulo natural, y cada tipo de objeto expone una
"interfaz" a otros objetos que especifica cómo pueden interactuar con
los objetos de la clase. El aislamiento protege a las propiedades de un objeto
contra su modificación por quien no tenga derecho a acceder a ellas; solamente
los propios métodos internos del objeto pueden acceder a su estado. Esto
asegura que otros objetos no puedan cambiar el estado interno de un objeto de
manera inesperada, eliminando efectos secundarios e interacciones inesperadas.
Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos
internos del objeto de una manera controlada y limitando el grado de
abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.
Recolección de basura:
La recolección de
basura (garbage collection) es la técnica por la cual el entorno de objetos se
encarga de destruir automáticamente, y por tanto desvincular la memoria
asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto
significa que el programador no debe preocuparse por la asignación o liberación
de memoria, ya que el entorno la asignará al crear un nuevo objeto y la
liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos
que se extendieron para soportar el Paradigma de Programación Orientada a
Objetos como C++ u Object Pascal, esta característica no existe y la memoria
debe desasignarse expresamente.
"Introducción A La Programación Orientada A Eventos."
Los
lenguajes visuales orientada al evento y con manejo de componentes dan al
usuario que no cuenta con mucha experiencia en desarrollo, la posibilidad de
construir sus propias aplicaciones utilizando interfaces gráficas sobre la base
de ocurrencia de eventos.
Para
soportar este tipo de desarrollo interactuan dos tipos de herramientas, una que
permite realizar diseños gráficos y , un lenguaje de alto nivel que permite
codificar los eventos. Con dichas herramientas es posible desarrollar cualquier
tipo de aplicaciones basadas en el entorno.
Visual
Basic es uno de los lenguajes de programación que más entusiasmo despiertan
entre los programadores de computadoras, tanto expertos como novatos. En el
caso de los programadores expertos por la facilidad con la que desarrollan
aplicaciones complejas en poquísimo tiempo (comparado con lo que cuesta
programar en Visual C++, por ejemplo). En el caso de los programadores novatos
por el hecho de ver de lo que son capaces a los pocos minutos de empezar su
aprendizaje. El precio que hay que pagar por utilizar Visual Basic es una menor
velocidad o eficiencia en las aplicaciones.
Visual
Basic es un lenguaje de programación visual, también llamado lenguaje de 4ta.
generación. Esto quiere decir que un gran número de tareas se realizan sin
escribir código, simplemente con operaciones gráficas realizadas con el ratón
sobre la pantalla.
Visual
Basic es también un programa basado en objetos, aunque no orientado a objetos
como Visual C++. La diferencia está en que Visual Basic utiliza objetos con
propiedades y métodos, pero carece de los mecanismos de herencia y polimorfismo
propios de los verdaderos lenguajes orientados a objetos como Java y C++.
En
este trabajo se presentará las características generales de Visual Basic, junto
con algunos ejemplos sencillos que den idea de la potencia del lenguaje
orientado a eventos, y del modo en que se utiliza.
Programas
Secuenciales, Interactivos Y Orientados A Eventos
Existen
distintos tipos de programas. En los primeros tiempos de los ordenadores los
programas eran de tipo secuencial (también llamados tipo batch). Un programa
secuencial es un programa que se arranca, lee los datos que necesita, realiza
los cálculos e imprime o guarda en el disco los resultados. De ordinario,
mientras un programa secuencial está ejecutándose no necesita ninguna
intervención del usuario. A este tipo de programas se les llama también
programas basados u orientados a procedimientos o a algoritmos (procedural
languages). Este tipo de programas siguen utilizándose ampliamente en la
actualidad, pero la difusión de los PC’s ha puesto de actualidad otros tipos de
programación.
Los
programas interactivos exigen la intervención del usuario en tiempo de
ejecución, bien
para
suministrar datos, bien para indicar al programa lo que debe hacer por medio de
menús. Los programas interactivos limitan y orientan la acción del usuario.
Por
su parte los programas orientados a eventos son los programas típicos de
Windows, tales como Netscape, Word, Excel, PowerPoint y otros. Cuando uno de
estos programas ha arrancado, lo único que hace es quedarse a la espera de las
acciones del usuario, que en este caso son llamadas eventos.
El
usuario dice si quiere abrir y modificar un fichero existente, o bien comenzar
a crear un fichero desde el principio. Estos programas pasan la mayor parte de
su tiempo esperando las acciones del usuario (eventos) y respondiendo a ellas.
Las acciones que el usuario puede realizar en un momento determinado son
variadísimas, y exigen un tipo especial de programación: la programación
orientada a eventos. Este tipo de programación es sensiblemente más complicada
que la secuencial y la interactiva, pero con los lenguajes visuales de hoy, se
hace sencilla y agradable.
Antes
de continuar es necesario definir algunos conceptos de los elementos de
Programación Orientada a Eventos.
Eventos.
Ya
se ha dicho que las acciones del usuario sobre el programa se llaman eventos.
Son eventos típicos el click sobre un botón, el hacer doble click sobre el
nombre de un fichero para abrirlo, el arrastrar un icono, el pulsar una tecla o
combinación de teclas, el elegir una opción de un menú, el escribir en una caja
de texto, o simplemente mover el ratón. Más adelante se verán los distintos
tipos de eventos reconocidos por Windows 95 y por Visual Basic. Cada vez que se
produce un evento sobre un determinado tipo de control, Visual Basic arranca
una determinada función o procedimiento que realiza la acción programada por el
usuario para ese evento concreto. Estos procedimientos se llaman con un nombre
que se forma a partir del nombre del objeto y el nombre del evento, separados
por el carácter (_), como por ejemplo txtBox_click, que es el nombre del
procedimiento que se ocupará de responder al evento click en el objeto txtBox.
Propiedades y Métodos.
Además
de los eventos, la mayor parte de los objetos, como los formularios y los
controles, son suministrados con propiedades y métodos.
Son
conceptos fundamentales e importantes.
Propiedades.
Una
propiedad es una asignación que describe algo sobre un objeto como un
formulario. Dependiendo de la propiedad, se la puede asignar en tiempo de
diseño usando la ventana Propiedades y/o en tiempo de ejecución al programar.
A
continuación se describen dos ejemplos de las propiedades del formulario de
Visual Basic:
MinButton.
Esta propiedad puede asignarse como TRUE (verdadero) o FALSE (falso).
Dependiendo de la asignación, el formulario tendrá o no tendrá un botón
minimizar.
BackColor.
Asignando esta propiedad a un valor expresado como hexadecimal RGB (Rojo Verde
Azul) o como una constante se cambia el color del fondo del formulario. Se
pueden consultar las constantes usando el examinador de objetos (Seleccione
VER, EXAMINADOR DE OBJETOS) y en la Biblioteca VBRUN (Columna clase) bajo
"ColorConstants" y "SystemColorConstants".
Métodos.
Los
métodos son funciones que también son llamadas desde programa, pero a
diferencia de los procedimientos no son programadas por el usuario, sino que
vienen ya pre-programadas con el lenguaje. Los métodos realizan tareas típicas,
previsibles y comunes para todas las aplicaciones. de ahí que vengan con el
lenguaje y que se libere al usuario de la tarea de programarlos. Cada tipo de
objeto o de control tiene sus propios métodos.
En
general solo pueden ser ejecutados en tiempos de ejecución no en tiempo de
diseño. Algunos ejemplos de métodos de formularios son el método MOVE, que
mueve un formulario en un espacio de dos dimensiones en la pantalla, y el
método ZORDER que sitúa el formulario delante o detrás de otras ventanas.
Los
métodos son invocados dando nombres al objeto y cuyo método se está llamando,
listando el operador punto (.), y después listando el nombre del método. Como
cualquier rutina los métodos pueden incorporar argumentos
Por ejemplo:
Form1.Show
1
Este
método Show carga y muestra un formulario, dos acciones distintas que forman
ambas partes del proceso de nacimiento o inicio a un formulario (al ejecutar el
formulario de inicio se carga también primero el formulario y después se
muestra). El método Show puede ser invocado como no modal o modal. Modal significa
que no se ejecuta ningún código posterior hasta que el formulario se oculte o
se descargue. Cuando se muestra un formulario modal no se puede producir
ninguna entrada de usuario (de teclado o click del ratón) excepto para los
objetos del formulario modal. Si se activa el estilo 1 (uno) es modal y 0
(cero) es no modal.
Visual
Significa Visual.
Como
el nombre lo indica, una gran parte de la programación con Visual Basic se
realiza visualmente. Esto significa que durante el tiempo de diseño usted tiene
la capacidad de ver la forma en el programa se vera al ejecutarse Esta es una
gran ventaja sobre otros lenguajes de programación debido a que se tiene la
capacidad de cambiar y experimentas con el diseño hasta que se esté satisfecho
con los colores, proporciones e imágenes que incluya en su programa.
Programas Para El Entorno Windows.
Visual
Basic está orientado a la realización de programas para Windows, pudiendo
incorporar todos los elementos de este entorno informático: ventanas, botones,
cajas de diálogo y de texto, botones de opción y de selección, barras de
desplazamiento, gráficos, menús, etc. Prácticamente todos los elementos de
interacción con el usuario de los que dispone Windows 95 pueden ser programados
en Visual Basic de un modo extraordinariamente sencillo. En ocasiones bastan
unas pocas operaciones con el ratón y la introducción a través del teclado de
algunas sentencias para disponer de aplicaciones con todas las características
de Windows 95.
Modo De Diseño Y Modo De Ejecución.
La
aplicación Visual Basic de Microsoft puede trabajar de dos modos distintos: en
modo de diseño y en modo de ejecución. En modo de diseño el usuario construye
interactivamente la aplicación, colocando controles en el formulario,
definiendo sus propiedades, desarrollando funciones para gestionar los eventos.
La aplicación se prueba en modo de ejecución. En ese caso el usuario actúa
sobre el programa (introduce eventos) y prueba cómo responde el programa. Hay
algunas propiedades de los controles que deben establecerse en modo de diseño,
pero muchas otras pueden cambiarse en tiempo de ejecución desde el programa
escrito en Visual Basic, en la forma en que más adelante se verá. También hay
propiedades que sólo pueden establecerse en modo de ejecución y que no son
visibles en modo de diseño.
Formularios Y Controles
Cada
uno de los elementos gráficos que pueden formar parte de una aplicación típica
de Windows 95 es un tipo de control: los botones, las cajas de diálogo y de
texto, las cajas de selección desplegables, los botones de opción y de
selección, las barras de desplazamiento horizontales y verticales, los
gráficos, los menús, y muchos otros tipos de elementos son controles para
Visual Basic. Cada control debe tener un nombre a través del cual se puede
hacer referencia a él en el programa. Visual Basic proporciona nombres por
defecto que el usuario puede modificar.
En
la terminología de Visual Basic se llama formulario (form) a una ventana. Un
formulario puede ser considerado como una especie de contenedor para los
controles. Una aplicación puede tener varios formularios, pero un único
formulario puede ser suficiente para las aplicaciones más sencillas. Los
formularios deben también tener un nombre, que puede crearse siguiendo las
mismas reglas que para los controles.
Objetos Y Propiedades.
Los
formularios y los distintos tipos de controles son entidades genéricas de las
que puede haber varios ejemplares concretos en cada programa. En programación
orientada a objetos (más bien basada en objetos, habría que decir) se llama
clase a estas entidades genéricas, mientras que se llama objeto a cada ejemplar
de una clase determinada. Por ejemplo, en un programa puede varios botones,
cada uno de los cuales es un objeto del tipo de control command button, que
sería la clase.
Cada
formulario y cada tipo de control tienen un conjunto de propiedades que definen
su aspecto gráfico (tamaño, color, posición en la ventana, tipo y tamaño de
letra, etc.) y su forma de responder a las acciones del usuario (si está activo
o no, por ejemplo). Cada propiedad tiene un nombre que viene ya definido por el
lenguaje.
Por
lo general, las propiedades de un objeto son datos que tienen valores lógicos
(true, false) o numéricos concretos, propios de ese objeto y distintos de las
de otros objetos de su clase. Así pues, cada clase, tipo de objeto o control
tiene su conjunto de propiedades, y cada objeto o control concreto tiene unos
valores determinados para las propiedades de su clase.
Casi
todas las propiedades de los objetos pueden establecerse en tiempo de diseño y
también -casi siempre- en tiempo de ejecución. En este segundo caso se accede a
sus valores por medio de las sentencias del programa, en forma análoga a como
se accede a cualquier variable en un lenguaje de programación. Para ciertas
propiedades ésta es la única forma de acceder a ellas. Por supuesto Visual
Basic permite crear distintos tipos de variables, como más adelante se verá.
Se
puede acceder a una propiedad de un objeto por medio del nombre del objeto a
que pertenece, seguido de un punto y el nombre de la propiedad, como por
ejemplo optColor.objName.
Nombres De Objetos
En
principio cada objeto de Visual Basic debe tener un nombre, por medio del cual
se hace referencia a dicho objeto. El nombre puede ser el que el usuario desee,
e incluso Visual Basic proporciona nombres por defecto para los diversos
controles. Estos nombres por defecto hacen referencia al tipo de control y van
seguidos de un número que se incrementa a medida que se van introduciendo más
controles de ese tipo en el formulario (por ejemplo VScroll1, para una barra de
desplazamiento -ScrollBar- vertical, HScroll1, para una barra horizontal,
etc.).
Los
nombres por defecto no son adecuados porque hacen referencia al tipo de
control, pero no al uso que de dicho control está haciendo el programador. Por
ejemplo, si se utiliza una barra de desplazamiento para introducir una
temperatura, conviene que su nombre haga referencia a la palabra temperatura, y
así cuando haya que utilizar ese nombre se sabrá exactamente a qué control
corresponde. Un nombre adecuado sería por ejemplo hsbTemp, donde las tres
primeras letras indican que se trata de una horizontal scroll bar, y las
restantes (empezando por una mayúscula) que servirá para definir una
temperatura.
Existe
una convención ampliamente aceptada que es la siguiente: se utilizan siempre
tres letras minúsculas que indican el tipo de control, seguidas por otras
letras (la primera mayúscula, a modo de separación) libremente escogidas por el
usuario, que tienen que hacer referencia al uso que se va a dar a ese control.
La Tabla 1.1 muestra las abreviaturas de los controles más usuales, junto con la nomenclatura inglesa de la que derivan.
Abrebiatura
Control
Abrebiatura
Control
chk
check
box
cbo
combo y drop-list box
Cmd
command button
dir
dir list box
drv
drive list box
fil
file list box
frm
form
fra
Frame
hsb
horizontal scroll bar
img
Image
lbl
label
lin
Line
lst
list
mnu
Menu
opt
option button
pic
Picture
shp
shape
txt
text edit box
tmr
timer
vsb
vertical scroll bar
Tabla
1.1. Abreviaturas para los controles más usuales
Orden De Disparo De Eventos.
Para
controlar con éxito la aparición y el comportamiento de los formularios (y
también de los controles) en tiempos de ejecución, debe comprenderse en que
orden se disparan los eventos. Las consideraciones del orden de disparo de los
eventos deciden generalmente por el usuario donde debe ser colocada una parte
determinada de código de respuesta de un evento. Los eventos de formularios
pueden ser divididos en los grupos siguientes:
Inicio.
Respuesta
a una acción (de usuario).
Vinculación.
Cierre.
Es
importante también comprender que un evento inicia automáticamente con
frecuencia a otro evento, produciendo un efecto en cascada. Por ejemplo un
evento KeyPress no puede ser disparada sin disparar también lo eventos KeyUp y
KeyDown. El secreto para trabajar con esta clase de situaciones es una
comprensión clara de que es lo que dispara cada evento en la secuencia; el
peligro de la codificación es iniciar un cadena sin fin de llamada a eventos
circulares recursivos.
Eventos Generales
Carga
Y Descarga De Formularios
Cuando
se arranca una aplicación, o más en concreto cuando se visualiza por primera
vez un formulario se producen varios eventos consecutivos: Initialize, Load,
Activate y Paint. Cada uno de estos eventos se puede aprovechar para realizar
ciertas operaciones por medio de la función correspondiente.
Para
inicializar las variables definidas a nivel de módulo se suele utilizar el
evento Initialize, que tiene lugar antes que el Load. El evento Load se activa
al cargar un formulario. Con el formulario principal esto sucede al arrancar la
ejecución de un programa; con el resto de los formularios al mandarlos cargar
desde cualquier procedimiento o al hacer referencia a alguna propiedad o
control de un formulario que no esté cargado. Al descargar un formulario se
produce el evento Unload. Si se detiene el programa desde el botón Stop de
Visual Basic (o del menú correspondiente) o con un End, no se pasa por el
evento Unload. Para pasar por el evento Unload es necesario cerrar la ventana
con el botón de cerrar o llamarlo explícitamente. El evento QueryUnload se
produce antes del evento Unload y permite por ejemplo enviar un mensaje de
confirmación.
QueryUnload.
Se dispara por un evento Unload de formulario, antes de que se ejecute ningún
código del evento Unload. QueryUnload da la oportunidad de detener la descarga
del formulario de la memoria cuando sea apropiado, por ejemplo, cuando el
usuario haya cambiado valores del formulario sin guardar los cambios. El
formulario no será descargado si la variable Cancel está asignada como True en
el procedimiento del evento QueryUnload. Es una práctica común asignar esta
variable como True a continuación de una consulta del usuario a lo largo de las
líneas de "¿Guardar los cambios? Sí, No, Cancelar" cuando el usuario
responde cancelando. La función MsgBox puede usarse fácilmente para dar al
usuario una oportunidad de cancelar una descarga.
Unload.
Se dispara cuando un usuario cierra el formulario usando el comando Cerrar en
el menú Control o cuando se ejecuta en código un método Unload. Unload dispara
inmediatamente un evento QueryUnload como acabamos de describir. Se pude usar
el evento Unload (así como QueryUnload) para realizar tareas de cierre como
guardar y convalidar datos.
Terminate.
Se produce cuando se eliminan de la memoria todas las referencia a una
instancia de un formulario.
El
evento Load de un formulario se suele utilizar para ejecutar una función que dé
valor a sus propiedades y a las de los controles que dependen de dicho
formulario. No se puede utilizar para dibujar o imprimir sobre el formulario,
pues en el momento en que se produce este evento el formulario todavía no está
disponible para dichas operaciones. Por ejemplo, si en el formulario debe
aparecer la salida del método Print o de los métodos gráficos Pset, Line y
Circle puede utilizarse el evento Paint u otro posterior (por ejemplo, el
evento GotFocus del primer control) pero no puede utilizarse el evento Load. Se
puede ocultar un formulario sin descargarlo con el método Hide o haciendo la
propiedad Visible = False. Esto hace que el formulario desaparezca de la
ventana, aunque sus variables y propiedades sigan estando accesibles y
conservando sus valores. Para hacer visible un formulario oculto pero ya cargado
se utiliza el método Show, que equivale a hacer la propiedad Visible = True, y
que genera los eventos Activate y Paint. Si el formulario no había sido cargado
previamente, el método Show genera los cuatro eventos mencionados.
Cuando
un formulario pasa a ser la ventana activa se produce el evento Activate y al
dejar de serlo el evento Deactivate. En el caso de que el formulario que va a
ser activo no estuviera cargado ya, primero sucederían los eventos Initialize,
Load y luego los eventos Activate y Paint. Se han de crear dos formularios
(frmPrincipal y frmSecundario). El primero de ellos contendrá dos botones
(cmdVerSec y cmdSalir) y el segundo tres (cmdHide, cmdUnload y cmdTerminate).
El formulario principal será el primero que aparece, y sólo se verá el segundo
si se clica en el botón Cargar Formulario. Cuando así se haga, a medida que los
eventos antes mencionados se vayan sucediendo, irán apareciendo en pantalla
unas cajas de mensajes que tendrán como texto el nombre
del
evento que se acaba de producir.
Según con cual de los tres botones se haga desaparecer el segundo formulario, al volverlo a ver se producirán unos eventos u otros, según se puede ver por los mensajes que van apareciendo con cada evento.
'
código del form. principal
Private
Sub cmdCargar_Click()
frmSecundario.Show
End
Sub
'
código del form. secundario
Private Sub cmdHide_Click()
Hide
End Sub
Private Sub cmdUnload_Click()
Unload Me
End Sub
Private Sub cmdTerminate_Click()
Hide
Set Form2 = Nothing
End Sub
Private Sub Form_Activate()
MsgBox ("Evento
Activate")
End Sub
Private Sub Form_Deactivate()
MsgBox ("Evento
Deactivate")
End Sub
Private Sub Form_Initialize()
MsgBox ("Evento
Initialize")
End Sub
Private Sub Form_Load()
MsgBox ("Evento Load")
End Sub
Private Sub Form_Paint()
MsgBox ("Evento Paint")
End Sub
Private Sub
Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MsgBox ("Evento
QueryUnload")
End Sub
Private Sub Form_Terminate()
MsgBox ("Evento
Terminate")
End Sub
Private Sub Form_Unload(Cancel As
Integer)
MsgBox
("Evento Unload")
End
Sub
Es
muy interesante realizar este ejemplo y seguir la secuencia de eventos que se
producen al hacer aparecer y desaparecer los formularios.
Paint.
El
evento Paint sucede cuando hay que redibujar un formulario o PictureBox. Esto
sucede cuando esos objetos se hacen visibles después de haber estado tapados
por otros, tras haber sido movidos otras haber sido modificados de tamaño.
El foco (focus)
En
todas las aplicaciones de Windows, en cualquiera de sus versiones, siempre hay
un único control, formulario o ventana que puede recibir clicks del ratón o
entradas desde teclado. En cada momento ese control, ventana o formulario es el
que dispone del "foco" (focus). El objeto que posee el foco está
caracterizado por estar resaltado con letra negrita, con un contorno más vivo o
teniendo parpadeando el cursor en él. Este foco puede ser trasladado de un
objeto a otro por código o por interacciones del usuario, como por ejemplo
clicando con el ratón en distintos puntos de la pantalla o pulsando la tecla
Tab. Cada vez que un objeto pierde el foco se produce su evento LostFocus y,
posteriormente, el evento GotFocus del objeto que ha recibido el foco.
Dos
propiedades de muchos controles relacionadas con el foco son TabIndex y
TabStop.
TabStop
determina si el foco se va o no a posar en el objeto al pulsar la tecla Tab (si
TabStop está a False no se puede obtener el foco mediante el tabulador) y
TabIndex determina el orden en el que esto va a suceder. Así al cargar un
formulario, el foco estará en aquel objeto cuyo TabIndex sea 0.
Al
pulsar la tecla Tab el foco irá al objeto que tenga TabIndex = 1 y así
sucesivamente. Para retroceder en esta lista se pulsa Mayúsculas+Tab. La
propiedad TabIndex se puede determinar en tiempo de diseño por medio de la caja
de propiedades, del modo habitual. Cuando a un control se le asigna un
determinado valor de TabIndex, Visual Basic ajusta automáticamente los valores
de los demás controles (si tiene que desplazarlos hacia arriba o hacia abajo,
lo hace de modo que siempre tengan números consecutivos). Para que un
formulario reciba el foco es necesario que no haya en él ningún control que sea
capaz de recibirlo. Un grupo de botones de opción tiene un único TabIndex, es
decir, se comporta como un único control. Para elegir una u otra de las opciones
se pueden utilizar las flechas del teclado y.
KeyPress, KeyUp y KeyDown.
El
evento KeyPress sucede cuando el usuario pulsa y suelta determinada tecla. En
este evento el único argumento KeyAscii es necesario para conocer cuál es el
código ASCII de la tecla pulsada. El evento KeyDown se produce cuando el
usuario pulsa determinada tecla y el evento KeyUp al soltar una tecla.
Los
eventos KeyUp y KeyDown tienen un segundo argumento llamado Shift que permiten
determinar si esa tecla se ha pulsado estando pulsadas a la vez cualquier combinación
de las teclas
Shift,
Alt y Ctrl. En un apartado próximo se explica cómo se identifican las teclas
pulsadas a partir del argumento Shift.
Eventos
Relacionados Con El Ratón.
Click y DblClick.
El
evento Click se activa cuando el usuario pulsa y suelta rápidamente uno de los
botones del ratón. También puede activarse desde código (sin tocar el ratón)
variando la propiedad Value de uno de los controles. En el caso de un
formulario este evento se activa cuando el usuario clica sobre una zona del
formulario en la que no haya ningún control o sobre un control que en ese
momento esté inhabilitado (propiedad Enabled = False). En el caso de un
control, el evento se activa cuando el usuario realiza una de las siguientes
operaciones:
Clicar
sobre un control con el botón derecho o izquierdo del ratón. En el caso de un
botón de comando, de un botón de selección o de un botón de opción, el evento
sucede solamente al darle un click con el botón izquierdo.
Seleccionar
un registro de alguno de los varios tipos listas desplegables que dispone
Visual Basic.
Pulsar
la barra espaciadora cuando el foco está en un botón de comando, en un botón de
selección o en un botón de opción.
Pulsar
la tecla Return cuando en un formulario hay un botón que tiene su propiedad
Default = True.
Pulsar
la tecla Esc cuando en un formulario hay un botón que tiene su propiedad Cancel
= True.
Pulsar
una combinación de teclas aceleradoras (Alt + otra tecla, como por ejemplo
cuando de despliega el menú File de Word con Alt+F) definidas para activar un
determinado control de un formulario.
También
se puede activar el evento Click desde código realizando una de las siguientes
operaciones:
Hacer
que la propiedad Value de un botón de comando valga True.
Hacer
que la propiedad Value de un botón de opción valga True
Modificar
la propiedad Value de un botón de selección.
El
evento DblClick sucede al clicar dos veces seguidas sobre un control o
formulario con el botón izquierdo del ratón.
MouseDown, MouseUp y MouseMove.
El
evento MouseDown sucede cuando el usuario pulsa cualquiera de los botones del
ratón, mientras que el evento MouseUp sucede al soltar un botón que había sido
pulsado. El evento MouseMove sucede al mover el ratón sobre un control o
formulario.
Los
eventos MouseUp y MouseDown tienen algunos argumentos que merecen ser
comentados. El argumento Button indica cuál de los botones del ratón ha sido
pulsado o soltado, y el argumento Shift indica si además alguna de las teclas
alt, shift o ctrl está también pulsada. La lista con todos los posibles valores
de estos argumentos se muestra abajo.
Cte
simbólica Valor Acción Cte simbólica Valor Acción
vbLeftButton
1 Botón izdo pulsado o soltado vbShiftMask 1 Tecla SHIFT pulsada
vbRightButton
2 Botón dcho pulsado o soltado vbCtrlMask 2 Tecla CTRL pulsada
vbMiddleButton
4 Botón central pulsado o soltado vbAltMask 4 Tecla ALT pulsada
Valores
de los argumentos de los eventos MouseUp y MouseDown
Con
estos valores se aplica la aritmética booleana, lo cual quiere decir que si se
pulsan simultáneamente los botones izquierdo y derecho del ratón el argumento
Button valdrá 3 (1+2) y si
se
pulsan las tres teclas shift, ctrl y alt simultáneamente el argumento Shift
valdrá 7 (1+2+4).
DragOver y DragDrop.
El
evento DragOver sucede mientras se está arrastrando un objeto sobre un control.
Suele utilizarse para variar la forma del cursor que se mueve con el ratón
dependiendo de si el objeto sobre el que se encuentra el cursor en ese momento
es válido para soltar o no. El evento DragDrop sucede al concluir una operación
de arrastrar y soltar. El evento DragOver requiere de los argumentos que se
muestran a continuación:
Private Sub Text1_DragOver(Source
As Control, _
X As Single, Y As Single, State
As Integer)
...
End Sub
Los
argumentos de este evento son Source que contiene el objeto que está siendo
arrastrado, X e Y que indican la posición del objeto arrastrado dentro del
sistema de coordenadas del objeto sobre el que se está arrastrando y State (que
es propio del DragOver, pero no aparece en el DragDrop) que vale 0, 1 ó 2 según
se esté entrando, saliendo o permaneciendo dentro del mismo objeto,
respectivamente. Es importante señalar que el evento DragOver es propio del
objeto sobre el que se arrastra, no del objeto que es arrastrado.
Agregando Código Al Formulario Y Controlar Eventos.
Se
han mostrados ya las formas generales en las que se agrega código ejecutable a
los procesos que controlan eventos. Es importante, sin embargo, revisar
explícitamente cómo acceder al marco propio de los eventos en el cual se sitúa
ese código. Esto le permitirá escoger la forma más rápida y fácil de acceder al
marco de control de los eventos que necesita para agregar su código. Una vez
que aceda al procedimiento adecuado para el manejo de los eventos, puede
agregar código con sólo teclearlo en la ventana Código, como hemos mostrado en
los ejemplos anteriormente. Las prácticas herramientas del lenguaje le ayudan a
encontrar la sintaxis real en cualquier situación.
Es
importante tener en cuenta, como hemos señalado antes, que el código
realcionado con un procedimiento de control de eventos consistirá con
frecuencia simplemente en llamadas a procedimientos. En este caso los
procedimientos llamados contendrán el código real ejecutable. Una razón para
diseñar un programa de esta forma es que el mismo procedimiento puede ser
llamado desde diferentes controladores de eventos, simplificando así,
abreviando y aclarando la arquitectura del programa. Una técnica común es pasar
a un procedimiento llamado desde un controlador de eventos un parámetro que
indique qué controlador lo ha llamado. La ejecución en el procedimiento le ha
llamado (determinado por el parámetro).
A continuación se indican las tres formas de "alcanzar" un marco de procedimiento para el manejo de eventos:
Asegúrese
de que esté abierta la ventana Proyecto ( si es necesario, seleccione el
Explorador de proyectos en el menú Ver). Seleccione el formulario al que desee
agregar código de eventos. (Si está agregando un evento a un control que ha
sido situado en un formulario, seleccione al formulario que se encuentre en el
"padre" del control.) Haga click en el botón Ver código. (También
puede hacer click con el botón derecho en el icono del formulario y seleccionar
Ver Código en el menú de contexto.) En el cuadro de lista Objeto, seleccione el
formulario o bien otro objeto (por ejemplo, un control) al cual desee agregar
código de evento. A continuación, desde el cuadro de lista Procedimiento,
seleccione el controlador del procedimiento al que va a agregar código. Observe
que los procedimientos controladores de código con código adjunto están en
negrita en el cuadro de lista Procedimiento, mientras que los que no tienen
código adjunto no lo están.
Haga
doble click en el formulario al cual desee agregar código. Realice su selección
desde el cuadro de lista Objeto y desde el cuadro de lista Procedimiento como
acabamos de describir.
Haga
click con el botón derecho en el formulario (Ver figura de abajo). Seleccione
Ver código en el menú emergente. Realice su selección en lo cuadros de la lista
Objeto y Procedimiento como acabamos de describirlo.
Crear, Disparar Y Manejar Eventos Personalizados.
Para
agregar un evento al módulo myClass, utilice la instrucción Event para declarar
un evento con los argumentos que desee. Los eventos deben ser declarados con
Public. Dispare el eventos siempre que los desee dentro del módulo de clase
usando la instrucción RaiseEvent. Pero asegúrese de suministrar todos los
parámetros requeridos.
Como
ejemplo, podría decir, por razones científicas, agregaré un evento llamado
Frodo a mi módulo myClass. Se dispara Frodo invocando myMenth, seguido por la
aplicación del cuadro de mensaje myMeth.
A continuación se muestra el código revisado del módulo myClass son el evento Frodo agregando:
Option Explicit
Public Event Frodo()
Private thisVal as String
Public Property Get myProp() as Astring
MyProp = thisVal
End Property
Public Property Let myProp(ByVal vNewValue as String)
if vNewValue <> thisVal Then ThisVal = vNewValue
end Property
Public Function myMeth()
MsgBox myProp, vbInformation, "Classy!"
RaiseEvent Frodo
End Function
El paso siguiente es acceder
al manejador de eventos en el módulo del formulario que utiliza una instancia
de este módulo de clase.
En la sección de
Declaraciones del módulo del formulario, declare una variable privada del tipo
de clase, usando la palabra clave WithEvents:
Private WithEvents X As
myClass
Ahora puede utilizar la lista desplegable Objeto para
acceder al objeto X. Una vez seleccionado X en la lista desplegable Objeto,
puede acceder al evento Frodo de la lista desplegable Procedimiento, tal como
se muestra en la figura:
Cuando haga click en el
evento Frodo de la lista desplegable Procedimiento, VB crea el código del
manejador de eventos de plantilla.
Private Sub X_Frodo ( )
End Sub
Puede agregar a este evento
el código que desee para comprobar que se ha disparado realmente. Por ejemplo:
Private Sub X_Frodo ( )
MsgBox "¡Frodo ha sido
disparado!".
End Sub
No se puede crear una
instancia de una variable objeto declarada usando la palabra clave WithEvents
utilizando la sintaxis Dim...As New (llamada creación implícita). En lugar de
ello, debe crearla explícitamente, usando la instrucción Set.
A continuación, se muestra
el código revisado del módulo del formulario que crea una instancia WithEvents
de myClass y responde al disparo de Frodo:
Option Explicit
Private WithEvents X As myClass
Private Sub X_Frodo ( )
MsgBox "¡Frodo ha sido
disparado!".
End Sub
Private Sub Form_Click ( )
Set X = New myClass
X.my Prop = "¡Esto es
un prueba!"
X.myMeth
End Sub
Si ejecuta el proyecto y hace click en el formulario, verá primero el mensaje myMeth. A continuación, verá el cuadro de mensaje invocado en el manejador de eventos Frodo, como se muestra en la figura de abajo:
Eventos Y Propiedades
Relacionadas Con Gráficos
El Evento Paint
El evento Paint se ejecuta
cuando un objeto -de tipo form o pictureBox- se hace visible. Su finalidad es
que el resultado de los métodos gráficos y del método print aparezcan en el
objeto correspondiente. Hay que tener en cuenta que si se introducen métodos gráficos
en el procedimiento form_load su resultado no aparece al hacerse visible el
formulario (es como si se dibujara sobre el formulario antes de que éste
existiera). Para que el resultados de print y de los métodos gráficos aparezcan
al hacerse visible el formulario, deben introducirse en el procedimiento
paint_form.
También los controles
pictureBox tienen evento paint, que se ejecuta al hacerse visibles.
El evento Paint tiene mucha
importancia en relación con el refresco de los gráficos y con la velocidad de
ejecución de los mismos. En los apartados siguientes se completará la
explicación de
este tema.
La Propiedad Drawmode
Esta es una propiedad
bastante importante y difícil de manejar, sobre todo si se quieren realizar
cierto tipo de acciones con los métodos gráficos. La opción por defecto es la
nº 13: Copy Pen.
La propiedad DrawMode
controla cómo se dibujan los controles line y shape, así como los resultados de
los métodos gráficos pset, line y circle. La opción por defecto hace que cada
elemento gráfico se dibuje con el color correspondiente (por defecto el
foreColor) sobre lo dibujado anteriormente. En ocasiones esto no es lo más
adecuado pues, por ejemplo, si se superponen dos figuras del mismo color o si
se dibuja con el backColor, los gráficos resultan indistinguibles.
Para entender cómo funciona
DrawMode es necesario tener claros los conceptos de color
complementario y combinación
de dos colores. El color complementario de un color es el color que sumado con
él da el blanco (&HFFFFFF&). Por ejemplo, el color complementario del
rojo (&H0000FF&) es el cyan (&HFFFF00&).
El color complementario se
puede obtener mediante la simple resta del color blanco menos el color
original. Por su parte la combinación de dos colores es el color que resulta de
aplicar el operador lógico Or: el color resultante tiene sus bits a 1 si alguno
o los dos de los colores originales tiene a 1 el bit correspondiente.
La explicación de los distintos valores de la propiedad DrawMode que se obtiene del Help es la siguiente:
Constant Setting Description
VbBlackness 1 Blackness.
VbNotMergePen 2 Not Merge Pen— Inverse of setting 15
(Merge Pen).
VbMaskNotPen 3 Mask Not Pen — Combination of the
colors common to the
background color and the inverse of the pen.
VbNotCopyPen 4 Not Copy Pen — Inverse of setting 13
(Copy Pen).
VbMaskPenNot 5 Mask Pen Not — Combination of the
colors common to both the
pen and the inverse of the display.
VbInvert 6 Invert — Inverse of the display color.
VbXorPen 7 Xor Pen — Combination of the colors in the
pen and in the display
color, but not in both.
VbNotMaskPen 8 Not Mask Pen — Inverse of setting 9
(Mask Pen).
VbMaskPen 9 Mask Pen — Combination of the colors
common to both the pen
and the display.
VbNotXorPen 10 Not Xor Pen — Inverse of setting 7 (Xor
Pen).
VbNop 11 Nop — No operation — output remains
unchanged. In effect, this
setting turns drawing off.
VbMergeNotPen 12 Merge Not Pen — Combination of the
display color and the inverse
of the pen color.
VbCopyPen 13 Copy Pen (Default) — Color specified by
the ForeColor property.
VbMergePenNot 14 Merge Pen Not — Combination of the
pen color and the inverse of
the display color.
VbMergePen 15 Merge Pen — Combination of the pen color
and the display color.
VbWhiteness 16 Whiteness.
El explicar más a fondo las
distintas aplicaciones de esta propiedad esta fuera del alcance de este manual
introductorio.
Planos de dibujo (Layers)
Visual Basic considera tres
planos superpuestos (layers): el plano frontal, el plano intermedio y el plano
de fondo. Es importante saber en qué plano se introduce cada elemento gráfico
para entender cuándo unos elementos se superpondrán a otros en la pantalla.
En principio, los tres planos se utilizan del siguiente modo:
1. En el plano frontal
(Front) se dibujan todos los controles, excepto los controles gráficos y las
labels.
2. En el plano intermedio se
representan los controles gráficos y labels.
3. En el plano de fondo se
representa el color de fondo y el resultado de los métodos gráficos.
Estas reglas tienen
excepciones que dependen de la propiedad AutoRedraw, de la propiedad
ClipControl y de si los métodos gráficos se utilizan o no asociados al evento
paint.
La Propiedad Autoredraw
Esta propiedad tiene una
gran importancia. En principio, todas las aplicaciones de Windows permiten
superponer ventanas y/u otros elementos gráficos, recuperando completamente el
contenido de cualquier ventana cuando ésta se selecciona de nuevo y viene a
primer plano (es la ventana activa). A esto se llama redibujar (redraw) la
ventana. Cualquier aplicación que se desarrolle en Visual Basic debe ser capaz
de redibujarse correctamente, pero para ello el programador debe conocer algo
de la propiedad AutoRedraw.
Por defecto, Visual Basic
Re-dibuja siempre los controles que aparecen en un formulario.Esto no sucede sin
embargo con el resultado de los métodos gráficos y de print. Para que la salida
de estos métodos se redibuje es necesario adoptar uno de los dos métodos
siguientes:
1. Si en el form o
pictureBox la propiedad AutoRedraw está en false:
Si los métodos gráficos y print
están en el procedimiento correspondiente al evento paint se redibujan en el
plano de fondo (los métodos vuelven a ejecutarse, por lo que el proceso puede
ser lento en ciertos casos).
Si los métodos gráficos y
print están fuera del evento paint no se redibujan.
Si en el form o pictureBox
la propiedad AutoRedraw está en true
Si los métodos gráficos y
print están en el evento paint se ignoran.
Si los métodos gráficos y
print están fuera del evento paint se redibujan guardando en memoria una copia
de la zona de pantalla a refrescar. Este es la forma más rápida de conseguir
que los gráficos y el texto se redibujen. Tiene el inconveniente de necesitar
más memoria.
La propiedad AutoRedraw
De
los forms y de las pictureBox es independiente, por lo que las dos formas
anteriores de conseguir que los gráficos se redibujen se pueden utilizar
conjuntamente, por ejemplo una en el formulario y otra en las pictureBox.
La Propiedad ClipControl.
Por defecto esta propiedad
de las forms y pixtureBox está en true. En este caso los controles están
siempre por encima de la salida de los métodos gráficos, por lo que nunca por
ejemplo una línea se dibujará sobre un botón o una barra de desplazamiento (los
controles están siempre en el plano frontal o en el plano intermedio, según se
ha explicado antes).
Cuando la propiedad
ClipControl se pone a false se produce una doble circunstancia:
Los métodos gráficos
situados en un evento paint siempre se dibujan en el plano de fondo y por tanto
respetan los controles.
Los métodos gráficos situados
fuera de un evento paint se dibujan sobre cualquier elemento que esté en la
pantalla, incluidos los controles.
"DEMOSTRACIONES"
Suscribirse a:
Comentarios (Atom)








