Menu

2013-10-16  Edit

crim.fr, prof java

Classes et objets

Corrigé de l'exercice « Désaccentuation »

:::java
    package fr.crim.a2013.i18n;

    /**
     * Une classe de service pour le français
     * 
     * @author Pierre DITTGEN
     * @version 0.1beta
     */
    public class Fr {

        /**
         * Méthode principale. Récupère les paramètres de la ligne de commande et
         * les affiche en retirant préalablement les accents
         * 
         * @param args
         *            paramètres de la ligne de commande
         */
        public static void main(String[] args) {

            // Information d'usage si l'utilisateur
            // n'a pas passé de paramètres
            if (args.length == 0) {
                System.err.println("usage: fr.crim.a2013.i18n.Fr mot [ mots ]");
                System.exit(1);
            }

            // Traitement de l'ensemble des paramètres un à un
            String sep = "";
            for (String arg : args) {
                System.out.print(sep + monoton(arg));
                sep = " ";
            }

            // Retour à la ligne
            System.out.println();
        }

        /**
         * Retire les accents d'une chaîne. Ne traite que les lettres accentuées du
         * français, cf. "Diacritiques_utilisés_en_français" sur Wikipedia
         * 
         * @param chaine
         *            La chaîne de caractères à désaccentuer
         * @return la chaîne sans accents
         */
        public static String monoton(String chaine) {

            // La chaîne à renvoyer
            String ret = "";

            // Parcours lettre à lettre de la chaîne
            for (int i = 0; i < chaine.length(); i++) {

                // Le caractère à examiner
                char cc = chaine.charAt(i);
                switch (cc) {
                case 'À':
                case 'Â':
                case 'Ä':
                    ret += "A";
                    break;
                case 'Æ':
                    ret += "AE";
                    break;
                case 'Ç':
                    ret += "C";
                    break;
                case 'È':
                case 'É':
                case 'Ê':
                case 'Ë':
                    ret += "E";
                    break;
                case 'Î':
                case 'Ï':
                    ret += "I";
                    break;
                case 'Ô':
                case 'Ö':
                    ret += "O";
                    break;
                case 'Œ':
                    ret += "OE";
                    break;
                case 'Ù':
                case 'Û':
                case 'Ü':
                    ret += "U";
                    break;
                case 'Ÿ':
                    ret += "Y";
                    break;
                case 'à':
                case 'â':
                case 'ä':
                    ret += "a";
                    break;
                case 'æ':
                    ret += "ae";
                    break;
                case 'ç':
                    ret += "c";
                    break;
                case 'è':
                case 'é':
                case 'ê':
                case 'ë':
                    ret += "e";
                    break;
                case 'î':
                case 'ï':
                    ret += "i";
                    break;
                case 'ô':
                case 'ö':
                    ret += "o";
                    break;
                case 'œ':
                    ret += "oe";
                    break;
                case 'ù':
                case 'û':
                case 'ü':
                    ret += "u";
                    break;
                case 'ÿ':
                    ret += "y";
                    break;

                // Si le caractère n'est pas reconnu comme accentué
                // on le conserve tel quel
                default:
                    ret += cc;
                }
            }

            // Renvoi de la chaîne créée
            return ret;
        }
    }

Classes et objets

Classe

  • définition d'un ensemble cohérent :
    • structure de données (membres, attributs)
    • fonctions qui agissent sur ces données (méthodes)
  • -> Cette définition dépend de l'usage que l'on souhaite en faire
  • un module fonctionnel qui « rend des services » (contrat, javadoc)
  • un moyen de cacher la complexité (encapsulation)
  • un bout de code + ou - autonome (responsabilité, réutilisation)

Instance (ou objet)

  • On crée un nouvel objet (ou instance) d'une classe avec « new »
  • Tous les objets d'une même classe possèdent les mêmes méthodes et les mêmes attributs mais dont les valeurs peuvent varier d'une instance à l'autre.

