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 :

Chauffage en Java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Par défaut Chauffage en Java
    Bonjour à tous,

    Je débute en Java et plus généralement en langage objet et je butte sur un problème. Je dois réaliser un programme de chauffage composé de 3 objets : un thermomètre, une chaudière et un thermostat.

    J'ai commencé par définir le rôle de chacun de ces objets, à savoir :

    Le thermomètre :
    - possède une valeur d'état en °C
    - sa valeur peut être consultée
    - sa valeur peut être mise à jour

    La chaudière :
    - possède une valeur d'état (allumée ou éteinte)
    - sa valeur peut être modifiée

    Le thermostat :
    - possède une tranche de température d'allumage
    - possède une référence vers le thermomètre qu'il peut consulter
    - possède une référence vers la chaudière qu'il peut piloter

    J'ai ensuite créé les trois fichiers .java pour les trois classes liées à ces objets avec les procédures associées à chacun de ses comportements.

    Pour finir j'ai créé un programme principal Launcher.java qui montre la répercussion d'un changement de température à travers ces trois objets. Dans ce fichier, je créé donc une instance de chaque objet dont un thermomètre que j'initialise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Thermometre thermometre=new Thermometre();
    thermometre.modifierTemperature(5);
    Le programme principal demande au thermostat de consulter la température de ce thermomètre pour agir en fonction sur la chaudière également créée dans le programme principal. J'en viens à mon problème : lorsque je souhaite utiliser un objet dans une autre classe que celle qui l'a créé, celle-ci ne peut pas résoudre l'objet. Typiquement, lorsque j'appelle une procédure de la classe Thermostat qui consiste à consulter le thermometre, ça ne marche pas.

    Mon code Laucher.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    package Chauffage;
     
    public class Launcher {
    	public static void main(String[] args) {
    		Thermometre thermometre=new Thermometre();
    		Chaudiere chaudiere=new Chaudiere();
    		thermometre.modifierTemperature(5);
    }
    }
    Mon code Thermostat.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    package Chauffage;
     
    public class Thermostat {
    	private boolean etat;
    	temperature=thermometre.temperatureCelcius();	
    }
    Mon code Thermometre.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package Chauffage;
     
    public class Thermometre {
        private double temperatureMesuree;
     
        public double temperatureCelcius() {
            return this.temperatureMesuree;
        }
     
    }
    Le code n'est bien sûr pas complet. Pouvez-vous me dire ce qui ne va pas s'il vous plait ? Merci

  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
    Je dirais comme ça que nulle part tu n'instancie un thermostat, et nulle part du ne demande au thermostat de travailler. Du coup si on ne vois pas l'appel aux méthode du thermostat, ce que fais le thermostat, difficile de te dire ce que tu as fais de travers.

    Note qu'il faut que le thermostat consulte régulièrement lui même le thermomètre. Ce n'est pas juste en changeant la valeur du thermomètre que tout va fonctionner par magie. Si tu veux que le thermostat agisse en fonctionne de la nouvelle valeur, il faut commencer par lui dire d'aller chercher cette nouvelle valeur et de la trai

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Par défaut
    Merci pour ta réponse tchize. Oui bien entendu ! Comme je le disais, je n'ai pas publié l'intégralité de mes codes car mon problème était surtout que mon compilateur préféré ne reconnaissait pas les objets créés dans d'autres classes.

    Mais si cela peut paraître plus clair, voilà en gros à quoi je pense :

    Launcher.java :

    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
     
    package Chauffage;
     
    public class Launcher {
    	public static void main(String[] args) {
    		Chaudiere chaudiere=new Chaudiere();
    		Thermostat thermostat=new Thermostat();
    		Thermometre thermometre=new Thermometre();
    		thermometre.modifierTemperature(5);
    		thermostat.Checking();
    		System.out.println(thermometre.temperatureCelcius());
    		System.out.println(thermostat.getValue());
    		System.out.println(chaudiere.getValue());	
    }
    }
    Ici je cré mes objets, j'initialise le thermomètre à 5, je demande au thermostat de me checker son environnement. Pour finir j'affiche l'état des trois objets.

    Thermostat.java :

    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
     
    package Chauffage;
     
    public class Thermostat {
    	private boolean etat;
    		public void Checking() {
    		temperature=thermometre.temperatureCelcius();
    		if(temperature<0)
    		{
    			this.etat=true;
    			chaudiere.Allumer(true);
    		}
    		else
    		{
    			this.etat=false;
    			chaudiere.Allumer(false);
    		}
    	}
    		public boolean getValue() { return this.etat; }
    }
    Ici le thermostat récupère la valeur du thermomètre, la compare et agit sur la chaudière en conséquence. Il peut aussi renvoyer son état. C'est justement là que ça ne marche pas : il ne connait pas les autres objets.


    Thermometre.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    package Chauffage;
     
    public class Thermometre {
        private double temperatureMesuree;
        public double temperatureCelcius() {
            return this.temperatureMesuree;
        }
        public void modifierTemperature(double temperatureActuelle) {
            this.temperatureMesuree = temperatureActuelle;
        }
    }
    Ici le thermomètre renvoie ou modifie sa valeur.


    Chaudiere.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    package Chauffage;
     
    public class Chaudiere {
    	private boolean etat;
    	public void Allumer(boolean commande) { this.etat=commande; }
    	public boolean getValue() { return this.etat; }
    }
    Ici la chaudière modifie ou renvoie sont état.

    Et voilà les erreurs à la compilation :

    Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    temperature cannot be resolved to a variable
    thermometre cannot be resolved
    temperature cannot be resolved to a variable
    chaudiere cannot be resolved
    chaudiere cannot be resolved

    at Chauffage.Thermostat.Checking(Thermostat.java:6)
    at Chauffage.Launcher.main(Launcher.java:9)
    Merci

  4. #4
    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
    Pour que ton Thermostat connaisse ton Thermometre, il faut à une moment donner que tu luis dise c'est quoi le thermomètre. Ta variable thermometre dans main n'est accessible que dans main. Si tu veux un Thermometre dans Thermostat, il faut créer un champs:


    Dans Thermostat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private Thermometre thermometre;
    public void setThermometre(Thermometre thermometre){
        this.thermometre = thermometre;
    }
    et dans main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Thermometre thermometre = new Thermometre();
    Thermostat thermostat = new Thermostat();
    thermostat.setThermometre(thermometre);
    Les variable, en java, ce n'est pas global.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Les variable, en java, ce n'est pas global.
    Merci tchize C'est justement ça que je ne savais pas.
    Je découvre le langage objet mais ça par contre, je ne trouve pas ça très pratique ... Il va falloir faire la même chose pour la chaudière. Ça doit faire vite lourd dans certains cas !

    Merci beaucoup !

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ce n'est qu'une impression. En réalité il n'y a rien de lourd et il faut juste avoir compris le truc.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. le Java est la continuité du C++ ???
    Par Vincent PETIT dans le forum Débats sur le développement - Le Best Of
    Réponses: 33
    Dernier message: 25/08/2005, 20h17
  2. Envoi de Datagrames par IP en JAVA
    Par the java lover dans le forum Développement
    Réponses: 2
    Dernier message: 14/08/2002, 11h44
  3. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55
  4. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

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