* * * *
31 Visitatori, 0 Utenti

Autore Topic: Split Unit  (Letto 549 volte)

Otto

  • Newbie
  • *
  • Post: 47
  • Karma: +0/-0
Split Unit
« il: Febbraio 17, 2020, 02:06:14 pm »
Salve a tutti.

Avrei bisogno di sapere se esistesse un modo per separare una “Unit” in almeno due file diversi; in pratica avrei bisogno di replicare un metodo analogo a quello utilizzato in c# con le “partial class”.
Se non fosse possibile potrei cercare di implementare un piccolo merging tools, ma questa soluzione non sarebbe certo molto comoda.

Saluti,
Otto.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2252
  • Karma: +10/-2
Re:Split Unit
« Risposta #1 il: Febbraio 17, 2020, 04:02:17 pm »
non so se mi sono perso qualcosa ma con free pascal mi pare proprio che non si possa fare

quando mi si è presentata la necessità di fare qualcosa del genere ho usato la direttiva $I ($INCLUDE)
non so se è applicabile a quello che devi fare tu

in alternativa puoi splittare la classe i più classi che hanno compiti diversi per poi "iniettare" le sottoclassi in qualche property di quella principale
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2072
  • Karma: +5/-0
Re:Split Unit
« Risposta #2 il: Febbraio 17, 2020, 04:16:08 pm »
Ciao Otto.

Cosa sono le partial class?

Lo chiedo perché forse mi è venuta un'idea.


Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2252
  • Karma: +10/-2
Re:Split Unit
« Risposta #3 il: Febbraio 17, 2020, 04:36:10 pm »
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2072
  • Karma: +5/-0
Re:Split Unit
« Risposta #4 il: Febbraio 17, 2020, 04:38:23 pm »
Ni.
Forse assomigliano alle classi helper :)
Lo so è una soluzione "malvagia dentro", ma forse è da indagare in questa direzione ;)
Volevo solo una conferma.
Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Otto

  • Newbie
  • *
  • Post: 47
  • Karma: +0/-0
Re:Split Unit
« Risposta #5 il: Febbraio 17, 2020, 06:48:37 pm »
non so se mi sono perso qualcosa ma con free pascal mi pare proprio che non si possa fare

quando mi si è presentata la necessità di fare qualcosa del genere ho usato la direttiva $I ($INCLUDE)
non so se è applicabile a quello che devi fare tu

in alternativa puoi splittare la classe i più classi che hanno compiti diversi per poi "iniettare" le sottoclassi in qualche property di quella principale

Grazie nomorelogic, ho controllato la guida https://wiki.lazarus.freepascal.org/$include e credo che la tua soluzione ($INCLUDE) possa andare bene.
Anche l’alternativa da te proposta sembra interessante, solo che avrei bisogno di un piccolo esempio per velocizzare l’implementazione.

Saluti,
Otto.

Otto

  • Newbie
  • *
  • Post: 47
  • Karma: +0/-0
Re:Split Unit
« Risposta #6 il: Febbraio 17, 2020, 07:00:53 pm »
Ni.
Forse assomigliano alle classi helper :)
Lo so è una soluzione "malvagia dentro", ma forse è da indagare in questa direzione ;)
Volevo solo una conferma.
Stilgar

Grazie Stilgar, potresti avere ragione.
Sapresti indirizzarmi su qualche buon esempio di un corretto utilizzo delle helper class?

Saluti,
Otto.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2072
  • Karma: +5/-0
Re:Split Unit
« Risposta #7 il: Febbraio 17, 2020, 07:17:31 pm »
https://github.com/paxtibi/lazarus-batis-utility/blob/master/src/lzbatis.dom.aspects.pas

Qui ho simulato il comportamento di jquery sul dom fp.

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Otto

  • Newbie
  • *
  • Post: 47
  • Karma: +0/-0
Re:Split Unit
« Risposta #8 il: Febbraio 18, 2020, 08:30:09 am »
Grazie Stilgar, il tuo progetto è molto interessante. Lo studierò attentamente: mi sarà certamente utile in futuro.

