14 de marzo de 2007

Serie FoxNet protegido es protegido o no

Artículo original: The foxNET series: protected is protected, or is it?
http://www.foxpert.com/knowlbits_200702_2.htm 

Autor: Christof Wollenhaupt
Traducido por: Ana María Bisbé York


Como desarrollador Visual FoxPro, va a descubrir mucha familiaridad cuando lea (o escriba) código .NET. Después de todo, ha trabajado en un entorno orientado a objeto por más de una década mientras la pobre gente de VB tiene que saltar directamente de la infancia a ser adultos, ¿cierto?

Hay algunas diferencias sutiles entre estas dos plataformas, incluso para algunas cosas tan básicas como la visibilidad de los miembros. En Visual FoxPro usted tiene oculto, protegido y público. El último no está disponible como una palabra clave, sin embargo. En .NET tiene algunos modificadores. Entre ellos están privado y protegido; pero no público. Protegido y público suena idéntico. Oculto puede relacionarse fácilmente a lo privado.

¿Es tan sencillo? No. En Visual FoxPro el alcance de esto modificadores es el objeto. El siguiente programa provoca un error en Visual FoxPro:
ox = CreateObject("Sample")
? ox.SetValue(ox,"ox")
oy = CreateObject("Sample")
? oy.SetValue(ox,"oy")

Define Class Sample as Custom
  Protected cValue
  Procedure SetValue( toRef, tcValue )
    toRef.cValue = m.tcValue
    Return m.tcValue
  EndProc
EndDefine
El primer método trabaja bien. Puede llamar a un método de ox y luego utiliza una referencia de ox para cambiar de propiedad. Si pasa una instancia diferente de la misma clase, no puede acceder a la propiedad protegida del segundo objeto. Este comportamiento es una razón que las propiedades protegidas no se emplean mucho por los desarrolladores Visual FoxPro (al menos, comparando con otros lenguajes). Si tiene una clase donde dos instancias necesitan intercambiar datos, tiene que utilizar también una interfaz pública que esté abierta para todos. Vea ahora, el mismo programa escrito en C#.
class Program
  {
  static void Main(string[] args)
    {
    Sample ox = new Sample();
    Console.WriteLine(ox.SetValue(ox, "ox"));
    Sample oy = new Sample();
    Console.WriteLine(oy.SetValue(ox, "oy"));
    }
  }
class Sample
  {
  protected string cValue;
  public string SetValue(Sample toRef, string tcValue)
    {
    toRef.cValue = tcValue;
    return tcValue;
    }
  }
Este código compila y se ejecuta bien. En Visual FoxPro la visibilidad de los miembros está limitada a la instancia del objeto. En .NET está limitada a la clase (realmente el tipo). Cualquier instancia de una clase tiene acceso a cada miembro privado de cada otra instancia de la misma clase. Esto hace que los miembros no públicos sean mucho más útiles que en Visual FoxPro.

No hay comentarios. :

Publicar un comentario