te voy a dar mi opinión, pero te aviso que soy probablemente el mayor enemigo del progreso por ahí. ;) Dicho esto, he escrito varios proyectos medianos en OOABL, así que tengo algo de experiencia en el área. Estas son algunas cosas que escribí, para que lo sepas No estoy hablando de mi sombrero: protocolo marco
- STOMP para clientes y servidores
- un ORM sencilla imitando ActiveRecord
- una interfaz ABL compilador para la organización estaba en (backend y frontend)
- una biblioteca para la creación de documentos de Excel y Word (serialización de ellos utilizando los esquemas XML de MS Office 2003; ninguna de esas cosas COM tonta)
- un cliente de correo electrónico que pueden enviar mensajes de correo electrónico usando múltiples strategies
Pros: OOABL
- Si es absolutamente necesario escribir código progreso, es una gran opción para la creación de código reutilizable.
- Gran manera de limpiar una base de código de procedimiento existente
OOABL Contras:
- jerarquías de clases son limitadas; no puede crear interfaces (sub-) heredadas en 10.2B (creo que esto se agregará en 11). Las versiones anteriores de OpenEdge tienen otras limitaciones como la falta de clases abstractas . Esto limita su capacidad para crear un diseño OO limpio y le hará daño cuando comience a crear cosas no triviales.
- El manejo de errores es una mierda -
CATCH
/THROW
no le permite arrojar sus errores personalizados y forzar a las personas que llaman a atraparlos. La compatibilidad con versiones anteriores evita que esto siga evolucionando, por lo que dudo que vaya a mejorar.
- huella de memoria objeto es grande, y no hay AVM depuración herramientas para descubrir el motivo por (tienes que amar a estos sistemas cerrados!)
- La recolección de basura no fue inexistente 'hasta 10.2A, y todavía tiene algunos errores incluso en 11 (vea el foro oficial de OE para algunos ejemplos)
- La programación de red (con tomas de corriente) es un PITA; debe ejecutar un procedimiento persistente independiente para administrar el socket. Creo que la programación en OOABL era un PITA en general; Recuerdo haber recibido muchos errores sobre "entornos con ventana" o algo similar cuando intentaba usarlos.
PUBLISH
/SUBSCRIBE
tampoco funcionó, si la memoria sirve.
- función de su entorno, las revisiones de código puede ser difícil, ya que la mayoría de los desarrolladores de progreso no hacen OOABL lo que no puede entender su código
- Si el punto anterior es cierto, es posible que se enfrentan a la resistencia activa de desarrolladores arraigados que se sienten amenazados teniendo que aprender cosas
OO es todo sobre la construcción de piezas pequeñas, reutilizables que se pueden combinar para hacer un conjunto mayor. Un gran problema con OOABL es que la parte "ABL" te arrastra hacia abajo con sus gruesas estructuras de datos y la falta de enumeradores, lo que te impide ser realmente capaz de construir cosas realmente bellas con ella. Lamentablemente, dado que es un lenguaje cerrado, no puede simplemente dejar de lado la mano que le asignaron y crear sus propios datos o estructuras de control externos.
Ahora, teóricamente es posible para tratar de construir algunas de estas cosas utilizando MEMPTR, arreglos fijos (EXTENSIÓN) y tal vez WORK-TABLE. Sin embargo, lo intenté en 10.1C y el diseño se vino abajo debido a la falta de herencia de interfaces y clases abstractas, y como esperaba, el rendimiento fue bastante malo. La última parte puede deberse a mi poca capacidad, pero sospecho que es una limitación de implementación que sería casi imposible de superar.
La línea inferior es usar OOABL si es absolutamente necesario que esté codificando en OpenEdge; es mejor que ABL de procedimiento y los bordes ásperos se vuelven ligeramente más suaves después de cada versión iterativa de OpenEdge. Sin embargo, nunca será un lenguaje hermoso (OO o de otro tipo).
Si desea aprender la programación adecuada orientada a objetos y no está restringida a ABL, le recomendaría consultar un lenguaje que trate objetos como ciudadanos de primera clase como Ruby o Smalltalk.
¿Qué versión de Progress/OpenEdge estás usando? –
usando 10.2b .... – Bill
Una desventaja obvia si usa OOP es cuando intenta generar .NET Proxy usando ProxyGen para su clase. Generador de Proxy no permite CLS como entrada y usted tendrá que escribir el procedimiento de puerta de enlace para exponerlos. [Artículo de KB] (http://knowledgebase.progress.com/articles/Article/P181115?q=Can+y++instantiate+a+4GL+class+instance+from+a+.NET+client%3F&l=en_US&fs=Search&pn = 1) – kiran