•Classe, Objet •Variables locales •Niveaux de visibilité ... · POO 2 •Une classe est une...

29
POO 1 •Classe, Objet •Variables locales •Niveaux de visibilité (Encapsulation) •Attributs et Méthodes Statiques •Surcharge des Méthodes •Transmission des Paramètres •Paquetage •Classes pour les types de base

Transcript of •Classe, Objet •Variables locales •Niveaux de visibilité ... · POO 2 •Une classe est une...

POO 1

•Classe, Objet•Variables locales•Niveaux de visibilité (Encapsulation)•Attributs et Méthodes Statiques•Surcharge des Méthodes•Transmission des Paramètres•Paquetage•Classes pour les types de base

POO 2

•Une classe est une sorte de type de données définie par le programmeurVariables peuvent être de type classe

•Objet est la valeur d’une variable de type classe; il est une instanciation de la classe

•Classe définit les types de données qu’un objet peut contenir et les actions qu’ils peuvent entreprendre

ClasseNom classeVar;classeVar =new ClasseNom();

ClasseNom classeVar=new ClasseNom();

POO 3

La durée de vie d’un objet

•La déclaration et l’instanciation de l’objet (new)•L’utilisation de l’objet en appelant ses méthodes•La suppression de l’objet : elle est automatique en Java, la mémoire inutilisée est prise en charge par le récupérateur de mémoire (garbage collector)

Objets identiques MaClasse m1 = new MaClasse();MaClasse m2 = m1;

m1 et m2 pointent sur le même objet

POO 4

• Egalité de deux références : ==–Compare si 2 références pointent vers le même objet

• Différence de deux références : !=–Compare si 2 références pointent vers des objets différents

• Type d’instance de la référence : instanceof–Permet de savoir si l’objet référencé est une instance d’une classe donnée ou d’une de ses sous-classes

Personne moi = new Personne(); …… if (moi instanceof Personne) {

System.out.println("Je suis bien unepersonne! "); }

POO 5

• Il prend en charge la gestion de la mémoire

• Il alloue l’espace mémoire lors de la création des objets

• Il libère la mémoire occupée par un objet dès qu’il n’y a plus aucune référence qui pointe vers cet objet

• Il est capable de compacter la mémoire pour éviter la fragmentation

Ramasse Miette - Récupérateur de mémoire (Garbage collector)

POO 6

null

• La valeur « null » peut être assignée à n’importe quelle référence sur un objet• Une méthode peut retourner « null »• L’appel d’une méthode sur une référence (adresse) d’objet valant« null » provoque une erreur d’exécution (NullPointerException)• On peut tester une référence pour savoir si elle vaut « null »

Personne moi = new Personne(); …… if (moi != null) {

System.out.println("J’existe toujours ! "); }

POO 7

