2010-06-29 12 views
7

Estoy creando algún material para OOP (programación orientada a objetos) en VBA. ¿Alguien me puede enumerar los conceptos de OOP que están disponibles en VBA?Lista de conceptos de OOP disponibles

Por ejemplo, a partir de mi lectura descubrí que:

  1. herencia no está disponible en VBA.
  2. El concepto de encapsulación está allí, ya que puede usar el modificador de acceso "privado" y construir una propiedad pública.
+0

http://stackoverflow.com/documentation/vba/5357/object-oriented-vba – Slai

Respuesta

4

Estas son algunas observaciones que he hecho mientras se trabaja con conceptos de POO en VBA:

  • No se puede sobrecargar métodos en VBA. Sin embargo, tiene parámetros opcionales a su disposición, para bien o para mal.
  • Tiene un método Class_Initialize sin parámetros que se invoca cuando se crea una instancia del objeto, pero no se puede sobrecargar para controlar los parámetros. Si desea obligar a su clase a no ser "completamente funcional" sin tener determinadas propiedades establecidas, tendrá que escribir su propia forma de hacerlo.
  • El entorno de edición VB6 y VBA te obliga a crear "archivos de clase" y mantener cada clase en un archivo separado, que son distintos de los módulos.
  • Las clases y los módulos pueden tener campos públicos y privados. Un campo público en un módulo es esencialmente una variable global.
  • Los módulos son funcionalmente similares a las clases estáticas en C#. El código público se puede llamar desde los módulos en cualquier lugar dentro de su aplicación.

El paradigma VB6/VBA visualiza las clases como una manera de encapsular la funcionalidad y las propiedades de un objeto. En este sentido, los objetos de VB6/VBA existen como cualquier otro entorno de OOP básico y su uso y diseño deben fomentarse cuando corresponda.

Sin embargo, la falta de varias características clave de OOP hace que VB6/VBA no llegue a ser capaz de implementar completamente un patrón de diseño de OOP completo.

+0

VBA realmente admite interfaces, una clase abstracta llamada IFoo se puede implementar utilizando 'Implementos IFoo' en cualquier cantidad de otras clases, todas de los cuales se puede pasar como IFoos. –

+0

@Alex Eso es correcto.Me había olvidado de las interfaces en VB6 porque, si no recuerdo mal, su uso todavía es bastante limitado. –

5

VBA admite algunos conceptos OO, y otros no.

con VBA puede crear sus propias clases, y puede crear objetos a partir de esas clases. Sin embargo, VBA NO es compatible con herencia, y no admite verdaderamente "polimorfismo" en el significado clásico del término como se usa en lenguajes OO como C++ o .NET.

Las clases de VBA son compatibles con la encapsulación y la abstracción.

0

Una deficiencia particular en VBA es la encapsulación de matrices de objetos.

Puede tener matrices de objetos, pero no puede bajar más de un nivel. Existen soluciones provisionales, por ejemplo, al usar el tipo de Variant pero luego pierde la seguridad del tipo. Esto hace que resulte engorroso trabajar con estructuras jerárquicas de objetos, mientras que es posible que termine con un código intrincado.

Cuestiones relacionadas