Le menu
À retenir
Outils
- Convertisseur de code source en HTML
- Générateur de lien en (x)HTML
- Traduction Français-Esperanto online
Vie pratique
Portfolio
Présidentielles
Culture
- Respect des droits d'auteurs et droits voisins — Refus des Mesures Techniques de Protection (MTP)
- Licence globale : finalement je suis contre...
- Lettre à la SACEM : Réaction par rapport au projet de loi DADVSI
- Reprenons en main la culture !
- Gestion Numérique des droits (DRM) : une question de confiance
- Gestion Numérique des droits (DRM) : une question de confiance (2)
Archives
- Septembre 2008
- Aout 2008
- Juillet 2008
- Juin 2008
- Mai 2008
- Avril 2008
- Mars 2008
- Février 2008
- Janvier 2008
- Décembre 2007
- Novembre 2007
- Octobre 2007
- Septembre 2007
- Aout 2007
- Juillet 2007
- Juin 2007
- Mai 2007
- Avril 2007
- Mars 2007
- Février 2007
- Janvier 2007
- Décembre 2006
- Novembre 2006
- Octobre 2006
- Septembre 2006
- Aout 2006
- Juillet 2006
- Juin 2006
- Mai 2006
- Avril 2006
- Mars 2006
- Février 2006
- Janvier 2006
- Décembre 2005
- Novembre 2005
- Octobre 2005
- Septembre 2005
- Aout 2005
- Juillet 2005
- Juin 2005
- Mai 2005
- Avril 2005
- Mars 2005
- Février 2005
- Janvier 2005
- Décembre 2004
- Novembre 2004
- Octobre 2004
Spornikethon
- Mes créations vous plaisent ?
- Vous voulez me soutenir financièrement ?
- Cliquez sur un des boutons ci-dessous selon le montant du dons.
- Merci !
Rouleaux de blogs
Mes préférés
Les amis
- Les bla-blas de Chibi
- Lysel
- Orpheelin
- Nae-chan in Psycholand
- Circée
- Faery Book
- Les bijoux de Hime-Decco
Divers
Mes liens
- Non à la brevetabilité des logiciels en Europe
- Promotion d'artistes proposant de la musique légale et gratuite à télécharger
- Associations pour le Maintien d’une Agriculture Paysanne
- La Bible
- Wikipédia
- Le Trésor de la Langue Française Informatisé
- Liste prête à l'emploi pour Adblock
- Partitions pour guitare classique
- Forum francophone pour les collectionneurs et créateurs de poupées
- Association sportive et culturelle du 13ème arrondissement
Bombardement Google
Conventions de nommage
Le 22 Avril 2005 à 20:21
Introduction
Pour maintenir et faire évoluer un logiciel, un programmeur doit en comprendre tous les rouages. Cette compréhension nécessite plusieurs éléments : des connaissances générales sur les tâches accomplies par le logiciel et la motivation pour accomplir ces tâches d'une certaines façon. Certains de ces éléments peuvent être explicités dans un cahier des charges et des spécifications, mais parfois le programmeur peut se retrouver avec le code source du programme pour unique référence. Si le code source est bien écrit
, le programmeur pourra facilement l'étudier, ce qui aidera à la compréhension.
Le language Java a implémenté dès sa conception un outil permettant de générer une documentation à partir des fichiers source, pour peu que ces fichiers comportent des commentaires spéciaux : javadoc. Cet outil incite naturellement à expliquer le code source au plus près. De plus le Java a aussi fortement poussé les développeur à regrouper le code dans des paquetages et à isoler les modélisation en utilisant des concepts simple : un fichier pour une classe, un dossier pour un paquetage.
En revanche, pour le nommage des différentes entités (paquetages, classes, fonctions, variables), il n'y aucun mécanisme de contrôle fourni, juste des conventions basés sur l'expérience et les usages dans d'autres langages de programmation. Les conventions de nommages permettent de faciliter la lecture en permettant d'identifier la nature des entités nommées.
Les conventions existantes
Les conventions sur lesquelles je me base sont celles de Sun, le créateur du language Java [1], et celles d'Ambisoft [2]. Cependant, mes goût personnels et ma propre réflexion m'on conduit à préciser certains usage, ou bien d'utiliser ma propre convention [3].
Les bases
Le principe général est d'utiliser des descriptions en anglais en utilisant des mots complets, sauf pour des abréviations largement reconnu (HTML, par exemple). On utilisera les minuscules et on mettra la première lettre de chaque mot ou abréviation en majuscules. L'utilisation des majuscules et du caractère « souligné » (« _ ») sera explicitement précisé si besoin. Enfin on autorise l'utilisation des chiffres.
On distingue les classes de noms suivantes :
- Nom de variable
- Nom de type (paquetage, classe)
- Nom de fonction (méthode, constructeur, destructeur)
Enfin on rappellera la convention concernant le nommage et l'organisation des fichiers sources : un paquetage correspond à un dossier ayant le même nom, l'imbrication des paquetages se traduit par l'imbrication des dossiers, et le code source d'une classe est placé dans un fichier portant le même nom que la classe.
Nom de variable
Un nom de variable consiste en un groupe nominal décrivant la nature de la variable (adresse, compteur, compte client, etc...) et sa fonction (point de départ, compte client à créditer, message d'erreur, etc...).
On utilisera le singulier pour les objets à l'unité, et le pluriel accompagné du terme« collection » pour les collections d'objets.
L'objectif des différentes normes sur les noms de variables est de pouvoir distinguer immédiatement la portée d'une variable, et d'éviter les collisions de nom entre deux variables de portée différentes.
On distingue les portées suivantes avec entre parenthèses des cas particuliers :
- Variable locale (exception, variables de boucle)
- Paramètre d'une fonction
- Variable d'instance
- Variable de classe modifiable
- Variable de classe constant
Variable locale
Convention
On utilisera une description complète en anglais, tout en minuscules, les mots séparés par un caractère « souligné ». Pour les descriptions tenant sur un seul mot, on rajoutera « a » ou « an » (« un » en anglais) au début de la description.
Pour les boucles for
, on tolèrera les noms de variable classique : i
, j
, etc...
Pour le traitement des exceptions, on tolèrera les noms de variable en e*
: e
, e1
, exc
, etc...
Exemples
an_address customer_account customer_account_to_credit starting_point error_message html_document customers_collection
for (i=...; ... ; ...) { ... }
try { ... } catch (IOException e) { ... try { ... } catch (IOException ee) { ... } }
Paramètre d'une fonction
Convention
On utilisera une description complète en anglais, la premières lettre des mots sera en majuscules, à l'exception du premier mot qui sera en minuscules.
Exemples
address customerAccount customerAccountToCredit startingPoint errorMessage htmlDocument
Variable d'instance
Convention
On suivra la même convention que pour les paramètres, mes on préfixera le nom de variable avec « my ».
Exemples
myAddress myCustomerAccount myCustomerAccountToCredit myStartingPoint myErrorMessage myHtmlDocument
Variable de classe modifiable
Convention
On suivra la même convention que pour les paramètres, mes on préfixera le nom de variable avec « the ».
Exemples
theAddress theCustomerAccount theCustomerAccountToCredit theStartingPoint theErrorMessage theHtmlDocument
Variable de classe constante
Convention
On utilisera une description complète en anglais, tout en majuscule, les mots séparés par un caractère « souligné ».
Exemples
ADDRESS CUSTOMER_ACCOUNT CUSTOMER_ACCOUNT_TO_CREDIT STARTING_POINT ERROR_MESSAGE HTML_DOCUMENT
Nom de type
Le nommage des types regroupe deux classes :
- Les paquetages (package), qui servent à regrouper logiquement ou par fonctionnalité les types.
- Les classes (class, interface), qui modélisent un concept.
Les paquetages
Convention
On utilisera une description complète en anglais, tout en minuscules, les mots séparés par un point. Si on dispose d'un nom de domaine, le premier mot sera le domaine racine (TLD, Top Level Domaine) et le deuxième de nom de domaine.
Exemples
application.ide.widget com.sporniket.component.io
Les classes
Convention
On utilisera une description complète en anglais, en minuscules avec la première lettre des mots en majuscules.
Plus la description sera longue, plus la classe sera spécifique. Inversement, plus la description sera courte, plus la classe sera générique
Exemples
Display ColorDisplay LiquidCrystalDisplay
Cas des classes abstraites
Convention
Une classe abstraite suivra la convention de nommage des classes, mais on préfixera le nom avec le terme « abstract ».
Exemples
AbstractDisplay AbstractWidget
Cas des interfaces
Convention
Une interface suivra la convention de nommage des classes, et on distingue deux possibilités :
- L'interface peut être décrite par un terme dénotant une capacité (mot en « -able »), auquel cas on ne rajoute rien.
- Les autres cas, où on suffixera le nom avec le terme « interface ».
Exemples
Displayable WidgetInterface
Nom de fonction
Un nom de fonction consiste en verbe et ses complément (« fait ceci et cela »).
On distinguera les cas suivant :
- Cas général
- Constructeurs
- Destructeur
- Accès en lecture (JavaBean)
- Accès en écriture (JavaBean)
Cas général
Convention
Le nom de la fonction utilisera une description complète en anglais, commençant par un verbe en minuscules et éventuellement suivi de mots en minuscules avec la première lettre en majuscule.
Exemples
doThisAndThat(...) execute(...) addAccount(...) openFile(...)
Constructeurs
Convention
Les spécifications du langage Java imposent aux constructeur d'avoir le même nom que la classe.
Exemples
Public class RequestBuilder { public RequestBuilder() { //initialisation } public RequestBuilder(Connection connection, String request) { //initialisation } //etc... }
Destructeur
Convention
Les spécifications du langage Java imposent au destructeur (si cela est nécessaire) le nom « finalize() ».
Accès en lecture
Convention
La convention JavaBean pour accéder à une propriété en lecture est d'utiliser le verbe « get » suivi du nom de la propriété, à l'exception des propriétés booléennes qui peuvent utiliser le verbe "is". Il y a découplage entre l'accès en lecture d'une propriété dans le cadre d'un JavaBean et son implémentation : variable d'instance ou résultat d'un traitement à effectuer.
Exemples
Public class RequestBuilder { public String getRequest() { //retourne la requête } public String getResultSet() { //execute la requête et retourne le résultat } //etc... }
Accès en écriture
Convention
La convention JavaBean pour accéder à une propriété en lecture est d'utiliser le verbe « set » suivi du nom de la propriété. Il y a découplage entre l'accès en écriture d'une propriété dans le cadre d'un JavaBean et son implémentation : affectation directe à une variable d'instance ou encore vérification et notification préalable.
Exemples
Public class RequestBuilder { public void setRequest(String request) { //met à jour la requête interne } public void setNameParameter(Object value) { //effectue des tests de conformité avant l'affectation effective } //etc... }
Nouvelle mise à jour du style
Le 14 Avril 2005 à 04:11
Cette fois c'est fini, avec le bandeau, le style du site est achevé. De plus j'ai fait les corrections qui permettent à mon site de valider, voir les petites icônes officielles en bas.
Affaire Universal Music/Johnny Hallyday : vive l'autoproduction !
Le 12 Avril 2005 à 14:07
Le contentieux entre Johnny Hallyday et Universal Music illustre bien la raison pour laquelle je choisi d'ores et déjà l'autoproduction de mon futur disque.
On pourra me rétorquer que sans maison de disque, beaucoup d'artistes n'auraient pas pu vivre de leur art. Certes. C'est pour cela que j'adapte mon projet à cette contrainte : je garde mon boulot, et je mettrait mes compositions en téléchargement gratuit sur Internet, sans frais.
Toujours dans cette optique de m'autoproduire à terme (voire auto-éditer un futur roman), j'ai un projet mettant en oeuvre quelques-uns de mes talents pour obtenir le financement nécessaire.
Beaucoup de boulot en perspective, pour un résultat qui n'est pas garanti, mais quoi qu'il arrive, je me serai fait un immense plaisir, la liberté en plus...
Liens argumentant contre et pour la constitution
Le 11 Avril 2005 à 09:10
Avec l'approche du référendum, les pages de qualités argumentant contre le projet de constitution européenne qu'on nous propose se multiplient. Voici ma sélection de liens, régulièrment actualisée.
- Dix bonnes raisons de voter NON...
- Au NON de la Démocratie
- Témoignage d'un revenu du Oui
- Délocalisations : des rapports explosifs
- Une mauvaise constitution qui révèle un secret cancer de notre démocratie
- Aux Urnes, Citoyens ! : Disons « Non » au projet de constitution européenne pour dire « Oui » à l’Europe
- TCE : Appel pour un NON solidaire ! (Les Verts de Roubaix)
Pour faire bonne mesure, voici quand même quelques liens argumentant en faveur de ce projet
Migration vers Ubuntu : quelle aventure (**** de modem ADSL USB)
Le 03 Avril 2005 à 21:49
Ce dimanche a été assez épique pour le geek du dimanche que je suis : j'ai décidé de migrer d'une Mandrake 10.0 vers Ubuntu 4.10. La raison ? Une envie de changer, de mettre à jour des logiciels, et... n'avoir qu'un seul CD à graver (N'oublions pas que je suis une grosse feignasse tout de même).
Donc je télécharge l'ISO que je grave aussi sec sur un CD, puis j'installe... Hourra ça marche, je récupère mes données, j'ai enfin accès à une résolution sympa et lisible sur mon 19 pouce : 1400 x 1050 pixels, au lieu de 1600 x 1200, et sans bidouiller le fichier de configuration. (Au passage, par défaut Ubuntu utilise la résolution maximale 1920 x 1440)
Et là c'est le drame : mon modem usb (un fast-sagem 800) reste éteint. Enfer et Damnation !!!
Heureusement, j'ai mis mes disques durs en rack, et j'ai toujours un autre disque avec un dual boot Windows 2000 (version légale complète) et Mandrake 9.1. Je peux alors aller télécharger sur le net les packages qui me manquent, installer et configurer.
Finalement, j'ai de nouveau accès au net. Alléluïa mes frères !!!
Pour mémoire
Packages Ubuntu à installer
Les packages qui suivent sont déjà présent, mais il ne sont pas installés. Il suffit d'aller dans le menu "Poste de Travail – Configuration système – Gestionnaire de paquets Synaptic"
- linux-kernel-header
- linux-header-<version>
- gcc
Packages Debian
Sur un poste ayant un accès à Internet, il faut aller sur le site de Debian et chercher parmi les packages individuels.
- module-assistant
Packages spécifique eagle-usb
Sur un poste ayant un accès à Internet, il faut aller sur le site de Eagle-usb, télécharger les packages individuels, et suivre les instructions.
- eagle-usb-data
- eagle-usb-module-sources
- eagle-usb-utils