Classes améliorées Plus d`infos sur les références La référence null

1
CSI1502:
Introduction au génie logiciel
Chapitre 5:
Classes améliorées
2
Objectifs du cours:
Classes améliorées
Comprendre les implications de:
Références et alias d’objets différents
Passer des objets (par référence) comme paramètres
Le mot clé
static
: Variables et méthodes statiques
Classes encapsulant les types de données primitifs
Classes incorporées et classes internes
Interfaces en génie logiciel
Composants de la
GUI
, boite de dialogue,
événements et
listeners .
3
Plus d’infos sur les références
Rappelez-vous (chapitre 2) qu’une référence d’objet contient
l’adresse mémoire de l’objet.
Plutôt que de considérer des adresses arbitraires, nous décrivons
graphiquement les références comme des pointeurs vers des
objets.
ChessPiece bishop1 = new ChessPiece();
bishop1
4
La référence
null
.
Une référence d’objet ne pointant vers aucun objet est
appelée une
référence nulle
.
Essayer d’accéder à l’objet d’une telle référence cause la
levée d’une exception NullPointerException .
Par exemple: String name;
déclare une référence vers un objet (de type String) mais
ne crée pas d’objet String.Ainsi cette référence ne
référe à aucun objet. Donc la variable name contient une
référence nulle.
5
La référence
this
La référence this permet à un objet de s’autoréférer.
A l’intérieur d’une méthode, la référence this référe à l’objet
en train d’être exécuté.
Par exemple:
if(this.position == piece2.position)
result = false;
précise quelle variable position est en train d’être manipulée.
La référence this référe à l’objet par l’intermédiaire duquel
la méthode contenant le code a été appelée.
6
La référence
this
La référence this peut aussi servir à distinguer les
paramètres d’un constructeur des variables
correspondantes de l’objet avec des noms semblables.
A éviter pour cause de problèmes de lisibilité.
Public Account (Sring name, long acctNumber,
double balance)
{this.name = name;
this.acctNumber = acctNumber;
this.balance = balance;
}
2
7
Affectations reparcourues
Affecter consiste à copier une valeur et à stocker
cette copie dans une variable.
Pour les types de données primitifs: num2 = num1;
Avant
num1
5
num2
12
Après
num1
5
num2
5
8
Object Reference Assignment
Pour les références d’objets, l’affectation copie
d’adresse mémoire :
bishop2 = bishop1;
Avant
bishop1 bishop2
Après
bishop1 bishop2
9
Que sont les alias?
Plusieurs références pointant vers le même objet sont
des
alias
du même objet.
Un objet et ses données peut donc être accédés grâce
aux différents alias de l’objet.
Les alias sont utiles, mais doivent être gérés avec
précautions.
Modifier l’état d’un objet affecte l’état de tous ses alias !
10
Test d’égalité pour les objets
L’opérateur == compare les références d’objets et retourne true si
les références sont des alias d’un même objet.
Une méthode est définie pour tous les objets, mais à moins d’avoir
été redéfinie lors de l’écriture d’une classe, cette méthode demeure
identique en action à l’opérateur ==.
bishop1.equals(bishop2);
retourne true si les deux références pointent vers le même objet.
On peut redéfinir la méthode equals pour toutes conditions
d’égalité jugées pertinentes.
11
Le
Ramasse-miettes
en Java
Quand un objet n’est plus référencé par aucune
référence, celui-ci ne peut plus être accéder par le
programme.
Il est donc inutile et peut être considéré comme un
déchet (
garbage).
Java effectue efface périodiquement de sa mémoire ces
déchets.
Ce processus, appelé
ramasse-miettes,
permet de recycler la mémoire des objets déréférencés.
12
Passage d’objets en tant que
paramètres
Les paramètres de méthode en Java sont passés
par
valeur
.
Ceci signifie qu’une copie du vrai paramètre (valeur
passée) est stockée dans le paramètre formel (argument
de la méthode).
Passer des paramètres revient essentiellement à
effectuer des affectations.
Quand un objet est passé à une méthode, le paramétre
réel et le paramètre formel deviennent des alias du
même objet.
3
13
Passer des objets aux
méthodes
Ce que vous effectuez avec un paramètre à l’intérieur
d’une méthode peut éventuellement avoir des
conséquences permanentes (en dehors de la méthode).
ParameterPassing.java (page 277)
ParameterTester.java (page 279)
Num.java (page 281)
Remarquez la différence entre modifier la référence et
modifier l’objet pointé par la référence.
14
ParameterPassing.java
public class ParameterPassing
{// sets up 3 variables and illustrate parameter passing
public static void main (String [] args)
{ParameterTester tester = new ParameterTester();
int a1 = 111;
Num a2 = new Num (222);
Num a3 = new Num (333);
System.out.println("Before ChangeValues: ");
System.out.println("a1 a2 a3: " + a1 + " " + a2 + " " + a3);
tester.changeValues(a1, a2, a3);
System.out.println("After ChangeValues: ");
System.out.println("a1 a2 a3: " + a1 + " " + a2 + " " + a3);
}
}
15
ParameterTester.java
public class ParameterTester
{public void changeValues(int f1, Num f2, Num f3)
{System.out.println("Before changing the values: ");
System.out.println("f1 f2 f3: " + f1 + " " + f2 + " " + f3);
f1 = 999;
f2.setValue(888);
f3 = new Num(777);
System.out.println("After changing the values: ");
System.out.println("f1 f2 f3: " + f1 + " " + f2 + " " + f3);
}
}
16
Num.java
public class Num
{private int value;
//
Constructor
public Num (int update)
{value = update;
}
//
set up a value
public void setValue(int update)
{value = update;
}
//
toString
public String toString()
{return value + " ";
} }
17
Les résultats:
passage de paramètres
Avant ChangeValues:
a1 a2 a3: 111 222 333
Before changing the values:
f1 f2 f3: 111 222 333
After changing the values:
f1 f2 f3: 999 888 777
Après ChangeValues:
a1 a2 a3: 111 888 333 18
Que sont les variables
statiques?
Associées à une classe et non à un objet.
Les variables statiques peuvent être appelées variables de
classe.
Normalement chaque objet a son propre espace mémoire
Si une variable est déclarée statique, une seule copie de la
variable existe.
private static float price;
L’espace mémoire pour une variable statique est créé quand
la classe la déclarant est chargée.
Tous les objets de la classe ont accès aux variables statiques
de la classe Æ
Modifier la valeur d’une variable statique modifie sa
valeur dans toutes les instances de la classe.
4
19
Plus d’infos sur les méthodes
statiques
Les méthodes statiques aussi nommées méthodes de classe sont
appelées par l’intermédiaire du nom de classe plutôt qu’à travers un
objet particulier.
Par exemple , les méthodes de la classe Math sont statiques.
Pour créer une méthode statique, nous définissons la méthode à l’aide
du mot clé static .
Les méthodes statiques ne peuvent utiliser des variables d’instance,
les variables d’instance n’étant créées qu’une fois les objets instanciés.
public static int abs(int num);
20
Plus d’infos sur les méthodes
statiques :un exemple
public static int triple (int num)
{int result;
result = num * 3;
return result;
}
class Helper
class Helper
Puisqu’étant
Puisqu’étant statique
statique, la
, la méthode peut être appelée ainsi
méthode peut être appelée ainsi:
:
value = Helper.triple (5);
21
Méthodes statiques and
variables: CountInstances.java
public class CountInstances
{public static void main ( String[] args)
{Slogan obj;
obj = new Slogan("Hello world");
obj = new Slogan("Talk is cheap.");
obj = new Slogan("Don't worry, be happy.");
System.out.println("Slogans created: " + Slogan.getCount());
}
}
22
Méthodes statiques and
variables: Slogan.java
public class Slogan
{private String phrase;
public static int count = 0;
//
the constructor
public Slogan (String str)
{phrase = str;
count++;
}
//
returns the number of objects of this class created
public static int getCount()
{return count;
}
}
23
Que sont les classes
encapsulantes?
Une classe encapsulante représente un certain type de données
primitif.
Par exemple Integer ageObj = new Integer (20);
utilise la classe Integer pour créer un objet représentant l’entier 20.
Pourquoi ceci ?
Ceci est utile lorsque le programme requiert un objet et non un
type de données primitif
Chaque type de données primitif (TDP) est encapsulé par de telles
classes. Ces classes sont situées dans le package Java.lang, voir
Figure 5.4
TDP Wrapper Class
byte Byte
int Integer
char Character, etc. pour les autres TDPs
24
Quelques méthodes de la
classe Integer : voir p.287
Integer (int value) // constructeur: crée un nouveau objet
Integer
byte byteValue ()
double doubleValue ()
// retourne la valeur de cette objet dans le TDP correspondant
static int ParseInt (String str)
// retourne l’
int
correspondant à la valeur stockée dans la chaîne de
caractères.
static String toBinaryString (int num)
// retourne une chaîne de caractères représentant l’entier dans la
base correspondant à num.
5
25
Java I/O
Les entrées / sorties sont effectués en java par
l’intermédiare d’objets représentant des
flux de
données.
Un flux est une suite ordonnée d’octets
L’objet System.out représente un flux standart de
sortie, qui est par défaut l’écran.
Lire à partir du clavier est plus compliqué…
Æchapitre 8.
26
Entrées à partir du clavier …
Les entrées peuvent être lues à partir du clavier sans avoir à utiliser
les classes Keyboard et Wrapper.
Voir Wages2.java (page 289): Plus au chapitre 8
import java.io.*;
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
String name = in.Readline();
int hours = Integer.parseInt(in.readLine());
27
Classes imbriquées
En plus de contenir des données et méthodes, les classes
peuvent contenir d’autres classes dite
imbriquées
.
Une classe imbriquée a accès aux variables et méthodes de la
classe dans laquelle elle se trouve, même si celles-ci sont
déclarées privées.
Ceci est une relation spéciale et doit être utilisé de manière
adéquate.
Enclosing Class
Nested
Class
28
Classes Imbriquées
Une classe imbriquée produit son propre
bytecode
.
Si une classe nommée
Inside
est déclarée dans une
classe nommée
Outside
, 2
bytecodes
seront produits
Outside.class
Outside$Inside.class
Les classes imbriquées peuvent être déclarées
statiques, dans lequel cas elles ne peuvent
référer aux variables et méthodes d’instance.
29
Classes internes: classes
imbriquées non statiques
Une classe interne est associée à chaque instance de la
classe dans laquelle elle est imbriquée, et ne peut
exister que le temps d’instanciation de cette dernière.
public class TestInner
{// create and manipulate an outer object
public static void main (String[] args)
{Outer out = new Outer();
System.out.println(out);
out.changeMessage();
System.out.println(out);
}
}
30
Classes imbriquées:
Outer.java
public class Outer
{private int num;
private Inner in1, in2;
public Outer()
{num = 2365;
in1 = new Inner ("Hello");
in2 = new Inner ("Hello again");
}
public void changeMessage()
{in1.message = "Eat desert first";
in2.message = "Another miracle";
}
public String toString()
{return in1 + "\n" + in2;
} Continued…
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !