JSL orientato agli oggetti - Esempi?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Facendo seguito al grande discorso che Drew Foglia ha tenuto alla discovery conference Europe ( JSL orientato agli oggetti - Tecniche per la scrittura di codice JSL manutenibile/estendibile ), sto cercando di scrivere il mio primo JSL orientato agli oggetti.
Sono in grado di utilizzare ObjectClass.jsl (dai file di esempio principali forniti da Drew) per ottenere e impostare le proprietà su un oggetto che ho creato.
La mia domanda è: qualcuno ha alcuni semplici esempi da condividere per vedere come viene implementata questa idea. Ad esempio, come potrebbe apparire il seguente esempio come oggetti (considerando che nel mondo reale probabilmente vorrò memorizzare dettagli come nome della tabella, NO. colonne, nomi di colonne, NO. righe, colonne di etichette ecc. per ogni tabella)?
NomiDefaultToHere(1);
dt1 = Open("$DATI_ESEMPIO/Auto.jmp");
dt2 = Open("$SAMPLE_DATA/Auto 1993.JMP");
// unisci le tabelle (supponiamo che sia stata utilizzata una funzione per trovare i nomi delle colonne corrispondenti)
dt3 = Tabella dati( dt1 ) << Join(
Con( Tabella dati( dt2 ) ),
Unisci colonne con lo stesso nome,
Corrispondendo alle colonne (Colonna(dt1,1) = Colonna(dt2,1), Colonna(dt1,2) = Colonna(dt2,2) ),
Rilascia multipli ( 0, 0 ),
Includi mancate corrispondenze( 0, 0 ),
Conserva l'ordine della tabella principale( 1 )
);
//visualizza il risultato
win1 = dt3 << Generatore di grafici(
Taglia (534, 447),
Mostra pannello di controllo( 0 ),
Variabili( X( :Size ), Y( :Name( "Interasse (pollici)" ) ) ),
Elementi( Punti( X, Y, Legenda( 38 ) ), Box Plot( X, Y, Legenda( 39 ) ) )
);
//riordinare
win1 << Alla chiusura (dt1 << Chiudi finestra; dt2 << Chiudi finestra; dt3 << Chiudi finestra (nessun salvataggio) );
Quando deciderei di creare una nuova classe? L'ObjectClass generico funzionerebbe bene per le tabelle a condizione che riesca a ricordare quale proprietà ho assegnato a quale chiave!
Grazie,
Stefano
Ri: JSL orientato agli oggetti - Esempi?drawfoglia
Prima di tutto, adoro i dettagli che hai messo in questo.Se non ti dispiace se faccio l'avvocato del diavolo, perché crei lo spazio dei nomi superiore quando la funzione restituisce uno spazio dei nomi?Gli spazi dei nomi non si accumulano e in tutti tranne uno dei tuoi esempi, l'unica funzione in quello spazio dei nomi è una funzione di istanza.Penso solo che la classe dovrebbe essere abilitata all'istanza per nome e tutto dovrebbe essere al suo interno, quindi invece di ObjectClass:newObject().Sono solo curioso del tuo modo di pensare.
Ho preso in giro cose orientate agli oggetti per un po ', ma il tuo "this=namespace(expr(ns<
Grazie,
Vinci
Ri: JSL orientato agli oggetti - Esempi?stephen.pearson
Lo so drawfoglia ho già risposto alla tua domanda, tuttavia, stavo elaborando una risposta, quindi la presenterò solo per quello che vale.
Innanzitutto, a mio parere il datatable stesso può già essere pensato come un oggetto.
dt1 = NewTable() - Crea una nuova "istanza" di Datatable
ShowProperties(dt1) - Mostra tutte le "proprietà" e i "metodi" per l'oggetto Datatable dt1.
Si può pensare di "estendere" l'oggetto Datatable esistente con proprietà e metodi aggiuntivi, come nella risposta di Drew. Ho pensato di avere funzionalità aggiuntive come:
1. Gestore dello stato di riga.
2. Rilevamento colonna e riga, aggiunta/eliminazione.
3. Cronologia delle modifiche alle celle della tabella.
4. Databox (casella di visualizzazione)
Quindi, potrebbe apparire un possibile "costruttore" per DatatableObject, in cui vengono dichiarate variabili e funzioni membro. (notare Expr( New Namespace() ).
L'idea alla base di dichiarare l'oggetto in questo modo, non è solo stabilire un'entità replicabile, ma permette anche di vedere chiaramente le funzioni ei nomi delle espressioni che diventeranno utilizzabili una volta che saranno completamente definiti.

La mia versione di NewDatatableObject (elenco parziale). Qui è dove le funzioni membro sono effettivamente definite:


Quindi, ad esempio, creiamo 2 istanze separate di DatatableObject:

Queste tabelle ora hanno proprietà "estese" incorporate. In questo esempio, vengono rilevate alcune azioni della tabella, come il rilevamento della selezione di righe e le eliminazioni di colonne/righe.


Si può immaginare anche una miriade di altre funzioni utili, che potrebbero essere implementate utilizzando questo metodo.
Ri: JSL orientato agli oggetti - Esempi?Ciao, Filippo
È molto sottile. Se guardi la riga 30 della definizione DataTableClass, vedrai questo:

super viene definito come una variabile locale (ambito del ciclo di vita della funzione) e viene assegnata la DEFINIZIONE della funzione deleteChildReferences già esistente.
Leggilo di nuovo.
Lasciatemelo dire in un altro modo. Esiste già una funzione, deleteChildReferences, nello spazio dei nomi (definito in ObjectClass.jsl che è incluso e viene assegnato quando viene eseguita la chiamata ObjectClass:newObject() sulla riga 6). In DataTableClass, la riga 29 sostituisce tale assegnazione. Tuttavia, nel processo di riassegnazione, stiamo creando una variabile locale "super" che contiene un riferimento alla definizione della funzione originale, quella dichiarata in ObjectClass. In questo modo, stiamo sovrascrivendo il comportamento di quella funzione, aggiungendo codice per chiudere il riferimento alla tabella in questo caso, e quindi ancora in grado di chiamare la dichiarazione della funzione originale usando la chiamata super().
Ri: JSL orientato agli oggetti - Esempi?drawfoglia ,
È stato davvero utile, grazie. Il mio progetto attuale ha interazioni non lineari, quindi penso che questo approccio mi consentirà più facilmente di destreggiarmi tra i metadati che sto raccogliendo dagli utenti.
Ri: JSL orientato agli oggetti - Esempi?drawfoglia
Perdonami se mi sono perso questo, ma dov'è "super ()?" definito?
Ri: JSL orientato agli oggetti - Esempi?stephen.pearson ,
Mi scuso per aver impiegato così tanto tempo a rispondere. Darò un esempio di una definizione di "classe" e del suo utilizzo, per l'esempio che fornisci. È importante considerare se lo desideri/ne hai bisogno. Come hai sottolineato, "quando decideresti di creare un nuovo corso?" Come forse ricorderete dalla mia presentazione, ho suggerito di considerare le dimensioni del progetto, lo sviluppo collaborativo, la longevità, la necessità di riutilizzo, ecc. Prima di determinare se i costrutti OO sono l'approccio migliore. risponderò a msharp 's commenti con più su quell'argomento.
Torniamo al tuo esempio. Utilizzando la ObjectClass come classe genitore, sebbene non richiesta, potremmo creare una DataTableClass:

L'utilizzo dei campi per le istanze DataTableClass sarebbe simile a:

Per un esempio così semplice, non ci sarebbe motivo di utilizzare i costrutti OO. Tuttavia, se dovessi considerare un caso in cui desideri gestire raccolte di tabelle, consentire a utenti e sistemi esterni di aggiungere commenti e altri attributi, trasmettere queste raccolte, elaborare e rispondere a determinati eventi, pianificare espansioni ed estensioni future, stabilire un "contratto" in base al quale altri possono facilmente consumare queste tabelle, ecc. Quindi, l'utilizzo di costrutti OO come questi è molto vantaggioso.
Ri: JSL orientato agli oggetti - Esempi?Non fraintendermi.OOP è un'ottima metodologia che produce un codice eccellente, tuttavia, FP è lo stesso.Se sei un programmatore esperto, sarai in grado di produrre la qualità del codice necessaria in modo FP e w scrivere pseudo-OOP è più un esercizio sul si può fare che sul si dovrebbe fare.Se sei un programmatore intermedio che conosce solo OOP, quindi vuoi programmare in modo familiare, ti consiglio di imparare FP in quanto ti aiuterà a crescere, pensare in modo diverso e programmare meglio in molte lingue.Se sei un programmatore intermedio che conosce solo FP e vuole imparare OOP per ampliare i tuoi orizzonti, ti consiglio di iniziare imparando un'altra lingua che ha effettivamente classi e oggetti implementati all'interno della lingua.Se sei un programmatore alle prime armi che non sa davvero nulla e hai appena sentito che OOP è bello, allora segui il mio consiglio e dimenticalo per ora.Soprattutto se eseguirai script principalmente in JSL.
Personalmente, aspetterei che JMP implementi classi e oggetti, in modo da poter realizzare il vero OOP.Non sono sicuro che sia nemmeno sul loro radar, ma sono sicuro che accadrà, voglio dire, ora abbiamo classi e oggetti in JavaScript.Non sai mai cosa porterà il futuro.
Ri: JSL orientato agli oggetti - Esempi?stephen.pearson ,
Sono così felice di vedere qualcun altro interessato a questo argomento. msharp è corretto affermare che JSL NON è un linguaggio OOP. Ma nel recente passato sono stato in grado di realizzare costrutti "pseudo-OOP" in JSL. Sono felice di condividere il mio lavoro con voi. Vedrò se riesco a creare una risposta adeguata alla domanda che hai posto... Stand-by
Fil
Ri: JSL orientato agli oggetti - Esempi?Solo i miei 2 centesimi: dimentica tutto ciò che hai imparato in quel discorso.
JSL NON è un linguaggio orientato agli oggetti.OOP è ottimo per i linguaggi che non hanno strutture dati integrate, ma è tutt'altro che l'unico modo per programmare.Tuttavia, la maggior parte dei programmatori che provengono da un background Java, C ++, C # non riescono a capire la programmazione in modo non OOP.In JMP è meglio lasciare le strutture dati alle tabelle dati.Ciò comporta vantaggi e svantaggi.A mio parere, PUOI mettere insieme un oggetto Frankenstein dalla tabella dati JSL, ma poi ti rimangono tutti gli svantaggi e nessuno dei vantaggi.
Che JSL IO S bravo è la programmazione funzionale.JSL supporta funzioni AND espressioni.Può fare tutto ciò di cui hai bisogno in modo pulito utilizzando la programmazione funzionale.Dai un'occhiata a questo articolo per alcuni pro e contro che confrontano i due metodi di programmazione: CodeNewbie