• Aucun résultat trouvé

Introduction à la programmation orientée objet

N/A
N/A
Protected

Academic year: 2022

Partager "Introduction à la programmation orientée objet"

Copied!
33
0
0

Texte intégral

(1)

Algorithmique Algorithmique

Programmation Objet Programmation Objet

Python Python

Andrea G. B. Tettamanzi

Université de Nice Sophia Antipolis Département Informatique

andrea.tettamanzi@unice.fr

(2)

CM - Séance 4

Introduction

à la programmation

orientée objet

(3)

Plan

• Introduction

• Encapsulation

• Types de données abstraits

• Héritage et polymorphisme

(4)

Origines

• La programmation orientée objet surgit dans les années '80

• Logiciels de plus en plus complexes, travail en équipe

• Contrôler la complexité des logiciels

• Code réutilisable pour contenir les coûts du développement

• Contenir les coûts de la maintenance : – Ajout de nouvelles fonctionnalités

– Modification de fonctionnalités existantes

portage sur d'autres plate-formes ou environnements

• Coordonner et répartir le travail de développement

(5)

Evolution de la programmation

1940 1950 1960 1970 1980 1990 2000

Assembly Langage machine

Fortran Cobol Algol C

Forth

Pascal programmation

structurée

programmation orientée objet

Lisp

Basic

PL/1 Smalltalk

Scheme

Modula-2 ADA C++

Java

patrons de conception

Python

(6)

Programmation orientée objet

Discipline de programmation dans laquelle le programmeur établit

• non seulement les structures de données,

• mais aussi les opérations qui peuvent leurs être appliquées.

Ainsi,

• la structure de données devient un objet qui inclutobjet – Données, appelées attributsattributs

– Opérations, appelées méthodesméthodes

• Le programmeur peut définir des relationsrelations entre les objets

(7)

Encapsulation

• Seules les opérations définies à l'intérieur d'une structure de données peuvent manipuler les données de cette structure :

– L'utilisation d'opérations certifiées sur les structures de données garantit leur consistence

– Élimine une parmi les causes d'erreur les plus importantes

• Cacher les détails de réalisation : – Avère la modularité du code

– facilite l'extension et la maintenance – facilite l'individuation des erreurs

(8)

Type abstrait de données

• Possède un type

• Définit un ensemble d'opérations, qui constituent son interface

• Les opérations de l'interface sont la seule manière d'accéder au type abstrait de données

• Son domaine d'application est défini par des axiomes et des préconditions

(9)

Exemple : Type abstrait de données

“Nombre Naturel”

Type : “Nombre Naturel”

• Opérations définies (Interface) : – S(n), n + m, n x m, etc.

n = m, n < m, n | m, premier(n), etc.

Axiomes et préconditions :n + 0 = 0 + n = n

n + S(m) = S(n) + mn x 0 = 0 x n = 0

n x S(m) = (n x m) + netc.

(10)

Objets et Classes

NomClasse attributs méthodes

C'est-à-dire, données

objet1: NomClasse instances de la classe C'est-à-dire, opérations, fonctions

objet2: NomClasse

(11)

Visibilité

NomClasse

- données privées données protégées + données publiques - méthodes privées méthodes protégées + méthodes publiques

visibles que au code de la classe

visibles que au code

de la classe et des

sous-classes

(12)

Héritage : Définition

L'héritage est la caractéristique d'un langage orienté objet qui fait que les objets d'une classe “héritent” toutes les propriétés définies pour les classes de niveau supérieur :

– attributs;

– méthodes;

– etc.

(13)

Héritage

A

B

C

a

a

a

b

b

(14)

Vision naïve-intuitive

Agenda

Par jour Semanale Mensuelle

(15)

Sous-classe = sous-type

“B sous-type de A  pour chaque programme qui utilise des objets de classe A, on peut utiliser des objets de classe B à leur place sans que le comportement logique du programme change”.

Une sous-classe ne peut pas contraindre le comportement des super-classes.

Principe de substitution de Liskov

(16)

Exemple

?

(17)

Exemple

protected double b, h;

setBase(double);

setHeight(double);

