IFT 232 Méthodes de conception orientée objets Séance d’exercices I Date : Semaine 1 Thèmes abordés : Le langage Java, la réflexivité, les exceptions Quelques questions sur le langage Java 1. Si la classe Point possède une sous-classe, par exemple Tortue, quel sera l’effet de this() ? Que se passe-t-il si vous remplacez par super() /** * Point constructor comment. */ public Point(int x, int y) { this(); // // this.setX(x); // this.setY(y); } super(); this.x = x; setX(x); 2. Au niveau des membres static, comment s’appliquent a. les règles d’héritage ? b. les règles de visibilité ? 3. Vérifier les règles d’accès aux constructeurs. a. Est-il vrai que le système fourni un constructeur par défaut si aucun n’est fourni? b. Que se passe-t-il si un constructeur avec un paramètre est fourni? Peut-on utiliser le constructeur sans paramètre fourni par défaut? Que se passe-t-il si une superclasse invoquait this() ? 4. Peut-on définir la même variable plusieurs fois dans la hiérarchie ? avec des types différents ? avec une visibilité différente ? 5. Quelle est la visibilité par défaut d’une classe ? d’une variable ? d’une méthode ? 6. Supposons deux fichiers .jar (ou répertoire) possédant deux définitions différentes d’une même classe située dans le même package ? Laquelle sera utilisée ? 7. Pour tester vos connaissances, http://www.dickbaldwin.com/tocknowledge.htm . Les premières sont simples, mais certaines ne sont pas toujours évidentes. Faire les sections Fundamentals Part 5 Fundamentals Part 6 Using Modifiers, Part 1 Using Modifiers, Part 2 La Réflexivité Écrire un programme qui permet de manipuler par réflexivité n’importe quel objet. Ce programme devra réaliser les opérations suivantes 1. lecture du nom d’une classe (sur la console ou sur une interface graphique au choix) 2. création d’une instance de cette classe 3. construction de la liste des méthodes publiques sans paramètre 4. affichage de la liste des méthodes publiques sans paramètres (sur la console ou sur une interface graphique au choix) 5. choix d’une méthode par l’usager et invocation de la méthode sur l’objet créé 6. affichage du résultat 7. retour en 4 ou en 1 Pour réaliser ce programme, les éléments suivants devraient vous être utiles Le package java.lang.reflect La classe java.lang.Class La méthodes java.lang.Class.forName() http://java.sun.com/j2se/1.5.0/docs/api/index.html Les exceptions, les collections et les threads Implémenter une banque. Une banque est composée d’un ensemble de comptes de banques. Les opérations bancaires disponibles sur un compte sont : dépôt, retrait et virement. Une banque reçoit des séries de transactions bancaires à traiter en bloc. Une suite d’opérations peut être par exemple [(dépôt, C1, 100), (retrait, C2, 200), (virement, C1, C2, 300)] La banque lance alors un thread indépendant responsable du traitement de chaque série de transactions. Les contraintes suivantes doivent être respectées : A leur création, le solde des comptes est 100. Un solde ne doit jamais être négatif. On ne peut pas déposer/retirer/virer un montant négatif ou supérieur à 1000 Avant d’effectuer une série d’opérations, il faut d’abord bloquer en lecture tous les comptes impliqués. Si une opération échoue, toutes les opérations précédentes de la suite de transactions doivent être défaites. Quoiqu’il arrive lors du traitement d’une série de transactions, les comptes doivent être débloqués. Si une ou plusieurs opérations échouent, la banque doit être informé de l’opération fautive et de la ou des raisons de l’échec. Un thread doit toujours se terminer que le traitement des transactions se passe bien ou non et quelque soit l’erreur. Pour réaliser ce programme, les éléments suivants devraient être utiles http://java.sun.com/docs/books/tutorial/collections/index.html http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html http://java.sun.com/docs/books/tutorial/essential/threads/index.html