PC SOFT

AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

¡Nueva funcionalidad de WINDEV Mobile 27!
  • Esta lección abarcará los siguientes temas
  • Conceptos
  • Conceptos de POO
  • Ejemplo simple
  • Crear una clase
  • Declarar y manipular objetos
  • Uso del constructor
  • Conclusión
Lección 3.9. POO
Esta lección abarcará los siguientes temas
  • Conceptos de la Programación Orientada a Objetos.
  • Ejemplos de declaración de objetos.
Duración de la lección

Tiempo estimado: 40 min
Lección anteriorTabla de contenidoSiguiente lección
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.
  • 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 Enumeration
      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).
  • 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 "CProduct". Los diferentes elementos de la clase aparecen en el panel "Explorador de proyectos".
    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. Escriba "Reference" en el nombre de la propiedad y valide.
    4. Las propiedades de lectura y escritura se crean automáticamente con el código WLanguage correspondiente.
  • Repita estos pasos para generar:
    • la propiedad Description asociada al miembro m_Description,
    • la propiedad Stock asociada al miembro m_Stock.
  • 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.

      Nota

      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:
      PROCEDURE 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:
    PROCEDURE StatusOfStock(): StockStatus
     
    // If the stock is empty
    IF m_Stock = 0 THEN
    RESULT STOCK_EMPTY
    END
     
    // If stock quantity is below warning threshold
    IF m_Stock <= mg_StockWarningThreshold THEN
    RESULT STOCK_WARNING
    END
     
    // Stock is OK
    RESULT 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" y seleccione "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.
    PROCEDURE 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
Conclusión
En esta lección, vimos cómo crear una clase, sus miembros y cómo utilizarlos.
En la siguiente lección veremos algunos consejos para utilizar el editor de código.
Lección anteriorTabla de contenidoSiguiente lección
Versión mínima requerida
  • Versión 27
Comentarios
Haga clic en [Agregar] para publicar un comentario