(18)

Exemple

protected double b;

setBase(double);

protected double h;

setHeight(double);

(19)

Deux notions cohabitent dans l'héritage : – Héritage d'interface ou subtyping;

– Héritage de réalisation ou subclassing.

Types d'héritage

(20)

Héritage de réalisation

Il s'agit d'un mécanisme de réutilisation du code.

La sous-classe réutilise les méthodes des super-classes.

(21)

Héritage d'interface

Il s'agit d'un mécanisme de compatibilité entre des types.

Il permet le polymorphisme par sous-typage.

Une sous-classe est un sous-type compatible vers le haut avec tous les types définis tout au long de sa chaîne d'héritage.

(22)

Héritage

A a, b + f(x)

+ g(x, y)

B c

O1 : A

O2 : B f(x) code f(x)

h(x)

o1 A

(23)

Deux ordres d'avantages :

– fusion d'interfaces provenant de sources différentes ; – réutilisation de code provenant de sources différentes.

Héritage d'interface :

– La correction peut être vérifiée statiquement (= au moment de la compilation);

Héritage de réalisation :

– Plus problématique : ex., la même méthode réalisée

Héritage multiple

(24)

Polymorphisme

Proprieté d'une même entité qui se manifeste dans des formes différentes dans de contextes différents…

In Informatique :

Idée d'autoriser le même code à être utilisé avec différents types,

(25)

Exemple : monomorphisme

int max(int a, int b) : if(a > b) : return a else : return b

double maxd(double a, double b) : if(a > b) : return a

else : return b

(26)

Exemple : monomorphisme

int max(int a, int b) : if(a > b) : return a else : return b

double maxd(double a, double b) : if(a > b) : return a

else : return b

(27)

Classification selon Cardelli-Wegner

Polymorphisme

universel

ad hoc

paramétré par sous-typage

overloading

coercion

(28)

La même fonction ou les mêmes opérateurs peuvent être appliqués à des types différents.

Exemple (en C):

double x, y, z;

int i, j, k;

Overloading

(29)

Coercion

Les arguments d'une fonction ou opérateur sont transformés implicitement en le type applicable.

Exemple (en C):

double pow(double, double);

double x, y;

int n;

(30)

Polymorphisme paramétré

Fonctions et opérateurs paramétrés selon le type auquel il peuvent être appliqués.

Exemple (en C++):

template <typename T> T max(T a, T b) {

if(a > b) return a;

else return b;

(31)

Polymorphisme par sous-typage

• Une méthode (c'est-à-dire une opération) peut être appliquée à tous les objets qui appartiennent à la classe qui la prévoit dans son interface.

• Le principe de substitution de Liskov s'applique

• Typique de la programmation orientée objet

(32)

Exemple : max

interface Comparable {

int compareTo(Comparable c);

}

static Comparable max(Comparable a, Comparable b) {

if(a.compareTo(b) > 0) return a;

else return b;

(33)

Merci de votre attention

Références

Documents relatifs

Un programme écrit dans un langage de programmation orientée objet peut être vu comme une collection d’objets collaborant pour l’exécution d’une tâche donnée..

Hors cette étape n'est clairement pas du ressort d'un objet : seule la classe possède suffisamment d'informations pour la mener à bien : la création d'un objet est donc une méthode

Dans le cas de l’approche procédurale, un programme correspond à l’assemblage de plusieurs fonctions qui s’appellent entre elles. Exemple de langages de

Les exemples de code sont écrits en C#, mais sont facilement transposables à d'autres langages orientés objets comme

L’interpréteur java permet d’exécuter une application écrite en langage java (autre qu’une applet), plus spécifiquement un fichier ClassName.class (i.e le java bytecodes). Par

Cette technique permet de sécurisé l’accès aux données en vérifiant par exemple des conditions de valeur ou d’accès et permettant une plus grande flexibilité du coeur des

une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, accéder à la liste des articles commandés ainsi que prix total des

Cette méthode retourne vrai s’il existe une l’intersection ainsi que le point d’intersection faux, dans le cas contraire..  Une classe Droite constituée d’un Point et