AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

¡Nueva funcionalidad de WINDEV Mobile 2024!
Ayuda / Tutorial WINDEV Mobile / Tutorial - Fundamentos de WLanguage
  • Lección 8 - POO
  • Conceptos
  • Conceptos de POO
  • Ejemplo simple
  • Crear una clase
  • Crear propiedades
  • Crear métodos
  • Declarar y manipular objetos
  • Uso del constructor
  • En resumen

Fundamentos de WLanguage

Lección 8 - POO
Abordaremos los siguientes temas:
  • Conceptos de la Programación Orientada a Objetos.
  • Ejemplos de declaración de objetos.
Durée de la leçon 30 min
Conceptos
La Programación Orientada a Objetos (POO) está diseñada para una mejor reutilización del código. Los programas desarrollados con la POO están estructurados: se dividen en módulos, y cada módulo gestiona una funcionalidad. Estos módulos pueden reutilizarse fácilmente en otros programas. Además los módulos agrupan un conjunto de procedimientos (llamados métodos) y encapsulan la estructura de datos en la que actuarán dichos métodos.
Para utilizar la programación orientada a objetos, se deben declarar las clases, miembros y métodos asociados.
Para comenzar, veamos los principales conceptos de la POO.

Conceptos de POO

Clase
Una clase contiene la descripción de una estructura de datos (miembros) y los procedimientos (métodos) que manipulan los miembros.
Por lo tanto, una clase define un tipo de datos y su comportamiento.
Objeto
Una clase permite crear objetos. Cada objeto creado posee los miembros descritos en su clase y puede ser manipulado a través de los métodos de dicha clase. Un objeto es la instancia de una clase.
Cuando se declara una clase, se debe asociar un objeto a la clase para que pueda ser manipulado por todos los métodos de dicha clase.
Miembros
Un miembro es un dato (o parámetro) del objeto.
Métodos
Un método permite actuar sobre el objeto para modificar sus miembros, por ejemplo.
Un método es un procedimiento. Funciona como un procedimiento estándar de WLanguage.
Herencia
La herencia permite incluir las características de una clase existente (clase base) en una nueva clase (clase derivada). La herencia permite crear un nuevo tipo de datos a partir de un tipo conocido para agregarle características o modificar su comportamiento. Por lo tanto, la clase base no se modificará. Una clase puede heredar de otra y convertirse en una subclase.
Los objetos de una clase derivada pueden acceder a todos los métodos, miembros y propiedades de las clases ancestros. Es como si estos métodos, miembros y propiedades formaran parte de la clase derivada.
Constructor y Destructor
Constructor y Destructor son dos conceptos importantes que permiten llamar automáticamente a los métodos de inicialización cuando se crea (instancia) o destruye (elimina) el objeto que representa la clase. Estos métodos se crean automáticamente cuando se crea la clase. De forma predeterminada, el código de estos métodos está vacío.
  • El método Constructor de la clase se llama automáticamente cuando se declara (instancia) un objeto del mismo tipo que la clase.
  • El método Destructor de la clase se llama automáticamente cuando se destruye (elimina) un objeto del mismo tipo que la clase. La ejecución del método Destructor depende del tiempo de vida del objeto según como haya sido declarado (global o local),
Encapsulación de datos
La encapsulación de datos garantiza que los datos pertenecientes al objeto no sean modificados accidentalmente por funciones (métodos) externas al objeto.
Esto permite evitar que el usuario de un objeto acceda a algunos o a todos sus miembros. Los miembros cuyo acceso no está permitido se denominan miembros privados.
Solo es posible acceder a los miembros privados desde los métodos previstos para ello en la clase.
Ejemplo simple

Crear una clase

