IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Nom de fichier source = Nom de classe publique


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Nom de fichier source = Nom de classe publique
    Bonjour,
    j'ai un niveau modeste en programmation Java, mais il y a un point précis que j'aimerais élucider.

    Je sais qu'en Java tout fichier source contenant une classe publique doit:
    1) contenir au plus une classe déclarée publique;
    2) avoir le même nom (casse comprise) que cette classe publique.

    J'ai compris que ne pas respecter 1) ou 2) provoque une erreur de compilation. J'ai aussi remarqué que, dans la mesure où on impose la règle 2), la règle 1) devient obligatoire. Mais y-a-t-il une raison, une explication à la règle 2)? J'ai l'impression que la règle 2) a été imposée à la conception du langage, sans raison véritablement profonde. Quelqu'un a-t-il une idée sur cette question?
    Merci d'avance,
    FB.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    C'est une facilité pour le compilateur et pour le programmeur. Si tu peux déclare la classe publique X dans le fichier Y.java et que tu demande au compilateur de compiler X, on n'a pas envie à chaque invocation du compilo que celui si s'amuse à scanner tout le buildpath pour trouver X dans un fichier qui n'a rien à voir. Et pour le programmeur, quand tu a besoin d'aller modifier X, tu sais qu'il faut aller dans X.java et pas Y.java.

    Bref, ce sont surtout des choix liés au design et à la facilité qui aujourd'hui ont de fortes implications puisque tous les outils liés à la compilation partent de cet a priori.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 5
    Points
    5
    Par défaut [Résolu]
    Merci, c'est bien ce que je pensais. Je crois que dans d'autres langages (C# ?) il n'y a pas cette obligation.
    Cdlt,
    FB.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 856
    Points : 22 885
    Points
    22 885
    Billets dans le blog
    51
    Par défaut
    Non effectivement C# n'a pas cette obligation. De même qu'il permet d'exploser une classe sur plusieurs fichiers comme en C++, ce que ne permet pas Java.
    Après il faut cependant voir quelles sont les bonnes pratiques de programmation dans ce langage (ce n'est pas parce que tu as la possibilité de faire un truc que c'est forcement bien de le faire).

    Le choix semble avoir été fait durant l’établissement des spécifications de Oak pour optimiser le compilateur :

    Citation Envoyé par http://www.javaspecialists.eu/archive/Issue055.html
    Why is each public class in a separate file? (Section 1)

    This is a question that I have frequently been asked during my courses. Up to now I have not had a good answer to this question. In section 1, we read: "Although each Oak compilation unit can contain multiple classes or interfaces, at most one class or interface per compilation unit can be public".

    In the sidebar it explains why: "This restriction is not yet enforced by the compiler, although it's necessary for efficient package importation"

    It's pretty obvious - like most things are once you know the design reasons - the compiler would have to make an additional pass through all the compilation units (.java files) to figure out what classes were where, and that would make the compilation even slower.
    Ceci dit, mon avis perso est que coté développeur, à l’époque ou Java a été créé (c'est a dire avant le C#) lorsque les IDE étaient encore balbutiants voire inexistant (sous Unix/Linux) ou alors pas abordable (sous Unix/Windows), genre hors de prix, et donc qu'on éditait le plus souvent avec des éditeurs de texte (VI, Emacs, notepad, etc.) cela avait tout son sens pour simplifier ce qui rendait le C et C++ assez complexe à manipuler lorsqu'on utilisait du code en provenance de sources diverses (chacun ayant sa méthode d'organiser des classes/objets/structs).

    Donc, même lorsque je fais du C++ ou du C#, j’évite d'exploser du code partout ou dans des fichiers qui ne portent pas le nom de ce qu'ils contiennent parce que franchement je trouve ça moche et que j'ai du mal a m'y retrouver après. Que ça porte le nom d'une unité fonctionnelle (comme en C) pourquoi pas mais en fait avoir le nom de la bonne classe dans le bon namespace/package/répertoire c'est pas mal aussi comme méthode de rangement pour s'y retrouver aisément.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nom des fichiers source d'un programme ELF
    Par kaoutarre dans le forum Débuter
    Réponses: 1
    Dernier message: 27/07/2013, 09h57
  2. Attribuer le nom du fichier comme nom de variable
    Par plobanalec78 dans le forum MATLAB
    Réponses: 4
    Dernier message: 24/09/2008, 17h03
  3. [ASE]Intégration contenu d'un fichier et nom de fichier
    Par Neo-Syu dans le forum Adaptive Server Enterprise
    Réponses: 1
    Dernier message: 29/11/2007, 13h18
  4. Ajouter au noms des fichiers le nom du rep
    Par nestam dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 28/08/2007, 18h42
  5. Récupérer le nom du fichier source dans son source
    Par jeromechezgdf dans le forum C#
    Réponses: 2
    Dernier message: 18/07/2007, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo