Compartir a través de


Proteger y ocultar miembros de clase

Las propiedades y métodos de una definición de clase son Public de forma predeterminada: el código de otras clases u otros procedimientos puede establecer las propiedades o llamar a los métodos. A las propiedades y los métodos definidos como Protected sólo pueden tener acceso otros métodos de la definición de la clase o de subclases de la clase. A las propiedades y los métodos definidos como Hidden sólo pueden tener acceso otros miembros de la definición de la clase. Las subclases de la clase no pueden "ver" o hacer referencia a miembros ocultos.

Para asegurar un correcto funcionamiento en algunas clases, deberá impedir que los usuarios cambien las propiedades o llamen al método desde fuera de la clase mediante programación.

El ejemplo siguiente ilustra el uso de propiedades y métodos protegidos de una clase

La clase stopwatch incluida en Samples.vcx, en el directorio ...\Samples\Classes de Visual FoxPro, incluye un cronómetro y cinco etiquetas que muestran el tiempo transcurrido:

La clase Stopwatch contiene etiquetas y un cronómetro.

Valores de las propiedades de la clase Stopwatch

Control Propiedad Valor
lblSeconds Caption 00
lblColon1 Título :
lblMinutes Título 00
lblColon2 Título :
lblHours Título 00
tmrSWatch Interval 1000

Esta clase tiene también tres propiedades protegidas, nSec, nMin y nHour, así como un método protegido, UpdateDisplay. Los otros tres métodos personalizados de la clase, Start, Stop y Reset no están protegidos.

Sugerencia   Elija Información de clase en el menú Clase para ver la visibilidad de todas las propiedades y métodos de una clase.

Las propiedades protegidas se utilizan en cálculos internos en el método UpdateDisplay y el evento Timer. El método UpdateDisplay establece los títulos de las etiquetas para que reflejen el tiempo transcurrido.

Método UpdateDisplay

Código Comentarios
cSecDisplay = ALLTRIM(STR(THIS.nSec))
cMinDisplay = ALLTRIM(STR(THIS.nMin))
cHourDisplay = ALLTRIM(STR(THIS.nHour))
Convierte las propiedades numéricas al tipo Character para mostrarlas en los títulos de etiqueta.
THIS.lblSeconds.Caption = ;
 IIF(THIS.nSec < 10, ;
   "0" ,"") + cSecDisplay
THIS.lblMinutes.Caption = ;
  IIF(THIS.nMin < 10, ;
   "0", "") + cMinDisplay
THIS.lblHours.Caption = ;
  IIF(THIS.nHour < 10, ;
   "0", "") + cHourDisplay
Establece los títulos de etiqueta, conservando los 0 iniciales si el valor de la propiedad numérica es menor que 10.

La tabla siguiente muestra el código del evento tmrSWatch.Timer.

Evento Timer

Código Comentarios
THIS.Parent.nSec = THIS.Parent.nSec + 1
IF THIS.Parent.nSec = 60
  THIS.Parent.nSec = 0
  THIS.Parent.nMin = ;
  THIS.Parent.nMin + 1
ENDIF
Incrementa el valor de la propiedad nSec cada vez que se desencadena el evento de cronómetro cada segundo.
Si nSec ha llegado a 60, lo restablece a 0 e incrementa la propiedad nMin.
IF THIS.Parent.nMin = 60
  THIS.Parent.nMin = 0
  THIS.Parent.nHour = ;
  THIS.Parent.nHour + 1
ENDIF
THIS.Parent.UpdateDisplay
Si nMin llega a 60, lo restablece en 0 e incrementa la propiedad nHour.

Llama al método UpdateDisplay cuando se establecen los nuevos valores de la propiedad.

La clase Stopwatch tiene tres métodos que no están protegidos: Start, Stop y Reset. Un usuario puede llamar directamente a estos métodos para controlar el cronómetro.

El método Start contiene la línea de código siguiente:

THIS.tmrSWatch.Enabled = .T.

El método Stop contiene la línea de código siguiente:

THIS.tmrSWatch.Enabled = .F.

El método Reset establece las propiedades protegidas a 0 y llama al método protegido:

THIS.nSec = 0
THIS.nMin = 0
THIS.nHour = 0
THIS.UpdateDisplay

El usuario no puede establecer directamente estas propiedades o llamar a este método, pero el código del método Reset sí puede hacerlo.

Especificar el valor predeterminado para una propiedad

Al crear una nueva propiedad, su valor predeterminado es falso (.F.). Para especificar un valor predeterminado distinto para una propiedad, utilice la ventana Propiedades. En la ficha Otras, haga clic en la propiedad y establezca el valor deseado. Este será el valor inicial de la propiedad cuando se agregue la clase a un formulario o a un conjunto de formularios.

También puede establecer cualquiera de las propiedades de clase de base en el Diseñador de clases. Cuando un objeto basado en la clase se agregue al formulario, reflejará el valor de su propiedad en lugar del valor de la propiedad de la clase de base de Visual FoxPro.

Sugerencia   Si desea convertir el valor predeterminado de una propiedad en una cadena vacía, seleccione el valor en el cuadro Modificar propiedades y presione la tecla RETROCESO.

Vea también

Programación orientada a objetos | Clases y objetos: los bloques funcionales de las aplicaciones | Clases de Visual FoxPro | Preparar la creación de clases | Crear clases | Modificar una definición de clase | Crear una subclase de una definición de clase | Utilizar el Diseñador de clases | Especificar la apariencia en tiempo de diseño | Crear, copiar y eliminar archivos de biblioteca de clases | Agregar clases a formularios | Anular los valores predeterminados de las clases | Referencias a objetos de la jerarquía de contenedores | Establecer propiedades | Llamar a métodos | Responder a eventos