SlideShare une entreprise Scribd logo
PO3T Programmation orientée objet
Séance 1
Objet, classe
et encapsulation
Sébastien Combéfis, Quentin Lurkin mercredi 16 septembre 2015
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
Informations générales
PO3T Programmation orientée objet
13 cours de 1h30 (19,5 heures)
Documents utilisés sont sur Eole (slides et énoncés des labos)
Évaluation
Examen (PO3T) : 100%
Enseignants
Sébastien Combéfis (s.combefis@ecam.be)
Quentin Lurkin (q.lurkin@ecam.be)
3
Livre de référence
Beginning C# Object-Oriented
Programming
par Dan Clark
ISBN 978-1-430-24935-1
4
Objectifs
Création et utilisation d’objets
État
Appel de méthode
Ramasse-miettes
Définition de classes
Variable d’instance, visibilité
Constructeur
Définition de méthode
Encapsulation
5
Objet
Vie d’un objet
Vie d’un objet
Création de l’objet (initialisation)
Appel de méthode, changement d’état (utilisation)
Destruction de l’objet (finalisation)
1 words = []
2
3 words.append(’Hello ’) # Appel de la méthode append
4 words.append(’World!’) # de l’objet words (list)
5
6 print(’ ’.join(words))
Hello World!
7
Et en Java...
1 import java.util. ArrayList ;
2
3 public class Cours1
4 {
5 public static void main ( String [] args)
6 {
7 ArrayList <String > words = new ArrayList <String >();
8
9 words.add ("Hello"); // Appel de la méthode add
10 words.add ("World!"); // de l’objet words (ArrayList)
11
12 System.out.println (String.join (" ", words));
13 }
14 }
8
Et en PHP...
1 <?php
2 $words = new ArrayObject ();
3
4 $words ->append ("Hello");
5 $words ->append ("World!");
6
7 echo join (’ ’, $words -> getArrayCopy ());
8 ?>
9
Et en C++...
1 # include <iostream >
2 # include <vector >
3
4 using namespace std;
5
6 int main (int argc , char *argv [])
7 {
8 vector <string > words;
9
10 words.push_back ("Hello");
11 words.push_back ("World!");
12
13 string s;
14 join(words , ’ ’, s);
15 cout << s << endl;
16
17 return 0;
18 }
10
Et en C#...
1 using System;
2 using System. Collections .Generic;
3
4 namespace Cours1
5 {
6 public class MainClass
7 {
8 public static void Main (string [] args)
9 {
10 List <string > words = new List <string >();
11
12 words.Add ("Hello"); // Appel de la méthode Add
13 words.Add ("World!"); // de l’objet words (List)
14
15 Console .WriteLine (String.Join (" ", words));
16 }
17 }
18 }
11
Manipuler les objets du monde
getFuelLevel
isOnGround
startEngine
startAutopilot
Objet
Un objet possède
des attributs (caractéristiques)
des méthodes (fonctionnalités)
L’état de l’objet peut varier tout au long de l’exécution
Défini par l’ensemble des valeurs des attributs
Marque : Sony-Ericsson
Modèle : S500i
Couleur : Mysterious Green
Batterie : 80%
Luminosité : 60%
Marque : Sony-Ericsson
Modèle : S500i
Couleur : Spring Yellow
Batterie : 35%
Luminosité : 90%
13
Attribut
Un attribut possède une valeur
Cette valeur fait partie de l’état de l’objet
Les attributs sont accessibles en lecture et/ou en écriture
1 Console .WriteLine ("Taille de la liste : " + words.Count);
2
3 Console .WriteLine ("Ancienne capacité : " + words.Capacity);
4 words.Capacity = 10;
5 Console .WriteLine ("Nouvelle capacité : " + words.Capacity);
Taille de la liste : 2
Ancienne capacité : 4
Nouvelle capacité : 10
14
Fonctionnalité
Une fonctionnalité est appliquée sur un objet cible
Elle agit sur l’état de l’objet, en le lisant et/ou le modifiant
1 bool contains = words.Contains ("Hello");
2 bool allShorts = words.TrueForAll (s => s.Length <= 5);
3 Console .WriteLine (contains + ", " + allShorts);
4
5 Console .WriteLine ("Liste : " + String.Join(", ", words));
6 words.Clear ();
7 Console .WriteLine ("Liste : " + String.Join (", ", words));
True , False
Liste : Hello , World!
Liste :
15
Ramasse-miettes
Langages avec machine virtuelle ont un ramasse-miette
Suppression automatique et régulière des objets non référencés
1 System.out.println ( Runtime .getRuntime ().freeMemory ());
2 StringBuilder builder = new StringBuilder ("a");
3 for (int i = 0; i < 20; i++)
4 {
5 builder.append (builder);
6 }
7 System.out.println ( Runtime .getRuntime ().freeMemory ());
8
9 System.gc();
10 System.out.println ( Runtime .getRuntime ().freeMemory ());
> java -Xmx2048m Cours1
83601240
78776072
82171712
16
Destruction
Destruction explicite d’un objet
Libération de la mémoire et des ressources allouées
1 class Bullshit
2 {
3 public:
4 ~Bullshit ();
5 };
6
7 Bullshit ::~ Bullshit ()
8 {
9 cout << "Damn , I’ve been destroyed!";
10 }
11
12 int main (int argc , char *argv [])
13 {
14 Bullshit *b = new Bullshit ();
15 delete b;
16
17 return 0;
18 }
17
Classe
Classe
Une classe est un modèle avec lequel on construit des objets
Il s’agit d’un modèle qui reprend les attributs et fonctionnalités
Un objet est une instance d’une classe
On crée un nouvel objet à partir d’une classe
19
Instance
Trois éléments distincts
Une classe est un modèle
Un objet est une instance d’une classe
Une variable (de type objet) stocke une référence vers l’objet
g
GSM
GSM
Sony Ericsson
w200i
Orange-Blanc
GSM
Marque
Modèle
Couleur
envoyerSMS
recevoirAppel
voirNiveauBatterie
20
Alias
Une variable est une référence vers un objet
La variable permet d’accéder à l’objet
Un alias réfère le même objet qu’une autre variable
g
GSM
h
GSM
GSM
Sony Ericsson
w200i
Orange-Blanc
GSM
Marque
Modèle
Couleur
envoyerSMS
recevoirAppel
voirNiveauBatterie
21
Définir une classe
Définition d’une classe Contact représentant un contact
Défini par un prénom, un nom et un numéro de téléphone
1 class Contact:
2 def __init__(self , firstname , lastname):
3 self.firstname = firstname
4 self.lastname = lastname
5 self.phonenumber = 0
6
7 def setPhoneNumber (self , number):
8 self.phonenumber = number
9
10 def __str__(self):
11 return ’{} {} ({}) ’.format(self.firstname , self.lastname ,
self.phonenumber )
12
13 marchand = Contact(’Cédric ’, ’Marchand ’)
14 print(marchand) # Cédric Marchand (0)
15
16 marchand. setPhoneNumber (8172)
17 print(marchand) # Cédric Marchand (8172)
22
Constructeur et variable d’instance
Le constructeur initialise l’état de l’objet
On fait appel au constructeur au moment de l’instantiation
Initialisation des variables d’instance
On affecte une valeur à chaque variable d’instance
1 def __init__(self , firstname , lastname):
2 self.firstname = firstname
3 self.lastname = lastname
4 self.phonenumber = 0
5
6 # [...]
7
8 marchand = Contact(’Cédric ’, ’Marchand ’)
9 print(marchand)
23
En C#...
1 class Contact
2 {
3 private string firstname , lastname;
4 private int phonenumber;
5
6 public Contact (string firstname , string lastname)
7 {
8 this.firstname = firstname;
9 this.lastname = lastname;
10 this. phonenumber = 0;
11 }
12
13 // [...]
14 }
15
16 public class MainClass
17 {
18 public static void Main ( string [] args)
19 {
20 Contact marchand = new Contact ("Cédric", "Marchand");
21 Console .WriteLine (marchand);
22
23 // [...]
24 }
25 }
24
Variable d’instance
Une variable d’instance est liée à l’objet
Sa valeur fait partie de l’état de l’objet
Peuvent avoir une certaine visibilité
Uniquement accessible dans la classe ou visible de l’extérieur
1 public class Contact
2 {
3 private String firstname , lastname;
4 private int phonenumber;
5
6 // [...]
7 }
25
Instanciation
On peut créer plusieurs instances d’une classe
Chaque instance a son identité propre
marchand
Contact
Contact
Cédric
Marchand
8172
Contact
firstname
lastname
phonenumber
setPhoneNumber
toString
flemal
Contact
Contact
Clémence
Flemal
0
marchand = Contact(’Cédric’, ’Marchand’)
marchand.setPhoneNumber(8172)
print(marchand)
flemal = Contact(’Clémence’, ’Flemal’)
26
Méthode
Une méthode (d’instance) représente une fonctionnalité
Elle agit sur une instance spécifique, l’objet cible
Peuvent avoir une certaine visibilité
Uniquement accessible dans la classe ou visible de l’extérieur
1 def setPhoneNumber (self , number):
2 self.phonenumber = number
3
4 # [...]
5
6 marchand. setPhoneNumber (8172)
7 print(marchand)
27
En C#...
1 class Contact
2 {
3 // [...]
4
5 public void setPhoneNumber (int number)
6 {
7 phonenumber = number;
8 }
9
10 // [...]
11 }
12
13 public class MainClass
14 {
15 public static void Main ( string [] args)
16 {
17 // [...]
18
19 marchand. setPhoneNumber (8172);
20 Console .WriteLine (marchand);
21 }
22 }
28
Appel de méthode
Une méthode (d’instance) est appelée sur un objet cible
La méthode aura accès aux variables d’instances de cet objet
Mot réservé spécifique pour accéder à l’objet cible
Référence vers l’objet cible (this, self... )
1 public void setPhoneNumber (int number)
2 {
3 this. phonenumber = number;
4 }
5
6 // [...]
7
8 marchand. setPhoneNumber (8172); // this fera référence
9 Console .WriteLine (marchand); // à marchand
29
Accesseur
Un getter permet de lire une variable d’instance
Ou de manière générale, d’obtenir une information sur l’état
Un setter permet de modifier une variable d’instance
1 # [...]
2
3 def getPhoneNumber (self):
4 return self.phonenumber
5
6 def setPhoneNumber (self , number):
7 self.phonenumber = number
8
9 # [...]
10
11 marchand. setPhoneNumber (8172)
12 print(marchand. getPhoneNumber ())
30
Propriété C#
Une propriété permet de créer des accesseurs
Est vu de l’extérieur comme une variable d’instance publique
1 // [...]
2
3 public int PhoneNumber
4 {
5 get { return phonenumber; }
6 set { phonenumber = value; }
7 }
8
9 // [...]
10
11 marchand. PhoneNumber = 999;
12 Console .WriteLine (marchand. PhoneNumber);
31
Type abstrait de donnée
Abstract Data Type
ADT
Cacher les détails
d’implémentation
Rendre les changements
indépendants du reste
du programme
Le programme est
auto-documenté
Le programme manipule
des entités qui modélisent
le monde réel
32
Encapsulation I
Détails d’implémentation cachés du monde extérieur
Déclarer les variables d’instances comme privées
Accès contrôlés par les méthodes (d’instance) publiques
Permet un contrôle en lecture/écriture
1 public class Time
2 {
3 public int hour , minute;
4
5 public Time (int hour , int minute)
6 {
7 this.hour = hour;
8 this.minute = minute;
9 }
10 }
33
Accès direct
Le code utilisateur dépend de l’implémentation
Couplage fort entre des codes différents
Le code utilisateur ne fonctionnera plus en cas de changements
1 public static void main (String [] args)
2 {
3 Time t1 = new Time (8, 30);
4 Time t2 = new Time (12, 15);
5
6 System.out.println ((t1.hour == t2.hour && t1.minute < t2.
minute) || t1.hour < t2.hour);
7 System.out.println (t1.isBefore (t2));
8 }
34
Encapsulation II
Les variables d’instance doivent être privées
L’accès est contrôlé par des méthodes publiques
1 public class Time
2 {
3 private int hour , minute;
4
5 // [...]
6
7 public boolean isBefore (Time t)
8 {
9 return this.hour < t.hour || (this.hour == t.hour && this.
minute < t.minute);
10 }
11 }
12
13 // [...]
14
15 System.out.println (t1.isBefore (t2));
35
Encapsulation III
Le code utilisateur est indépendant de l’implémentation
1 class Time
2 {
3 private int minutes;
4
5 public Time (int hour , int minute)
6 {
7 this.minutes = 60 * hour + minute;
8 }
9
10 public boolean isBefore (Time t)
11 {
12 return this.minutes < t.minutes;
13 }
14 }
15
16 // [...]
17
18 System.out.println (t1.isBefore (t2));
36
Type de donnée
Une classe définit un nouveau type de donnée
Représentation plus directe d’objets du monde réel
Exposition d’une interface publique au monde extérieur
Variables d’instances et méthodes publiques
Des liens sont possibles entre différentes classes
37
Immuabilité
Un objet immuable garde le même état
Une fois initialisé, son état ne peut plus changer
Propriété très importantes dans plusieurs situations
Utilisation comme élément de certaines collections
Utilisation safe entre plusieurs threads
1 public class Time
2 {
3 private final int hour , minute;
4
5 public Time (int hour , int minute)
6 {
7 this.hour = hour;
8 this.minute = minute;
9 }
10 }
38
Code de hachage
Identifier de manière unique un objet
Deux objets avec le même état sont considérés identiques
Code de hachage unique pour chaque objet (hashcode)
Par exemple un entier sur 32 bits en Java
1 A = {1, 2, 3}
2 B = {3} | {1, 2}
3
4 print(id(A), id(B))
4338390408 4338390184
39
Crédits
Photos des livres depuis Amazon
https://www.flickr.com/photos/madalena_pestana/2828893154
https://www.flickr.com/photos/jetstarairways/6769120131
https://www.flickr.com/photos/booleansplit/3510951967
40