Saluti,
Otto.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2072
  • Karma: +5/-0
Re:Split Unit
« Risposta #9 il: Febbraio 18, 2020, 09:05:35 am »
Ciao Otto.

Ne sto progettando uno più compatibile con mybatis.
Manca di le annotation/atttribute in freepascal devo riadattare la logica interna
Ma l'obiettivo è sempre generare delle classi pronte all'uso.
Devo produrre altri package di supporto  per la gestione dei null/nil.

Intanto buon studio

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Otto

  • Newbie
  • *
  • Post: 47
  • Karma: +0/-0
Re:Split Unit
« Risposta #10 il: Febbraio 18, 2020, 11:55:00 am »
Molto bene Stilgar, tienici informati sullo sviluppo del nuovo progetto.

Per quanto riguarda le “Class helpers” ho letto la discussione:
https://forum.lazarus.freepascal.org/index.php/topic,45253.0.html
che mi ha fatto propendere a pensare che le “Class helpers” del FPC siano sovrapponibili solo in alcuni aspetti con le “partial class” del c#.
Sembrerebbero utilissime qualora si volesse aggiungere del codice a delle classi alle quali non si avesse, o non si volesse avere, accesso diretto.
The purpose of helpers is to be able to add code to classes that you don't have direct access to.
Per le mie modeste conoscenze le “Class helpers” del FPC sembrerebbero più vicine alle “Extension Method” del C# (https://www.dotnetperls.com/extension) senza però essere equivalenti.
In questo articolo https://delphisorcery.blogspot.com/2013/04/why-no-extension-methods-in-delphi.html vengono messe in luce alcune differenze.

Saluti,
Otto.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2072
  • Karma: +5/-0
Re:Split Unit
« Risposta #11 il: Febbraio 18, 2020, 01:37:12 pm »
:)
Mi sfugge la tua necessità di usare le classi parziali.
Non mi è chiaro il concetto evidentemente di classi parziali.
:)
Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Otto

  • Newbie
  • *
  • Post: 47
  • Karma: +0/-0
Re:Split Unit
« Risposta #12 il: Febbraio 18, 2020, 02:45:20 pm »
La possibilità di utilizzare le “classi parziali” mi permetterebbe la semplificazione del processo di conversione di progetti già realizzati in Lazarus in modo tale che molti dei controlli vengano creati in fase di run time. Quando i progetti sono pochi e relativamente semplici non è certo un problema effettuare tale conversione, ma quando i progetti sono molti e con interfacce complesse il tempo necessario potrebbe essere considerevole.
Per velocizzare il processo ho utilizzato uno strumento in grado di convertire  i “Lazarus Form file” (*.lfm)  in codice sorgente pascal (*.pas)
 lazarus/examples/pascalstream/CopyAsPasPkg/copyformaspascaldemopkg.lpk.
Tale tools mi è stato suggerito da wp nella discussione: https://forum.lazarus.freepascal.org/index.php/topic,48160.0.html
- Il tools copyformaspascaldemopkg da buoni risultati purché i controlli non contengano immagini, altrimenti queste avrebbero una rappresentazione incompatibile con la sintassi Pascal. Credo che per risolvere il problema si possa adoperare un riferimento ai dati delle immagini, magari salvandoli all’interno di un file di risorse. Immagino che, in qualche modo, sia possibile adattare i dati immagine provenienti dal RAD in un formato compatibile ai file di risorse -.

Utilizzando le “classi parziali” potrei salvare i dati prodotti dal tools direttamente in un nuovo file (chiamandolo ad esempio Unit1_lfm.pas), in questo modo avrei il file della Unit del form (chiamata Unit1.pas) sostanzialmente invariato ed il nuovo file relazionato con tale Unit che andrebbe a sostituire il file “Lazarus Form file”. Questo processo potrebbe essere reso automatico.

Spero di non essere stato troppo confusionario.
Otto.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2072
  • Karma: +5/-0
