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

avec Java Discussion :

Comment apprendre à déboguer un code portant sur les classes internes?


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 156
    Par défaut Comment apprendre à déboguer un code portant sur les classes internes?
    À moi
    Bonsoir!

    Je cherche à améliorer mes compétence en débogage et du coup j'ai pris des exercices qui présentent du code qui ne marche pas et je cherche les erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    class Transport {
    	int no;
    	static int annee;
     
    }
     
    class Vehicule extends Transport{
    	int puissance;
    	String couleur;
    	Moteur moteur;
    	static class Moteur{
    		int annee;
    		satic int noC=100;
    		static int puissance;
    		Moteur(){
    			no=noC++;
    			annee=Vehicule.this.annee;
    			puissance=Vehicule.Moteur.puissance;
    			Vehicule.this.annee=annee;
    		}
    	}
    	class Carrosserie{
    		String couleur;
    		Carrosserie(String c){
    			Vehicule.this.couleur=c;
    		}
    	}
    }
     
    class Tourisme extends Vehicule{
    	String marque
    	Tourisme(int n, int p){
    		no=n;
    		moteur.puissance=p;
    		Moteur.puissance=p;
    		}
    }
    Ici je vois que
    1. il y a un problème avec transport qui n'a pas de constructeur tout comme Véhicule. On ne peut donc pas les instancier (Mais-est ce réellement une erreur?).
    2. Dans le constructeur de la classe interne moteur, je n'arrive pas à savoir de quel année on parle avec: car Véhicule n'a pas d'année de base.
    3. Il n'y a pas de main (Mais-est ce réellement une erreur?).
    4. Pour Tourisme, je pense que la première tentative d'instanciation de puissance ne marche pas car comme un Tourisme est un Véhicule qui n'a pas de puissance mais qu'une classe interne, il faut atteindre cette classe et donc mettre Moteeur et non moteur.



    Après passage dans le compitlateur d'Eclipse, je pense aussi que

    • il y a une confusion avec no=noC++, peut-être faut il rajouter un this
    • L'assignement à la variable puissance n'a pas d'effet. Mais je ne sais pas purquoi ni comment résoudre ce problème.

  2. #2
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par AntoineCompagnie Voir le message
    [*]il y a un problème avec transport qui n'a pas de constructeur tout comme Véhicule. On ne peut donc pas les instancier
    Non, quand il n'y a pas de constructeur explicite dans une classe, il y a alors un constructeur implicite qui ne prends pas de paramètre et ne fait rien de de particulier à part appeler le constructeur sans argument du parent. Une classe sans constructeur ça n'existe pas en java.
    Citation Envoyé par AntoineCompagnie Voir le message
    Dans le constructeur de la classe interne moteur, je n'arrive pas à savoir de quel année on parle avec: car Véhicule n'a pas d'année de base.
    Dans les classe internes, la référence ClasseEnglobante.this permet d'accéder à l'instance courante de la classe qui englobe la classe interne. Mais ce n'est valable que pour les classes internes, pas pour les classes internes statiques. Les classes internes statiques existent indépendamment de la classe englobante. Elles sont autonomes. Du coup, dans ton Moteur, Vehicule.this est une erreur. Il faut retirer le static de la définition de Moteur pour en faire une classe interne.

    Citation Envoyé par AntoineCompagnie Voir le message
    Il n'y a pas de main (Mais-est ce réellement une erreur?).
    Le main est les point d'entrée d'un programme. Quand on fait autre chose qu'un programme (une librairie par exemple) on n'a pas de point d'entrée.

    Citation Envoyé par AntoineCompagnie Voir le message
    [*]Pour Tourisme, je pense que la première tentative d'instanciation de puissance ne marche pas
    Il n'y a pas "d'instanciation" de puissance, c'est juste un int. En l'occurence, c'est un champ statique de la classe Moteur, ce qui est conceptuellement une erreur, mais pas aux yeux du compilateur. Ce champ est donc accessible via Moteur.puissance. Le compilateur accepte d'y accéder via une instance de moteur (le moteur.puissance avec minuscule), mais ça déclenche des alertes quand on accède à un champ statique via une instance, car ça sous entends souvent une erreur de programmation.
    Après passage dans le compitlateur d'Eclipse, je pense aussi que

    Citation Envoyé par AntoineCompagnie Voir le message
    [*]il y a une confusion avec no=noC++, peut-être faut il rajouter un this
    même problème qu'avec puisance, no n'est pas accessible depuis Moteur en raison du static. Si tu résoud le static, plus aucune confusion possible.

    Citation Envoyé par AntoineCompagnie Voir le message
    [*]L'assignement à la variable puissance n'a pas d'effet. Mais je ne sais pas purquoi ni comment résoudre ce problème.
    détaille?

Discussions similaires

  1. Suis-je face à un problème de downcasting?
    Par AntoineCompagnie dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/01/2016, 23h37
  2. Réponses: 11
    Dernier message: 14/06/2010, 13h26
  3. Problème de polymorphisme
    Par oodini dans le forum Langage
    Réponses: 6
    Dernier message: 22/05/2010, 07h53
  4. Problème de polymorphisme
    Par Alain Defrance dans le forum C++
    Réponses: 6
    Dernier message: 14/03/2008, 17h03
  5. [IB7.5]Je suis vraiment devant un problème bisard
    Par touhami dans le forum InterBase
    Réponses: 8
    Dernier message: 25/01/2008, 20h43

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