Semaine 1

Activité 1

Auto-évaluation des connaissances du langage Java

Avant de commencer les premières activités du cours, vous devez valider vos connaissances du langage Java. En effet, dans le cadre de la troisième partie du cours (à compter de la semaine 9), vous devrez mettre en pratique la mise au point de prototypes d’interface humain-machine à l’aide du langage Java et de l’API Swing. Il convient de noter que vous devez avoir réussi le cours INF1220 – Introduction à la programmation Java ou un autre cours jugé équivalent pour suivre le présent cours.

L’objectif de la présente auto-évaluation est de vous permettre de juger par vous-même si vous avez les connaissances et compétences en programmation Java nécessaires pour réussir ce cours. Faites l’activité d’auto-évaluation suivante. En effectuant au besoin des recherches sur le Web (ex. : https://docs.oracle.com/javase/8/docs/api/), vous devriez être capable de répondre à toutes ces questions. Lors de l’exercice, si vous éprouvez des difficultés particulières à répondre à toutes les questions suivantes et que vous suivez tout de même le présent cours, vous devez vous attendre à travailler davantage pour combler vos lacunes.

Question 1

Veuillez créer une classe Java permettant de représenter l’utilisateur d’un logiciel à l’aide des informations suivantes : nom d’utilisateur, mots de passe, date de naissance et solde en banque. Ajouter à cette classe les méthodes get et set nécessaires pour accéder à ces données.

Réponse
public class Utilisateur {

    private String nom;
    private String password;
    private Calendar dateNaissance;
    private float solde;

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Calendar getDateNaissance() {
        return dateNaissance;
    }

    public void setDateNaissance(Calendar dateNaissance) {
        this.dateNaissance = dateNaissance;
    }

    public float getSolde() {
        return solde;
    }

    public void setSolde(float solde) {
        this.solde = solde;
    }

}

Question 2

Qu’est-ce qu’une classe abstraite et à quoi ça sert?

Réponse

Qu’est-ce qu’une classe abstraite? : Une classe abstraite est une classe permettant de développer un concept abstrait ne pouvant être instancié. Par exemple, le concept abstrait de voiture peut être développé sous la forme d’une classe abstraite, puis raffiné via l’héritage en classes telles que berline, VUS, etc. À quoi ça sert? : Une classe abstraite sert à définir des méthodes et des attributs communs à plusieurs classes qui ont une similarité conceptuelle via l’héritage.

Question 3

Qu’est-ce qu’une interface en Java (et non une interface humain-machine) et à quoi ça sert?

Réponse

Qu’est-ce qu’une interface en Java? : Tout d’abord, le langage Java ne permet pas l’héritage multiple. Les interfaces permettent de spécifier la signature de méthodes que des classes peuvent par la suite spécifier. Ainsi, une classe peut implémenter plusieurs interfaces, en assumer l’identité et ainsi créer une forme d’héritage multiple sans les problèmes qui s’y rattachent (problème du losange).

Question 4

Veuillez créer une classe qui hérite de la classe ArrayList et qui implémente l’interface Comparable afin de permettre la comparaison de la taille (nombre d’éléments) de deux ArrayList.

Réponse
public class ComparableArrayList<T> extends ArrayList<T> implements Comparable<ArrayList<T>> {

    @Override
    public int compareTo(ArrayList<T> comparing) {
        return this.size() - comparing.size();
    }

}

 

Question 5

Veuillez créer une méthode qui permet de cloner un ArrayList en utilisant une boucle « for », et ce, sans utiliser la méthode clone de ArrayList.

Réponse
public ArrayList<T> clone(ArrayList<T> toClone) {

        ArrayList<T> cloned = new ArrayList<>();

        for(T item : toClone) {
            cloned.add(item);
        }

        return cloned;
    }

Question 6

Quelle sera la sortie de l’appel System.out.println une fois ce code exécuté et pourquoi?

public class Test {

    public static void main(String[] params) {

        StringBuffer a = new StringBuffer("Alice");
        StringBuffer b = new StringBuffer("Bob");

        Test test = new Test();
        test.test(a, b);

        System.out.println(a + "|" + b);

    }

    public void test(StringBuffer a, StringBuffer b) {
        a = b;
        b.append(a);
    }

}
Réponse
La réponse est Alice|BobBob. En Java, les paramètres à une méthode sont passés en référence. L’attribution d’une nouvelle valeur à « a » dans la méthode test n’affectera pas la valeur dans la méthode main, car nous créons ici une nouvelle référence à l’objet qui est locale à la méthode. Par contre, en modifiant (avec la méthode append) l’objet b, puisqu’il y a référence, nous nous trouvons à modifier la valeur de l’objet instancié (et référé) dans la méthode main.