Académique Documents
Professionnel Documents
Culture Documents
Java
Java
Lorsque la variable est déjà déclarée, nous pouvons lui assigner d'autres
valeurs en utilisant l'opérateur new :
monTableau = new int[] {11,13,17,19,23,29};
System.out.println(«nb = »+ nb ); // nb=11
Remarques
import java.io.*;
class Echo{ public static void main (String[] args) throws IOException
{ InputStreamReader inStream = new InputStreamReader( System.in ) ;
BufferedReader stdin = new BufferedReader( inStream );
String inData;
System.out.println("Enter the data:");
inData = stdin.readLine();
System.out.println("You entered:" + inData );
}}
Note :
Utilise la notion d’IOException qui est nécessaire pour les programmes qui possèdent
un flux d’entrée.
Il informe le compilateur que le programme principal possède une flux d’entrée et qui
peut générer un erreur lors d’une opération de lecture des donnes à partir du clavier
si cela arrive le système informatique sera informé de l'échec et le programme
saura arrêté correctement.
correctement k.afdel cours Java 32
BufferedReader
import java.io.*;
class EchoSquare{
public static void main (String[] args) throws IOException
{ BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
String inData;
int num, square; // declare two int variables
System.out.println("Enter an integer:");
inData = stdin.readLine();
num = Integer.parseInt(
Integer.parseInt inData ); // convert inData to int
square = num * num ; // compute the square
System.out.println("The square of " + inData + " is " + square);
}
}
Objet
• Un objet est une structure informatique caractérisée par un état et un
ensemble d'opérations exécutables par cet objet qui caractérise son
comportement.
• Objet = état + comportement (opérations)
• Exemples:
• Objet Une Fenêtre :
– Etat : position, taille, bordure, titre, couleur,...
– Opérations: dessiner, déplacer. agrandir...
• Objet Un Fichier
– Etat : nom, directory, id, protections, propriétaire, contenu..
– Opérations : ouvrir, fermer, détruire,
• On regroupe un ensemble de caractéristiques communes aux objets sous la forme de
structures formelles, appelées classes
– Exemple de représentation graphique d'un objet (Notation UML) :
– Attributs : Appelés également champs correspondent aux propriétés de la classe. Ils sont définis
par un nom, un type de données et éventuellement une valeur initiale. Un attribut est une variable
qui stocke des données.
Exemple : considérons la classe Employé caractérisée par les attributs code, nom et nbEmployés (nombre
d'employés)
• Les attributs code et nom sont des caractéristiques de chaque objet Employé
contrairement au champ nbEmployés qui est une caractéristique commune à tous les
objets. On dira que nbEmployés est attribut statique.
statique
• Chaque objet, instance d'une classe, donne des valeurs particulières à tous les
attributs définis dans sa classe sauf les attributs statiques ce qui détermine son état.
• Exemples :
• Méthodes :
• Les méthodes permettent de décrire les comportements des objets.
• Représentent des procédures ou des fonctions qui permettent d'exécuter un certain
nombre d'instructions.
• Parmi les méthodes d'une classe existe une méthode particulière, qui porte le même
nom que la classe, qui s'appelle le constructeur. Le rôle du constructeur étant créer les
objets de la classe en les initialisant.
• Il n'y a ensuite aucun moyen d'établir un lien entre le handle créé à la première ligne et
l'objet créé à la seconde. Il faut donc effectuer l'affectation en même temps que la
création, de la façon suivante :
• Employe alpha;
• alpha = new Employe () ;
Java nous permet même de condenser ces deux lignes en une seule sous la thème :
class TestEmploye{
public static void main(String[] args){
new Employe(); // Crée un objet anonyme
Employe e2 ; //Crée un handle,pour le moment, in pointe vers null
e2=new Employe(); //Crée un objet Employe puis affecte son adresse au handle e2
Employe e3=new Employe(); //Crée le handle e3, crée un objet et affecter l'objet au handle e3
e2.nom:"Jamil"; // définit la valeur I'attribut nom de I'objet e2
e2.afficheCode(); // on fait appel à la méthode afficheCode() de I'objet e2
e2.afficheNom();// on fait appel à la méthode afficheNom() de I'objet e2
e3.afficheCode();// on fait appel à la méthode afficheCode() de I'objet e3
System.out.println("Nombre d'employés en utilisant I'objet e2--" + e2.nbEmployes);
System.out.println( "Nombre d'employés en utilisant I'objet e3 :"+ e3.nbEmployes ) ;
System.out.println("Nombre d'employés en utilisant la classe Employe" +
e2.nbEmployes);
}}
k.afdel cours Java 49
k.afdel cours Java 50
Héritage
Le développement d'une application Java peut se décomposer en deux
phases:
• La 1ière phase de conception, consiste à représenter l'univers du problème à
l'aide d'un ensemble de classes ( digramme des classes UML).
• La 2ième implémentation, consiste à construire ces classes.
• Dans java la super classe d’une hiérarchie de classes est une classe
prédéfinie nommée Object.
Autrement dit, si une classe n’hérite pas d’une autre, elle hérite
automatiquement de la classe Object.
Ce qui signifie qu'un animal possède un état (vivant, qui peut être vrai ou faux et âge, qui
est une valeur numérique) et sait faire plusieurs choses ( crie(), vieillit() et meurt(), qui
sont des méthodes).
• La méthode vieillit() permet d’incrémenter d’une unité l’attribut âge.
• La méthode meurt() initialise l’attribut vivant à false.
• La méthode crie() ne fait rien, mais sa présence indique qu'un Animal crie(), mais
pour le moment, on ne connaît pas la nature de son crie.
La création d'un Animal se ferait à l'aide de l'instruction suivante :
Animal nouvel Animal = new Animal (3);
• Pour éviter de réécrire, dans le constructeur de la classe Canari, les mêmes instructions du
constructeur de la classe Animal, on peut faire appel au constructeur de la classe parente en
utilisant l'identificateur super.
super
class Animaux {
public static void main(String[] args) {
Canari titi = new Canari(3);
titi.vieillit();
titi.crie(); }
}
• Appel à la méthode vieillit() de l’objet titi. Cette méthode n’a pas été définie dans la
classe Canari, mais elle a été hérité de la classe Animal.
Animal Cet appel permet
d’incrémenter l’attribut âge de l’objet titi (âge=4).
• On peut constater que la méthode vieillit() est un cas particulier de la méthode vieillit(int a) avec a=l. la méthode vieillit()
peut donc s’écrire d’une manière plus optimiséek.afdel cours suivante
de la manière Java : 58
void vieillit() { vieillit(1); }
Cours Online Java
http://www.learningadapt.com/
// Deuxième constructeur
Animal (int a) { âge = a; vivant = true; ;)(Animal al = new Animal
System.out .println ("Un animal de ,,+a+,,an (s) vient d'être créé");} : âge=l Ou en indiquant l’age //
void vieillit(){++âge; Animal a2 = new Animal(4);
System.out.println("C1 est l'anniversaire de cet animal."); // âge=4
System.out.println("Il a maintenant " + âge + " an(s) ;}
• Pour éviter de réécrire deux fois les mêmes instructions dans les deux constructeur, on
peut faire appel au deuxième constructeur à l’intérieur du premier.
•
• Toutefois, l’appel d’un constructeur à l’intérieur d’un autre ne peut pas se faire en
écrivant son nom mais en utilisant le mot this suivi des arguments du constructeur
appelé entre parenthèse.
• Le premier constructeur peut s’écrire d’une manière plus optimisée comme suit:
// Premiser Constructeur
Animal () {
this(l) ; // au lieu de Animal(1)
}
// Deuxième Constructeur
Animal (int a) {
âge = a; vivant = true;
System.out .println ("Un animal de" +a+" an (s) vient d'être créé");
}
Les constructeurs par défaut
• En l’absence du constructeur dans une classe, java fournit automatiquement un
constructeur par défaut. Le constructeur par défaut est le suivant :
k.afdel cours Java 63
NomDeLaClasse ( ) { }
class Animal { class TestAnimaux {
boolean vivant; public static void main(String[]
int âge; args)
int ageMaxi = 10 ;
{
Animal (int a) { âge = a; vivant = true;
Canari titi = new Canari(3);
System.out.println("Un animal de " + a+ " an(s) vient
d'être créé");} Canari mimi=new Canari() ;
Animal( ) { this (1) ; } titi.ageMaxi=5 ;
titi.vieillit();
void vieillit(int a) { âge += a;
if (âge > ageMaxi) titi.crie();
meurt () ; titi.vieillit(4);
Else{ System.out.println("C 1 est 11 anniversaire de cet mimi.vieillit(5);
animal.") ; mimi.crie() ;
System.out.println("Il a maintenant " + âge + " an(s)");} }
}
void vieillit() { vieillit(1) ; }
}
void meurt (){ vivant = false;
System, out .println ("Cet animal est mort") ; }
void crie ( ) {}
}
// La classe Canari
class Canari extends Animal {
Canari(int a) { super(a); }
Canari(){ super () ; }
k.afdel
void crie ( ){ System. out.println (f,Cui-cui ! ”) ;} cours Java 64
}
Encapsulation
private visible
visible visible
Remarque
Les classes qui ne sont pas déclarées dans un paquetage font toutes partie du même
paquetage « anonyme ».
Remarques :
Comme dans le cas des variables, les méthodes static peuvent être référencées à
l'aide du nom de la classe ou du nom de l'instance.
Il est important de noter que les méthodes static ne peuvent en aucun cas faire
référence aux méthodes ou aux variables non static de la classe.
Elles ne peuvent non plus faire référence à une instance. (La référence this ne
peut pas être employée dans une méthode static.)
• Les méthodes static ne peuvent pas non plus être redéfinies dans les classes
k.afdel cours Java 77
dérivées.
2- final
• Java ne dispose pas de constantes. Ce n'est pas une limitation, car Java dispose
d'un mécanisme beaucoup plus puissant qui permet non seulement d'utiliser une
forme de constantes, mais également d'appliquer ce concept à d'autres éléments
comme les méthodes ou les classes.
Les variables final
• Une variable déclarée final ne peut plus voir sa valeur modifiée. Elle remplit alors le
rôle d'une constante dans d'autres langages.
• Une variable final est le plus souvent utilisée pour encoder des valeurs constantes.
Par exemple: final float pi = 3.14;
Les variables final non initialisées
• Il existe en fait deux types de constantes dans un programme : celles dont la valeur
est connue avant l'exécution du programme, et celles dont la valeur n'est connue
qu'au moment de l'exécution.
• Une variable final non initialisée est simplement déclarée de la façon suivante :
final int a;
Evidemment, cette variable ne pourra pas être utilisée avant d'être initialisée. Une fois
initialisée au moment de l’exécution, sa valeur ne peut plus être modifiée.
class Polymorphisme2
{ public static void main(String[] args){
Fruit f1; //Création d'un handle fl de type Fruit
Fruit f2; //Création d'un handle f2 de type Fruit
f1=new Pomme(60); //sur-casting implicit
f2=(Fruit)new Orange (40); // surcasting explicit } }
• Un objet de type Pomme peut être affecté à un handle de type fruit sans aucun
problème :
• f1=new Pomme(60);
• Dans ce cas l’objet Pomme est converti automatiquement en Fruit. On dit que l’objet
Pomme est sur- casté en Fruit.
• Dans java, le sur-casting peut se faire implicitement.
• La casting explicit se fait en précisant la classe vers laquelle on convertit l’objet entre
parenthèse. Exemple : f2=(Fruit)new Orange(40);
{class Polymorphisme5
{ public static void main(String[] args )
Tableau de fruits //
;Fruit[] lesFruits
;lesFruits=new Fruit[3]
;lesFruits[0]=new Pomme(60)
;lesFruits[1]=new Orange(70)
;lesFruits[2]=new Pomme(55)
}};)(for(int i=0;i<lesFruits.length;i++) lesFruits[i].affiche
k.afdel cours Java 98
Vecteur
La classe Verctor du package java.util est une structure qui représente un tableau dynamique
d’objets de type Object.
Déclaration :
• Vector lesFruits;
Création du vecteur
• lesFruits= new Vector();
Affectation des objets au vecteur
• lesFruits.addElement(newPomme(60));
• lesFruits.addElement(newOrange(100));
• lesFruits.addElement(newPomme(55));
Manipulation des objets:
• for(int i=0;i<lesFruits.size();i++) ((Fruit)lesFruits.elementAt(i)).affiche();
Autes méthodes de la classe Vector: removeElement(int index)
Exemple
for(int i=0;i<lesFruits.size();i++)
//lesFruits.elementAt(i).affiche() // Sous-Casting Obligatoire
k.afdel cours Java
((Fruit)lesFruits.elementAt(i)).affiche();} 99
Les entrées/sorties
• Pour effectuer une entrée ou une sortie de
données en Java il faut
– Ouverture d’un moyen de communication;
– Écriture ou lecture des données;
– Fermeture du moyen de communication
– En java, les moyens de communication sont
représentés par des objets particulier les flux
ou stream
• Nous allons montrer les grandes lignes de passage entre un modèle UML et
Java dans ses cas les plus courants.
CAS D'ASSOCIATION 1 - 1
CAS D'ASSOCIATION 1 – n
public class A {
private B rb; public class B {
public void addB( B b ) { ... // La classe B ne connaît pas l'existence de la classe A
if( b != null ) { this.rb=b; } }
}
} Association bidirectionnelle
public class A {
private ArrayList <B> rb;
public A() { rb = new public class B {
ArrayList<B>(); } private A ra;
public ArrayList <B> getArray() public B() {}
{return(rb);} public A getA() { return (ra); }
public void remove(B b) public void setA(A a){ this.ra=a; }
{rb.remove(b);} public void addA(A a){
public void addB(B b){ if( a != null ) {
if( !rb.contains(b) ){ if( !a.getArray().contains(this)) {
if (b.getA()!=null) if (ra != null) ra.remove(this);
b.getA().remove(b); this.setA(a);
b.setA(this); k.afdel cours Java ra.getArray().add(this); } } 112
rb.add(b); } }} }
}
Difference entre Association et Dépendence
• Association --> A has-a C object (as a member variable)
• Dependency --> A references B (as a method parameter or return type)
• Example
public class A {
private C c;
public void myMethod(B b)
{ b.callMethod();
}}