méthodologie de la programmation

36
Méthodologie de la Programmation Palus Jean-Pascal Licence IV - L1 - Semestre I Bureau A184 - [email protected] Séance III Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 1 / 36

Upload: others

Post on 22-Oct-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Méthodologie de la Programmation

Méthodologie de la Programmation

Palus Jean-Pascal

Licence IV - L1 - Semestre I

Bureau A184 - [email protected]

Séance III

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 1 / 36

Page 2: Méthodologie de la Programmation

La programmation orientée objet

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 2 / 36

Page 3: Méthodologie de la Programmation

Objets

I Python supporte nativement plusieurs types de données :

1234 3.14159 "Hello word" [1, 5, 7, 11, 13]{"Univ" : "Paris 8", "Niveau" : "L1"}

I Chacun de ces types de données sont des objets.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 3 / 36

Page 4: Méthodologie de la Programmation

Objets

I Chaque objets dispose de :• Un type

• Une représentation de données interne, l’implémentation

• Un ensemble de méthodes permettant d’intéragir avec lui, l’interface.

I Un objet est l’instance d’un type.• 1234 est l’instance d’un int.

• "hello" est l’instance d’un str.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 4 / 36

Page 5: Méthodologie de la Programmation

la Programmation orientée objet

I En Python tout est un objet (et a un type).

I Un langage permettant de faire de la POO est donc un langagepermettant de :

• Créer de nouveaux objets.

• Manipuler des objets.

• Détruire des objets (explicitement comme en C++ ou implicitementavec un garbage collector).

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 5 / 36

Page 6: Méthodologie de la Programmation

la Programmation orientée objet

I Tous les langages ne sont pas orientés objet même si on peut faire dela programmation objet dans n’importe lequel.

I Certains langages offre un support natif de la POO :• C++, Swift, Java, PHP, Go, Rust, Javascript, Python, ...

I Mais pas tous de la même façon :• Avec des classes qu’on instancie (C++, Java, Python).

• Avec des prototypes qu’on clone (Self, JavaScript).

• D’autres choses moins clairement nommées (Go).

I Avec différentes façons de typer :• Typage fort ou faible (Python vs. JavaScript)

• Typage statique ou dynamique (OCaml vs. Racket)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 6 / 36

Page 7: Méthodologie de la Programmation

Les objets

I Un objet représente un concept, une idée, ou toute entité abstraite.

I Il contient une implémentation interne.

I Des méthodes pour le manipuler.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 7 / 36

Page 8: Méthodologie de la Programmation

Les objets

I Prenons l’exemple des listes :

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 8 / 36

Page 9: Méthodologie de la Programmation

Les objets

Prenons l’exemple des listes :I Implémentation :

1 // listobject.h23 #include <stdio.h>45 typedef struct {6 PyObject_HEAD7 Py_ssize_t ob_size;89 /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */

10 PyObject **ob_item;1112 /* ob_item contains space for 'allocated' elements. The number13 * currently in use is ob_size.14 * Invariants:15 * 0 <= ob_size <= allocated16 * len(list) == ob_size17 * ob_item == NULL implies ob_size == allocated == 018 */19 Py_ssize_t allocated;20 } PyListObject;

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 9 / 36

Page 10: Méthodologie de la Programmation

Les objets

Prenons l’exemple des listes :I Méthodes :

• L[i], L[i :j], +

• len(), min(), max(), del(L[i])

• L.append(), L.extend(), L.count(), L.index(),L.insert(), L.pop() ,L.remove(), L.reverse(), L.sort()

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 10 / 36

Page 11: Méthodologie de la Programmation

Les objets

I Les représentations internes sont généralement privées

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 11 / 36

Page 12: Méthodologie de la Programmation

Les avantages de la POO

I Permettre une meilleure modélisation des problèmes, et donc unefaciliter leur programmation.

I Obtenir des briques logiciel facilement réutilisables en dissociantl’implémentation de l’interface.

