sábado, 30 de julio de 2011

2.Modelo de objetos


Contenido
1. Objetos y clases
1.1. Clases
1.2. Propiedades, métodos y variables
1.3. Referencias
1.4. objetos no válidos
1.5. Métodos especiales
2. Eventos y observadores
2.1. Eventos
2.2. Bloquear objetos
2.3. Los observadores

3. Herencia
3.1. Lo que se hereda?
3.2. ¿Qué clase puede ser una clase padre?
3.3. Virtual envío
3.4. La herencia y el constructor
3.5. Símbolo Reemplazar
4. Componentes
4.1. Por defecto de componentes internos
4.2. Las tablas de símbolos
4.3. tabla de símbolos global
4.4. Proyecto tabla de símbolos


1. Objetos y clases
Un objeto en Gambas es una estructura de datos que proporciona las propiedades, variables, métodos y eventos.
Los objetos se accede "por referencia", es decir, utilizando un puntero a la misma, es decir, utilizando una variable cuyo valor es la dirección de la estructura de datos de objeto en la memoria.
Usted puede ver la dirección de un objeto mediante la instrucción de la impresión:
DIM astr AS NEW String []
PRINT astr
(String [] 0x80dccf8)

La estructura de datos de objeto es descrito por una clase.

1.1. Clases
Así que cada objeto de Gambas tiene una clase que describe todos los públicos sus propiedades, métodos y eventos. Esta clase es un objeto demasiado Gambas, cuya clase es la clase denominada clase.
Una clase estática es una clase que todos los miembros son estáticos (véase más adelante). En Gambas, una clase estática también se denomina un módulo.
Una clase <estática no puede ser instanciado: se crearía un objeto con ninguna variable dinámica, que es inútil.
Ejemplo
La clase System es una clase estática: todos sus métodos son estáticos, y no se puede crear un objeto cuya clase sería Sistema.
Una clase virtual es una pseudo-clase ocultos que no pueden manipular explícitamente.

1.2.Propiedades, métodos y variables
Propiedades y métodos para manipular la estructura de datos.
Una propiedad, un método o una variable puede ser estática:
Una variable estática será compartida por todas las instancias de la misma clase.
Una propiedad o un método estático sólo puede modificar las variables estáticas.
Un método o una variable puede ser pública o privada. Una propiedad es siempre pública.
símbolos privada sólo se puede utilizar desde el interior de clases. símbolos públicos pueden ser utilizados en todas partes, siempre y cuando tengas una referencia apunta al objeto.

1.3.Referencias
No hay recolector de basura en Gambas. Así, cada objeto tiene un contador de referencia que se incrementa cada vez que el objeto es referenciado por cualquier variable, matriz, colección u otro objeto, y disminuye cuando es puesto en libertad.
Este contador de referencias es cero en la creación de objetos, y cuando se convierte en cero de nuevo después de un comunicado de referencia, el objeto se libera.

1.4. Objetos no válidos
Un objeto puede ser válida.Porque, por ejemplo, está vinculada a un objeto interno no gestionados por Gambas que fue destruida.
Tratar de utilizar un objeto no válido genera un error.

1.5.Métodos especiales
Métodos especiales son métodos declarados en las clases, cuyo nombre comienza con un carácter de subrayado, y que son llamados por el intérprete en las siguientes situaciones:
Cuando se crea un objeto.
Cuando un objeto se libera.
Cuando la clase de objeto se carga.
Cuando la clase de objeto se descarga.
Cuando se utiliza un objeto como si se trata de una matriz.
Al enumerar el objeto.
Cuando se utiliza un objeto como si fuera una función.
Al intentar utilizar un método de objeto desconocido o propiedad.
Véanse los métodos especiales y métodos especiales para obtener más información.

2.Eventos y observadores
2.1.Eventos
Los eventos son las señales enviadas por un objeto cuando algo sucede en él.
Si un objeto provoca eventos, se llevará a cabo una referencia sobre su observador, o el objeto primario.
Este observador es otro objeto que implemente los controladores de eventos. Un controlador de eventos es un método público que se llama cada vez que se provocó el evento.
De forma predeterminada, el observador es el objeto actual en la que se declara el objeto recién instanciado.
Para provocar eventos, un objeto debe tener un nombre de evento. Este evento es el nombre asignado al instanciation objeto, cuando se utiliza la nueva instrucción y la palabra clave AS, y es el prefijo de todos los métodos de control de eventos.
Ejemplo

Esto crea un control Button que se provocan eventos.

DIM hButton As Button
hButton = NUEVO Button (ME) AS "ButtonEventName"

Si no se especifica el nombre del evento, el objeto no provocar eventos.
2.2.Bloquear objetos
Un objeto puede ser bloqueado para que deje de eventos de recaudación, y se puede desbloquear para que se les plantea de nuevo.
Ver la Object.Lock y métodos Object.Unlock.
Algunos eventos pueden ser cancelados por el controlador de eventos, utilizando la instrucción STOP EVENT. El efecto de esta cancelación depende del evento.
Un objeto se bloquea automáticamente durante la ejecución de su constructor: no puede enviar ni recibir ningún evento.