Vamos a crear una clase que representa un producto y que contiene miembros y métodos. Esta clase será instanciada y utilizada por un procedimiento.
Para completar los ejercicios de esta lección, trabajaremos con el proyecto "WLanguage" que utilizamos en la lección anterior.
Si es necesario, abra el proyecto "WLanguage" que creó en la primera lección de este tutorial (consulte el párrafo Un proyecto para descubrir WLanguage de la lección 1).
Primero crearemos la clase CProduct:
  1. En la pestaña "Inicio", en el grupo "General", haga clic en "Nuevo".
  2. En la ventana que aparece, haga clic en "Código" y luego en "Clase".
  3. Especifique el nombre de la clase (CProduct en este caso).
  4. Valide. Enseguida aparece el código WLanguage de la clase. Este código está compuesto por tres secciones:
    • Declaración
    • Constructor
    • Destructor
  5. Introduzca el siguiente código en el evento "Declaración":
    CProduct is Class

    PUBLIC
    mg_StockWarningThreshold is int = 20

    PRIVATE
    m_Reference is string
    m_Description is string
    m_Stock is int
    END

    // Stock status
    StockStatus is Enumération
    STOCK_EMPTY 
    STOCK_WARNING
    STOCK_OK
    END
    Este código de declaración contiene:
    • La declaración de la clase. Esta clase contiene:
      • un miembro público que corresponde al umbral de alerta de las existencias. Este miembro es público porque esta información es la misma para todos los productos.
      • tres miembros privados: la referencia del producto, su descripción y el número de existencias.
    • La declaración de una enumeración. Esta enumeración permite gestionar el estado de las existencias. Esta enumeración se debe declarar en el código de declaración de la clase para que pueda ser utilizada por uno de los métodos de la clase.
  6. Guarde la clase (Ctrl + S).

Crear propiedades

Para utilizar miembros privados desde afuera de la clase, deben estar asociados a ciertas propiedades (Getter y Setter). Vamos a crear estas propiedades.
Para crear las propiedades asociadas al miembro "m_Reference":
  1. En el panel "Explorador de proyectos" (a la izquierda del entorno):
    • Despliegue "Clases", y luego despliegue "CProduct". Los diferentes elementos de la clase aparecen en el panel "Explorador de proyectos".
    • Despliegue "Miembros".
  2. Seleccione el miembro "m_Reference".
  3. Haga clic derecho para abrir el menú contextual y seleccione "Generar propiedad". La ventana que aparece permite definir las características de la propiedad:
    • El nombre de la propiedad.
    • El alcance de la propiedad. Se pueden combinar varias opciones. La propiedad puede ser:
      • Pública, protegida, restringida, protegida restringida o privada.
      • Abstracta o global.
    • El modo de acceso a la propiedad (lectura y/o escritura).
    • El rol de la propiedad: No definido, lógica de negocio o UI.
  4. Escriba "Reference" en el nombre de la propiedad y valide.
  5. Las propiedades de lectura y escritura se crean automáticamente con el código WLanguage correspondiente.
Observación: Para obtener más información sobre cómo crear y declarar métodos de clase, consulte Crear métodos de clase.
Repita estos pasos para generar:
  • la propiedad Description asociada al miembro m_Description,
  • la propiedad Stock asociada al miembro m_Stock.

Crear métodos

Ahora vamos a crear los métodos asociados a la clase. En nuestro ejemplo, crearemos 2 métodos:
  • Un método para agregar productos al inventario actual: AddStock.
  • Un método para conocer el estado de las existencias: StatusOfStock.
Para crear el método AddStock:
  1. En el panel "Explorador de proyectos", seleccione la clase CProduct.
  2. Haga clic derecho para abrir el menú contextual y seleccione "Nuevo método". La ventana que aparece permite definir las características del método. Escriba "AddStock" en el nombre del método y valide.
    La sintaxis es la misma para los métodos de clase y los procedimientos.
  3. El editor de código muestra el método. Escriba el siguiente código:
    PROCÉDURE AddStock(LOCAL AdditionalStock is int): boolean

    // The stock passed as parameter must be valid
    IF AdditionalStock < 0 THEN
    // Cannot add negative stock
    RESULT False
    END

    // Increase current stock with additional stock
    m_Stock += AdditionalStock

    // Added successfully
    RETURN True
    Analicemos este código WLanguage:
    • El método AddStock espera un entero como parámetro y devuelve un booleano.
    • Se evalúa el valor de las existencias. Si el valor de las existencias es negativo, el método devuelve False: las existencias no se actualizan.
    • Si el valor es positivo, las existencias incrementan.