Différence classe / objet

  • Il y a une seule classe, mais il peut y avoir un nombre illimité d'objet de cette classe
  • un attribut de classe = commence par static et a la même valeur pour tous les objets
  • une méthode de classe = commence par static et n'est pas attaché à une instance
  • un attribut d'instance = peut avoir une valeur différente pour chaque objet
  • une méthode d'instance = se comporte différemment en fonction de l'état interne de l'objet

TP - Modélisation d'un thésaurus multilingue simplifié

  • But : modéliser un thésaurus multilingue simplifié constitué de termes dans une langue donnée ayant une/des équivalences avec d'autres termes dans d'autres langues

1ère étape - mise en place

  • Modéliser la classe Terme d'après l'usage que l'on souhaite en faire
  • Créer une nouvelle arborescence de projet
  • Créer la classe fr.crim.a2013.i18n.Terme avec uniquement ses attributs
  • Créer une classe fr.crim.a2013.i18n.Thesaurus qui contiendra uniquement une méthode main(String args[]) qui nous permettra de manipuler les termes du thésaurus

2ème étape - créer et afficher des termes

  • Dans la méthode main de la classe fr.crim.a2013.i18n.Thesaurus, instancier trois instances de notre classe fr.crim.a2013.i18n.Terme : t1, t2, t3 avec par exemple, un même terme dans 3 langues différentes ("maison", "house", "Hause")
  • Utiliser l'accès direct aux attributs pour donner des valeurs à vos termes
  • Afficher le contenu de chacun des termes avec System.out.println()
  • Créer une méthode static void afficheTerme(Terme t) au sein de la classe fr.crim.a2013.I18n.Thesaurus pour afficher un terme sous la forme : term (langue)
  • Utiliser la méthode afficheTerme(Terme t) dans la méthode main(String[] args) pour afficher le contenu de chacun des 3 termes
  • Test : ajouter le mot clef static devant la déclaration de l'attribut "langue" de la classe Terme et visualiser la différence dans l'affichage (puis retirer le mot clef static)
  • Test : Que s'affiche-t-il lorsque l'on n'initialise pas un des attributs d'un terme ? Quelles sont les valeurs par défaut des attributs ?
  • Test : Rendre les attributs privés (en ajoutant le mot clef "private") lors de leur déclaration. Recompiler et relancer la classe Thesaurus.

3ème étape - Constructeur personnalisé et méthode toString()

Le constructeur est une méthode d'initialisation appelée lors de la création d'une instance de classe (= objet). Un constructeur sans paramètre existe par défaut lorsque l'on n'en définit pas.
* Créer un constructeur sans paramètre comme suit avant la déclaration des attributs :

public Terme() {
    System.out.println("Je m'initialise");
}
  • Recompiler et exécuter à nouveau la classe Thesaurus.
  • Ajouter les paramètres nécessaires au constructeur pour positionner les attributs dans le constructeur et modifier le code dans la classe Thesaurus en fonction.
  • Déplacer la méthode afficheTerme de la classe Thesaurus à la classe Terme, pour pouvoir appeler la méthode directement sur l'instance : t1.afficheTerme()
  • Modifier les appels à afficheTerme en fonction
  • Test : qu'affiche l'instruction suivante ?
System.out.println(t1);
  • Créer une méthode toString() qui renvoit une représentation du terme sous forme de chaîne (en s'inspirant du code de la méthode afficheTerme). Modifier le code de la classe Thésaurus en fonction.
  • Rendre les attributs de Terme privés. Recompiler et executer la classe Thesaurus.

Pour la prochaine séance [2013-10-23]

  • Lire le chapître 6 "Les classes et les objets" du manuel

Related

Wiki: Home 2013-12-11 22:25:56.186231
Wiki: Home

Discussion

Anonymous
Anonymous

Add attachments
Cancel





MongoDB Logo MongoDB