Il problema della coerenza.

Uno strumento didattico numerico può sembrare convincente mentre due implementazioni divergono silenziosamente sul numero di intervalli, sull’area con segno o sulle funzioni non valide. IntegraDraw aveva una storia desktop in Java e necessitava di una versione browser moderna, senza trasformarsi in due calcolatori scollegati.

La ricostruzione rende esplicito il contratto matematico: esattamente il numero di intervalli richiesto, risultati con segno, errore di approssimazione visibile e rifiuto chiaro degli input non finiti.

Su cosa devono concordare i due runtime.

L’interfaccia è utile soltanto se le regole numeriche restano stabili:

  1. I metodi del punto medio e dei trapezi usano esattamente il numero di segmenti inserito dall’utente.
  2. L’area negativa resta negativa, invece di essere convertita silenziosamente in area geometrica.
  3. Il valore di confronto è indicato come riferimento Simpson, mai come risultato simbolico esatto.
  4. Il parser delle espressioni nel browser non deve usare eval o Function.

Un contratto al di sopra dell’implementazione.

Condividere codice sorgente tra Java e TypeScript creerebbe un ponte scomodo tra i runtime senza dimostrare molto. Condividere il comportamento atteso è il confine più utile.

Ho introdotto un corpus golden versionato usato da JUnit e Vitest. Tolleranze e limiti specifici dei runtime restano espliciti, così una divergenza non può sparire dietro un generico helper di uguaglianza approssimata.

Due interfacce, un unico riferimento numerico.

L’applicazione Java racchiude un’interfaccia Swing e il core numerico in un JAR eseguibile. L’applicazione web usa un parser di espressioni senza dipendenze, routine di integrazione TypeScript e un grafico Canvas responsive. Entrambe si verificano sul corpus condiviso.

Due interfacce, un unico riferimento numerico. Le implementazioni restano separate; il contratto numerico osservabile è condiviso.VISTA DEL SISTEMA / INTEGRADRAWFUNZIONE UTENTEPARSER SICUROCORE NUMERICOCORPUS GOLDENUI JAVA+ CANVASPERCORSO DI DELIVERY VERSIONATO
Le implementazioni restano separate; il contratto numerico osservabile è condiviso.

Perché queste tecnologie.

Le scelte mantengono autonome le due applicazioni e condividono soltanto ciò che deve davvero coincidere.

T01 La scelta

Implementazioni Java e TypeScript separate.

Perché
Ogni interfaccia usa il proprio runtime naturale mentre un contratto esterno confronta lo stesso comportamento numerico.
Cosa ho escluso
Un bridge tra linguaggi o la condivisione artificiale del sorgente aggiungerebbero accoppiamento senza dimostrare la parità osservabile.
Quanto è costata
Accettiamo di mantenere due implementazioni degli algoritmi.
T02 La scelta

Un parser matematico limitato.

Perché
Offre le espressioni necessarie all’ambiente mantenendo grammatica, funzioni e fallimenti controllabili.
Cosa ho escluso
eval o Function eseguirebbero JavaScript arbitrario e renderebbero il confine di sicurezza non verificabile.
Quanto è costata
Accettiamo una lingua più piccola, funzioni enumerate ed errori espliciti per input non supportati.
T03 La scelta

Canvas per il grafico web.

Perché
Permette un tracciato responsive, leggero e senza dipendenze con controllo diretto di scala e pixel.
Cosa ho escluso
Una libreria di grafici o un grande albero SVG introdurrebbero dipendenze e complessità DOM non necessarie per una sola curva.
Quanto è costata
Accettiamo di implementare assi, scaling, ridisegno e supporti di accessibilità attorno al Canvas.
T04 La scelta

Un corpus golden condiviso.

Perché
Casi e tolleranze versionati confrontano l’output reale dei due runtime indipendenti.
Cosa ho escluso
Condividere codice non sarebbe naturale tra Java e TypeScript e potrebbe propagare lo stesso errore in entrambe le interfacce.
Quanto è costata
Accettiamo di curare casi, tolleranze e versioni; il corpus resta un test, non una prova formale.

Le scelte che migliorano la chiarezza matematica.

L’ambiente chiama l’approssimazione con il suo nome.

D01

Conservare il segno dell’integrale

I metodi del punto medio e dei trapezi restituiscono area orientata: invertire i limiti o integrare una funzione negativa mantiene un risultato negativo invece di convertirlo in area geometrica.

Il compromessoIl valore può sorprendere chi si aspetta sempre un’area positiva, ma rispetta il significato matematico dell’integrale definito.

D02

Dare al riferimento il nome corretto

Il confronto web usa la regola composita di Simpson con 8.192 sottointervalli e lo definisce riferimento, non risultato esatto.

Il compromessoAlcune funzioni discontinue o non finite vengono rifiutate; il progetto non è un sistema di dimostrazione simbolica.

D03

Rispettare esattamente la partizione richiesta

Valore numerico e grafico usano il numero di segmenti inserito dall’utente. Nessun runtime aumenta, riduce o adatta silenziosamente la discretizzazione.

Il compromessoScelte molto grossolane producono approssimazioni visibilmente grossolane; il prodotto le mostra invece di correggerle di nascosto.

Distribuire entrambe le applicazioni.

La CI compila Java 17, esegue JUnit, crea e sottopone a smoke test il JAR eseguibile, quindi verifica i tipi, testa e compila l’applicazione TypeScript. I candidati al rilascio includono anche il bundle web e gli SBOM di entrambi i runtime.

La pubblicazione confronta build indipendenti, valida gli inventari delle dipendenze e controlla manifesti SHA-256 e attestazioni GitHub prima di rendere visibile un rilascio stabile.

Cosa rende visibile l’ambiente.

Gli utenti possono cambiare funzione, intervallo e numero di segmenti, quindi vedere come le stime del punto medio e dei trapezi si rapportano alla curva tracciata e al riferimento Simpson.

Le applicazioni desktop e web restano utili autonomamente, mentre il corpus condiviso offre ai maintainer un solo punto in cui verificare il comportamento numerico promesso.

Registro delle evidenze.

Il contratto numerico è abbastanza piccolo da poter essere elencato:

Corpus golden
Sei casi di integrali, tre casi di espressioni non valide e sette casi di validazione nello schema versione 1.
Verifica
22 dichiarazioni di test JUnit e 80 TypeScript nel rilascio sottoposto ad audit.
Riferimento
Il confronto Simpson composito nel browser usa 8.192 sottointervalli.
Limite
Il riferimento non è esatto; discontinuità ed espressioni non finite possono essere rifiutate e i limiti dei runtime differiscono intenzionalmente.

Release verificata v1.1.2 Verifica del

Cosa dimostra questo caso

IntegraDraw è uno strumento didattico esplorativo. Non offre integrazione simbolica, dimostrazioni, gestione garantita delle discontinuità né risultati esatti per funzioni arbitrarie.

Visita il progetto funzionante