• On appelle cette pratique l’encapsulation.

• De nombreux modules Python inplémentent de nouvelles classes.

• Chaque classe à son propre environnement bien séparé qui évite lescollision de noms.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 12 / 36

Page 13: Méthodologie de la Programmation

Ne plus se concentrer sur les problèmes d’implémentation

1 P = Point(2,1)2 Q = Point(6,4)3 distance = P.Dist(Q)4

5 print(distance)6 # 5

I Ici, Dist est une méthode de la classe Point et P.Dist(Q) dit "calculeret renvoyer la distance du point P au point Q".

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 13 / 36

Page 14: Méthodologie de la Programmation

Ne plus se concentrer sur les problèmes d’implémentation

1 P = Point(2,1)2 Q = Point(6,4)3 distance = P.Dist(Q)4

5 print(distance)6 # 5

I Cela permet de se concentrer sur le concept de point plutôt que sur leconcept de coordonnées.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 14 / 36

Page 15: Méthodologie de la Programmation

Classes et Objets

I On fait la distinction entre créer une classe et instancier une classe.• Créer une classe consiste à définir une nouvelle classe, écrire ses

attributs et méthodes.

• Instancier une classe consiste à créer un exemplaire d’un objet.Par exemple L=[1, 2].

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 15 / 36

Page 16: Méthodologie de la Programmation

Classes et Objets

I Une classe est en quelque sorte un plan permettant de créer un objet.

I Un objet est l’instance d’une classe.• Classes : int(), str(), list(), dict(), Point(), ...

• Objets : 3, "hello", [1, 2, 3], ...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 16 / 36

Page 17: Méthodologie de la Programmation

Créer ses propres classes

I Grâce au mot clef class

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 17 / 36

Page 18: Méthodologie de la Programmation

Créer ses propres classes

1 class Point(object):2 """3 attributs et méthodes4 """

I Le mot clef class déclare une nouvelle classe.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 18 / 36

Page 19: Méthodologie de la Programmation

Créer ses propres classes

1 class Point(object):2 """3 attributs et méthodes4 """

I Le nom de la classe est ici Point.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 19 / 36

Page 20: Méthodologie de la Programmation

Créer ses propres classes

1 class Point(object):2 """3 attributs et méthodes4 """

I L’argument est la classe parente (super-classe) dont la nouvelleclasse hérite.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 20 / 36

Page 21: Méthodologie de la Programmation

Créer ses propres classes

1 class Point(object):2 """3 attributs et méthodes4 """

I Comme pour les fonction, le scope est défini par l’indentation.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 21 / 36

Page 22: Méthodologie de la Programmation

Créer ses propres classesAttributs

1 class Point(object):2 """3 attributs et méthodes4 """

I Les attributs de la classes sont les données qui vont être partagées partoutes les instances de cette classe.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 22 / 36

Page 23: Méthodologie de la Programmation

Créer ses propres classesAttributs

1 class Point(object):2 x = 03 y = 42

I Les attributs de la classes sont les données qui vont être partagéespar toutes les instances de cette classe.

! Attention à ce que vous faites.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 23 / 36

Page 24: Méthodologie de la Programmation

Créer ses propres classesConstructeur

1 class Point(object):2 def __init__(self,x,y):3 """ crée un objet point """4 self.x = x5 self.y = y

I On peut initialiser l’objet on utilise une méthode spéciale nomméeconstructeur.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 24 / 36

Page 25: Méthodologie de la Programmation

Créer ses propres classesConstructeur

1 class Point(object):2 def __init__(self, x, y):3 """ crée un objet point """4 self.x = x5 self.y = y

I Lorsqu’une méthode est appelée sur une instance, elle reçoit cetteinstance en argument.

• Dans certains langages il est implicite, dans d’autre il est souventnommé this ou self (ou les deux).

• En python il est de convention de le nommer self .

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 25 / 36

