• No se han encontrado resultados

Tipos genƒricosTipos genƒricos

In document Programacion-en-Vala.pdf (página 40-42)

Tipos genƒricos

Vala incluye un sistema de tipos gen•rico, mediante el cual una instancia particular de una clase se puede restringir Vala incluye un sistema de tipos gen•rico, mediante el cual una instancia particular de una clase se puede restringir con un tipo particular o un conjunto de tipos elegidos en la construcci€n de la clase. Esta restricci€n se usa con un tipo particular o un conjunto de tipos elegidos en la construcci€n de la clase. Esta restricci€n se usa normalmente para asegurarse que los datos almacenados en un objeto deben ser de un tipo particular, por ejemplo normalmente para asegurarse que los datos almacenados en un objeto deben ser de un tipo particular, por ejemplo para implementar una lista de objetos de un determinado tipo. En este ejemplo, Vala se asegura que s€lo los objetos para implementar una lista de objetos de un determinado tipo. En este ejemplo, Vala se asegura que s€lo los objetos del tipo indicado puedan ser a„adidos a la lista, y todos los objetos que sean devueltos ser‚n tambi•n de ese tipo (o del tipo indicado puedan ser a„adidos a la lista, y todos los objetos que sean devueltos ser‚n tambi•n de ese tipo (o convertidos a ese tipo).

convertidos a ese tipo). En Vala, los tipos gen•ricos (

En Vala, los tipos gen•ricos (genericsgenerics) se gestionan cuando el programa s) se gestionan cuando el programa se encuentra en ejecuci€n. Cuando se definee encuentra en ejecuci€n. Cuando se define una clase que puede ser restringida a un tipo de dato, existir‚ s€lo una clase, cuyas instancias ser‚n personalizadas una clase que puede ser restringida a un tipo de dato, existir‚ s€lo una clase, cuyas instancias ser‚n personalizadas individualmente. Esto es diferente a C++, d€nde se crea una nueva clase para cada tipo requerido. Vala es similar al individualmente. Esto es diferente a C++, d€nde se crea una nueva clase para cada tipo requerido. Vala es similar al sistema usado por Java en este sentido. Esto tiene varias consecuencias, la m‚s importante de ellas es que los sistema usado por Java en este sentido. Esto tiene varias consecuencias, la m‚s importante de ellas es que los miembros est‚ticos (

en cada instancia; y eso dado una clase o una subclase, un tipo gen•rico refinado por una subclase puede ser usado en cada instancia; y eso dado una clase o una subclase, un tipo gen•rico refinado por una subclase puede ser usado como un tipo gen•rico refinado por la clase. Ejemplo:

como un tipo gen•rico refinado por la clase. Ejemplo:

 public

 public classclass  Wrapper Wrapper<G> : GLib.Object {<G> : GLib.Object {  private

 private G data; G data;

 public

 public void void  set_dataset_data(G data) {(G data) { this

this.data = data;.data = data; }

}

 public

 public G G get_dataget_data() {() { return

return thisthis.data;.data; }

} } }

La clase

La clase WrapperWrapper debe ser restringida con un tipo para inicializarla, en este caso el tipo se identifica comodebe ser restringida con un tipo para inicializarla, en este caso el tipo se identifica como GG, y de, y de esta manera las instancias de esta clase almacenar‚n un objeto del tipo

esta manera las instancias de esta clase almacenar‚n un objeto del tipo GG, y tendr‚n m•todos para obtener o, y tendr‚n m•todos para obtener o modificar ese objeto. La raz€n de este ejemplo espec…fico es explicar que actualmente una clase de tipo gen•rico no modificar ese objeto. La raz€n de este ejemplo espec…fico es explicar que actualmente una clase de tipo gen•rico no puede usar propiedades es su restricci€n del tipo, por lo que debe usar m•todos para obtener y modificar este dato. puede usar propiedades es su restricci€n del tipo, por lo que debe usar m•todos para obtener y modificar este dato. Para inicializar esta clase, se debe elegir un tipo de dato, por ejemplo el tipo cadena (en Vala no existe restricci€n en Para inicializar esta clase, se debe elegir un tipo de dato, por ejemplo el tipo cadena (en Vala no existe restricci€n en el tipo de dtos que puede usarse en una clase gen•rica). Para crear una instancia de la clase:

el tipo de dtos que puede usarse en una clase gen•rica). Para crear una instancia de la clase:

var wrapper =

var wrapper = newnew Wrapper< Wrapper<stringstring>();>(); wrapper.set_data(

wrapper.set_data("test""test"););

var data = wrapper.get_data(); var data = wrapper.get_data();

Como puede verse, cuando se obtiene los datos de la clase

Como puede verse, cuando se obtiene los datos de la clase WrapperWrapper, se asignan a un identificador con un tipo no, se asignan a un identificador con un tipo no expl…cito (que se define mediante la palabra reservada

expl…cito (que se define mediante la palabra reservada varvar). Esto es posible por que Vala sabe que tipo de objetos se). Esto es posible por que Vala sabe que tipo de objetos se encuentran en cada instancia de

encuentran en cada instancia de WrapperWrapper, y por lo tanto puede realizar este trabajo por usted. El hecho de que Vala, y por lo tanto puede realizar este trabajo por usted. El hecho de que Vala no cree varias clases para una definici€n gen•rica significa que se puede realizar un c€digo como el que sigue:

no cree varias clases para una definici€n gen•rica significa que se puede realizar un c€digo como el que sigue:

class

class TestClassTestClass : GLib.Object { : GLib.Object { }

}

void 

void  accept_object_wrapperaccept_object_wrapper(Wrapper<Glib.Object> w) {(Wrapper<Glib.Object> w) { }

}

... ...

var test_wrapper =

var test_wrapper = newnew  Wrapper<TestClass>();  Wrapper<TestClass>(); accept_object_wrapper(test_wrapper);

accept_object_wrapper(test_wrapper); ...

...

Puesto que todas las instancias de

Puesto que todas las instancias de TestClassTestClass son tambi•n objetosson tambi•n objetos GLib.ObjectGLib.Object, el m•todo, el m•todo accept_object_wrapperaccept_object_wrapper aceptar‚ el objeto que le sea pasado, y lo tratar‚ como si fuera una instancia de un objeto

In document Programacion-en-Vala.pdf (página 40-42)