Contenu connexe

Tendances

Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
Amir Souissi
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
ABDESSELAM ARROU
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
ECAM Brussels Engineering School
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intents
Lilia Sfaxi
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Olivier Le Goaër
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
Mouna Torjmen
 
Chapitre 01 - Notions de base
Chapitre 01 - Notions de baseChapitre 01 - Notions de base
Chapitre 01 - Notions de base
L’Université Hassan 1er Settat
 
POO
POOPOO
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
LamissGhoul1
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
Haytam EL YOUSSFI
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
Lilia Sfaxi
 
Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)
Anis Bouhachem Djer
 
Langage C#
Langage C#Langage C#
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
Mahfoud EL HOUDAIGUI
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
Jaouad Rachek
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
Lilia Sfaxi
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
Aziz Darouichi
 

Tendances (20)

Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intents
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
 
Chapitre 01 - Notions de base
Chapitre 01 - Notions de baseChapitre 01 - Notions de base
Chapitre 01 - Notions de base
 
POO
POOPOO
POO
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 
Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)
 
Langage C#
Langage C#Langage C#
Langage C#
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 

En vedette

UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
ECAM Brussels Engineering School
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
ECAM Brussels Engineering School
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
ECAM Brussels Engineering School
 
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileDe la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
ECAM Brussels Engineering School
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
ECAM Brussels Engineering School
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
ECAM Brussels Engineering School
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
ECAM Brussels Engineering School
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
ECAM Brussels Engineering School
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
ECAM Brussels Engineering School
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
ECAM Brussels Engineering School
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
ECAM Brussels Engineering School
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
ECAM Brussels Engineering School
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
ECAM Brussels Engineering School
 
Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
ECAM Brussels Engineering School
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
ECAM Brussels Engineering School
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
ECAM Brussels Engineering School
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
ECAM Brussels Engineering School
 

