Hardware Upgrade Forum

Hardware Upgrade Forum (https://www.hwupgrade.it/forum/index.php)
-   Programmazione (https://www.hwupgrade.it/forum/forumdisplay.php?f=38)
-   -   Linguaggio Multipiattaforma con GUI (https://www.hwupgrade.it/forum/showthread.php?t=2859877)


Gabryy. 04-08-2018 17:16

Linguaggio Multipiattaforma con GUI
 
Vorrei specializzarmi in un linguaggio con il quale possa creare applicazioni per windows e per android (con interfaccia grafica). Un linguaggio veloce in fase di esecuzione, con il quale si possa fare di tutto e che nell'eseguibile sia "nascosto" il codice sorgente (dipende se il linguaggio è interpretato o compilato giusto?).
Fino ad ora ho sempre pensato che visual c++ fosse il migliore (su visual studio c'è anche l'emulatore android) ma mi stanno venendo vari dubbi. Sono indeciso anche tra java e python... non ho la vostra esperienza... quale mi consigliate?

pabloski 05-08-2018 11:31

Quote:

Originariamente inviato da Gabryy. (Messaggio 45687453)
Vorrei specializzarmi in un linguaggio con il quale possa creare applicazioni per windows e per android (con interfaccia grafica).

Più che linguaggio è una questione di framework. Le soluzioni cross-platform Windows/Android ( perchè lasci fuori iOS? ha senso? e macOS? ) sono:

1. Qt
2. Xamarin
3. React native
4. JavaFX

Qt è un framework multipiattaforma per C++. Quindi usi C++ come linguaggio, compili in codice nativo ( codice oscurato ) e puoi far girare lo stesso programma su un bel numero di piattaforme https://wiki.qt.io/Supported_Platforms

Si può usare con altri linguaggi ( Python in particolare ), ma poi il deployment del software risulta un pelino ostico. E' preferibile usare il C++ soprattutto per le app mobile.

Xamarin pure è multipiattaforma e usa C#. Il problema è che per la GUI hai le Winforms ( oppure devi scrivere una GUI per ogni piattaforma supportata ). Le Winforms si usavano su Windows tempo fa, ad oggi WPF è la scelta preferita ( più moderno, più funzionalità ). Il problema è che WPF gira solo su Windows.

C'è la possibilità di compilare in codice nativo, ma nella versione a pagamento di Visual Studio, che costicchia.

React native usa un linguaggio proprietario Javascript-like. Non è roba compilata. Gira su iOS, Android e Windows.

JavaFX è basato su Java, multipiattaforma, il codice non è nativo. E' un pelino pesante oltretutto ed è poco utilizzato pure da chi realizza software desktop in Java ( Swing è molto più diffuso ma non supporta Android e iOS ).

Quote:

Originariamente inviato da Gabryy. (Messaggio 45687453)
Un linguaggio veloce in fase di esecuzione, con il quale si possa fare di tutto e che nell'eseguibile sia "nascosto" il codice sorgente (dipende se il linguaggio è interpretato o compilato giusto?).

Tutti i linguaggi compilati nativamente permettono di offuscare il codice al massimo livello possibile. I linguaggi come C# e Java ( .NET e JVM rispettivamente ) non compilano in codice nativo e consentono un offuscamento "parziale", dato che è possibile farne il reverse in maniera abbastanza precisa. Tant'è che esistono librerie apposite per aggiungere ulteriore offuscamento.

Quote:

Originariamente inviato da Gabryy. (Messaggio 45687453)
Fino ad ora ho sempre pensato che visual c++ fosse il migliore (su visual studio c'è anche l'emulatore android) ma mi stanno venendo vari dubbi. Sono indeciso anche tra java e python... non ho la vostra esperienza... quale mi consigliate?

Visual C++ è un IDE con supporto al C++. Ad oggi per Windows si usa principalmente C#. La "versione" Android si chiama Xamarin.

Python è interpretato e quindi scordati di poter efficacemente oscurare il codice.

Come vedi ci sono varie scelte, di cui però solo Qt soddisfa il criterio di produrre codice strettamente sorgente.

Esistono altre soluzioni oltre a quelle che ho citato. Le ho scartate a priori perchè o poco diffuse o complicate o con poco performanti.

Gabryy. 05-08-2018 11:57

grazie per la risposta esaustiva.
Visual studio e Qt non sono praticamente uguali?? non sono tutti e due dei framework?

pabloski 05-08-2018 12:10

Quote:

Originariamente inviato da Gabryy. (Messaggio 45688097)
grazie per la risposta esaustiva.
Visual studio e Qt non sono praticamente uguali?? non sono tutti e due dei framework?

No. Visual Studio è un IDE, cioè un editor con aggiunti altri strumenti che rendono più piacevole programmare. L'equivalente è QtCreator.

Qt invece è equivalente a .NET.

Gabryy. 05-08-2018 12:21

quindi visual studio e qt sono entrambi un IDE, mentre qt a differenza di visual studio è un framework.
qt essendo un framework programmo utilizzando librerie già create da altri programmatori o si può anche partire da zero?

pabloski 05-08-2018 15:44

Quote:

Originariamente inviato da Gabryy. (Messaggio 45688124)
quindi visual studio e qt sono entrambi un IDE, mentre qt a differenza di visual studio è un framework.

No. Visual Studio e QtCreator sono entrambi IDE.

Qt è un framework come .NET.

Quote:

Originariamente inviato da Gabryy. (Messaggio 45688124)
qt essendo un framework programmo utilizzando librerie già create da altri programmatori o si può anche partire da zero?

Che intendi da zero? Nessuno parte da zero, altrimenti staremmo qui a scriverci prima il sistema operativo e poi eventualmente tutto il resto.

Nemmeno su Windows con Visual Studio parti da zero. Infatti stai usando le librerie Win32, WinRT o addirittura il framework .NET.

Gabryy. 05-08-2018 18:03

sono andato sul sito di qt ma quale versione devo scaricare?
Partendo da un IDE come Codeblocks per creare applicazioni con GUI devo importare apposite librerie giusto?

pabloski 05-08-2018 18:28

Quote:

Originariamente inviato da Gabryy. (Messaggio 45688412)
sono andato sul sito di qt ma quale versione devo scaricare?

Supponendo che sei su Windows, devi scaricare questo https://www.qt.io/download-thank-you?os=windows

Quote:

Originariamente inviato da Gabryy. (Messaggio 45688412)
Partendo da un IDE come Codeblocks per creare applicazioni con GUI devo importare apposite librerie giusto?

Si può sviluppare con vari IDE ma vista la complessità di Qt è bene usare l'IDE ufficiale fornito da loro, cioè QtCreator.

Il pacchetto che ho linkato sopra è un installer online che ti consente di installare vari componenti, tra cui QtCreator.

Gabryy. 05-08-2018 18:56

grazie mille. si può creare una GUI partendo da zero? ad esempio sono su codeblocks, per creare una finestrella (tipo un windows form) cosa dovrei fare? importare librerie? su visual studio, qt eccetera basta trascinare il bottone ed è fatta ma su un IDE senza questa funzionalità? bisogna scrivere il codice del bottone ma utilizzando cosa? perché vedo delle persone che creano applicazioni con interfaccia grafica su codeblocks senza utilizzare wx widgets

pabloski 06-08-2018 09:57

Quote:

Originariamente inviato da Gabryy. (Messaggio 45688468)
si può creare una GUI partendo da zero?

Dipende da cosa intendi per partire da zero.

Quote:

Originariamente inviato da Gabryy. (Messaggio 45688468)
ad esempio sono su codeblocks, per creare una finestrella (tipo un windows form) cosa dovrei fare?

Dipende dalla piattaforma sottostante e dalle librerie che stai usando. Codeblocks gira su Windows, Linux e macOS. In nessun caso si può pensare che i tre sistemi operativi implementino le stesse funzioni per creare e gestire la GUI.

Ovviamente in C/C++ si importano gli header file corrispondenti a varie librerie che s'intende usare. Ma questo riguarda C e C++. Altri linguaggi usano altri metodi.

Quote:

Originariamente inviato da Gabryy. (Messaggio 45688468)
su visual studio, qt eccetera basta trascinare il bottone ed è fatta ma su un IDE senza questa funzionalità?

Non è qt, è QtCreator. Qt è il framework, QtCreator è l'IDE con visual designer incorporato ( QtDesigner ). Ed è QtDesigner che ti consente di trascinare i bottoni.

Ma il punto è che dietro le quinte l'IDE trasforma quella GUI in codice. QtDesigner genera dei file .ui che contengono la definizione dell'interfaccia. Successivamente quei file vengono letti e trasformati in file C++ pieni zeppi di codice tipo

btn = new QPushButton;

ecc...

Infatti una GUI si può creare anche istanziando a mano i singoli widget ( bottoni, finestre, ecc... ) e poi collegandoli tra di loro a formare la gerarchia della GUI.



Quote:

Originariamente inviato da Gabryy. (Messaggio 45688468)
perché vedo delle persone che creano applicazioni con interfaccia grafica su codeblocks senza utilizzare wx widgets

Se le hai viste, avrai pure visto come fanno. Come scrivevo sopra si istanziano i vari widget tramite codice e si chiamano appositi metodi.

Per capire di che sto parlando, guarda qui http://zetcode.com/gui/qt5/firstprograms/

Alhazred 09-08-2018 11:39

Stavo cercando anche io informazioni del genere, quindi mi intrometto.

Premetto che la mia non è un'esigenza lavorativa, ma più curiosità e cultura personale.
Vorrei imparare principalmente a scrivere programmi desktop per Windows con interfaccia grafica progettabile in modo assistito. Poi se l'accoppiata linguaggio/framework dovesse essere buona anche per sviluppare su altre piattaforme sarebbe un plus gradito.

Dalla panoramica fatta mi pare che dovrei puntare a Qt (C++) oppure Xamarin (C#), con preferenza sul primo per il discorso interfaccia grafica in caso volessi passare a piattaforme non Windows.
Qualcuno mi consigliava anche Delphi, ma su questo trovo pareri discordanti, anche se non ben argomentati, le informazioni che ho trovato sembravano più per partito preso che per reali motivazioni, sia da una parte che dall'altra. C'è chi lo da per morto, chi invece consiglia di puntarci.

Attualmente ho conoscenza di diversi linguaggi, tra quelli interessanti in questo contesto direi C e Turbo Pascal (se ho ben capito Delphi nasce da Turbo Pascal).

Cosa sarebbe consigliabile nel mio caso?

!fazz 09-08-2018 11:48

Quote:

Originariamente inviato da Alhazred (Messaggio 45693629)
Stavo cercando anche io informazioni del genere, quindi mi intrometto.

Premetto che la mia non è un'esigenza lavorativa, ma più curiosità e cultura personale.
Vorrei imparare principalmente a scrivere programmi desktop per Windows con interfaccia grafica progettabile in modo assistito. Poi se l'accoppiata linguaggio/framework dovesse essere buona anche per sviluppare su altre piattaforme sarebbe un plus gradito.

Dalla panoramica fatta mi pare che dovrei puntare a Qt (C++) oppure Xamarin (C#), con preferenza sul primo per il discorso interfaccia grafica in caso volessi passare a piattaforme non Windows.
Qualcuno mi consigliava anche Delphi, ma su questo trovo pareri discordanti, anche se non ben argomentati, le informazioni che ho trovato sembravano più per partito preso che per reali motivazioni, sia da una parte che dall'altra. C'è chi lo da per morto, chi invece consiglia di puntarci.

Attualmente ho conoscenza di diversi linguaggi, tra quelli interessanti in questo contesto direi C e Turbo Pascal (se ho ben capito Delphi nasce da Turbo Pascal).

Cosa sarebbe consigliabile nel mio caso?

se la tua esigenza è software windows desktop c# + visual studio è imho la scelta migliore

pabloski 09-08-2018 12:22

Quote:

Originariamente inviato da Alhazred (Messaggio 45693629)
Premetto che la mia non è un'esigenza lavorativa, ma più curiosità e cultura personale.

Penso che già questo indichi la strada. Per cultura più cose si sanno e meglio è. Chiaro che non si può operare su più fronti in parallelo.

Quote:

Originariamente inviato da Alhazred (Messaggio 45693629)
Vorrei imparare principalmente a scrivere programmi desktop per Windows con interfaccia grafica progettabile in modo assistito.

In questo caso la prima tappa potrebbe essere WPF come suggerito da !fazz.

Ovviamente, essendo per cultura, dopo ti potrai buttare su qualcos'altro. Tanto la difficoltà maggiore è la prima volta, perchè tutti questi framework si basano su concetti simili se non addirittura gli stessi.

Quote:

Originariamente inviato da Alhazred (Messaggio 45693629)
Poi se l'accoppiata linguaggio/framework dovesse essere buona anche per sviluppare su altre piattaforme sarebbe un plus gradito.

Imho ad oggi è una necessità. Il ramo desktop è saturo e l'utenza comune è migrata verso gli smartphone. Cioè oggi non c'è più grande richiesta di software desktop generalisti. C'è ma solo in ambiti specifici e legati al lavoro ( contabilità, CAD, programmi per ufficio ).

E nel settore desktop i Mac sono ormai una percentuale non trascurabile.

Quindi prima o poi ti ritroverai ad avere a che fare con piattaforme diverse da Windows. Anche per hobby potresti incappare in Raspberry e similari.

Quote:

Originariamente inviato da Alhazred (Messaggio 45693629)
Dalla panoramica fatta mi pare che dovrei puntare a Qt (C++) oppure Xamarin (C#), con preferenza sul primo per il discorso interfaccia grafica in caso volessi passare a piattaforme non Windows.

Xamarin ha lo svantaggio di non supportare WPF su tutte le piattaforme. Il problema è che le nuove interfacce sono basate su effetti grafici ed interazioni/animazioni. WinForms è vecchio stile.

Qt invece ti offre QtQuick che è moderna.

Delphi è un prodotto ancora usato e si è derivato dal Pascal. C'è FreePascal/Lazarus che è un Object Pascal free.

Però onestamente Delphi è poco usato.

Ci sarebbe inoltre Java/JavaFx.

Alhazred 09-08-2018 12:43

Quote:

Originariamente inviato da pabloski (Messaggio 45693711)
...
Imho ad oggi è una necessità. Il ramo desktop è saturo e l'utenza comune è migrata verso gli smartphone. Cioè oggi non c'è più grande richiesta di software desktop generalisti. C'è ma solo in ambiti specifici e legati al lavoro ( contabilità, CAD, programmi per ufficio ).
...

Ho indicato solo i linguaggi che conosco inerenti alla mia richiesta, per quanto riguarda il settore mobile posso già realizzare app per Android native usando Java/Kotlin, ma vorrei evitare di usare JavaFx o derivati di Javascript per Windows proprio per imparare qualcosa di nuovo.
Il "plus" era per evitare di dover riscrivere tutto nel caso prima o poi dovessi avere l'illuminazione per qualcosa di interessante :D

pabloski 09-08-2018 14:52

Quote:

Originariamente inviato da Alhazred (Messaggio 45693753)
ma vorrei evitare di usare JavaFx o derivati di Javascript per Windows proprio per imparare qualcosa di nuovo.

JavaFX non ha nulla da spartire con Javascript. E' un framework simile a WPF e Qt.

Quote:

Originariamente inviato da Alhazred (Messaggio 45693753)
Il "plus" era per evitare di dover riscrivere tutto nel caso prima o poi dovessi avere l'illuminazione per qualcosa di interessante :D

Ovviamente. E questo WPF non te lo consente. Xamarin supporta una tecnologia per le UI di fatto vecchia.

Ti puoi rivolgere solo a Qt, React Native e Javascript ( che non ti piace ). Ci sarebbe FireMonkey per Delphi, che però costa un botto.

dolfrang 09-08-2018 15:35

Che io sappia Xamarin Android permette di scrivere direttamente interfaccia grafica nativa. Xamarin Forms invece permette di utilizzare Xaml (come per WPF) che viene poi convertita in interfaccia nativa per ogni piattaforma.
Le Windows Forms con Xamarin non c'entrano nulla.

pabloski 09-08-2018 16:31

Quote:

Originariamente inviato da dolfrang (Messaggio 45693997)
Che io sappia Xamarin Android permette di scrivere direttamente interfaccia grafica nativa.

E altrettanto si può fare per iOS, Windows Phone, Linux, macOS, Windows. Non ho citato questa possibilità perchè non mi pare una grande idea dover scrivere un'interfaccia per ognuna delle piattaforme da supportare.

Senza contare che si crea un conflitto d'impedenza, perchè le varie interfacce possono discostarsi tra di loro nel look&feel e nel modello d'interazione con l'utente, il che crea problemi pure alla business logic.

Quote:

Originariamente inviato da dolfrang (Messaggio 45693997)
Xamarin Forms invece permette di utilizzare Xaml (come per WPF) che viene poi convertita in interfaccia nativa per ogni piattaforma.
Le Windows Forms con Xamarin non c'entrano nulla.

Xamarin Forms implementa le WinForms di .NET, con la differenza che integra XAML.

Ma resta il problema che mancano tutte le chicce delle interfacce moderne e non sfrutta il modello MVVM, non implementa i bindings, ecc...

E resta l'unico modo per poter scrivere la GUI una volta sola per tutte le piattaforme.

Altrettanto puoi fare con QtQuick, ma in questo caso hai un framework moderno alle spalle.

Se Xamarin implementasse WPF, allora si che sarebbe alla pari. E non ha citato fino ad ora i bug e i colli di bottiglia prestazionali, specialmente presenti nelle Forms ( ragion per cui per app che necessitano di fluidità si preferisce implementare tante GUI native ).

dolfrang 09-08-2018 17:42

Quote:

Originariamente inviato da pabloski (Messaggio 45694090)
Xamarin Forms implementa le WinForms di .NET, con la differenza che integra XAML.
Ma resta il problema che mancano tutte le chicce delle interfacce moderne e non sfrutta il modello MVVM, non implementa i bindings, ecc...

Sei sicuro?
https://github.com/xamarin/Xamarin.F...atform-Support
Quote:

Microsoft fully supports Xamarin.Forms core features which includes data binding, navigation, layouts, control abstractions, and services.
Piattaforme supportate:
Quote:

  1. Android (Stable - Microsoft)
  2. GTK# (Preview - Community)
  3. iOS (Stable - Microsoft)
  4. macOS (Preview - Microsoft)
  5. Tizen (Stable - Samsung)
  6. UWP (Stable - Microsoft)
  7. WPF (Preview - Community)

Mi sembra "improbabile" che una tecnologia basata su WinForms funzioni su Android, Linux, iOS, macOS, Tizen, UWP e WPF (e tra l'altro, che non si possano creare applicazioni WinForms con Xamarin Forms...)

pabloski 09-08-2018 17:53

Quote:

Originariamente inviato da dolfrang (Messaggio 45694186)
Mi sembra "improbabile" che una tecnologia basata su WinForms funzioni su Android, Linux, iOS, macOS, Tizen, UWP e WPF (e tra l'altro, che non si possano creare applicazioni WinForms con Xamarin Forms...)

Ma io non ho detto che Xamarin Forms è basato sul codice delle WinForms. Cosa che non potrebbe essere, visto che Xamarin all'epoca non era di proprietà di Microsoft.

Xamarin Forms implementa i controlli tipicamente forniti dalle WinForms.

Quelli che hai elencato sono i backend, cioè le tecnologie che Xamarin usa per renderizzare le forms sulle varie piattaforme.

Resta comunque il fatto che stiamo parlando di un widget toolkit che non offre tutte le novità che ci si aspetta oggi, soprattutto sul fronte mobile.

dolfrang 09-08-2018 18:46

Ah ok.

"Il problema è che per la GUI hai le Winforms"
"Xamarin Forms implementa le WinForms di .NET"
"WinForms è vecchio stile." e che quindi è "una tecnologia per le UI di fatto vecchia"


Tutti gli orari sono GMT +1. Ora sono le: 23:19.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.