JSL orientado a objetos - ¿Ejemplos?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />A raíz de la gran charla que dio Drew Foglia en la conferencia de descubrimiento de Europa ( JSL orientado a objetos: técnicas para escribir código JSL mantenible/ampliable ), estoy tratando de escribir mi primer JSL orientado a objetos.
Puedo usar ObjectClass.jsl (de los archivos de ejemplo básicos proporcionados por Drew) para obtener y establecer propiedades en un objeto que he creado.
Mi pregunta es si alguien tiene algunos ejemplos simples que puedan compartir para ver las formas en que se implementa esta idea. Por ejemplo, ¿cómo se vería el siguiente ejemplo como objetos (considerando que en el mundo real es probable que desee almacenar detalles como nombre de la tabla, No. cols, nombres de columnas, No. filas, columnas de etiquetas, etc. para cada tabla)?
NombresPredeterminadoHastaAquí(1);
dt1 = Abrir("$SAMPLE_DATA/Cars.jmp");
dt2 = Abrir("$SAMPLE_DATA/Cars 1993.JMP");
// unir tablas (supongamos que se usó alguna función para encontrar los nombres de columna coincidentes)
dt3 = Tabla de datos (dt1) << Unirse (
Con (Tabla de datos (dt2)),
Fusionar columnas con el mismo nombre,
Por columnas coincidentes ( Columna (dt1,1) = Columna (dt2,1), Columna (dt1,2) = Columna (dt2,2) ),
Soltar múltiplos (0, 0),
Incluir no coincidencias (0, 0),
Conservar el orden de la mesa principal( 1 )
);
//mostrar resultado
win1 = dt3 << Generador de gráficos (
Tamaño (534, 447),
Mostrar panel de control ( 0 ),
Variables( X( :Tamaño ), Y( :Nombre( "Base de rueda (pulgadas)" ) ) ),
Elementos (Puntos (X, Y, Leyenda (38)), Diagrama de caja (X, Y, Leyenda (39)))
);
//organizar
win1 << Al cerrar (dt1 << Cerrar ventana; dt2 << Cerrar ventana; dt3 << Cerrar ventana (No guardar));
¿Cuándo decidiría crear una nueva clase? ¡La ObjectClass genérica funcionaría bien para las tablas siempre que pueda recordar qué propiedad he asignado a qué clave!
Gracias,
Esteban
Re: JSL orientado a objetos - ¿Ejemplos?dibujófoglia
En primer lugar, me encanta el detalle que pones en esto.Si no le importa que haga de abogado del diablo, ¿por qué crea el espacio de nombres superior cuando la función devuelve un espacio de nombres?Los espacios de nombres no se acumulan y en todos sus ejemplos, excepto en uno, la única función en ese espacio de nombres es una función de creación de instancias.Solo creo que la clase debería ser instanciable por nombre y todo debería estar dentro de ella, en lugar de ObjectClass: newObject().Solo tengo curiosidad por tu proceso de pensamiento.
Me he estado burlando de las cosas orientadas a objetos por un tiempo, pero su "this=namespace(expr(ns<
Gracias,
Vince
Re: JSL orientado a objetos - ¿Ejemplos?stephen.pearson
Sé dibujófoglia Ya respondí su pregunta, sin embargo, estaba en medio de la elaboración de una respuesta, así que la expondré por lo que vale.
Primero, en mi opinión, la tabla de datos en sí misma ya puede considerarse como un objeto.
dt1 = NewTable() - Crea una nueva "instancia" de Datatable
ShowProperties(dt1) - Muestra todas las "propiedades" y "métodos" para el objeto Datatable dt1.
Uno puede pensar en "extender" el Datatable Object existente con propiedades y métodos adicionales, como en la respuesta de Drew. Pensé en tener características adicionales como:
1. Manejador de estado de fila.
2. Columna y Fila, Detección Agregar/Eliminar.
3. Historial de cambios de celdas de la tabla.
4. Cuadro de datos (cuadro de visualización)
Entonces, podría verse un posible "constructor" para DatatableObject, donde se declaran las variables y funciones miembro. (tenga en cuenta la Expr( New Namespace() ).
La idea detrás de declarar el objeto de esta manera no es solo establecer una entidad replicable, sino que también permite ver claramente las funciones y los nombres de expresión que se podrán usar una vez que estén completamente definidos.

Mi versión de NewDatatableObject (listado parcial). Aquí es donde se definen realmente las funciones miembro:


Entonces, por ejemplo, creamos 2 instancias separadas de DatatableObject:

Estas tablas ahora tienen propiedades "extendidas" integradas. En este ejemplo, se realiza un seguimiento de algunas acciones de la tabla, como detectar la selección de filas y las eliminaciones de columnas/filas.


Uno puede imaginar una gran cantidad de otras funciones útiles también, que podrían implementarse utilizando este método.
Re: JSL orientado a objetos - ¿Ejemplos?hola, felipe
Es muy sutil. Si observa la línea 30 de la definición de DataTableClass, verá esto:

super se define como una variable local (en el ámbito del ciclo de vida de la función) y se le asigna la DEFINICIÓN de la función deleteChildReferences ya existente.
Lee eso de nuevo.
Déjame decirlo de otra manera. Ya existe una función, deleteChildReferences, en el espacio de nombres (definida en ObjectClass.jsl que se incluye y se asigna cuando se ejecuta la llamada ObjectClass:newObject() en la línea 6). En DataTableClass, la línea 29 está reemplazando esa asignación. Sin embargo, en el proceso de reasignación, estamos creando una variable local "super" que contiene una referencia a la definición de función original, la declarada en ObjectClass. De esta manera, estamos anulando el comportamiento de esa función, agregando código para cerrar la referencia de la tabla en este caso, y luego aún podemos llamar a la declaración de la función original usando la llamada super().
Re: JSL orientado a objetos - ¿Ejemplos?dibujófoglia ,
Eso fue realmente útil, gracias. Mi proyecto actual tiene interacciones no lineales, por lo que creo que este enfoque me permitirá hacer malabarismos con más facilidad con los metadatos que estoy recopilando de los usuarios.
Re: JSL orientado a objetos - ¿Ejemplos?dibujófoglia
Perdóname si me perdí esto, pero ¿dónde está "super()?" definido?
Re: JSL orientado a objetos - ¿Ejemplos?stephen.pearson ,
Pido disculpas por tardar tanto en responder. Daré un ejemplo de una definición de "clase" y su uso, para el ejemplo que proporciona. Es importante considerar si desea/necesita esto. Como usted señaló, "¿cuándo decidiría hacer una nueva clase?" Como recordará de mi presentación, sugerí que se debe considerar el tamaño del proyecto, el desarrollo colaborativo, la longevidad, la necesidad de reutilización, etc. antes de determinar si las construcciones OO son el mejor enfoque. voy a responder a msharp 's comentarios con más sobre ese tema.
Volvamos a tu ejemplo. Usando ObjectClass como clase principal, aunque no es obligatorio, podríamos crear un DataTableClass:

El uso de los campos para las instancias de DataTableClass se vería así:

Para un ejemplo tan simple, no habría ninguna razón para usar las construcciones OO. Sin embargo, si tuviera que considerar un caso en el que desea administrar colecciones de tablas, permitir que los usuarios y los sistemas externos agreguen comentarios y otros atributos, pase estas colecciones, procese y responda a eventos determinados, planifique futuras expansiones y extensiones, establezca un "contrato" por el cual otros pueden consumir fácilmente estas tablas, etc. Entonces, usar construcciones OO como estas es muy beneficioso.
Re: JSL orientado a objetos - ¿Ejemplos?No me malinterpretes.OOP es una gran metodología que produce un código excelente, sin embargo, FP es lo mismo.Si es un programador experimentado, podrá producir la calidad de código necesaria de forma FP y w Escribir pseudo-OOP es más un ejercicio de si se puede hacer que si se debe hacer.Si eres un programador intermedio que solo sabe programación orientada a objetos y quieres codificar de una manera familiar, te recomiendo que aprendas FP, ya que te ayudará a crecer, pensar de manera diferente y programar mejor en muchos idiomas.Si eres un programador intermedio que solo conoce FP y quiere aprender OOP para ampliar tus horizontes, te recomendaría comenzar aprendiendo otro idioma que realmente tenga clases y objetos implementados dentro del idioma.Si eres un programador novato que realmente no sabe nada, y acabas de escuchar que OOP es genial, sigue mi consejo y olvídalo por ahora.Especialmente si va a realizar secuencias de comandos principalmente en JSL.
Personalmente, esperaría hasta que JMP implemente clases y objetos, para que se pueda realizar la programación orientada a objetos real.No estoy seguro si está en su radar, pero estoy seguro de que sucederá, quiero decir, ahora tenemos clases y objetos en JavaScript.Nunca se sabe lo que traerá el futuro.
Re: JSL orientado a objetos - ¿Ejemplos?stephen.pearson ,
Me alegro mucho de ver a alguien más interesado en este tema. msharp es correcto decir que JSL NO es un lenguaje OOP. Pero, en el pasado reciente, he podido realizar construcciones "pseudo-OOP" en JSL. Estoy feliz de compartir mi trabajo contigo. Veré si puedo elaborar una respuesta adecuada a la pregunta que planteaste... Apoyar
phil
Re: JSL orientado a objetos - ¿Ejemplos?Solo mis 2 centavos: olvida todo lo que aprendiste en esa charla.
JSL NO es un lenguaje orientado a objetos.OOP es excelente para lenguajes que no tienen estructuras de datos integradas, pero está lejos de ser la única forma de programar.Sin embargo, la mayoría de los programadores que provienen de un entorno de Java, C ++, C # no pueden entender la programación de una manera que no sea OOP.En JMP, es mejor dejar las estructuras de datos para las tablas de datos.Esto viene con ventajas y desventajas.En mi opinión, PUEDE combinar un objeto Frankenstein de la tabla de datos JSL, pero luego se queda con todos los inconvenientes y ninguno de los beneficios.
Que JSL I S bueno en es la programación funcional.JSL admite funciones Y expresiones.Puede hacer todo lo que necesita limpiamente usando programación funcional.Consulte este artículo para conocer algunos pros y contras que comparan los dos métodos de programación: códigonovato