• Aucun résultat trouvé

Td corrigé Notes de cours #2 - UQAC pdf

N/A
N/A
Protected

Academic year: 2022

Partager "Td corrigé Notes de cours #2 - UQAC pdf"

Copied!
1
0
0

Texte intégral

(1)

Notes de cours #2

Correction des exercices du 1

ième

cours.

1) Programmer un objet calculatrice qui reçoit deux chiffres demandés à l’usager et qui retourne le résultat de l’addition. Utiliser la méthode Lire, ici bas.

CCalculatrice.java

public class CCalculatrice

{ public static void main (String Arg [] ) {

while (true) {

char N1 = Lire();

char N2 = Lire();

Calcul C = new Calcul (N1, N2);

C.Calculer();

C.Afficher();

} }

public static char Lire() {

char Retour = 'j';

try {

Retour = (char)System.in.read();

while ((char)System.in.read() != '\n');

}

catch (java.io.IOException e) { //Ca arrive jamais!!!

}

return Retour;

}

(2)

CCalcul.java

public class CCalcul {

private int Nombre1;

private int Nombre2;

private int Resultat;

public CCalcul (char No1, char No2) {

Nombre1 = (int)(No1-'0');

Nombre2 = (int)(No2-'0');

}

public void Calculer () {

Resultat = Nombre1 + Nombre2;

}

public void Afficher() {

System.out.println ("La somme est " + Resultat);

}

public int retResultat() //Accesseur de Resultat {

return Resultat;

(3)

2) Programmer un simulateur de chronomètre qui demande le temps à l’usager, puis qui affiche un décompte jusqu’à 0 de ce temps.

