Les objets en Java Plan Types et Classes Exemple 1: fraction

1
Les objets en Java
Joël Quinqueton
pt MIAp, UFR IV
UPV - Université Montpellier III
Plan
Types et classes
Premier exemple de classe
Second exemple: une liste
L’héritage en Java
Types et Classes
Types primitifs
Tableaux
Classes:
définit un nouveau type
Contient des champs (variables locales)
Contient des méthodes (comportement)
Exemple 1: fraction
Variables locales:
Numérateur
Dénominateur
• Méthodes:
Calcul: addition, soustraction, multiplication, division
Comparaison: égalité, inégalités
Impression
– Réduction, création,…
Variables locales:
• Numérateur, Dénominateur: ce sont des
entiers
On peut choisir leur type en fonction de ce
que l’on veut faire (long, int ou short)
Ces variables seront connues de toutes les
thodes définies dans la classe
Méthodes
Possèdent un nom, choisi par le programmeur
(exemple: maMethode)
Renvoient ou non des valeurs
Peuvent avoir des arguments
S’appliquent aux instances de la classe (ici les
fractions que l’on aura créées)
• Lancées par un appel du genre:
Fraction f;
f.maMethode();
2
Définition en Java
public class Fraction {
int numerateur;
int denominateur;
}
On ne se préoccupe pas pour l’instant des
problèmes de réductibilité.
Méthodes de calcul
Renvoient une nouvelle fraction
Il faut la créer: new Fraction()
Opèrent sur 2 fractions:
L’une est la fraction à laquelle s’applique la
méthode
L’autre est donnée en argument
Fraction maMethode(Fraction arg)
{…}
Algorithmique des calculs (1)
Multiplication
multiplier les numérateurs et les dénominateurs
– N1/D1 x N2/D2 = (N1 x N2) / (D1 x D2)
Division
Multiplier le numérateur de l’une par le
dénominateur de l’autre
– N1/D1 / N2/D2 = (N1 x D2) / (D1 x N2)
Multiplication en Java
Fraction mul(Fraction f) {
Fraction r = new Fraction();
r.numerateur = numerateur *
f.numerateur;
r.denominateur = denominateur
* f.denominateur;
return r;
}
Où sont mises les méthodes?
Elles sont ajoutées à la définition de la classe
public class Fraction {
int numerateur;
int denominateur;
Fraction mul(Fraction f) {
return r;
}
}
Division en Java
Fraction div(Fraction f) {
Fraction r = new Fraction();
r.numerateur = numerateur *
f.denominateur;
r.denominateur = denominateur
* f.numerateur;
return r;
}
3
Algorithmique des calculs (2)
Addition
Multiplier les dénominateurs etc…
– N1/D1 + N2/D2 =
(N1 x D2 + D1 x N2) / (D1 x D2)
Soustraction
– Même principe
– N1/D1 - N2/D2 =
(N1 x D2 - D1 x N2) / (D1 x D2)
Addition en Java
Fraction add(Fraction f) {
Fraction r = new Fraction();
r.numerateur = numerateur *
f.denominateur + f.numerateur *
denominateur;
r.denominateur = denominateur *
f.denominateur;
return r;
}
Soustraction en Java
Fraction sub(Fraction f) {
Fraction r = new Fraction();
r.numerateur = numerateur *
f.denominateur - f.numerateur *
denominateur;
r.denominateur = denominateur *
f.denominateur;
return r;
}
Méthodes de comparaison
Renvoient une valeur booléenne
– C’est un type primitif: boolean
Comme pour le calcul, opèrent sur 2 fractions:
L’une est la fraction à laquelle s’applique la méthode
L’autre est donnée en argument
boolean maMethode(Fraction arg) {…}
Algorithmique des comparaisons
Egalité
Différent de l’identité: vrai si les deux fractions
représentent la même valeur
– N1/D1 = N2/D2 ssi N1 x D2 = D1 x N2
Inégalité
On utilise le même principe
– N1/D1 > N2/D2:
si D2 de même signe, si N1 x D2 > D1 x N2
Sinon, si N1 x D2 < D1 x N2
Égalité en Java
boolean equals(Fraction f) {
boolean r;
r = (numerateur *
f.denominateur) ==
(denominateur * f.numerateur);
return r;
}
4
Égalité en Java (plus compact?)
boolean equals(Fraction f) {
return (numerateur *
f.denominateur) ==
(denominateur * f.numerateur);
}
Inégalité en Java
boolean moreThan(Fraction f) {
if (denominateur * f.denominateur >
0) return (numerateur *
f.denominateur) >
(denominateur * f.numerateur);
else return (numerateur *
f.denominateur) <
(denominateur * f.numerateur);
}
Méthodes d’impression
Ne renvoient rien (void)
N’opèrent que sur la fraction à laquelle
s’applique la méthode
Deux étapes:
il faut d’abord transformer notre fraction en
chaine de caractère
puis l’imprimer
décomposer en 2 méthodes?
Impression en Java
On propose d’imprimer le numérateur, suivi
du symbole de fraction, et suivi du
dénominateur
void print() {
System.out.print("" +
numerateur + "/" +
denominateur)
}
Lancement
Lui ajouter le modificateur public
Lui ajouter une méthode main
Sauvegarder notre classe dans un fichier
Fraction.java
Le compiler
Le lancer par java Fraction
Le fichier Fraction.java
public class Fraction {
int numerateur;
int denominateur;
Fraction mul(Fraction f) {…}
public static void main (String
[] args) {…}
}
5
Liste (rappels)
Structure de données élémentaire
Adaptée au stockage de données ordonnées (ou à
ordonner)
Permet de résoudre un vaste ensemble de problèmes
Actions élémentaires à implémenter
Insertion / Délétion d’un nouvel élément
Recherche d’un élément dans la liste
Tri des éléments de la liste
Types de listes
Liste dont les entrées et sorties sont
contraintes:
Files
Piles
Liste d’éléments du même type:
Tableaux
On doit connaître la longueur
Proposer une structure gérale
Structure de liste
Implémentation «!dynamique!»
Possibilité de faire croître la taille de la liste au
cours de l’exécution du programme
On ne peut pas supposer que les éléments
sont consécutifs en mémoire
Nécessité pour chaque élément de stocker une
information permettant l’accès au suivant
Structure de liste
La liste elle-même est une référence à son
premier élément
Le dernier élément pointe vers le vide
Insertion dans une liste
Il suffit de gérer les liens entre éléments
Insertion en fin de liste
Parcours de la liste jusqu’à ce qu’elle soit vide
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 !