2.3.Los observadores
Los observadores son objetos que le permiten interceptar los eventos provocados por otros objetos. Que "observar" ellos.
Puede interceptar eventos justo antes de que se han planteado, o justo después.
Para cada evento interceptado, el observador levantará un evento con el mismo nombre y los mismos argumentos.
Mediante el uso de STOP EVENT dentro de un controlador de eventos de observador, se cancela el evento original.
Ejemplo:
PRIVATE $hButton as Button
PRIVATE $hObserver AS Observer

PUBLIC SUB Form_Load()
  $hButton = NEW Button(ME) AS "Button"
  $hObserver = NEW Observer(hButton) AS "Observer"
END
PUBLIC SUB Observer_Click()
  DEBUG "El botón ha echo click. ¡Puedo cancelar el evento!"
  STOP EVENT
END

PUBLIC SUB Button_Click()
  DEBUG “ud no debe verme"
END
3.Herencia
La herencia es el camino para una clase para convertirse en una versión especializada de otra clase.

3.1.¿Que es lo que se hereda?
La clase hereda de su padre todos los métodos, propiedades, constantes y eventos.

Debe utilizar la palabra clave ME para acceder a los elementos heredados de la clase en el interior.

3.2.¿Qué clase puede ser una clase padre?
Usted puede heredar cualquier clase, incluso un nativo de uno!
Por ejemplo, puede crear una clase que hereda MiCuadroDeLista ListBox pero permite asociar una etiqueta a cada elemento de la lista.

Tenga en cuenta que no se puede utilizar Inherits en un archivo de clase de forma, porque las formas ya hereda la clase Form.
La profundidad del árbol de herencia no puede ser mayor de 16. Esta es una constante en el código dentro de la intérprete de Gambas.


3.3.Virtual envío
Al llamar a un método o acceso a una propiedad de un objeto de referencia, Gambas siempre utiliza virtuales de despacho.
Esto significa que la clase real del objeto se utiliza siempre, y no el tipo de la variable que hace referencia al objeto - como era en Gambas 1.0.

3.4.La herencia y el constructor
En contra de todo el lenguaje objeto que sé, cada clase en la jerarquía de herencia consume los parámetros pasados al constructor.
Supongamos que tenemos el árbol de herencia siguientes:

MiCuadroDeLista --- hereda -> ListBox hereda --- ---> Control
Control._new () no existe.
ListBox._new () toma un parámetro: el control de los padres.
MyListBox._new () toma un parámetro: un nombre - Es sólo un ejemplo.

Así NEW MiCuadroDeLista tendrá dos parámetros.
El primero será enviado a MyListBox._new ().
El segundo ListBox._new ().
Tenga cuidado: el ListBox._new () se llamará en primer lugar, de modo que usted esté seguro de que el control ListBox existe cuando estás en MyListBox._new ().
Así que los argumentos deben ser especificados en orden inverso.
A continuación, creará un control MiCuadroDeLista de esta manera:

hMyListBox = NEW MiCuadroDeLista ("Nombre", hContainer)
3.5.Símbolo Reemplazar

Cuando un símbolo es anulado, el tipo de símbolo en la clase del hijo debe ser compatible con el tipo de símbolo en la clase padre.

Las reglas son:
-Un símbolo dinámico debe ser anulado por un símbolo dinámico y uno estático por una estática.
-Un método debe ser anulado por un método.
-La propiedad debe ser anulado por una propiedad.
-Una propiedad de sólo lectura se puede reemplazar por una de lectura y escritura de propiedad.
-Una constante se puede reemplazar por una constante o una propiedad.

Gambas 2 no se comprueba la compatibilidad de símbolo de primer orden, así que ten cuidado!
La firma del método hijo no se compara con la firma de uno de los padres.

4. Componentes
Los componentes de Gambas son externos bibliotecas compartidas escrito en C, C++ o en Gambas que añaden nuevas funciones y / o clases para el intérprete de Gambas.
Las clases se agrupan de acuerdo con el componente de procedencia.

4.1. Por defecto de componentes internos
El intérprete incluye un componente interno gb nombre que define todas las clases estándar del lenguaje.
Este componente está siempre cargado por defecto, y puede ser considerado como parte del lenguaje

4.2.Las tablas de símbolos
Cada componente tiene su propia mesa privada símbolo de la clase, por lo que los nombres de clase no están en conflicto.

4.3.Tabla de símbolos global
Así que los componentes pueden trabajar juntos, hay una tabla de símbolos global, donde todas las clases exportadas por los componentes y todas las clases exportadas por el proyecto actual se almacenan.
Si hay un conflicto de nombres en esta tabla de símbolos globales, la clase cargada último reemplaza la clase cargada anterior con el mismo nombre, mediante el uso de la herencia. En otras palabras, la clase predominante se extiende por imponerse a la una.
Esta última característica se puede utilizar para:
Ampliación de una clase ya declarada por la adición de nuevos métodos o propiedades a la misma. Por ejemplo, la clase Application gb.qt reimplementa la gb clase Application.
Anulación de los métodos de una clase ya declarado. Por ejemplo, el componente gb.form.dialog sustituye a la mayoría de los métodos estáticos de la clase de diálogo.

4.4. Proyecto tabla de símbolos
El proyecto tiene su propio símbolo privado, como cualquier otro componente, y puede exportar cualquiera de sus clases a la tabla de símbolos globales utilizando la palabra clave de exportación.Las clases del proyecto se cargan después de todos los componentes. Así que la clase a exportar puedan reemplazar las clases exportadas declarado en cualquiera de los componentes.


No hay comentarios:

Publicar un comentario en la entrada