 Utilisez la méthode currentTimeMillis() de l’objet System. Elle retourne le nombre de milli-seconde depuis 1970.

CPetard.java

public class CPetard {

public static void main (String Arg [] ) {

while (true) {

char Temps = Lire();

CChrono Bombe = new CChrono(Temps);

Bombe.depart();

} }

public static char Lire() {

char Retour = 'j';

try {

Retour = (char)System.in.read();

while ((char)System.in.read() != '\n');

}

catch (java.io.IOException e) {

//Ca arrive jamais!!!

}

return Retour;

} }

CChrono.java

class CChrono {

private int Temps;

public CChrono(char T) { Temps = T-'0'; } public void depart()

{

while (Temps > 0) {

System.out.println (""+ Temps);

long T1 = System.currentTimeMillis();

while ((System.currentTimeMillis() - T1) <1000);

Temps--;

}

System.out.println ("Booom!!!");

}

(4)

L’encapsulation et la modularité

L’encapsulation consiste à mettre le plus de membres possibles privés dans une classe et de ne laisser ainsi que quelques membres publics. En général et sans exception dans le cadre du cours, les attributs non constants d’une classe sont privés. L’ensembles de ce qui est privé dans un objet s’appelle le noyau. Ce qui est publique s’appelle l’interface de l’objet ou de la classe.

La modularité est une visée qui donne un sens à l’encapsulation. On essaie de regrouper les variables et leurs traitements en une classe et de séparer ceux-ci du reste.

L’idée est de créer un objet qui sera simple à utiliser et qui sera indépendant.

On peut, par exemple, créer une Pile d’entier. On se crée donc une classe « Pile » qui empile ou dépile des entiers. On s’attend à avoir une utilisation de la classe qui ressemble à la classe Imprimante que vous voyez ci-bas.

Exemple :

CImprimante.java

import java.util.Random;

/**

* Classe qui utilise la CPile pour faire un exemple en classe.

*/

class CImprimante {

/**

* Petit "main" qui permet de verifier la classe CPile.

*/

public static void main (String Arg[]) {

Random Choix = new Random();

CPile PileImpression = new CPile();

PileImpression.empiler(10);

PileImpression.empiler(14);

PileImpression.empiler(20);

PileImpression.empiler(70);

PileImpression.empiler(211);

for (int x=0; x < 5; x++)

PileImpression.empiler ((Choix.nextInt())%100);

System.out.println (" ********** ");

while (!(PileImpression.Vide())) PileImpression.depiler() ; System.out.println();

(5)

Il faut programmer la classe « Pile » pour qu’elle réponde à nos besoins (utilisation), pour qu’elle se comporte comme nous voulons. Voici une classe Pile faisant l’affaire, il en existe une infinité d’autres.

CPile.java

public class CPile {

private int PileEntier[];

private int SommetEntier;

private int Pas;

private void Allonger() {

int Tamp[] = PileEntier;

PileEntier = new int[Tamp.length+Pas];

for (int x=0; x<Tamp.length; x++) PileEntier[x] = Tamp[x];

for (int x=Tamp.length; x < PileEntier.length; x++) PileEntier[x] =0;

}

public CPile() {

this (10);

}

public CPile (int Taille) {

PileEntier = new int[Taille];

SommetEntier = 0;

Pas = Taille;

(6)

public void empiler(int Nouv) {

PileEntier[SommetEntier] = Nouv;

SommetEntier++;

System.out.println ("Empiler: " + Nouv);

if (SommetEntier+1 > PileEntier.length) Allonger();

}

public int depiler() {

int Retour=0;

if (SommetEntier >0) {

SommetEntier--;

Retour = PileEntier[SommetEntier];

PileEntier[SommetEntier] = 0;

} else

Retour = -1;

System.out.println ("Depiler: " + Retour);

return Retour;

}

public boolean Vide () {

if (SommetEntier <= 0) return true;

else return false;

(7)

La notion d’héritage

L’héritage est un mécanisme de la programmation orienté objet qui consiste à bâtir une classe à partir d’une autre. Cette nouvelle classe possède toutes les caractéristiques de la classe parente. Les méthodes de la classe enfant peuvent affecter les membres publics et protégés de la classe parente, mais pas les membres privés.

C’est le mécanisme le plus puissant de la programmation orientée objet, en plus de permettre la réutilisation, il permet de modéliser et de généraliser la conception d’objets. En Java, pour faire de l’héritage, il suffit d’utiliser le mot « extends » dans la définition de la classe, suivit du nom de la classe parente. L’héritage est transitif, c’est à dire que si un objet hérite d’une classe qui hérite elle même d’une autre classe, la classe petit-enfant hérite de tous les membres de son père et de son grand-père.

CZoo.java

public class CZoo {

public static void main (String Arg[]) {

CChien Bob = new CChien ("Blanc");

CLevrier Lev = new CLevrier ();

CLevrier Lev2 = new CLevrier ("King");

CCaniche Boul = new CCaniche ();

Bob.Crie();

Lev.Crie();

Lev2.Crie();

Boul.Crie();

System.out.println ("******************************");

CMammifere Maturin[] = new CMammifere [4];

Maturin[0] = new CChat ();

Maturin[1] = new CChien ("Snoopy", 5);

Maturin[2] = new CLevrier ("P'tit rene au nez rouge");

Maturin[3] = new CCaniche ("Frimousse", 9);

for (int Annee = 0; Annee < 10; Annee ++) {

System.out.println ("**** Annee : " + Annee + " *********");

for (int y=0; y < 4; y++) Maturin[y].Vieilli();

} }

(8)

CMammifere.java

abstract public class CMammifere {

private int Age; // Age courante de l'animal

private int Max; // Age de la mort écrite dans les gènes

public CMammifere () {

this (0, 5);

}

public CMammifere (int Max) { this (0, Max); }

public CMammifere (int A, int M) {

Age = A;

Max = M;

}

public void Vieilli () {

Age ++;

if (Age == Max) Crie();

if (Age > Max) {

System.out.print ("Dejà " + (Age - Max) + " an");

if (Max-Age > 1)

System.out.print ("s");

System.out.println ();

} }

abstract public void Crie ();

}

CChat.java

public class CChat extends CMammifere {

CChat() { super (3); }

public void Crie() {

System.out.println ("Miaou!");

(9)

CChien.java

public class CChien extends CMammifere {

String Couleur;

public CChien() {

this ("Brun");

}

public CChien(String C) {

this (C,4);

}

public CChien (String C, int M) {

this (C,0,M);

}

public CChien (String C, int A, int M) {

super (A, M);

Couleur = C;

}

public void Crie () {

System.out.println ("Ouaf!");

}

(10)

CCaniche.java

public class CCaniche extends CChien {

private String Nom;

public CCaniche() { this ("Fido", 4);

}

public CCaniche(String C) { this (C, 4);

}

public CCaniche(String C, int M) { this("Fido",C,0,M);

}

public CCaniche(String N, String C, int A, int M) { super(C,A,M);

Nom = N;

}

public void Crie()

{ System.out.println ("Cui, Cui...");

} }

CLevrier.java

public class CLevrier extends CChien {

private String Nom;

public CLevrier() { this("Fido"); }

public CLevrier(String N) { Nom = N; }

public CLevrier(String C, int M) { this("Fido", C, 0, M); } public CLevrier(String N, String C, int A, int M)

{

super(C,A,M);

Nom = N;

}

public void Crie () {

System.out.println ("Win!!");

} }

(11)

1) Instancier un objet de chaque classe et essayez chacune des méthodes à l’aide d’un petit « main ».

2) Créer des classes « DeGouttiere » et « Siamois » qui héritent de chat.

Chacune doit redéfinir la méthode « Crie » et permettre l’utilisation de plusieurs constructeurs.

3) En créant une classe héritant de « JFrame » du package « javax.swing.* », concevez une fenêtre vide et faites la apparaître. Référez-vous au site de

« sun » pour les méthodes spécifiques à la manipulation des fenêtres.

4) Faite une fenêtre ayant pour titre « Première Fenêtre ».

Références

Documents relatifs

Programme Exemple de séquence Prérequis Ressources * Activité Objectifs en terme de connaissances fondamentale.. Objectifs en terme de savoir faire

Première partie : Energétique Deuxième partie : Moteur à courant continu. Troisième partie : Transformateur

-Respect des modalités prévues, et consignes données pour effectuer un travail (par le maître et l’élève) : préserver la réflexion de chacun au cours d’1 travail individuel,

Dans la continuité des programmes de l’école primaire, les nouveaux programmes du collège recommandent d’entretenir et de développer les compétences des élèves en calcul

De plus, le titre du roman concentre l’attention du lecteur sur un animal qui est somme toute assez peu présent tout au long du roman. Les quatre scènes de rencontre avec le lion

Cette méthode prend en paramètre une chaîne de caractères, qui est obtenue directement pour les types prédéfinis, et par la méthode toString() appliquée implicitement pour tous

Écrire l'énoncé nécessaire pour produire le numéro des départements qui n'ont jamais embauché d’employés durant le mois de janvier.. Les numéros de département identiques

Une pile saline, de type Leclanché, est constituée par deux couples oxydo-réducteur reliés par un pont permettant leur contact. A la borne négative, le zinc Zn(s) est oxydé en ions