Cours de Programmation Java 2016-2017
Cours de Programmation Java 2016-2017
Licence professionnelle
Langage Java
Année: 2016-2017
ORGANISATION DU COURS
Organisation du cours:
• Volume horaire : 12 × 4 heures.
Objectifs:
• Concevoir, écrire et exécuter des programmes en langage Java
Matériel nécessaire:
• Un poste informatique sous Windows.
• Installez eclipse.
Organisation du cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i
Table des matières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii
Notations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv
1 Introduction 1
1.1 Langages informatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Langages de différents niveaux . . . . . . . . . . . . . . . . . . . 1
1.1.2 Etapes de réalisation d’un programme . . . . . . . . . . . . . . 2
1.2 Historique des langages . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 La technologie JAVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1 Environnements de développement . . . . . . . . . . . . . . . . 4
1.3.2 Etapes de développement . . . . . . . . . . . . . . . . . . . . . 5
1.3.3 La machine virtuelle Java JVM . . . . . . . . . . . . . . . . . . 5
4 Exercices 46
5 TP1 55
6 TP2 58
7 TP3 62
8 TP4 64
Bibliographie 66
Voici une liste de notations et des symboles qui seront utilisées au cours de ce cours:
Introduction
• Les langages de haut niveau. Souvent normalisés, ils permettent le portage d’une
machine à l’autre. Ils sont traduits en langage machine par un compilateur ou
un interpréteur.
Enoncé du problème
Spécification
Algorithme
Traduction en langage de programmation
Programme source
Compilation
Programme exécutable
• Années 90-2000 (langages interprétés objet) : Java, Perl, tcl/Tk, Ruby, Python...
Java, de Sun Microsystem, est un langage comportant une large palette de classes
réutilisables. Il possède un ramasse-miettes. Il a eu un développement important dans
l’industrie du logiciel.
• 1990: Sun travaillait sur un projet visant à concevoir des logiciels simples et per-
formants exécutés dans des PDA (Personnal Digital Assistant). Le projet Oak de
SUN Microsystems: Langage pour la communication des appareils électroniques
de poche et domotique
2. Robuste et sûr ;
4. Très performant ;
Java est un langage full object, c’est-à-dire, qu’il respecte une approche orientée objet
de la programmation, sans qu’il ne soit possible de programmer autrement. En clair,
contrairement au C++, on ne peut faire que de la programmation orientée objet avec
Java, De plus, un programme écrit en Java sur une plate-forme peut être exécuté sans
aucune modification sur un autre système, à condition bien sûr qu’un environnement
d’exécution (i.e. une machine virtuelle) soit disponible sur ce dernier.
Un programme écrit en Java est exécuté par un interpréteur qui traduit en temps
réel les instructions Java en instructions exécutables par le système hôte. En fait, un
source écrit en langage Java n’est pas exécuté tel quel : Un source Java est transformé
en un fichier qui sera interprété par une machine virtuelle. Il convient de noter que
la portabilité de Java découle du fait qu’il soit interprété. Java est livré en standard
avec une importante API (Application Programming Interface) : threads, sockets,
entrées/sorties...
• De Borland : Jbuilder.
– JDK1.02
– Java 1.1 : JDK 1.1.8
Remarque 1.3.1
Un fichier source contenant une application java doit nécessairement avoir comme nom
le nom d’une classe existant dans le fichier.
Source ([Link])
Compilation
Byte-code ([Link])
Code machine
Remarque 1.3.3
On peut donc dire que, porter Java sur une plate-forme, c’est simplement porter la
machine virtuelle Java.
2.1 Introduction
• Importation du package
• Une classe peut contenir une ou plusieurs fonctions dont l’une s’appelle fonction
principale main(String [ ] args)
• Les commentaires.
Exemple 2.1.1
• Les commentaires débutent par /∗ et finissent par ∗/, ils peuvent s’étendre sur
plusieurs lignes.
• Une variable possède une valeur (qui peut changer dans le temps).
• Une variable possède un type qui caractérise l’ensemble des valeurs que peut pren-
dre la variable
Remarques 2.1.1
– exemple valide: A1
– exemple invalide: 1A
• Il doit être différent des mots réservés du langage (par exemple: if, do, while,
end,...)
Remarque 2.1.5
Pour la lisibilité du code choisir des noms significatifs qui décrivent les données ma-
nipulées
Exemples: TotalVentes2004, P rix− T T C, P rix− HT
Déclaration variables:
1. Syntaxe en pseudo-code:
Exemple 2.1.6
Examples 2.1.2
• int a;
• short a;
• long x;
• byte b,y;
• simple précision:
• Double précision:
Examples 2.1.3
• doube a;
• float x,y;
• y = -9.555 e+08;
Le type booléen:
• Exemple : boolean a;
a NON(a)
VRAI FAUX
FAUX VRAI
• NON(a) en langage Java: !a
a b a OU b a ET b
FAUX FAUX FAUX FAUX
FAUX VRAI VRAI FAUX
VRAI FAUX VRAI FAUX
VRAI VRAI VRAI VRAI
• (a OU b) en Java: a || b
• (a ET b) en Java: a && b
Le type caractère:
Remarques 2.1.4
• Avantages :
– Les Wrapper peuvent être utilisés comme n’importe quel objet, ils ont donc
leurs propres méthodes.
• Inconvénients:
– L’objet enveloppant utilise plus d’espace mémoire que le type primitif. Par
exemple, un int prends 4 octets en mémoire mais un Integer utilisera 32
octets sur une machine virtuelle en 64 bits (20 octets en 32 bits).
– L’objet enveloppant est immuable, c’est à dire qu’il ne peut pas être mod-
ifié, toute modification de sa valeur nécessite de créer un nouvel objet et de
détruire l’ancien, ce qui augmente le temps de calcul.
Exemple 2.1.5
• Importation du package :
• La création d’objet:
Exemple 2.1.6
import [Link];
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner([Link]);
[Link]("Veuillez saisir un mot :");
String str = [Link]();
[Link]("Vous avez saisi : " + str);
}
}
Exemple 2.1.7
Si (condition) Alors
bloc− instructions
Fin Si
Notation Java:
if (condition){
bloc_instructions;
}
Exemple 2.2.1
x : entier;
x ← 0;
Si (x = 0) Alors
x ← 1;
Ecrire(”x=”,x);
Fin Si
Langage Java:
int x;
x=0;
if(x==0){
x=1;
[Link]("x="+x);
}
Si (condition) Alors
bloc− instructions 1
Sinon
bloc− instructions 2
Fin Si
Notation Java:
if (condition){
bloc_instructions 1;
}
else {
bloc_instructions 2;
}
Exemple 2.2.2
x : entier;
x ← 0;
Si (x = 0) Alors
x ← 1;
Ecrire(x);
Sinon
x ← 2;
Ecrire(x);
Fin Si
Langage Java:
int x;
x=0;
if (x==0){
x=1;
[Link]("x="+x);}
else {
x=2;
[Link]("x="+x);}
}
Selon que
< Condition 1 > : < Action 1 >;
< Condition 2 > : < Action 2 >;
< ................. > : < ............ >;
< Condition n > : < Action n >;
Fin Selon que
Langage Java:
switch(<nom variable>)
{
case <valeur 1> : <instructions 1> ; break ;
case <valeur 2> : <instructions 2> ; break ;
/* .... */
case <valeur n> : <instructions n> ; break ;
default : /*instructions */
}
Exemple 2.2.3
Nous voulons afficher le nom d’un mois en fonction de son numéro:
import [Link].*;
public class switch1{
public static void main(String [] args){
Scanner sc=new Scanner([Link]);
[Link]("entrez le Mois = ");
int numeroMois=[Link]();
switch(numeroMois){
case 1 : [Link]("janvier"); break;
case 2 : [Link]("fevrier"); break;
case 3 : [Link]("mars"); break;
2.3 Boucle
Définition 2.3.1
C’est une technique permettant de répéter les mêmes instructions plusieurs fois.
• Les boucles pour répéter une instruction un certain nombre de fois, il s’agit de la
boucle Pour
• Les boucles pour répéter une instruction jusqu’à une condition d’arret, il s’agit
de bouclesTant que
Remarque 2.3.2
Le passage dans une boucle est appelé itération
Notation algorithmique:
Notation Java:
Exemple 2.3.1
Algorithmique:
Pour i de 0 à 10 faire
Ecrire(i);
Fin Pour
Langage Java:
int i;
for(i=0; i<=10; i++)
[Link](i);
Notation algorithmique:
Notation java:
while(condition){
instructions;
}
Exemple 2.3.2
x : entier;
x ← 1;
Tant que (x ≤ 5) faire
x ← x+1;
ecrire(”x= ”,x);
Fait
Langage Java:
int x;
x=1;
while(x<=5){
x=x+1;
[Link]("x= "+x);
}
Répéter
bloc− instructions;
jusqu’à ce que (condition)
Notation Java:
do{
bloc_instructions;
}
while(condition);
Exemple 2.3.3
x : entier;
x ← 0;
Répéter
x ← x+1;
Ecrire(”Valeur x=”,x);
jusqu’à ce que (x < 6)
Langage java:
int x;
Scanner sc= new Scanner([Link]);
x=[Link]();
x=0;
do{
x=x+1;
[Link]("Valeur x= "+x);
}
while (x<6)
• Les méthodes sont les éléments d’un objet qui servent d’interface entre les données
et le programme
Objet
Attributs
Méthodes
Remarque 3.1.3
A partir d’une classe on peut créer un ou plusieurs objets par instanciation ; chaque
objet est une instance d’une seule classe.
class <nomClasse>{
//attributs
...
// constructeurs
...
//méthodes
...
}
• public: le mot class est alors précédé de public, tout utilisateur qui importe le
paquetage peut utiliser la classe.
• privé: le mot class est alors précédé de private, seules des classes définies dans
le même fichier peuvent utiliser cette classe.
• le mot class n’est pas précédé de mot particulier, toutes les classes du paquetage
peuvent utiliser la classe.
Exemple 3.1.1
class personne{
// attributs
private String prenom;
private String nom;
private int age;
}
• sa définition n’est pas précédé de mot particulier, l’attribut peut être utilisé dans
toute classe du même paquetage.
Remarques 3.1.2
Exemple 3.1.3
• privé: sa définition est précédée de private, et elle ne peut être utilisée qu’à
l’intérieur de la classe
• protégé: sa définition est précédée de protected, et elle ne peut être utilisée qu’à
l’intérieur de la classe, ou des classes dérivées.
• paquetage: la méthode peut être utilisée dans toute classe du même paquetage.
Remarque 3.1.6
• Exemple:
Exemple 3.1.4
class Exemple{
int val ; //attribut
public Exemple(){ //constructeur
val=1 ;
}
}
Remarques 3.1.5
class Animal{
// champs
boolean vivant ;
int ^
age ;
// constructeurs
Animal() {
}
Animal(int ^
age) {
this.^
age = a
^ge ;
vivant = true ;
}
// méthodes }
Exemple 3.1.6
Exemple 3.1.7
Class Animal {
// champs
int ^
age ;
static int longévité = 100 ;
// méthodes
static int getLongévité() {
return longévité ;
}
}
Remarque 3.2.1
Une classe ne peut hériter de l’implémentation que d’une seule classe (extends). Cela
supprime les problèmes de l’héritage multiple.
Exemple 3.2.1
Véhicule
Généralisation
De course Décapotable
Spécialisation
Avantage de l’héritage:
• Optimisation du code
Terminologie:
• On dit que la classe Enfant hérite de la classe Parent, qu’elle éxtend cette ancienne
classe.
Syntaxe de l’héritage:
Classe Dérivée:
Exemple 3.2.2
Document
no
titre
affiche()
Livre Revue
auteur mois
nbPages annee
Roman
prixLitteraire
class Document {
int no ;
String titre ;
public void affiche(){
[Link]("Document");
}
}
class Livre extends Document{
String auteur ;
int nbPages ;
}
class Roman extends Livre {
int prixLitteraire ;
}
class Revue extends Document {
int mois ;
int annee ;
}
}
class Test {
public static void main(String args[]){
Document d = new Document ();
[Link] = 1 ;
Livre l = new Livre ();
[Link] = 2 ;
[Link] = "Hugo";
//[Link]="Balzac";=>ERREUR DE COMPIL!
}
Classe se base:
class Document{
int no ;
String titre ;
public Document( int no,String titre){
[Link]=no;
[Link]=titre;
}
}
Classe dérivée:
class B {
void affiche(){
[Link](
"méthode m de B");
}
}
class D extends B{
}
class B {
void affiche(){
[Link](
"méthode m de B");
}
}
class D extends B{
void affiche(){
[Link](
"méthode m de D");
}
}
Remarques 3.2.3
– Signature identique
– droits d’accès
Signature identique:
class A {
public void unefonction(int x) { //etc.}
}
class B extends A {
public void unefonction(int z) { //etc.}
}
droits d’accès:
class A {
private void unefonction(int x) { //etc.}
}
class B extends A {
public void unefonction(int z) { //etc.}
}
Modificateur d’accès:
• Package P1
class C1 {
int a;
public int b;
private int c;
protected int d;
}
class C2 extends C1 {
// C2 est une sous-classe de C1
}
class C3 {
// ...
}
• Package P2
class C4 extends C1 {
// C4 est une sous-classe de C1
// ...
}
class C5 {
// ...
}
a b c d
Accessible par C1 oui oui oui oui
Accessible par C2 oui oui non oui
Accessible par C3 oui oui non oui
Accessible par C4 non oui non oui
Accessible par C5 non oui non non
Classes finales:
Lors de la conception d’une classe, le concepteur peut empêcher que d’autres classes
héritent d’elle (classe finale).
Remarque 3.2.2
On peut empêcher la redéfinition d’une méthode d’instance d’une classe dans une de
ses sous-classes en la déclarant final.
Exemple 3.2.4
public class B{
final public void affiche(){}
}
public class C extends B{
// On ne peut pas redéfinir affiche();
}
3.2.2 Polymorphisme
Définition 3.2.3 Le polymorphisme peut être vu comme la capacité de choisir dy-
namiquement la méthode qui correspond au type réel de l’objet.
Carre Cercle
cote rayon
toString() toString()
surface() surface()
}
public class Cercle extends Forme {
private double rayon;
..................//constructeurs
public String toString(){
return([Link]+" "+rayon);;
}
public float surface() {
return [Link]*[Link]*[Link];
}
}
Forme
x
y
[Link]() toString()
[Link]()
Carre Cercle
cote rayon
[Link]() surface() surface()
toString() toString()
Liaison dynamique:
Exemple 3.2.5
Intérêt du polymorphisme:
Syntaxe:
Remarques 3.2.6
• Les classes abstraites doivent être déclarées public sinon pas d’héritage!
• Une classe dérivée d’une classe non abstraite peut être déclarée abstraite.
Exemple 3.2.7
Considérons la hiérarchie de classes suivantes :
Figure
double abscisse
double ordonnée
comment définir la méthode: surface()
toString()
Carre Cercle
double cote double rayon
surface() surface()
toString() toString()
• Classe Figure:
• Classe Carre:
• Classe Cercle:
• Classe test:
• Une interface est une spécification complètement abstraite : aucune méthode n’est
implémentée.
• Une interface est une classe abstraite dont toutes les méthodes sont abstraites et
dont tous les attributs sont constants
Syntaxe en Java:
Exemple 3.2.9
Remarques 3.2.10
• On dit qu’une classe implémente une interface si elle définit l’ensemble des
méthodes abstraites de cette interface.
Interface:
interface Electrique {
void allumer();
void eteindre();
}
Remarque 3.2.7
• La classe doit implémenter toutes les méthodes de l’interface, sinon elle doit être
déclarée abstract
Exemple 3.2.11
• Interface:
interface Electrique {
void allumer();
void eteindre();
}
• L’héritage n’est plus possible, la classe hérite déjà d’une autre classe. Il ne reste
plus que celui l’interface.
Exemple 3.2.12
Considérons la hiérarchie de classes suivantes :
Figure
double abscisse Interface
double ordonnée Tracable
surface()
toString() dessinToit()
deplaceToi()
Choix à la conception:
∗ Héritage : B extends A.
∗ Interface : B implements A.
Exemple 3.2.13
Considérons la hiérarchie de classes suivantes :
Héritage
Animal
age
^
getAge() Interface
Compagnon
toString()
etreAmical()
Et un jouer()
Chien
taille Et capable de faire
aboyer()
toString()
Exercices
Exercice 4.0.1
public class A {
private int a;
public A(int a){
this.a = a;}
}
public class B extends A{
private int b;
public B(int a,int b){
this.a = a;
this.b = b;}
}
Ax = b
Algorithme: resolutionSys
Variable A : tableau[n][n] de réels;
b : tableau[n] de réels;
i,j : entier;
som : réel;
Début
Pour i de n à 1 faire
som ← b[i];
Pour j de i+1 à n faire
som← som-A[i][j] ∗ b[j];
Fin Pour
som
x[i]← A[i][i] ;
Fin Pour
Fin
L’objectif va être d’écrire trois classes Matrice, Vecteur et SysLineaire qui modélisent
le problème de la résolution d’un système linéaire triangulaire supérieur. Complétez
les classes suivantes:
• La classe Matrice
//constructeur1
public Matrice( int N, int M){
// A compléter
}
//constructeur2
public Matrice(double [][] A){
// A compléter
}
// renvoie le nombre des linges
public int getNombreLin(){
// A compléter;
}
// renvoie le nombre des colonnes
public int getNombrrCol(){
// A compléter;
}
// Cette méthode calcule et retourne la matrice transposé
public Matrice transpose() {
Matrice B = new Matrice(M, N);
// A compléter;
return B;
}
//renvoie l’element A[i][j]
public double A(int i,int j) {
return A[i][j];
}
// Affichage de la matrice
public void affiche() {
// A compléter;
}
}
• La classe Vecteur
• La classe SysLineaire
}
//la méthode de la résolution
public Vecteur resolutionSys(){
int l=[Link]();
Vecteur X=new Vecteur(l);
// A compléter;
// Voir l’algorithme resolutionSys
return X;
}
public static void main(String [] args){
double [][] A={{1,1,1},{0,1,1},{0,0,1}};
Matrice M=new Matrice(A);
[Link]();
double [] b={1,2,3};
Vecteur V=new Vecteur(b);
[Link]();
SysLineaire SysL=new SysLineaire(M,V);
Vecteur X=[Link]();
[Link]("la solution du système linéaire");
[Link]();}
}
Exercice 4.0.3
L’objectif va être d’écrire deux classes Calcule, Test.
1. Créer une classe Calcule caractérisée par: note1, note2 de type double.
Calcule
- note1 :double
- note2 :double
<<constructor>> Calcule(...)
getNote1()
getNote2()
setNote1(double a)
setNote2(double b)
getMoyenne()
getSomme()
getMax()
1. Créer une classe Etudiant caractérisée par: nom, prenom, Age, Sexe, Adresse,
de type String.
Etudiant
- nom :String
- prenom :String
- age :String
- Sexe :String
- Adresse :String
<<constructor>> Etudiant(...)
getNom()
getPrenom()
getAge()
getSexe()
getAdresse()
toString()
Exercice 4.0.6
Définissez deux classes Vecteur et IncompatibleSizeException. La classe Vecteur
deux attributs taille et tab (tableau). Vous écrirez aussi un constructeur, les méthodes
de consultation (taille, getTab) et de modification (setElement).
Vecteur
- taille :int
- tab :double []
<<constructor>> Vecteur(int taille)
Exception
<<constructor>> Vecteur(double[] A)
<<constructor>> Vecteur(Vecteur V)
getTaille()
getElement(int i)
IncompatibleSizeException
setElement(int i, double val)
sommeVecteurs(Vecteur B)
sommeVecteurs(Vecteur A,Vecteur B)
produitScalire(Vecteur B)
affiche()
3. Ecrire une classe Program qui comprend une methode Main( ) dans laquelle
on instancie plusieurs fois la classe Vecteur.
Exercice 4.0.7
L’objectif va être d’écrire cinque classes Personne, Etudiant, Note et Incompati-
bleSizeException qui modélisent le problème de la gestion des notes. Créez les classes
suivantes:
Exception
Etudiant
- numIdentificat :int
- notes : [10] Note
<<constructor>> Etudiant(.....) IncompatibleSizeException
getNumIdent()
ajouterNote(Note a,int i)
getNoteIemeExam(int i)
moyenneEtudiant ()
toString()
Remarques:
Exercice 4.0.8
L’objectif va être d’écrire trois classes Personne, Professeur et Cours qui modélisent
le problème de la gestion des cours. Créez les classes suivantes:
Personne
- nom :String
Cours
- prenom :String
- nom :String
- age :String
- nbHeures :int
<<constructor>> Personne(...)
<<constructor>> Cours(...)
getNom()
getNom()
getPrenom()
getNbHeures()
getAge()
toString()
Professeur
- numIdentificat :int
- listCours :Vector<Cours>
<<constructor>> Professeur(.....)
getNumIdent()
ajouterCours(Cours a)
getNbheursCours(Cours a)
afficheNomsCours ()
toString()
TP1
EXERCICE 1
Le but de cet exercice est d’être capable d’écrire un programme qui saisit des informa-
tions et les affiche.
class Affiche {
public static void main (String args[])
{
[Link]("Projet stade");
}
}
2. Pour saisir des informations au clavier, Java dispose de la classe Scanner. Mais
celle-ci est compliquée pour être utilisée telle quelle. Modifier la méthode main()
comme suit :
import [Link].*;
class lire {
public static void main (String [] args)
{
[Link]("Projet stade");
Scanner sc = new Scanner([Link]);
[Link]("Veuillez saisir un mot :
");
(a) Maintenant vous savez faire un programme qui lit une chaı̂ne de caractères
ou un entier sur l’entrée standard et qui affiche une chaı̂ne de caractères sur
la sortie standard.
EXERCICE 2
EXERCICE 3
Ecrire un programme qui saisit deux entiers a et b et permute la valeur de ces deux
entiers.
EXERCICE 4
Ecrivez un programme qui lit la date d’un jour, exprimée sous la forme de trois nom-
bres j (jour), m (mois), a (année) et qui calcule et affiche la date du lendemain. On
supposera que la date donnée est correcte.
• j = 31, ou bien
D’autre part, une année est bissextile si elle est divisible par 4 mais pas par 100. Cepen-
dant, les années multiples de 400 sont bissextiles.
EXERCICE 7
Ecrire un programme qui calcule la factorielle d’un entier et indique à l’écran le résultat.
Le nombre n doit être lu sur la ligne de commande. La factorielle N! d’un entier naturel
N (
1 × 2 × 3...(N − 1) × N Si N 6= 0
N! =
1 Sinon
1. Utilisez while,
2. Utilisez for.
EXERCICE 8
Ecrivez un programme qui calcule et affiche les solutions d’une équation du second
degré
ax2 + bx + c = 0
où a, b et c sont trois nombres lus au clavier.
TP2
EXERCICE 1
Définissez deux classes Compte et Banque. La classe Compte comprend trois at-
tributs solde, numero et comptes (static). Vous écrirez aussi un constructeur, les
méthodes de consultation (avoirSolde, avoirNumero) et de modification (deposer, re-
tirer).
Compte
- numero :int
- solde :float
- comptes :int
<<constructor>> Compte(int num,float sol)
avoirSolde()
avoirNumero()
retirer(float M)
toString()
deposer(float D)
2. Ecrire une classe Banque qui comprend une methode main( ) dans laquelle on
instancie plusieurs fois la classe Compte. Afficher le solde et le numéro de chaque
Compte.
EXERCICE 3
Dans cet exercice, on considère des tableaux d’entiers.
2. Ecrire une classe TestTab qui comprend une methode main( ) dans laquelle on
teste la classe TableauDEntier .
import [Link];
public class TableauDEntier{
/* Cette méthode retourne un tableau int[] de nb éléments
* les éléments sont saisies au clavier lors de l’exécution*/
public static int [] remplirTab(int nb) {
int [] tab = new int[nb];
Scanner obj=new Scanner([Link]);
// A compléter
return tab;
}
/* Cette méthode affiche tous les éléments du tableau */
public static void afficherTab(int[] tab) {
// A compléter
}
/* Cette méthode calcule et retourne le plus grand élément du
tableau*/
public static int maxTab(int[] tab) {
// A compléter
}
/* Cette méthode calcule et retourne la somme de tous
*les éléments du tableau*/
public static int SommeElementTab(int[] tab) {
// A compléter
}
/* Cette méthode calcule et retourne le nombre d’occurrences
* d’un entier dans un tableau d’entiers.*/
public static int nombreOccurrencesTab(int n,int [] tab) {
// A compléter
}
/* Cette méthode tester l’égalité entre les deux tableaux :
* il rend VRAI si les composants des deux tableaux
correspondent
* position par position, et FAUX sinon.*/
public static boolean testEgaliteTab(int [] t1,int [] t2) {
// A compléter
}
/* Cette méthode implémente l’algorithme du tri par sélection :
TP3
EXERCICE 1
´ Ecrire trois classes Figure, Carre, et Rectangle, Définissez trois classes Figure, Carre
et Rectangle telles que :
1. La classe Figure:
2. La classe Carre:
• Hérite de Figure
• A un attribut cote
• Redéfinit la méthode toString();
• Redéfinit cette méthode getInstances() de manière à ne récupérer que les
instances qui correspondent à leur type.
3. La classe Réctangle:
• Hérite de Figure
• A deux attributis cote1 et cote1.
• Redéfinit la méthode toString();
• Redéfinit cette méthode getInstances() de manière à ne récupérer que les
instances qui correspondent à leur type.
Réctangle
Carre
int cote1
int cote
int cotte2
getInstances()
getInstances()
toString()
toString()
aire()
aire()
TP4
EXERCICE
1. Écrire une classe Animal représentant des animaux ayant, au moins, un cri, un
age et un ageMaximum. Ajouter un constructeur, des accesseurs et les méthodes:
2. Écrire une classe Oiseau héritant de la classe Animal. Sachant qu’un oiseau vole
pour se déplacer et a un âge maximum de 20 ans.
3. Écrire une classe Aigle héritant de la classe Oiseau. Un aigle vit 10 ans.
4. Écrire une classe Chien héritant de la classe Animal. Un chien possède un nom,
marche pour se déplacer et a pour âge maximum 15 ans
5. Instancier un chien, un aigle et les faire manger, se déplacer et vieillir. Puis appel
affiche.
Chien Oiseau
String nom
Aigle
[1] Ken Arnold, James Gosling et David Holmes. Le Langage Java, 2001.