jueves, 8 de octubre de 2009

Crear una nueva Clase

Magik es un lenguaje orientado a objetos, por lo tanto, siempre se hablara de objetos y clases. No es menester de este blog, enseñar programación Orientada a Objetos, para ello hay mucho en internet, pero lo que si debe ser aborado aquí es como creo una nueva clase en Magik y para qué.

Declaración de una clase

Una clase se crea por medio de un procedimiento llamado def_slotted_exemplar, el cual recibe 3 argumentos principales el nombre de la clase (identificada por un símbolo), un vector simple con los Slot o variables de clase y la clase padre, si es que nuestra clase hereda de otra. De esta forma, la declaración de nuestra clase quedará:

def_slotted_exemplar (:nombre_clase,
                                        {
                                                            {:slot_1, _unset},
                                                            {:slot_2, _unset}

                                         },
                                        {:nombre_clase_padre}
)
$

Esta nueva clase requiere, algunos métodos básicos para operar como son new e init, los cuales crean una nueva instancia de la clase y dan valor inicial a los Slot, respectivamente. Ejemplo:

_method ds_transfer.new ()

          _clone.init ()

_endmethod
$

 
_private _method ds_transfer.init ()

.slot_1 <<  "valor inicial slot 1"
.slot_2 << "valor inicial slot 2"


>> _self

_endmethod
$

¿Para qué crear una nueva clase?
 
Pues para casi todo, un nuevo proceso sobre la información de nuestra base, una nueva interfaz de usuario (gui), etc. Más adelante, incorporaré ejemplos de clases útiles.

miércoles, 23 de septiembre de 2009

Hacer un reporte simple

Para comenzar, veremos como hacer un simple reporte a un archivo txt que publique la información existente en una o más tablas de nuestra base de datos Smallworld.
Para este ejemplo básico utilizaremos la clase external_text_output_stream la cual permite manipular archivos externos, veamos:

_global reporta_municipios << _proc()


        ## baja a un archivo txt la totalidad de registros
       ## de la tabla municipio, o de la que querais
        # Generamos variables de trabajo


         gpm << gis_program_manager
         v << gpm.cached_dataset(:gis)
         t_municipio << v.collections[:municipio]
        # nuestro archivo de reporte
         s << external_text_output_stream.new("c:\reprte_municipios.txt")


         s.write("Reporte de Municipios", newline_char)
        _for a_mun _over t_municipio.fast_elements()
       _loop
               nombre << a_mun.name
               poblacion << a_mun.habs
               superficie << a_mun.superficie
               s.write("NOMBRE: ",nombre, newline_char)
               s.write(" Población: ",poblacion, newline_char)
               s.write(" Superficie: ",superficie, " Kms. Cuadrados.", newline_char)
               s.newline()
      _endloop


      s.close()


_endproc
 
 
Bueno el código anterior corresponde a un procedimiento y para ejecutarlo solo debemos compilar el código digitar en el prompt de magik:
 
MagikSF> reporta_municipios( )
 
Espero les sea de utilidad.
 
Q.

Partida

Bienvenidos:

Llevo varios años trabajando con Smallworld y una de las cosas que ha llamado mi atención es la ausencia de código en Internet. Todos los demás lenguajes de programación poseen muchos sitios donde buscar código, o hacer preguntas, pero con Magik las cosas son distintas. Es cierto que existe el grupo de desarrolladores en yahoo y uno o dos blog más. Existe uno incluso en español, pero tiene sólo 2 entradas del año pasado y nada más.
Pretendo publicar código, no grandes aplicaciones, pero sí cosas útiles sobre todo para quienes recién comienzan con este lenguaje. También me gustaría incorporar algunos artículos para introducir a los nuevos programadores en el estilo de programación Magik y enseñar unas cuantas cosas que he podido aprender.

Deseo mantener este blog vigente e ir añadiendo códigos y/o artículos permanentemente, para lo cual pido la colaboración a todos los desarrolladores de habla hispana. Yo me comprometo a aportar todo mi conocimiento y experiencia y espero que otros se sumen a esta labor.

Gracias

Q.