Journal : PyQt, QtJambi, et les autres
Posté par Gilles G. () le 12 octobre 2007
Bonjour à tous,
dans le cadre de mon travail, nous souhaitons réaliser un logiciel de paramétrage de nos installations électroniques. Le but est de faire une interface graphique qui présente l'état de fonctionnement de nos installations et permette quelques réglages simples (avec très peu d'algorithmique). Évidemment, mon patron n'a rien contre une solution à base de logiciels libres.
Les points clés pour cette application sont:
* facilité de maintenance
* fiabilité
* pérennité
* design très personnalisé
L'heure est aujourd'hui au choix des outils. Pour ma part, je pense que Qt serait un excellent candidat pour la librairie graphique. Surtout avec Qt4.2 qui introduit la personnalisation des widgets au travers d'une syntaxe à la CSS.
Comme je ne suis pas capable de programmer en C++ et que j'aime bien Python,j'aimerai bien utiliser les bindings Python pour Qt, à savoir PyQt. Le problème c'est que Python est plutôt inconnu dans le monde de l'entreprise.
Une autre solution serait d'utiliser java qui est très connu par le grand public. D'ailleurs, il y a aussi des bindings Java pour Qt, nommés Qt Jambi, et supportés officiellement par Trolltech, mais je ne connais pas Java. J'ai essayé java ces derniers jours et j'ai trouvé ça assez déroutant. J'ai eu l'impression d'être *obligé* de faire des classes tout le temps, et le typage statique est quand même un peu lourdingue, par exemple quand j'écris:
Voiture maVoiture = new Voiture("ford fiesta");
à quoi ça sert de préciser que maVoiture est de type Voiture (si je voulais transtyper en Vehicule je l'aurai dit)?
Donc voilà, j'en suis à me demander laquelle des deux solutions est la mieux: PyQt ou Qt Jambi?
Toute argumentation est la bienvenue. D'ailleurs, si vous avez d'autres solutions que Qt, ça m'intéresse aussi!
dans le cadre de mon travail, nous souhaitons réaliser un logiciel de paramétrage de nos installations électroniques. Le but est de faire une interface graphique qui présente l'état de fonctionnement de nos installations et permette quelques réglages simples (avec très peu d'algorithmique). Évidemment, mon patron n'a rien contre une solution à base de logiciels libres.
Les points clés pour cette application sont:
* facilité de maintenance
* fiabilité
* pérennité
* design très personnalisé
L'heure est aujourd'hui au choix des outils. Pour ma part, je pense que Qt serait un excellent candidat pour la librairie graphique. Surtout avec Qt4.2 qui introduit la personnalisation des widgets au travers d'une syntaxe à la CSS.
Comme je ne suis pas capable de programmer en C++ et que j'aime bien Python,j'aimerai bien utiliser les bindings Python pour Qt, à savoir PyQt. Le problème c'est que Python est plutôt inconnu dans le monde de l'entreprise.
Une autre solution serait d'utiliser java qui est très connu par le grand public. D'ailleurs, il y a aussi des bindings Java pour Qt, nommés Qt Jambi, et supportés officiellement par Trolltech, mais je ne connais pas Java. J'ai essayé java ces derniers jours et j'ai trouvé ça assez déroutant. J'ai eu l'impression d'être *obligé* de faire des classes tout le temps, et le typage statique est quand même un peu lourdingue, par exemple quand j'écris:
Voiture maVoiture = new Voiture("ford fiesta");
à quoi ça sert de préciser que maVoiture est de type Voiture (si je voulais transtyper en Vehicule je l'aurai dit)?
Donc voilà, j'en suis à me demander laquelle des deux solutions est la mieux: PyQt ou Qt Jambi?
Toute argumentation est la bienvenue. D'ailleurs, si vous avez d'autres solutions que Qt, ça m'intéresse aussi!
> Lire le journal (17 commentaires, moyenne: 3,6).
Vous avez demandé le commentaire #874025.



Java vs Python
Peut être, mais grâce à cette information qui te parait redondante, le compilateur Java t'interdira d'utiliser maVoiture comme si c'était une carrotte, à moins que tu le veuilles vraiment explicitement.
Avec Python, ça passera tout debout jusqu'au moment où l'utilisateur ou le testeur exécute le bout de code pourri.
Moralité, dans le cas Java, il est beaucoup plus facile d'éviter les erreurs débiles, car elles sont détectés à la compilation, alors qu'en Python l'erreur ne sera détectée qu'à l'exécution (d'un jeu de test unitaire, de l'appli par la personne qui teste, ... ou par l'utilsateur).
En bref, de mon point de vue (qui va certainement pas plaire à tout le monde), il vaut mieux que le langage soit rigoureux, car le développeur, aussi rigoureux qu'il soit, n'est pas à l'abri d'un oubli. Certes, le développement est en général un peu plus long avec un langage comme Java plutôt qu'avec un langage comme Python, mais par la suite au niveau de la maintenance, les avantages/inconvénients se retrouvent inversés.
« La clé d'une langue commune, perdue dans la Tour de Babel, peut être seulement construite par l'usage de l'Espéranto. » Jules Verne.
[^]Re: Java vs Python
ouai sauf qu'entre temps on a inventé le lazy typing
auto maVoiture = new Voiture("ford fiesta");
ou le compilateur infère le type de maVoiture a Voiture. Et si jamais du veut caster un objet dans sa super classe, il suffira d'expliciter le type a la déclaration.
le lazy typing est dans D et sera dans C++0x, et est une idée survenue (a mon avis) bien trop tard, cette fonctionnalité pourrait même exister en C.
Enfin globalement je suis d'accord avec toi, avec un language typé mais très dynamique (comme java donc), un code qui compile est souvent beaucoup plus proche de l'état débugué qu'un code qui passe l'interpréteur sans test de typage. Mais (il y a un mais), la souplesse des languages dynamiques, et je n'explique pas encore, mênent souvent les dévelopeur a faire de meilleures appli qu'avec un language typé.
Cela reste encore un mystère pour moi, mais mon petit doigt me dit que le temps et les casses têtes a modifier du code dans la rigueur d'un code très typé ne profite finalement pas toujours a la qualité de l'application. (quand je parle de qualité, je pense a l'ergonomie et au bien pensé des fonctionnalité - ergonomie comprend une appli qui ne t'injurie pas constamment avec des exceptions).
[^]Re: Java vs Python
et puis en python, tu peux choisir de gérer les exceptions ou pas. Et c'est aussi bien comme ça.
parce qu'en java, c'est lourd, pour chaque fonction qui peut lancer une exception faut prévoir le cas où...
perso, je trouve le java très lourd.
vive python !
[^]Re: Java vs Python
Pour avoir développé en Delphi dans une grosse appli où une méthode qui peut lever des exceptions ne le spécifie pas dans sa déclaration, cela mène très facilement à des exceptions non gérés.
Alors c'est sur, il faut savoir ce qu'on veut : ok, la gestion des exceptions est "lourde" en Java, mais c'est meilleur moyen de pas avoir une appli qui crashe silencieusement (ou du moins si c'est le cas, c'est la volonté du développeur et qu'il l'assume).
Au contraire en Python : ça m'est arrivé de nombreuses fois sous Linux d'avoir des applis qui balancent un stacktrace dans la console et n'effectuant pas le comportement attentu, sans aucun message d'erreur à l'écran. Niveau fiabilité (demandée par l'auteur de ce journal), c'est pas vraiment le top.
Attention, j'ai pas dit que c'était pas possible de faire les choses proprement en Python, mais comme c'est optionnel, le développeur va plus facilement oublier de le faire à un endroit ou à un autre, volontairement ou pas. Le langage ne le contraint pas à la rigeur.
Donc mon avis, c'est que effectivement, développer en Python est beaucoup plus marrant qu'en Java, car on est plus libre de prototyper (ou de faire de la merde) sans se faire engueuler toutes les 3 secondes par le compilateur. Mais pour développer une appli digne d'un Pierre Tramo Lead Architect, il vaut mieux je pense utiliser un outil strict comme Java.
« La clé d'une langue commune, perdue dans la Tour de Babel, peut être seulement construite par l'usage de l'Espéranto. » Jules Verne.
[^]Re: Java vs Python
En java il y a 2 types d'exceptions :
- Les exceptions que tu dois explicitement gérer et qui sont provoquées par un phénomène normal (comme une sorte de code d'erreur).
- Les exeptions qu'on est pas obligé de gérer (RuntimeExeption ou Error) dues à des erreurs qui laissent l'appli dans un état indéfini.
C'est une très bonne chose que le langage t'oblige à gérer le premier type. Par exemple, un utilisateur qui se trompe en saisissant un entier et qui entraine une erreur de convertion string->int n'est pas un bug du programme, mais ne pas gérer ce cas là en engendrerai certainement un.
Je peut me tromper, mais je ne pense pas que python te permettes d'éviter ce genre d'erreurs de programmation de manière systématique.
Pareil pour le typage, d'expèrience, le typage statique permet clairement de faire des programmes plus maintenables, et d'éviter les surprises à l'exécution ...