1

Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry [email protected]. Objectifs Découvrir classes et objets Classes et

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

7. Classes et objets

Informatique 1

Rev 1.69Dr Pierre-André Mudry

[email protected]

Page 2: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Objectifs

Découvrir classes et objets

Classes et objets Constructeurs Visibilité des membres Modificateur static Autoboxing des types

P.-A. Mudry Classes et objets 4

Page 3: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Créer une classe : 1er exemple

Classes et objets

int widthint height

Rectangle nom de la classe

attributs de la classe = ensemble de variables

Un rectangle

class Rectangle{int width;int height;

}

Notation UML

Implémentation

P.-A. Mudry 5

Page 4: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

• Variables internesAttributs

• Fonctions en relation avec la classeMéthodes

Définition de classe

Classes et objets

interface de la classe

Une classe est un type généralisé que l’on peut définir.

Définition

P.-A. Mudry 6

Page 5: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Implémentation

Classes et objets

int widthint height

int surface()int perimeter()

Rectangle

public class Rectangle{int width;int height;

int surface(){return width * height;

}

int perimeter(){return 2*width + 2*height;

}}

P.-A. Mudry 7

Page 6: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Un peu de vocabulaire…

• Classe = moule Une fois moulé (on dit instancié), l'objet

possède attributs et méthodes du moule. L'instance de la classe s'appelle un objet . Si change le moule, instances différentes.

Classes et objetsP.-A. Mudry 8

Page 7: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Classes et objets (1)

• Classe Rectangle = le modèle de rectangle• Objets = des rectangles particuliers

Classes et objets

Objet

Objet

Objet

Objet

width

height

Classe

P.-A. Mudry 10

Page 8: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Classes et objets (2)

Classes et objets

Classe

a

width = 2height= 3

room

width= -52height= 34

surface1

width = 12height= 12

limit

width = 2height= 3

instanciation

instanciation

instanciationinstanciation

int widthint height

Rectangle

ObjetObjet

Objet

Objet

P.-A. Mudry 11

Page 9: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Instanciation (I)• Classe = type abstrait création

objets comme variables.• Syntaxe similaire

className identifier

Exemple :

Classes et objets

Rectangle aRectangle;Rectangle bathRoom;

P.-A. Mudry 12

Page 10: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Instanciation (II) – Opérateur new• Une fois le type de l'objet prévu, il

faut encore le créer.• La création de l'objet lui-même se

nomme l'instanciation.• Pour réserver la place mémoire, on

utilise l'opérateur new

Classes et objets

Rectangle room;room = new Rectangle();

déclaration instanciation

P.-A. Mudry 13

Page 11: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Accès aux membres

• Pour accéder aux membres opérateur ‘.’

Classes et objets

int widthint height

int surface()int perimeter()

Rectangle Rectangle room;room = new Rectangle();

room.witdh = 10;room.height = 4;int s = room.surface();

P.-A. Mudry 14

Page 12: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Exercice 1Série 5

Page 13: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Les classes

• Variable = tiroir avec un nom et taille.• Une classe = une armoire modulaire Peut contenir des variables

• Nombre pas limité• Type quelconque (également d'autres classes)

Peut contenir des méthodes

Classes et objetsP.-A. Mudry 16

Page 14: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Usage des classes

• Origine: le langage, d’autres codeurs, nousClasses et objets

Abstraction des objets

réels

Rectangle

Personne

Auto

Regroupement de méthodes

Math

FunGraphics

Un «mélange» des deux

String

Input

P.-A. Mudry 17

Page 15: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Rappel (cours 3)

• Exemple : la classe String sert à contenir des chaînes de caractèresString name = "Henri";

Classes et objets

Classe Objet Val. initiale

• Une classe = un type• Un objet = une variable de ce type

Pour l'instant

P.-A. Mudry 18

Page 16: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Classe comme rangement

Classes et objets

CircleCalculation

double perimeter(double r)double surface(double r)double diameter(double r)

Exemple 2 : méthodes seules

BankAccount

String ownerdouble amountDate openingDate

Exemple 1 : variables seules Exemple 3 :

Date

MathLibraryExemple 4 :

P.-A. Mudry 19

Page 17: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Deux conventions importantes

• Nom des classes : doit toujours commencer par des majuscules

• Valeurs par défaut : si font du sens Attributs avec un type primitif (int, char, etc…) initialisés automatiquement à 0 Attributs qui sont des objets

initialisés à null

Classes et objetsP.-A. Mudry 20

Page 18: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Exercice 2Série 5

Page 19: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Objectifs

Classes et objets

Découvrir les classes et objets

Classes et objets Constructeurs Visibilité des membres Modificateur static Autoboxing des types

P.-A. Mudry 22

Page 20: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Constructeur

Classes et objets

Le constructeur permet de spécifier ce qui se passe lors de la création d’un objet.

Définition

P.-A. Mudry 23

Page 21: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Constructeur (2)

• Avec constructeur :

Classes et objets

Rectangle rect = new Rectangle(3, 5);

class Rectangle{int width = 0;int height = 0;

Rectangle(int w, int h){width = w;height = h;

}}

P.-A. Mudry 24

Page 22: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Constructeur (3)

• Jusqu'à maintenant : constructeur par défaut

Classes et objets

Rectangle r1 = new Rectangle();r1.width = 3;r1.height = 5;

class Rectangle{int width;int height;

}

P.-A. Mudry 25

Page 23: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Constructeur (4)

1. Méthode qui ne retourne RIEN (pas void)

2. Nom du constructeur = nom classe3. Nombre de constructeurs possibles : aucun (par défaut) un plusieurs

Classes et objetsP.-A. Mudry 26

Page 24: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Exercice 3aSérie 5

Page 25: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

L’attribut this

• Référence sur l'objet utilisé, optionnel• Pour enlever les ambiguïtés

Classes et objets

class Foo{int x, int y;

Foo(int initx, int inity){

x = initx;y = inity;

}}…Foo f1 = new Foo(20, 30);

class Foo{int x, int y;

Foo(int x, int y){

this.x = x;this.y = y;

}}…Foo f1 = new Foo(20, 30);

P.-A. Mudry 28

Page 26: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Constructeur dans constructeur ?

Classes et objets

class Rectangle{int width, int height;// Constructor ARectangle(int w, int h){

width = w; height = h;}// Constructor BRectangle(int side){

this(side, side);}

}

