Separazione codice algoritmo e UI

di il
7 risposte

Separazione codice algoritmo e UI

Il mio progetto riguarda la creazione e manipolazione di un grafo usando vari algoritmi come Kruskal e Prim.

Quello che avevo intenzione di fare era creare con raylib anche una interfaccia che permettesse di visualizzare il grafo e i passaggi dell'algoritmo.

Il codice prevede anche programmazione concorrenziale con multithreading.

Il dubbio riguarda semplicemente la separazione del codice inerente strettamente l'algoritmo e quello che riguarda solo l'interfaccia grafica: considerando che si dovrebbe vedere in tempo reale l'iterazione (considerando sleep etc etc) quale potrebbe essere un modo per separare le due parti? Creare un codice apposito da far eseguire ad un thread specifico e comunicare coordinate e archi tramite segnali?

Grazie in anticipo.

7 Risposte

  • Re: Separazione codice algoritmo e UI

    Il modo e' il seguente:

    tu sai che nella programmazione ad oggetti, un oggetto ha uno “stato” (i membri di “istanza”) ed una serie di metodi per manipolarlo.

    In realta' manca una cosa: gli “eventi”!

    Cioe' l'oggetto puo' generare degli “eventi”, i  quali non sono altro che metodi che vengono chiamati durante l'esecuzione di qualche operazione.

    L'implementazione di questi metodi in che consiste?

    L'implementazione classica e' la gestione di una SEQUENZA di “listeners”, cioe' di oggetto ESTERNI che si sono registrati e che sono interessati a ricevere “gli eventi”.

    Ovviamente la lista DEVE esistere ed eventualmente e' una lista vuota se non c'e' nessuno interessato.
    Il metodo sempliciemente scandisce la lista, e propaga l'evento ad ogni "listener' che si e' registrato.

    In design patterns e' il pattern “Observer/Observed”

    https://medium.com/@lokeshbihani99/observer-pattern-in-c-366a1e9226f6


    In questo modo il tuo oggetto si occupa SOLO di emettere eventi, ma non e' minimamente interessato a come questi eventi vengono utilizzati.

  • Re: Separazione codice algoritmo e UI

    11/10/2024 - migliorabile ha scritto:


    Il modo e' il seguente:

    tu sai che nella programmazione ad oggetti, un oggetto ha uno “stato” (i membri di “istanza”) ed una serie di metodi per manipolarlo.

    In realta' manca una cosa: gli “eventi”!

    Cioe' l'oggetto puo' generare degli “eventi”, i  quali non sono altro che metodi che vengono chiamati durante l'esecuzione di qualche operazione.

    L'implementazione di questi metodi in che consiste?

    L'implementazione classica e' la gestione di una SEQUENZA di “listeners”, cioe' di oggetto ESTERNI che si sono registrati e che sono interessati a ricevere “gli eventi”.

    Ovviamente la lista DEVE esistere ed eventualmente e' una lista vuota se non c'e' nessuno interessato.
    Il metodo sempliciemente scandisce la lista, e propaga l'evento ad ogni "listener' che si e' registrato.

    In design patterns e' il pattern “Observer/Observed”

    https://medium.com/@lokeshbihani99/observer-pattern-in-c-366a1e9226f6


    In questo modo il tuo oggetto si occupa SOLO di emettere eventi, ma non e' minimamente interessato a come questi eventi vengono utilizzati.

    Ti ringrazio per la risposta. C'è solo una questione: il codice lo sto scrivendo in C. 

  • Re: Separazione codice algoritmo e UI

    E dove sta la ‘questione’? 

    Programmare NON E' usare un linguaggio di programmazione MA far fare al programma QUELLO che serve venga fatto! 

    Si fa programmazione ad oggetti ANCHE in assembler!

    Spremi per bene le meningi :-) 

    Il C ha TUTTO QUELLO CHE SERVE! 

  • Re: Separazione codice algoritmo e UI

    11/10/2024 - migliorabile ha scritto:


    E dove sta la ‘questione’? 

    Programmare NON E' usare un linguaggio di programmazione MA far fare al programma QUELLO che serve venga fatto! 

    Si fa programmazione ad oggetti ANCHE in assembler!

    Spemi per bene le meningi :-) 

    Il C ha TUTTO QUELLO CHE SERVE! 

    Hai ragione, ti ringrazio. 

  • Re: Separazione codice algoritmo e UI

    Tieni presente che, in prima approssimazione, scrivere

    object.operation_name(arg1, ...argn)

    e' equivalente a scrivere

    operation_name(object, arg1, ...argn)

    Ho volutamente scritto “operation_name” e NON “method”!

    Un “metodo" non e' altro che una funzione in cui esiste un “primo” parametro passato “sempre”. In Python questo viene indicato esplicitamente e di solito il nome usato e “self”, che e' l'equivalente del C++/Java “this”. In C++/Java non viene indicato semplicemente perche' e' il compilatore che si arranga a passarlo in automatico, assegnandogli il nome “this”, nome che NON PUO' ESSERE USATO per altri scopi, essendo una “keyword” del linguaggio.

    Poi ci sono delle funzionalita' aggiuntive, basate sull' “ereditarieta'” (NON sull' “overloading”, che e' un'altra cosa), ma, con un po' di “maneggi” (usanto i puntatori a funzioni) si puo' implementare anche in C.

    https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4174.pdf

    Sei SICURO di programmare in C ???

    E' strano che tu debba implementare quello che ti serve in C quando la libreria per la UI e' scritta in C++.

    Poi, parlando di programmazione concorrente, a meno che tu non utilizzi le API di windows o “pthreads”, 
    MA stai utilizzando “std::thread” della libreria standard del C/C++, 
    in EFFETTI DEVI programmare in C++, visto che la “standard library” e' basata su templates che sono supportate SOLO dal C++.

    Cioe', sei TU che ti dai dei limiti per qualche motivo che a noi non e' dato sapere OPPURE e' un'esplicita indicazione del docente?

    In ogni caso il C ha TUTTO quello che serve, anche se alcune funzionalita' andranno implementate “a mano” invece che delegarle al compilatore.

  • Re: Separazione codice algoritmo e UI

    13/10/2024 - migliorabile ha scritto:


    Tieni presente che, in prima approssimazione, scrivere

    object.operation_name(arg1, ...argn)

    e' equivalente a scrivere

    operation_name(object, arg1, ...argn)

    Ho volutamente scritto “operation_name” e NON “method”!

    Un “metodo" non e' altro che una funzione in cui esiste un “primo” parametro passato “sempre”. In Python questo viene indicato esplicitamente e di solito il nome usato e “self”, che e' l'equivalente del C++/Java “this”. In C++/Java non viene indicato semplicemente perche' e' il compilatore che si arranga a passarlo in automatico, assegnandogli il nome “this”, nome che NON PUO' ESSERE USATO per altri scopi, essendo una “keyword” del linguaggio.

    Poi ci sono delle funzionalita' aggiuntive, basate sull' “ereditarieta'” (NON sull' “overloading”, che e' un'altra cosa), ma, con un po' di “maneggi” (usanto i puntatori a funzioni) si puo' implementare anche in C.

    https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4174.pdf

    Sei SICURO di programmare in C ???

    E' strano che tu debba implementare quello che ti serve in C quando la libreria per la UI e' scritta in C++.

    Poi, parlando di programmazione concorrente, a meno che tu non utilizzi le API di windows o “pthreads”, 
    MA stai utilizzando “std::thread” della libreria standard del C/C++, 
    in EFFETTI DEVI programmare in C++, visto che la “standard library” e' basata su templates che sono supportate SOLO dal C++.

    Cioe', sei TU che ti dai dei limiti per qualche motivo che a noi non e' dato sapere OPPURE e' un'esplicita indicazione del docente?

    In ogni caso il C ha TUTTO quello che serve, anche se alcune funzionalita' andranno implementate “a mano” invece che delegarle al compilatore.

    No, è un progetto extra universitario, non c'è nessun docente. 

    Io ho sempre programmato in C e non tocco C++ da un po' di tempo, e ho visto che Raylib si può usare bene anche col C. 

    Riguardo i threads io sto scrivendo il codice su Debian quindi mi baserò su POSIX. 

    Nello specifico si tratta di un progetto che consiste in una simulazione di un attacco missilistico, considerando vari parametri di archi e nodi (i quali potrebbero variare in maniera dinamica durante l'esecuzione) esso calcola una serie ottimale di Strike da effettuare. 

    Credi che sarebbe più opportuno costruirlo in C++? Le aziende in generale lo preferiscono? 

  • Re: Separazione codice algoritmo e UI

    Vanno benissimo i pthread che ci sono anche in C++. Se hai già tutto quello che ti serve non vedo il motivo di cambiare il linguaggio

Devi accedere o registrarti per scrivere nel forum
7 risposte