class ClasseNom{public String var1;public int var2;

....

public void maMethode() { ......} Référencer la variable en dehors de la classe

objetNom.var1objetNom.var2

Invoquer la méthode en dehors de la classe[returntype =]objetNom.maMethode();

La classe doit être définie dans un fichier dontle nom est le même que la classe suivie de .java

POO 8

• Un programme java est une classe qui contient la méthode main

• L’exécution du programme java consiste à invoquer la méthode mainpublic static void main(String[] args)

• Une méthode qui retourne une valeur doit contenir au moins une return Expression

•Invoquer une méthode qui retourne une valeur typeRet tRetVar;

tRetVar = objetNom.methodeNom();•Invoquer une méthode void

objetNom.methodeNom();

Il est possible d’invoquer une méthode qui retourne une valeur pour effectuer une action objetNom.methodeNom();

POO 9

•Une variable définie dans une méthode est locale•toutes variables de main sont locales•toutes variables de méthodes sont locales•2 méthodes peuvent avoir des variables locales de même nom•Il n’y a pas de variables globales dans Java

•Une variable définie dans un bloc ({ }) est locale dans le bloc

•Une variable définie dans une boucle for est locale dans cette boucle

•Les paramètres d’une méthode sont considérés comme des variables locales de cette méthode

•Les variables d’un objet sont initialisés automatiquementboolean=false, les types primitifs =0, types classe= nullLes variables locales ne sont pas automatiquement initialisées

POO 10

Modificateurs public, privatepublic : pas de restriction d’accès pour des méthodes ou des variablesprivate : seulement accessibles à l’intérieure de la classe

Un bon programmeur doit définir chaque chaque attribut (variable) d’instance comme private

Méthodes sont en générales public (possibilité de les invoquer en dehors de la classe)

Méthodes sont private si elles sont utilisées à l’intérieure des autresméthodes de la classe

POO 11

Méthodes pour accéder ou modifier les valeursdes attributs privés des objets : (accesseurs)

class MaClasse{ private int x;

public Maclasse(int a){x=a;}......public int get(){return x;}

public void set (int a){x=a;}}

class AutreClasse{.....MaClasse y=new MaClasse();int a=y.get();y.set(5);

POO 12

Certains attributs peuvent être communs à tous les objetsde la classe et exister indépendamment à tout objet de la classe.

•on les déclare static•on les appelle attributs de classe ou attributs statiques•une seule copie de ce champ quelque soit le nombre d’objets•tous les objets de classe peuvent lire et changer•on référence directement dans la classe, mais en dehors il fautpréciser la classe

class Exemple{ static int n=0;

public void aff(){System.out.println(n)};}….….. Exemple.n ……

POO 13

Constantes:

public static final int BIRTH_YEAR = 1954;

int year=MaClasse.BIRTH_YEAR;

Classe Math contient des méthodes mathématiques et constantesstandards

Elle est définie dans java.lang package (importé par défaut)Math.PI, Math.Epublic static double sqrt (double arg) Math.sqrt(4)public static long round (double arg)public static int abs(int arg)public static float abs(float arg)

POO 14

Méthodes statiques sont invoquées sur une classe indépendammentd’une initiation de la classe.

•déclarées à l’intérieur de classe (static) •class MaClasse{public static typeRet maMeth(parameters) { . . . }.....}•invoquées avec le nom de la classe valRet = MaClasse.maMeth(arguments);

•une méthode statique •ne doit pas accéder à un attribut d’instance (variable d’un objet)•peut accéder à une variable statique

Il est possible d’ajouter la méthode main dans une classe quelconque

POO 15

class MathUtil {public final static double constPI = 3.14 ; public static double pi() {

return constPI;}

public static double carre(double x) {return x * x;

}

public static double demi(double x) {return x / 2;

}}…… double i = MathUtil.carre(5); double x = MathUtil.pi();

POO 16

class Point{ private static int origine; //abscisse absolu de l’origine private int x; //abscisse absolu du point

public Point (int xx) { x=xx;}

public void affiche () { System.out.print("abscisse ="+(x-origine)); System.out.println(" relative a l’origine="+origine); }

public static void setorigine(int o) {origine=o;}

public static int getorigine(int o) {return origine;}}

public class TstOrig{ public static void main(String[] args)

{Point a=new Point(10); a.affiche(); Point.setorigine(3); a.affiche();}

}

POO 17

La méthode max retourne le point le plus éloigné de l’origine

avec une méthode static:

public static Point max (Point a, Point b){if (Math.abs (a.x - origine) > Math.abs ( b.x -origine) return a;

else return b;}

appelPoint p1=new Point(4); Point p2= new Point(9);Point. setorigine(5);Point p= Point.max(p1,p2);p.affiche();

POO 18

avec une méthode usuelle:

public Point max (Point a){if (Math.abs ( this.x - origine) > Math.abs ( a.x -origine) return this;

else return a;}

appelPoint p1=new Point(4); Point p2= new Point(9);Point. setorigine(5);Point p= p1.max(p2);p.affiche();

POO 19

Des méthodes dites surchargées, si elles portent le même nom et que leurs paramètres sont de type différents, et/ou que le nombre de paramètres est différent.

Il n’est pas possible d’avoir différents types pour la valeur retournée

public Personne(String n, int a){ nom=n;

annee_n=a;salaire=1200;

} //méthode constructeur

public Personne(Personne p){ nom=p.nom;

annee_n=p.annee_n;salaire=p.salaire;

} //méthode constructeur

POO 20

public Personne(String n, int a, int s){ nom=n;

annee_n=a;salaire=s;

} //méthode constructeur

public void affiche(){System.out.println(nom+"    "  + annee_n+" "+salaire);}

public void affiche(String tt){System.out.println(tt +"   " + nom+"   "+  annee_n+""+salaire);}

POO 21

public class Person1{public static void main(String args[])

{ Personne p1= new Personne("dupont ",1961,1700); Personne p2= new Personne("bernard",1981);

Personne p3= new Personne(p1);

p1.affiche(); p2.affiche();

p3.affiche(" duplicata " ); p1.calcul_age(); p2.calcul_age(); p1.calcul_age();

}}

POO 22

this

•« this » = référence sur l’objet courant• Représente l’instance courante en train de s’exécuter

class Compte {public void crediter(float montant) {……};

public void debit(float montant) {……}; }

class Versement { public void valider() {……}

public void effectuer(Compte s, Compte d, floatmontant) {

s.debiter(montant);d.crediter(montant);this.valider();

} }

POO 23

Transmission des paramètres

• Les paramètres des méthodes sont passés par valeur

• Lorsque le paramètre est un objet c’est la référence d’objetqui est passé mais pas l’objet lui-même.

• On peut modifier l’objet dans la méthode càd modifier les valeurs de ses attributs (variables)

• On ne peut pas modifier la référence d’objet

POO 24

import java.io.*;class Maclasse{ private int x; public Maclasse(int xx) {x=xx;} public int getx (){ return x; } public void putx (int a){x=a;} }class Operations{public static void ajout(int n, int p) {n=n+p;} public static void ajout(Maclasse c, int p) {c.putx(c.getx()+p);} public static void ajout(Maclasse c){c.putx(c.getx()+5); c=null;}}public class TstTrans{ public static void main(String[] args) { Maclasse a=new Maclasse(2); int n=2; System.out.println("valeur d'objet avant "+a.getx()); Operations.ajout(a,5); System.out.println("valeur d'objet apres "+a.getx()); Operations.ajout(a); System.out.println("valeur d'objet apres "+a.getx()); System.out.println("valeur de n avant "+n); Operations.ajout(n,5); System.out.println("valeur d'objet apres "+n);}}

POO 25

• Un paquetage est une collection de classes et d’interfaces

• Préciser en première ligne du fichier package nom_du_paquetage;• Le nom du paquetage est séparé par des points

-si la classe Maclasse est dans le paquetage p1.p2dans le fichier source:package p1.p2;le chemin d’accès: p1/p2/Maclasse.class-si on veut importer dans un autre fichier sourceimport p1.p2.Maclasseimport p1.p2.* (toutes les classes du paquetage)

javac -d dir_dest program.java (*.class sont dans dir_dest/p1/p2)java -classpath dir_path p1.p2.program (peu importe le catalogue courant)

POO 26

• En l’absence d’instruction package les classes appartiennent au paquetage par défaut(catalogue courant)

NIVEAUX de VISIBILITE (Encapsulation)

4 types d’accès à un attribut ou à une méthode

• public : (public) par tous les objets• private : (privé) depuis sa propre classe• protected (protégé) par ceux du paquetage et

de ses sous-classes (dans les autres paquetages) une . « rien » (par défaut) par ceux du paquetage

POO 27

Classes pour les types de base (Wrapped class)

Pour les typesbyte, short, long, float, double, char

les classes équivalentes sontByte, Short, Long, Float, Double, Character

Integer intObjet = new Integer(42);

l’objet intObjet a un attributoù il y a une copie de la variable de base

POO 28

Méthodes pour convertir un objet à un type primitif (type de base)(unboxing)

–Byte, Short, Integer, Long, Float, Double, Character

– byteValue, shortValue, intValue, longValue, floatValue, doubleValue, charValue

int i = intObjet.intValue();

Automatique Boxing and Unboxing à partir de Java 5

Integer intObjet = 42;int i = intObjet;

POO 29

•les constantes Integer.MAX_VALUE, Integer.MIN_VALUE, Double.MAX_VALUE, Double.MIN_VALUE

convertir des “String” à des variables de baseInteger.parseInt (int)Long.parseLong, (long) Float.parseFloat, (float)Double.parseDouble (double)

String xx="12";int y=(Integer.parseInt(xx)+2);System.out.println(y);

affichera 14