Rectangle r1 = new Rectangle(3, 5);Rectangle r2 = new Rectangle(8);

P.-A. Mudry 29

Page 27: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Exercice 3bSérie 5

Page 28: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Objectifs

Classes et objets

Découvrir les classes et objets

Classes et objets Constructeurs Visibilité des membres Modificateur static Autoboxing des types

P.-A. Mudry 31

Page 29: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Visibilité des membres

• Deux modificateurs principaux public, private

• Modifient les règles de visibilité

P.-A. Mudry Classes et objets 32

Page 30: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Visibilité des membres (2)

• Membres private : accessibles dans la classe uniquement.

• Membres public : accessibles partout (en dehors de la classe)

• Sans modificateur : presque comme public (dans le dossier)

P.-A. Mudry Classes et objets 33

Page 31: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Plusieurs classes par fichier

• Normalement, une classe par fichier• Si plusieurs classes dans fichier, une

seule public• Classe modificateur public ou

aucun (pour l'instant)• Règles visibilité classes ≠ différent

visibilité membres (même si vocabulaire commun)

Classes et objetsP.-A. Mudry 34

Page 32: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Objectifs

Classes et objets

Découvrir les classes et objets

Classes et objets Constructeurs Visibilité des membres Modificateur static Autoboxing des types

P.-A. Mudry 35

Page 33: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Méthodes et modificateur static

• Pas besoin d'instance !

Classes et objets

class SimpleMath{static int cube(int x){

return x*x*x; }

static int abs(int x){return x > 0 ? x : -x;

}}…int a = SimpleMath.cube(3);int b = SimpleMath.abs(-34);int c = SimpleMath.cube(SimpleMath.abs(-32));

P.-A. Mudry 36

Page 34: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Méthodes et modificateur static (2)

• Attention ! Erreur typique des méthodes static : Pas de this utilisable Pourquoi ?

Classes et objetsP.-A. Mudry 37

Page 35: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Exemple complet static

Classes et objets

class Point2D {int x, y;

public Point2D(int initx, int inity) {x = initx;y = inity;

}

double distanceTo(Point2D other) {return Math.sqrt(Math.pow(other.x - this.x, 2.0)

+ Math.pow(other.y - this.y, 2.0));}

static double distanceBetween(Point2D a, Point2D b) {return Math.sqrt(Math.pow(b.x - a.x, 2.0)

+ Math.pow(b.y - a.y, 2.0));}

}…Point2D a, b; a = new Point2D(2, 1); b = new Point2D(3, 2);double d1 = a.distanceTo(b);double d2 = Point2D.distanceBetween(a, b);

P.-A. Mudry 38

Page 36: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Variables et modificateur static

Classes et objets

Variablesd'instance

1 copie par objet instancié

Variables de classe

1 copie par classe

Déclarées comme static

P.-A. Mudry 39

Page 37: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Exemple variable static

Classes et objets

class Point2D{static int nPoints= 0;int x, int y;

public Point2D(int initx, int inity){nPoints++;x = initx; y = inity;System.out.println("- Creation of a point: " + nPoints);

}}…Point2D a, b, c;a = new Point2D(2, 1);b = new Point2D(3, 2);c = new Point2D(4, 12);

P.-A. Mudry 40

Page 38: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Exemple static (2)

Classes et objets

c

x = 4;y = 12;

a

x = 2;y = 1;

b

x = 3;y = 2;

int x;int y;nPoints = 3;

Point2D

Instances

Classe

a = new Point2D(2, 1);b = new Point2D(3, 2);c = new Point2D(4, 12);

Accès aux membres:

Instances

Classe

P.-A. Mudry 41

Page 39: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

static et main

Classes et objets

class Foo{

int a;

Foo(){

// Here no longer static, please implement here

}

public static void main(String args[]){

Foo f = new Foo();

}

}

P.-A. Mudry 42

Page 40: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Objectifs

Classes et objets

Découvrir les classes et objets

Classes et objets Constructeurs Visibilité des membres Modificateur static Autoboxing des types scalaires

P.-A. Mudry 43

Page 41: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Types scalaires et classes

• A chaque type scalaire (int, float, …) correspond une classe (majuscule):

• Quelques attributs intéressants: toHexString(), highestOneBit(), MAX_VALUE, MIN_VALUE, SIZE

Classes et objetsP.-A. Mudry 44

int Integerfloat Floatdouble Double

Page 42: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

"Autoboxing" des types scalaires

• Passage type objet grâce autoboxing (conversion automatique)

• Exemples :

Classes et objetsP.-A. Mudry 45

Page 43: Informatique 1 · 2019. 11. 11. · Classes et objets Informatique 1 Rev 1.69 Dr Pierre-André Mudry pierre-andre.mudry@hevs.ch. Objectifs Découvrir classes et objets Classes et

Conclusion

• Introduction aux objets Classes et objets Méthodes Variables• Constructeur

• Membres statiques• Modificateurs de visibilité

Classes et objetsP.-A. Mudry 46