En vedette (20)

UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
UKO-JAVA1001-slides
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
 
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileDe la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
 

Similaire à Programmation orientée objet : Object, classe et encapsulation

Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
ECAM Brussels Engineering School
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénients
Denis Voituron
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
Microsoft
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
Microsoft
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
Microsoft Technet France
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
Laurent BUNIET
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
neuros
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
Fou Cha
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
Rahma Boufalgha
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Android Optimisations Greendroid
Android Optimisations GreendroidAndroid Optimisations Greendroid
Android Optimisations GreendroidGDG Nantes
 
Patron observer
Patron observerPatron observer
Patron observer
Hibatallah Aouadni
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
Jean-Pierre Vincent
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Microsoft
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
Jean-Pierre Vincent
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
YasushiTsubakik
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
ECAM Brussels Engineering School
 
Formation POO & Java (2ème séance)
Formation POO & Java (2ème séance)Formation POO & Java (2ème séance)
Formation POO & Java (2ème séance)
G²FOSS ENIT
 

Similaire à Programmation orientée objet : Object, classe et encapsulation (20)

Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénients
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Android Optimisations Greendroid
Android Optimisations GreendroidAndroid Optimisations Greendroid
Android Optimisations Greendroid
 
Patron observer
Patron observerPatron observer
Patron observer
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Part1
Part1Part1
Part1
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Formation POO & Java (2ème séance)
Formation POO & Java (2ème séance)Formation POO & Java (2ème séance)
Formation POO & Java (2ème séance)
 

