Serie Ficheros Virtuales

 




JavaScript  Ficheros Virtuales




Conversión de C a JavaScript. Encapsulación


1 Introducción

2 La encapsulación en esquema

3 La elección de nombre de objeto



                                                                                                                           _______



1 Introducción


En el capítulo anterior vimos como transcribir los desarrollos de C Ficheros Virtuales a JavaScript Ficheros Virtuales por procedimientos, obteniendo las funciones de la serie W (W_WRITE, W_CHAIN, ...) plenamente operativas.

Lamentablemente, los desarrollos resultantes en JavaScript quedan adscritos al espacio global de nombres que se constituye por cada hoja y sus descendientes.

Esta situación deja abierta la puerta a dos tipos de conflicto.

El primero es el conflicto de nombres. Es preciso tener en cuenta todos los nombres utilizados en todos los módulos utilizados (U, M, N y W) para evitar repetirlos porque pasan de ser globales por módulo, inaccesibles al resto de modulos y desarrollos a globales sin más.

El segundo es el de acceso. Todas estas variables quedan accesibles de forma directa por cualquier otro procedimiento, lo que viola su diseño y deja abierta la posibilidad de obtener resultados imprevisibles.

La solución a estos problemas es la de encapsular los desarrollos en un objeto, dejando accesibles al exterior sólo los miembros que nos interesen. Este capítulo va a mostrarlo con el desarrollo de los ficheros virtuales.

                                                                                                                           _______



2 La encapsulación en esquema


Para nuestros propósitos, la encapsulación consiste en tomar los desarrollos procedimentales y convertirlos en miembros de un objeto. Estos miembros pueden ser variables o funciones y se puede elegir hacerlos públicos o privados. Este proceso sigue un esquema muy sencillo que se expone a continuación.



Supongamos un desarrollo compuesto por una serie de variables y funciones ligadas que queramos encapsular. Partiremos de un código fuente como


   var V1
   ...
   var VM
   ...
   var VN



   function f1() {... función interna, (No exportable) ...}
                 [Que usa V1.. y f11... como variables y funciones de trabajo interno (Tampoco exportables)]


   ...


   function fM() {... función a exportar ...}
                 [Que usa VM.. y fM1... como variables y funciones de trabajo interno (No exportables)]


   ...


   function fN() {... otra función que también nos interesa exportar ...}



y lo encapsularemos como


   function Objeto()
   {

     // Parte privada
     // (Aquí escribimos justo todo el desarrollo que deseamos encapsular, tal como estaba en origen)

     var V1


     ...


     var VN

    


     function f1()


     ...


     function fN()



     // Parte pública (Aquí definimos los miembros que el objeto exporta)

     this.fM = fM;


     this.fN = fN;

   }




El uso pasaría a ser

   var InstanciaDeObjeto = New Objeto();

   var ResultadofM = InstanciaDeObjeto.fM();
   var ResultadofN = InstanciaDeObjeto.fN();




en vez de



   var ResultadofM = fM();
   var ResultadofN = fN();



De hecho, fM y fN ya no serían directamente accesibles, en el espacio global de nombres habrían desaparecido todos los nombres de V1...VN y f1...fN quedando sólo la variable InstanciaDeObjeto y sus métodos públicos.

                                                                                                                           _______


3 La elección de nombre de objeto

Para llevar al mínimo la posibilidad de colisión entre los nombres del espacio global conviene elegir nombres de objeto que resulten únicos. Una forma de garantizarlo es ligarlos al nombre del dominio de desarrollo.

En nuestro caso, con el dominio
www.ficherosvirtuales.com, los utilidades desarrolladas se denominarán

            nombre_ficherosvirtuales_com


y en particular el desarrollo específico del módulo de ficheros virtules se denominará como

            w_ficherosvirtuales_com


aunque se instanciará como

            var w = new w_ficherosvirtuales_com();


utilizándose entonces como

                  
lNIDPRUEBASW = w.NID("PRUEBASW");  // Ejemplo de la utilización de un miembro publico de w


para hacerlo más manejable en los ejemplos.

                                                                                                                           _______