Puede repetir los mismos pasos para crear el método StatusOfStock. El código de este método es el siguiente:
PROCÉDURE StatusOfStock(): StockStatus 

// If the stock is empty
IF m_Stock = 0 THEN
RETURN STOCK_EMPTY
END

// If stock quantity is below warning threshold
IF m_Stock <= mg_StockWarningThreshold THEN
RETURN STOCK_WARNING
END

// Stock is OK
RETURN STOCK_OK
Este código utiliza la enumeración StockStatus declarada en el código de declaración de la clase.
Hemos terminado la clase. Ahora, vamos a utilizarla.

Declarar y manipular objetos

Los objetos se declaran al mismo tiempo que las otras variables. Para nuestro ejemplo, declararemos un objeto en el código de inicialización del proyecto.
Para abrir el código de inicialización del proyecto:
  1. Haga clic derecho en la "P" que se encuentra junto a las pestañas de elementos abiertos. El menú contextual se abre.
  2. Seleccione "Código del elemento".
  3. El editor de código muestra los diferentes eventos asociados al proyecto.
  4. Borre el código de inicialización y escriba el siguiente código:
    AProduct is CProduct

    AProduct.Reference = "REF-123"
    AProduct.Description = "My product"

    Este código declara e instancia un objeto. Los valores se asignan a las propiedades mediante la siguiente sintaxis:
    <Object name>.<Property name> = Value
  5. Agregue las siguientes líneas a este código:
    • Llamada al método AddStock:
      AProduct.AddStock(500)
    • Lectura de propiedades:
      Trace(AProduct.Reference + " " + AProduct.Description + " " + AProduct.Stock)
    • Enumeración:
      IF AProduct.StatusOfStock() = CProduct.STOCK_OK THEN
      Trace("Enough units in stock")
      ELSE
      Trace("Not enough units in stock")
      END
  6. Probemos este código: haga clic en Probar proyecto en los botones de acceso rápido.
  7. Si es necesario, abra el panel "Traza del depurador" para ver el resultado: en la pestaña "Inicio", en el grupo "Entorno", despliegue "Paneles", seleccione "Paneles" y, a continuación, haga clic en "Traza del depurador".
  8. El panel "Traza del depurador" muestra la siguiente información:
    REF-123 My product 500
    Enough units in stock
    Vemos los detalles del producto y el estado de las existencias.

Uso del constructor

Para terminar esta introducción de la POO con WINDEV, vamos a modificar el código para utilizar el constructor. El constructor nos permitirá inicializar el umbral de alerta.

Abra el código de la clase: haga doble clic en CProduct en el panel "Explorador de proyectos", por ejemplo.
Modifique la declaración de la clase reemplazando la siguiente línea de código:
mg_StockWarningThreshold is int = 20
por
mg_StockWarningThreshold is int
Modifique el constructor de la clase.
PROCÉDURE Constructor(StockWarningThreshold is int)
mg_StockWarningThreshold = StockWarningThreshold
Vaya al código de inicialización del proyecto.
  1. Vamos a modificar:
    • la instanciación de la clase. Reemplace la siguiente línea de código:
      AProduct is CProduct
      por:
      AProduct is CProduct(20)
      Como ya hemos mencionado, el método Constructor se invoca automáticamente al declarar (instanciar) la clase. Ahora el constructor espera un parámetro: debemos pasar el valor del parámetro en la instanciación. En este ejemplo, la cantidad máxima es 20.
    • la llamada al método. Reemplace la siguiente línea de código:
      AProduct.AddStock(500)
      por:
      AProduct.AddStock(10)
      La cantidad de existencias es 10.
  2. Probemos los cambios (Haga clic en "GO" en los íconos de acceso rápido).
  3. El panel "Traza del depurador" muestra la siguiente información:
    REF-123 My product 10
    Not enough units in stock
En resumen
En esta lección, vimos cómo crear una clase, sus miembros y cómo utilizarlos.
Para saber más sobre la programación orientada a objetos, consulte las siguientes páginas:
Lección anteriorTabla de contenido
Versión mínima requerida
  • Versión 2024
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 05/12/2023

Señalar un error o enviar una sugerencia | Ayuda local