Develop Object-Oriented Code in Finance and Operations Apps
Develop Object-Oriented Code in Finance and Operations Apps
Introducción
Los objetos tienen atributos (datos) y comportamiento (métodos).
Al desarrollar con un lenguaje orientado a objetos, primero deberá definir los objetos a
manipular y cómo se relacionan entre sí. Las aplicaciones de Finance and Operations se
desarrollan utilizando el lenguaje orientado a objetos X++, que proporciona clases de
sistema para una amplia gama de áreas de programación de sistemas.
Herencia
Para comprender mejor el concepto de herencia en la programación orientada a objetos,
revisemos un ejemplo del mundo real. En este ejemplo, Vehicle es la clase principal. Hay
muchos tipos diferentes de vehículos, por ejemplo: automóviles, autobuses y camiones.
En este escenario, Vehicle es la clase principal. Los automóviles, autobuses y camiones
son clases derivadas que heredan del vehículo. La clase Vehicle tiene características que
se comparten entre todos los tipos de vehículos (velocidad, color y marchas, por ejemplo).
Las características para cada uno de los tipos de vehículos pueden ser diferentes. Por
ejemplo, un camión puede tener tracción total, pero un automóvil no.
En el ejemplo siguiente se muestra cómo una clase utiliza la herencia. La clase Car
extiende la clase Vehicle para obtener la altura y el ancho, pero también agrega el número
de pasajeros variable.
Abstracto
Las clases abstractas se identifican mediante la palabra clave abstract. No se pueden crear
instancias, pero requieren una subclase heredada de la clase abstracta. Las clases
abstractas se utilizan para implementar un concepto que luego completará la subclase.
Los métodos abstractos también se pueden declarar en clases abstractas. Los métodos
abstractos no permiten código ni declaraciones en el método. Una subclase debe extender
la clase abstracta para usar el método abstracto.
Ejemplo
La clase Coche amplía la clase abstracta Vehículo. Esto permite que la clase Car anule el
método printInfo () y le permite agregar funcionalidad al método operar () que no se
incluyó en la clase abstracta.
Usar atributos
Los atributos representan o almacenan metadatos sobre el comportamiento de clases y
métodos. Se puede adjuntar un atributo simplemente escribiendo el nombre del atributo
que está encerrado entre corchetes antes de la declaración de class / function donde debe
aplicarse.
Ejemplo
Clases de atributos
Los atributos también se pueden crear utilizando clases de atributos. Para crear una clase
de atributo, amplíe la clase SysAttribute agregando extender SysAttribute al final de su
declaración de clase. A continuación, puede decorar una clase con el atributo que se creó
a partir de la clase de atributo. Puede especificar los parámetros de atributo del
constructor. En el siguiente código, se crea la clase de atributo PracticeAttribute y luego
la clase RegularClass usa PracticeAttribute como atributo.
Ejemplo
Ejemplo
El siguiente ejemplo de código muestra cómo se debe declarar la clase para usar CoC.
Cuando se llama al método ExampleClass.doSomething (), el código primero ejecutará
todo el código antes de la siguiente palabra clave. Luego, se ejecutará el código original
en el método ExampleClass.doSomething (). Finalmente, se ejecutará todo el código
después de la siguiente palabra clave.
Ciertos métodos no se pueden ajustar mediante CoC. Si el método utiliza un atributo
hookableque se establece en falso, [hookable (false)], o un atributo hookable que se
establece en falso, [hookable (false)], el método no se puede envolver. Los métodos que
utilizan la palabra clave final no se pueden incluir en una clase de extensión. Los métodos
privados también están excluidos de la extensibilidad.
Implementar identificadores de
acceso y alcance de X++
El alcance es el área donde se encuentra un elemento o se puede acceder a él. Las variables
y métodos de X ++ están dentro de un alcance definido. El alcance se puede establecer
mediante la colocación de la declaración y el uso de identificadores de acceso.
Los identificadores de acceso son [public], [protected] y [private].
Public: los métodos que se declaran como public se pueden llamar desde cualquier lugar
donde la clase sea accesible. Además, un método público puede ser anulado por una
subclase a menos que el método se declare como final.
Protected: los métodos que están protegidos se pueden anular en subclases. Los métodos
que se declaran como protegidos solo se pueden llamar desde:
• Métodos en la clase.
• Métodos en una subclase de la clase que contiene el método protegido.
Private: los métodos que se declaran como privados solo se pueden llamar desde métodos
en la clase donde se declara el método privado. No se puede anular ningún método
privado en una subclase. Cuando crea un nuevo método, la palabra clave de acceso
predeterminada que aparece en el editor de código es privada. Este es el valor
predeterminado más conservador para máxima seguridad.
Internal
Internal es una palabra clave en X ++. Tiene la misma semántica que en C #, consulte
interno (Referencia de C #).
Cuando selecciona una clase o método como interno, solo se puede acceder desde dentro
del modelo donde está definido.
Variables de instancia
Las variables de instancia tienen un gran alcance y también se conocen como campos de
clase en X ++. Estas variables se declaran en la declaración de la clase y se puede acceder
a ellas desde cualquier método de la clase y subclases que extienden la clase, si están
declaradas públicas o protegidas.
Variables locales
Las variables locales tienen un alcance pequeño. Estas variables se definen en un método
y solo se puede acceder a ellas en ese método.
Los parámetros son un tipo de variable local que se define en un método.
Para utilizar una variable de un ámbito a otro ámbito, la variable debe pasarse mediante
el uso de parámetros. Los métodos pueden utilizar varios parámetros. Los parámetros se
tratan como variables locales y se inicializan con el valor del parámetro en la llamada al
método. En el siguiente ejemplo, el método de clase tiene dos parámetros. Esto le da al
método1 acceso a cuatro variables. Se puede acceder a las variables de instancia a y b, y
los parámetros x e y actúan como variables locales. El uso de parámetros permite asignar
valores a esos parámetros cuando se llama al método. Si se llama al método1 mediante el
código Test.method1 (a, b);, a la variable “x” se le asignará el valor Car y a la variable
“y” se le asignará el valor 20. Luego, puede usar los valores de las variables de parámetro
para asignar valores a las variables de instancia c y d.
Tenga en cuenta que cuando pasa un valor a través de parámetros, por defecto no cambia
el valor de la variable original. El término para esto es "llamada por valor" en
contraposición a "llamada por referencia". Solo se cambia la variable local.
Ejemplo
En el siguiente ejemplo, el método2 tiene una variable local a con un valor de 5. La
primera instrucción info () muestra el valor de a, que es 5. Llama al método1 y pasa el
valor de su variable local a. Method1 ahora tiene una variable local diferente a, con el
valor de 5. Method1 luego incrementa el valor en uno, haciendo a el valor de 6. La
declaración info () muestra el valor de 6. El código volverá a method2 y ejecute la segunda
instrucción info (). Esto mostrará un valor de 5. Esto se debe a que, aunque el nombre de
la variable es el mismo, el alcance es único para sus métodos respectivos.
Interfaces
Una interfaz es una especificación para un conjunto de métodos de instancia públicos.
Una interfaz define y refuerza las similitudes entre clases no relacionadas sin tener que
derivar una clase de la otra. Todas las interfaces son públicas, incluso si no agrega
explícitamente la palabra clave pública delante de la palabra clave de la interfaz en el
código classDeclaration. Los métodos de una interfaz también son públicos.
Para crear una interfaz, siga estos pasos:
Ejemplo de interfaz
En el siguiente ejemplo, una clase de automóvil implementa una interfaz IDrivable. La
palabra clave “is” es compatible y le permite probar si una clase implementa una interfaz.
X++
public interface IDrivable
{
public int getSpeed()
{
}
if (myAutomobile is IDrivable)
{
yourIDrivable = myAutomobile;
yourIDrivable.setSpeed(42);
sTemp = int2str(yourIDrivable.getSpeed());
}
Global::info(sTemp);
return;
}
}
• Salva la clase.
• Construye el proyecto.