Asunto: Re: Tipo Object
Fecha: Tue Nov 30 11:50:55 1999
De: Diego Sevilla Ruiz <dsevilla@ditec.um.es>
Hola, Iñigo y Elena:
Iñigo Sodupe wrote:
>
> Hola Elena,
>
> El tipo Object de Java no tiene un "mapeo" directo a ningun otro
> tipo de IDL como ocurre con otros tipos como String, boolean o char.
>
Efectivamente. Aún así, y a riesgo de parecer pedante, me gustaría hacer
un "inciso filosófico". En Java, el tipo Object se utiliza para
especificar a la "base de la jerarquía
de objetos". Es decir, para especificar cualquier (sub)tipo posible en
Java. Cuando se hace una correspondencia de clases Java con IDL, se debe
seguir esta misma
filosofía: todos los objetos CORBA tienen una clase base
(CORBA::Object). Aún así, al pasar de un conjunto de clases Java a IDL,
se debe hacer algo de reingeniería en
el sentido de que se deben identificar bien qué tipos de objetos se
manejan por cada operación. Me refiero a que el tipo "Object" (también
CORBA::Object) es muy
general, y, como tal, se utiliza sólo en clases cuya misión es hacer de
"contenedores", es decir, no les importa el tipo de los objetos que
manejan. Por regla general, una
buena reingeniería para CORBA hace que el uso del tipo CORBA::Object sea
innecesario, y en muchos más casos, que también sea innecesario el tipo
Any (no digo que
este sea tu caso, aunque siempre merece la pena pensar en ello). Por
ejemplo, puedes construir una jerarquía que "capture" todos los tipos
que forman parte del dominio
de la aplicación, y así, los tipos que manejarán los métodos de tu
aplicación serán, como máximo (más generales) los del tipo base de TU
jerarquía.
Un último apunte en este sentido es que el tipo "Object" de Java es eso,
"de Java". CORBA permite el uso de múltiples lenguajes, con lo que no se
pueden utilizar tipos
que sean específicos de un lenguaje de programación, sino sólo tipos
IDL.
>
> Sin embargo, segun se utiliza en muchos casos programando en Java
> (y por lo que cuentas de que tienes que generar interfaces IDL a
> partir de otras interfaces Java creo que es ese tu caso), el tipo
> Object permite "capturar" a objetos de cualquier tipo (sean de la
> clase que sean) y luego mediante casting podemos obtener una
> referencia tipada a dicho objeto.
>
> Pues bien, en CORBA eso puede verse como el tipo Any. En una
> interfaz IDL aparecera algo como:
>
> interface Test {
> void operation (in any a) ;
> }
>
> Y asi cualquier valor de cualquier tipo podra pasarse a la funcion
> como parametro.
>
Efectivamente. No obstante, el tipo Any es, como decía, "muy general".
Además, obliga al compilador de IDL a generar "códigos de tipo"
(typecodes). Algunos
compiladores no los generan por defecto. Los programas deben comprobar
los tipos de una forma que no es muy "ortodoxa". Por ejemplo, para
comprobar que el tipo de
"a" del IDL que has definido arriba es, por ejemplo, una secuencia,
debemos hacer la comprobación "a.data()->kind() == CORBA_tk_sequence"
(en C++), por lo que el tipo se tiene que "escribir" en el código
fuente, y utilizar el "typecode" adecuado. Esto es menos elegante que
utilizar funciones "narrow" de los tipos CORBA::Object o del tipo base
de la jerarquía que se crea en IDL (la jerarquía a la que me refería
antes). Al fin y al cabo, la única diferencia entre any y CORBA::Object
es que el primero puede guardar también tipos básicos (int, long, etc.)
al existir en CORBA una diferencia entre tipos básicos y tipos de Objeto
(otra cosa muy distinta es si es conveniente esta separación).
>
> Espero haber sabido responder a tu pregunta.
>
>
> Saludos a todos.
>
>
>
> Elena Ruiz González wrote:
>
>> Hola a todos, Soy una chica de Valencia que está realizando un
>> proyecto final de carrera utilizando la arquitectura CORBA. Tengo
>> que generar una serie de interfaces IDL a partir de otras interfaces
>> Java. Me gustaría que alguien me dijera cómo se traduce el tipo
>> Object de Java a IDL. Hasta pronto, Elena.
>
saludos
diego.
--
Diego Sevilla Ruiz
Departamento de Ingeniería y Tecnología de Computadores
Facultad de Informática. Universidad de Murcia
Campus de Espinardo - 30080 Murcia (SPAIN)
Tel.: +34-968-367570
E-mail: dsevilla@ditec.um.es
$_="\\l/) (>". "_'\n<";@@= /.|\n/g;$_=
"\@". "\007f". "DDq". "DD5". "\204".
"\@". "DT4CE". "D54E". "DD". "\244".
"\021". "dBDTC". "\010DD". "\200\$FD\024".
"GDAG". "DAGDT". "CqI";$c =0;$p =5;for$q
(/./g) {$q= ord$q; for(a, b){$z[$c]
=$@[$p+=($q&15) -4];$q>>=4;$c+=33 ;$c>98 &&($c-=98);}};print@z;