Page 26: Méthodologie de la Programmation

Créer ses propres classesConstructeur

1 class Point(object):2 def __init__(self, x, y):3 """ crée un objet point """4 self.x = x5 self.y = y

I x et y sont des attributs d’instance de la classe Point.

I Elles reçoivent ici les valeurs passées en paramètres du constructeur.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 26 / 36

Page 27: Méthodologie de la Programmation

Créer ses propres classesAppeler le constructeur

1 class Point(object):2 def __init__(self, x, y):3 """ crée un objet point """4 self.x = x5 self.y = y6

7 point = Point(3, 4)

I Le constructeur est appelé lors de l’instanciation de la classe.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 27 / 36

Page 28: Méthodologie de la Programmation

Créer ses propres classesAccéder aux attributs d’un objet

I On interagit avec les attributs d’un objet à l’aide d’un point.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 28 / 36

Page 29: Méthodologie de la Programmation

Créer ses propres classesAttributs

1 class Point(object):2 def __init__(self, x, y):3 """ crée un objet point """4 self.x = x5 self.y = y6

7 point = Point(3, 4)

I Le constructeur est appelé lors de l’instanciation de la classe.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 29 / 36

Page 30: Méthodologie de la Programmation

Créer ses propres classesméthodes spéciales

I Il existe un certain nombre de methodes spéciales qui permettentd’homogénéiser le fonctionnement des objets en python.

I Par exemple vous trouvez sûrement intuitif de pouvoir faire :

i = 42print(i)

I Ou encore :L = ['a', 'b', 'c']

for i in L:print(i)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 30 / 36

Page 31: Méthodologie de la Programmation

Créer ses propres classesméthodes spéciales

I Pour cela il existe dans le langage une syntaxe permettant d’écrire desméthodes spéciales permettant ce genre de comportement.

• __init__()

• __str__()

• __sizeof__()

• __len__()

• __pow__()

• __floor__()

• __iter__()

• __repr__()

• ...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 31 / 36

Page 32: Méthodologie de la Programmation

Créer ses propres classesUtiliser les classes dans des fonctions

I On peut maintenant utiliser les classes créées comme un type standard.

# Renvoie un point random dans le carré# de diagonale [x, y]def point_random(xa, ya, xb, yb):

x = random.randint(xa,xb)y = random.randint(ya, yb)return Point(x, y)

# Renvoie le milieu du segment [P1, P2]def point_milieu(Pa, Pb):

x = (Pa.x + Pb.x) // 2y = (Pa.y + Pb.y) // 2return Point(x, y)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 32 / 36

Page 33: Méthodologie de la Programmation

Créer ses propres classesImplémenter des méthodes

I On peut maintenant également implémenter ses propres méthode.

class Point(object):

# Constructeurdef __init__(self, x, y):

self.x = xself.y = y

def distance(self, destination):""" Implémentons cette méthode """

I self est toujours le premier argument des méthodes de la classe.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 33 / 36

Page 34: Méthodologie de la Programmation

Créer ses propres classesImplémenter des méthodes

I Les méthodes et les fonctions sont donc fondamentalement de mêmenature.

• On les appelle méthodes quand elles sont implémentées dans uneclasse...

• et fonctions dans le reste du code.

I En python les fonctions sont généralement, comme en mathématiques,préfixes : fonction(argument).

I Et les méthodes sont généralement postfixes : objet.méthode()

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 34 / 36

Page 35: Méthodologie de la Programmation

Créer ses propres classes

I Créer des alias est transparant quand cela concerne les types de baseimmutables, ça l’est moins pour les classes que l’on crée soit même.

i = 3j = i

# AliasP = Point(3, 4)Q = P

# CopieQ = Point(3, 4)P = copy(Q)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 35 / 36

Page 36: Méthodologie de la Programmation

Créer ses propres classes

I Essayons d’écrire une classe Fraction...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance III 36 / 36