TP2 : Les classes, les types primitifs et les références

Dans ce tp nous allons étudier :

Exercice 1 : Création d'une classe

Écrivez une classe Marque possédant les attributs privés suivant :

Ajouter à cette classe un constructeur qui prends en paramètre le nom de la marque et l'année et qui initialise l'objet avec ces informations.

Ajouter l'accesseur public String getNom(); qui renvoie le nom de la marque.

Ajouter l'accesseur public int getAnnee(); qui renvoie l'année de création de la marque.

Ajouter la méthode public void setNom( String nom ); qui modifie le nom .

Ajouter la méthode public void setAnnee( int annee ); qui modifie l'année de la marque.

Ajouter la méthode public void print(); qui affiche à l'écran le contenu de la marque à sur le terminal.

Écrivez une classe Voiture possédant les attributs privés suivants:

Ajouter à cette classe un constructeur qui prends en paramètre le nombre de roues et la marque et initialise l'objet avec ces informations.

Ajouter l'accesseur public int getNbRoues(); qui renvoie le nombre de roue de la voiture.

Ajouter l'accesseur public Marque getMarque(); qui renvoie la marque de la voiture.

Ajouter la méthode public void setNbRoues( int nbRoue ); qui modifie le nombre de roue de la voiture.

Ajouter la méthode public void setMarque( Marque marque ); qui modifie la marque de la voiture.

Ajouter la méthode public void print(); qui affiche à l'écran le contenu de l'objet.

Testez la classe Voiture en créant une classe Exercice1 avec un main().

Exercice 2 : Classes, type primitifs et références

Qu'est-ce qu'un type primitif ? Qu'est-ce qu'une classe ? Qu'est-ce qu'une référence ?

Quelle est la différence entre un type primitif et une classe.

Donner des exemples de types primitifs et des exemples de classes.

Nous allons maintenant mettre en évidence la notion de référence en java et la différence entre types primitifs et classes. Pour cela, vous allez écrire la classe suivante ( avant de compiler essayez de prévoir le résultat ):

public class Exercice2 {
    public static void main(String[] args) {
        Marque marque = new Marque("X", 1910);
        int nbRoues = 4;

        //Différences entre types primitifs et classes
            Voiture voiture0 = new Voiture( marque, nbRoues );

            Marque marqueDeVoiture0 = voiture0.getMarque();
            int nbRouesDeVoiture0 = voiture0.getNbRoues();

            marqueDeVoiture0.setAnnee( 2000 );
            nbRouesDeVoiture0 = 5;

            voiture0.print();

        //Conséquence
            Voiture voiture1 = new Voiture( marque, nbRoues );
            Voiture voiture2 = new Voiture( marque, nbRoues );
            voiture1.print();
            voiture2.print();

            marque.setNom("Y");
            marque.setAnnee( 1950 );
            nbRoues = 1;
            voiture1.print();
            voiture2.print();

            //On souhaite modifier les informations concernant la voiture 1 uniquement,
            voiture1.getMarque().setNom("Z");
            voiture1.getMarque().setAnnee( 2020 );
            voiture1.print();
            voiture2.print();
    }
}

Expliquez et justifiez le résultat obtenu.

Dans la partie conséquence du code précédent, le résultat obtenu correspond-il à nos attentes ? Que faut-il faire pour régler ce problème ?

Modifiez la classe Marque et la classe Voiture, pour que la modification puisse fonctionner correctement.

Exercice 3 : l'opérateur ==

Le but de cet exercice est de comprendre le fonctionnement de l'opérateur == pour les types primitifs et pour les classes.

Lisez le code suivant et essayez de prévoir son exécution :

public class Exercice3 {
    public static void main(String[] args) {
        Marque marque1 = new Marque("X", 1910);
        Marque marque2 = new Marque("X", 1910);
        Marque marque3 = marque1;

        System.out.println( marque1 == marque2 );
        System.out.println( marque1 == marque3 );
        System.out.println( marque2 == marque3 );

        String texte1 = new String("X");
        String texte2 = new String("X");
        String texte3 = texte1;

        System.out.println( texte1 == texte2 );
        System.out.println( texte1 == texte3 );
        System.out.println( texte2 == texte3 );

        int entier1 = 1;
        int entier2 = 1;
        int entier3 = entier1;

        System.out.println( entier1 == entier2 );
        System.out.println( entier1 == entier3 );
        System.out.println( entier2 == entier3 );
    }
}

Exécutez le code et expliquez le résultat obtenu.

En allant chercher dans la javadoc de la classe String, donnez le nom de la fonction qu'il faut utilisez pour comparer les chaînes de caractères. (La documentation de l'API java est consultable sur le site de Java Sun : http://java.sun.com/javase/6/docs/api/)

Valid XHTML 1.1