|
|
|
|
- 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
Tutorial - Fundamentos de WLanguage
Abordaremos los siguientes temas: - Conceptos de la Programación Orientada a Objetos.
- Ejemplos de declaración de objetos.
30 min 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. 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: - En la pestaña "Inicio", en el grupo "General", haga clic en "Nuevo".
- En la ventana que aparece, haga clic en "Código" y luego en "Clase".
- Especifique el nombre de la clase (CProduct en este caso).
- Valide. Enseguida aparece el código WLanguage de la clase. Este código está compuesto por tres secciones:
- Declaración
- Constructor
- Destructor
- 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
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.
- 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": - 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".
- Seleccione el miembro "m_Reference".
- 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.
- Escriba "Reference" en el nombre de la propiedad y valide.
- 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: - En el panel "Explorador de proyectos", seleccione la clase CProduct.
- 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. - El editor de código muestra el método. Escriba el siguiente código:
PROCÉDURE AddStock(LOCAL AdditionalStock is int): boolean
IF AdditionalStock < 0 THEN
RESULT False
END
m_Stock += AdditionalStock
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 m_Stock = 0 THEN
RETURN STOCK_EMPTY
END
IF m_Stock <= mg_StockWarningThreshold THEN
RETURN STOCK_WARNING
END
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: - Haga clic derecho en la "P" que se encuentra junto a las pestañas de elementos abiertos. El menú contextual se abre.
- Seleccione "Código del elemento".
- El editor de código muestra los diferentes eventos asociados al proyecto.
- 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 - Agregue las siguientes líneas a este código:
- Llamada al método AddStock:
- 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
- Probemos este código: haga clic en en los botones de acceso rápido.
- 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".
- 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. - Vamos a modificar:
- la instanciación de la clase. Reemplace la siguiente línea de código:
por: 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:
por: La cantidad de existencias es 10.
- Probemos los cambios (Haga clic en "GO" en los íconos de acceso rápido).
- El panel "Traza del depurador" muestra la siguiente información:
REF-123 My product 10 Not enough units in stock
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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|