Re:Split Unit
« Risposta #13 il: Febbraio 18, 2020, 02:52:16 pm »
In soldoni stai cercando di pare un porting del codice.

Fare un parser che legga i file cs e li converta in pascalese?

La butto lì.



Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2072
  • Karma: +5/-0
Re:Split Unit
« Risposta #14 il: Febbraio 18, 2020, 03:01:21 pm »
Leggendo il 3d in inglese ho capito che è lazarus su Lazarus che stai cercando di "convertire".
Corretto?
Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

 

Recenti

How To

Trascinare un file nel programma da xinyiman
DB concetti fondamentali e ZeosLib da xinyiman
Recuperare codice HTML da pagina web da xinyiman
Mandare mail con Lazarus da xinyiman
Stabilire il sistema operativo da xinyiman
Esempio lista in pascal da xinyiman
File INI da xinyiman
Codice di attivazione da xinyiman
Realizzare programmi multilingua da xinyiman
Lavorare con le directory da xinyiman
Utilizzare Unità esterne da Loryea
TTreeView da xinyiman
TTreeview e Menu da xinyiman
Generare controlli RUN-TIME da xinyiman
LazReport, PDF ed immagini da xinyiman
Intercettare tasti premuti da xinyiman
Ampliare Lazarus da xinyiman
Lazarus e la crittografia da xinyiman
System Tray con Lazarus da xinyiman
UIB: Unified Interbase da Microges2000
Il file: questo sconosciuto da Microges2000
Conferma di chiusura di un applicazione da xinyiman
Liste e puntatori da Microges2000
Overload di funzioni da Microges2000
Funzioni a parametri variabili da Microges2000
Proprietà da Microges2000
Conversione numerica da Microges2000
TImage su Form e Panel da Maverich
Indy gestiore server FTP lato Client da Maverich
PopUpMenu sotto Pulsante (TSpeedButton) da Maverich
Direttiva $macro da Microges2000
Toolbar da xinyiman
Evidenziare voci TreeView da Maverich
Visualizzare un file Html esterno da Maverich
StatusBar - aggirare l'errore variabile duplicata da Maverich
Da DataSource a Excel da xinyiman
Le permutazioni da xinyiman
Brute force da xinyiman
Indy 10 - Invio email con allegati da Maverich
La gestione degli errori in Lazarus da xinyiman
Pascal Script da xinyiman
Linux + Zeos + Firebird da xinyiman
Dataset virtuale da xinyiman
Overload di operatori da Microges2000
Lavorare con file in formato JSON con Lazarus da nomorelogic
Zeos ... dietro le quinte (prima parte) da Stilgar
Disporre le finestre in un blocco unico (come Delphi) da Maverich
Aspetto retrò (Cmd Line) da xinyiman
Come interfacciare periferica twain da Narciso
Ubuntu - aggiornare free pascal e lazarus da xinyiman
fpcup: installazioni parallele di lazarus e fpc da nomorelogic
Free Pascal e Lazarus sul Raspberry Pi da nomorelogic
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal. da nomorelogic
Creare un server multithread da xinyiman
guida all'installazione di fpc trunk da subversion in linux gentoo da nomorelogic
Indice da nomorelogic
DB concetti fondamentali e connessioni standard da xinyiman
Advanced Record Syntax da nomorelogic
DB concetti fondamentali e DBGrid da xinyiman
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText da xinyiman
Advanced Record Syntax: un esempio pratico da nomorelogic
Superclasse form base per programmi gestionali (e non) da nomorelogic
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox da nomorelogic
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form da nomorelogic
Superclasse form base per programmi gestionali (e non) #4 - wait animation da nomorelogic
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog da nomorelogic
Installare lazarus su mac osx sierra da xinyiman
immagine docker per lavorare con lazarus e free pascal da nomorelogic
TDD o Test-Driven Development da xinyiman
Utenti
  • Utenti in totale: 665
  • Latest: Jaredzes
Stats
  • Post in totale: 13347
  • Topic in totale: 1674
  • Online Today: 47
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 31
Total: 31

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.