Plus de ECAM Brussels Engineering School

Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
ECAM Brussels Engineering School
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
ECAM Brussels Engineering School
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
ECAM Brussels Engineering School
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
ECAM Brussels Engineering School
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
ECAM Brussels Engineering School
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
ECAM Brussels Engineering School
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
ECAM Brussels Engineering School
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
ECAM Brussels Engineering School
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
ECAM Brussels Engineering School
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
ECAM Brussels Engineering School
 

Plus de ECAM Brussels Engineering School (13)

Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
 
Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 

Programmation orientée objet : Object, classe et encapsulation

  • 1. PO3T Programmation orientée objet Séance 1 Objet, classe et encapsulation Sébastien Combéfis, Quentin Lurkin mercredi 16 septembre 2015
  • 2. Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
  • 3. Informations générales PO3T Programmation orientée objet 13 cours de 1h30 (19,5 heures) Documents utilisés sont sur Eole (slides et énoncés des labos) Évaluation Examen (PO3T) : 100% Enseignants Sébastien Combéfis (s.combefis@ecam.be) Quentin Lurkin (q.lurkin@ecam.be) 3
  • 4. Livre de référence Beginning C# Object-Oriented Programming par Dan Clark ISBN 978-1-430-24935-1 4
  • 5. Objectifs Création et utilisation d’objets État Appel de méthode Ramasse-miettes Définition de classes Variable d’instance, visibilité Constructeur Définition de méthode Encapsulation 5
  • 7. Vie d’un objet Vie d’un objet Création de l’objet (initialisation) Appel de méthode, changement d’état (utilisation) Destruction de l’objet (finalisation) 1 words = [] 2 3 words.append(’Hello ’) # Appel de la méthode append 4 words.append(’World!’) # de l’objet words (list) 5 6 print(’ ’.join(words)) Hello World! 7
  • 8. Et en Java... 1 import java.util. ArrayList ; 2 3 public class Cours1 4 { 5 public static void main ( String [] args) 6 { 7 ArrayList <String > words = new ArrayList <String >(); 8 9 words.add ("Hello"); // Appel de la méthode add 10 words.add ("World!"); // de l’objet words (ArrayList) 11 12 System.out.println (String.join (" ", words)); 13 } 14 } 8
  • 9. Et en PHP... 1 <?php 2 $words = new ArrayObject (); 3 4 $words ->append ("Hello"); 5 $words ->append ("World!"); 6 7 echo join (’ ’, $words -> getArrayCopy ()); 8 ?> 9
  • 10. Et en C++... 1 # include <iostream > 2 # include <vector > 3 4 using namespace std; 5 6 int main (int argc , char *argv []) 7 { 8 vector <string > words; 9 10 words.push_back ("Hello"); 11 words.push_back ("World!"); 12 13 string s; 14 join(words , ’ ’, s); 15 cout << s << endl; 16 17 return 0; 18 } 10
  • 11. Et en C#... 1 using System; 2 using System. Collections .Generic; 3 4 namespace Cours1 5 { 6 public class MainClass 7 { 8 public static void Main (string [] args) 9 { 10 List <string > words = new List <string >(); 11 12 words.Add ("Hello"); // Appel de la méthode Add 13 words.Add ("World!"); // de l’objet words (List) 14 15 Console .WriteLine (String.Join (" ", words)); 16 } 17 } 18 } 11
  • 12. Manipuler les objets du monde getFuelLevel isOnGround startEngine startAutopilot
  • 13. Objet Un objet possède des attributs (caractéristiques) des méthodes (fonctionnalités) L’état de l’objet peut varier tout au long de l’exécution Défini par l’ensemble des valeurs des attributs Marque : Sony-Ericsson Modèle : S500i Couleur : Mysterious Green Batterie : 80% Luminosité : 60% Marque : Sony-Ericsson Modèle : S500i Couleur : Spring Yellow Batterie : 35% Luminosité : 90% 13
  • 14. Attribut Un attribut possède une valeur Cette valeur fait partie de l’état de l’objet Les attributs sont accessibles en lecture et/ou en écriture 1 Console .WriteLine ("Taille de la liste : " + words.Count); 2 3 Console .WriteLine ("Ancienne capacité : " + words.Capacity); 4 words.Capacity = 10; 5 Console .WriteLine ("Nouvelle capacité : " + words.Capacity); Taille de la liste : 2 Ancienne capacité : 4 Nouvelle capacité : 10 14
  • 15. Fonctionnalité Une fonctionnalité est appliquée sur un objet cible Elle agit sur l’état de l’objet, en le lisant et/ou le modifiant 1 bool contains = words.Contains ("Hello"); 2 bool allShorts = words.TrueForAll (s => s.Length <= 5); 3 Console .WriteLine (contains + ", " + allShorts); 4 5 Console .WriteLine ("Liste : " + String.Join(", ", words)); 6 words.Clear (); 7 Console .WriteLine ("Liste : " + String.Join (", ", words)); True , False Liste : Hello , World! Liste : 15
  • 16. Ramasse-miettes Langages avec machine virtuelle ont un ramasse-miette Suppression automatique et régulière des objets non référencés 1 System.out.println ( Runtime .getRuntime ().freeMemory ()); 2 StringBuilder builder = new StringBuilder ("a"); 3 for (int i = 0; i < 20; i++) 4 { 5 builder.append (builder); 6 } 7 System.out.println ( Runtime .getRuntime ().freeMemory ()); 8 9 System.gc(); 10 System.out.println ( Runtime .getRuntime ().freeMemory ()); > java -Xmx2048m Cours1 83601240 78776072 82171712 16
  • 17. Destruction Destruction explicite d’un objet Libération de la mémoire et des ressources allouées 1 class Bullshit 2 { 3 public: 4 ~Bullshit (); 5 }; 6 7 Bullshit ::~ Bullshit () 8 { 9 cout << "Damn , I’ve been destroyed!"; 10 } 11 12 int main (int argc , char *argv []) 13 { 14 Bullshit *b = new Bullshit (); 15 delete b; 16 17 return 0; 18 } 17
  • 19. Classe Une classe est un modèle avec lequel on construit des objets Il s’agit d’un modèle qui reprend les attributs et fonctionnalités Un objet est une instance d’une classe On crée un nouvel objet à partir d’une classe 19
  • 20. Instance Trois éléments distincts Une classe est un modèle Un objet est une instance d’une classe Une variable (de type objet) stocke une référence vers l’objet g GSM GSM Sony Ericsson w200i Orange-Blanc GSM Marque Modèle Couleur envoyerSMS recevoirAppel voirNiveauBatterie 20
  • 21. Alias Une variable est une référence vers un objet La variable permet d’accéder à l’objet Un alias réfère le même objet qu’une autre variable g GSM h GSM GSM Sony Ericsson w200i Orange-Blanc GSM Marque Modèle Couleur envoyerSMS recevoirAppel voirNiveauBatterie 21
  • 22. Définir une classe Définition d’une classe Contact représentant un contact Défini par un prénom, un nom et un numéro de téléphone 1 class Contact: 2 def __init__(self , firstname , lastname): 3 self.firstname = firstname 4 self.lastname = lastname 5 self.phonenumber = 0 6 7 def setPhoneNumber (self , number): 8 self.phonenumber = number 9 10 def __str__(self): 11 return ’{} {} ({}) ’.format(self.firstname , self.lastname , self.phonenumber ) 12 13 marchand = Contact(’Cédric ’, ’Marchand ’) 14 print(marchand) # Cédric Marchand (0) 15 16 marchand. setPhoneNumber (8172) 17 print(marchand) # Cédric Marchand (8172) 22
  • 23. Constructeur et variable d’instance Le constructeur initialise l’état de l’objet On fait appel au constructeur au moment de l’instantiation Initialisation des variables d’instance On affecte une valeur à chaque variable d’instance 1 def __init__(self , firstname , lastname): 2 self.firstname = firstname 3 self.lastname = lastname 4 self.phonenumber = 0 5 6 # [...] 7 8 marchand = Contact(’Cédric ’, ’Marchand ’) 9 print(marchand) 23
  • 24. En C#... 1 class Contact 2 { 3 private string firstname , lastname; 4 private int phonenumber; 5 6 public Contact (string firstname , string lastname) 7 { 8 this.firstname = firstname; 9 this.lastname = lastname; 10 this. phonenumber = 0; 11 } 12 13 // [...] 14 } 15 16 public class MainClass 17 { 18 public static void Main ( string [] args) 19 { 20 Contact marchand = new Contact ("Cédric", "Marchand"); 21 Console .WriteLine (marchand); 22 23 // [...] 24 } 25 } 24
  • 25. Variable d’instance Une variable d’instance est liée à l’objet Sa valeur fait partie de l’état de l’objet Peuvent avoir une certaine visibilité Uniquement accessible dans la classe ou visible de l’extérieur 1 public class Contact 2 { 3 private String firstname , lastname; 4 private int phonenumber; 5 6 // [...] 7 } 25
  • 26. Instanciation On peut créer plusieurs instances d’une classe Chaque instance a son identité propre marchand Contact Contact Cédric Marchand 8172 Contact firstname lastname phonenumber setPhoneNumber toString flemal Contact Contact Clémence Flemal 0 marchand = Contact(’Cédric’, ’Marchand’) marchand.setPhoneNumber(8172) print(marchand) flemal = Contact(’Clémence’, ’Flemal’) 26
  • 27. Méthode Une méthode (d’instance) représente une fonctionnalité Elle agit sur une instance spécifique, l’objet cible Peuvent avoir une certaine visibilité Uniquement accessible dans la classe ou visible de l’extérieur 1 def setPhoneNumber (self , number): 2 self.phonenumber = number 3 4 # [...] 5 6 marchand. setPhoneNumber (8172) 7 print(marchand) 27
  • 28. En C#... 1 class Contact 2 { 3 // [...] 4 5 public void setPhoneNumber (int number) 6 { 7 phonenumber = number; 8 } 9 10 // [...] 11 } 12 13 public class MainClass 14 { 15 public static void Main ( string [] args) 16 { 17 // [...] 18 19 marchand. setPhoneNumber (8172); 20 Console .WriteLine (marchand); 21 } 22 } 28
  • 29. Appel de méthode Une méthode (d’instance) est appelée sur un objet cible La méthode aura accès aux variables d’instances de cet objet Mot réservé spécifique pour accéder à l’objet cible Référence vers l’objet cible (this, self... ) 1 public void setPhoneNumber (int number) 2 { 3 this. phonenumber = number; 4 } 5 6 // [...] 7 8 marchand. setPhoneNumber (8172); // this fera référence 9 Console .WriteLine (marchand); // à marchand 29
  • 30. Accesseur Un getter permet de lire une variable d’instance Ou de manière générale, d’obtenir une information sur l’état Un setter permet de modifier une variable d’instance 1 # [...] 2 3 def getPhoneNumber (self): 4 return self.phonenumber 5 6 def setPhoneNumber (self , number): 7 self.phonenumber = number 8 9 # [...] 10 11 marchand. setPhoneNumber (8172) 12 print(marchand. getPhoneNumber ()) 30
  • 31. Propriété C# Une propriété permet de créer des accesseurs Est vu de l’extérieur comme une variable d’instance publique 1 // [...] 2 3 public int PhoneNumber 4 { 5 get { return phonenumber; } 6 set { phonenumber = value; } 7 } 8 9 // [...] 10 11 marchand. PhoneNumber = 999; 12 Console .WriteLine (marchand. PhoneNumber); 31
  • 32. Type abstrait de donnée Abstract Data Type ADT Cacher les détails d’implémentation Rendre les changements indépendants du reste du programme Le programme est auto-documenté Le programme manipule des entités qui modélisent le monde réel 32
  • 33. Encapsulation I Détails d’implémentation cachés du monde extérieur Déclarer les variables d’instances comme privées Accès contrôlés par les méthodes (d’instance) publiques Permet un contrôle en lecture/écriture 1 public class Time 2 { 3 public int hour , minute; 4 5 public Time (int hour , int minute) 6 { 7 this.hour = hour; 8 this.minute = minute; 9 } 10 } 33
  • 34. Accès direct Le code utilisateur dépend de l’implémentation Couplage fort entre des codes différents Le code utilisateur ne fonctionnera plus en cas de changements 1 public static void main (String [] args) 2 { 3 Time t1 = new Time (8, 30); 4 Time t2 = new Time (12, 15); 5 6 System.out.println ((t1.hour == t2.hour && t1.minute < t2. minute) || t1.hour < t2.hour); 7 System.out.println (t1.isBefore (t2)); 8 } 34
  • 35. Encapsulation II Les variables d’instance doivent être privées L’accès est contrôlé par des méthodes publiques 1 public class Time 2 { 3 private int hour , minute; 4 5 // [...] 6 7 public boolean isBefore (Time t) 8 { 9 return this.hour < t.hour || (this.hour == t.hour && this. minute < t.minute); 10 } 11 } 12 13 // [...] 14 15 System.out.println (t1.isBefore (t2)); 35
  • 36. Encapsulation III Le code utilisateur est indépendant de l’implémentation 1 class Time 2 { 3 private int minutes; 4 5 public Time (int hour , int minute) 6 { 7 this.minutes = 60 * hour + minute; 8 } 9 10 public boolean isBefore (Time t) 11 { 12 return this.minutes < t.minutes; 13 } 14 } 15 16 // [...] 17 18 System.out.println (t1.isBefore (t2)); 36
  • 37. Type de donnée Une classe définit un nouveau type de donnée Représentation plus directe d’objets du monde réel Exposition d’une interface publique au monde extérieur Variables d’instances et méthodes publiques Des liens sont possibles entre différentes classes 37
  • 38. Immuabilité Un objet immuable garde le même état Une fois initialisé, son état ne peut plus changer Propriété très importantes dans plusieurs situations Utilisation comme élément de certaines collections Utilisation safe entre plusieurs threads 1 public class Time 2 { 3 private final int hour , minute; 4 5 public Time (int hour , int minute) 6 { 7 this.hour = hour; 8 this.minute = minute; 9 } 10 } 38
  • 39. Code de hachage Identifier de manière unique un objet Deux objets avec le même état sont considérés identiques Code de hachage unique pour chaque objet (hashcode) Par exemple un entier sur 32 bits en Java 1 A = {1, 2, 3} 2 B = {3} | {1, 2} 3 4 print(id(A), id(B)) 4338390408 4338390184 39
  • 40. Crédits Photos des livres depuis Amazon https://www.flickr.com/photos/madalena_pestana/2828893154 https://www.flickr.com/photos/jetstarairways/6769120131 https://www.flickr.com/photos/booleansplit/3510951967 40