poo 1/3 introduction à la programmation orientée objet · 2008-01-08 · une interface définit...

32
POO 1/3 - Introduction à la Programmation Orientée Objet Pierre Parrend IUT Lumière Lyon II, 2005-2006 [email protected]

Upload: others

Post on 12-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

POO 1/3-

Introductionà la Programmation Orientée Objet

Pierre ParrendIUT Lumière Lyon II, [email protected]

Page 2: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 2

Sommaire

● Les Langages de Programmation

● Premier Programme

● Les Objets

● Objets et Classes

● Ecrire une Classe

● Héritage

● Interfaces et Classes Abtraites

Page 3: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 3

Les Langages de Programmation

● 4 grandes familles– Procédural

● Code Modulaire et Appels de Procédures● Ada, C, Pascal, Perl, PHP, VB

– Fonctionnel● Evaluation de fonctions mathématiques● APL, Erlang, Haskell, ML, LISP, F#, Scheme, XSLT

– Logique● Exploitation des propriétés de la Logique mathématique● Prolog

– Objet● Une application est en ensemble d'entités autonomes représentants

données et fonctions● C++, C#, Java, Smalltalk

Page 4: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 4

Les Langages de Programmation

● Vers Java

Page 5: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 5

CodeMon Premier Programme

● HelloWorld

public class HelloWorld{ public static void main(String[] args) { System.out.println("Bonjour Monde"); }}

● HelloWorld dans le monde Objet

public class HelloWorldClass{//constructeur public HelloWorldClass(){/*initialisation*/}

private void bonjourMonde() { System.out.println("Hello World"); }

public static void main(String[] args) { HelloWorldClass objetPoli

=new HelloWorldClass(); objetPoli.bonjourMonde(); }}

Page 6: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 6

Ce qu'est un Objet

● Définition– Entité cohérente composée de données et de fonctions

● Avoir et Etre● Etat et Action

– Représentation en mémoire d'une entité de l'application

Page 7: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 7

CodeDialogue d'Objets

● Scénario Aéroport– 3 Classes: Scenario, Avion, TourDeControle

– La classe Scenario crée l'environnement: Avions, TourDeControle

– La classe Scenario lance le décollage et l'atterrisage des avions

– Les Avions transmettent leur statut à la TourDeContrôle

Page 8: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 8

CodeDialogue d'Objets

● Scénario Aéroport– Diagramme de Classes

Page 9: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 9

CodeDialogue d'Objets

● Scénario Aéroport– Diagramme de Séquence

Scénario

Avion

TourDeControle

decollage()

atterrissage()informe()

informe()

init()

decollage()

atterrissage()

new()

new()

Page 10: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 10

CodeDialogue d'Objets

package aeroport;//Package

import java.util.ArrayList;//Imports de classes de l'API

public class Scenario//Classe{//Données//configuration private int nbAvions=5;

//stockage des données private TourDeControle bigBoss; private ArrayList avions;

//Méthodes private void init() { System.out.println("Initialisation"); bigBoss=new TourDeControle(); avions=new ArrayList(); for(int i=0;i<nbAvions;i++) { avions.add(new Avion(i,bigBoss)); } }

private void decollage() { System.out.println("Décollage"); Avion avionCourant; for(int i=0;i<avions.size();i++) { avionCourant=(Avion)avions.get(i); avionCourant.decollage(); } }

private void atterrissage() { System.out.println("Atterrissage"); Avion avionCourant; for(int i=0;i<avions.size();i++){ avionCourant=(Avion)avions.get(i); avionCourant.atterrissage(); } }//Méthode main public static void main(String[] args) { Scenario aeroport=new Scenario(); aeroport.init(); aeroport.decollage(); aeroport.atterrissage(); }}

Page 11: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 11

CodeDialogue d'Objets

package aeroport;//Package

public class Avion//Classe{//Données private int id; private TourDeControle tdc;

//Constructeur public Avion(int identifiant, TourDeControle tdc) { this.id=identifiant; this.tdc=tdc; System.out.println("* Avion "+id+" created *"); }//Méthodes public void decollage() { tdc.informe("Décollage en cours",this.id); }

public void atterrissage() { tdc.informe("Atterrisage en cours",this.id); }}

package aeroport;//Package

public class TourDeControle//Classe{//Constructeur public TourDeControle() { System.out.println(">> TourDeControle créée"); }

//Méthode public void informe(String message, int idAvion) { String information="L'Avion "+idAvion+" a transmis le message suivant: "+message+"."; System.out.println(">> "+information); }}

Page 12: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 12

Objets et Classes

● Classe: Définition d'un Type d'Objets– Vue statique

– Ce qu'on programme

● Objet: Instanciation d'une classe– Vue dynamique

– Ce qu'on exécute

Page 13: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 13

Objets et Classes

● Cycle de Vie d'un Objet

Public void maMethod(){

HelloWorldClass objetPoli

= new HelloWorldClass();}

1) Déclarationassociation du nom de variable avec un Type

2) InstanciationAllocation d'espace mémoireà l'objet3) InitialisationAppel au constructeur del'Objet

4) destructionPar le Garbage Collector

Page 14: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 14

Objets et Classes

● Type et Classes– Les Classes définissent des Types de Données

● Types de Données en Java– Types basiques

● Boolean, short, int, long, float, double

– Interfaces● API Java et définies par l'application● Définition de types● Ex: List, Iterable, Collection

– Classes● API Java et définies par l'application● Ex: System, Runtime, ArrayList, HelloWorldClass

Page 15: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 15

Ecrire une Classe

● Package– Première ligne du fichier

● Imports de Classes– Classes utilisées par la classe en cours

● Nom de Classe– C'est le nom du fichier dans lequel la classe est enregistrée

● Panier.java

package commande;

import java.io.File;import java.lang.System;

public class Panier{}

Page 16: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 16

Ecrire une Classe

● Membres d'une classe– Attributs

– Methodes

public class Panier{ private ArrayList produits; private int idClient; ...}

public class Panier{ ... public void addProduit(int idProduit, int quantite){...} public ArrayList getProduits(){...}}

Page 17: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 17

Ecrire une Classe

● Méthodes particulières– Constructeur

– main

public class Panier{ ... public Panier(int idClient){ this.idClient=idClient; } ...}

public class HelloWorld{ public static void main(String[] args) { System.out.println(“HelloWorld”); }}

Page 18: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 18

Ecrire une Classe

● Visibilité

public protected default privateClasse X X X XPackage X X XClasse Fille X XAutres X

-

#+

private

default (package protected)

protected

public

Page 19: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 19

Ecrire une Classe

● Domaine de définition des variables– Variables: globales, de méthodes, locales

Page 20: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 20

Héritage

● Principe– Mise en commun de code entre plusieurs classes similaires

● Coder l'héritage

package geometrie;

public class Figure{...}

public class Carre extends Figure {}

public class Rectangle extends Figure {}

public class Carre extends Figure { public Carre(...) { super(...); }}

Page 21: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 21

Héritage

● Définitions– Héritage: mécanisme d'extension de classe. Une Classe Fille

qui hérite d'une classe mère a accès à l'ensemble de ses membres (hors membres privés), et peut les compléter et/ou les redéfinir.

Page 22: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 22

Héritage

● Définitions (Suite)– Généralisation: c'est le mécanisme symétrique de l'Héritage.

La généralisation consiste à définir une classe mère qui contient le code commun à plusieurs classes filles.

– Polymorphisme: plusieurs classes filles différentes peuvent ête manipulées de manière transparente sous forme d'une instance du type de la classe mère. C'est le polymorphisme (1 classe peuvent être définie de plusieurs manières différentes et être utilisée de la même façon)

Page 23: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 23

Héritage

● Example

Page 24: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 24

Héritage

● Examplepackage geometrie; //classe fillepublic class Carre extends Figure { public int largeur;

public Carre(String nom, String couleur, int largeur) { super(nom, couleur,largeur*largeur); this.largeur=largeur; }

public void demo() { this.printProprietes(); System.out.println(“surface: ”+ this.getSurface()); } //exemple de method surchargee – redondant public int getSurface(){ return largeur*largeur; }}

package geometrie;//classe mèrepublic class Figure {

public String nom; public String couleur; public int surface;

public Figure(String nom, String couleur, int surface) { this.nom=nom; this.couleur=couleur; this.surface=surface; }

public void printProprietes() { System.out.println("****"); System.out.println("nom de la figure: " +nom); System.out.println("couleur: "+couleur); }

public int getSurface() { return surface; }}

Page 25: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 25

Héritage

● Example

public class Test{ public static void main(String[] args) { System.out.println("Test – Geometrie"); //heritage simple Carre monCarre =new Carre("roue", "rouge",25); System.out.println("Surface: " +monCarre.getSurface()); monCarre.printProprietes();

Rectangle monRectangle =new Rectangle("piscine","Vert",3,5); monRectangle.printProprietes(); //Polymorphisme Figure fig =new Carre("jacques", "bleu", 4); fig.printProprietes(); }}

Page 26: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 26

Interfaces et Classes Abstraites

● Example

Page 27: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 27

Interfaces et Classes Abstraites

● Principe

● Coder les Interfaces

public interface List{ //define method signature public Object[] toArray();}

public class ArrayList implements List{ Object[] dataArray; public Object[] toArray(){ //code return this.dataArray; }}

Page 28: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 28

Interfaces et Classes Abstraites

● Coder les Classes Abstraites

public abstract class AbstractList implements List{ //define constructor public AbstractList(){//code}

abstract public Object get(int index);

public List subList(int indexFrom, int indexTo){//code}}

Page 29: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 29

Interfaces et Classes Abstraites

● Définitions: Interfaces, Classes Abstraites

● Interface: Définition fonctionnelle d'un type de donnée.

● Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type. Une classe peut implémenter plusieurs interfaces, et donc être de plusieurs types. Les interfaces peuvent, comme l'héritage, être utilisées pour le polymorphisme.

● Une interface ne peut pas être instanciée (= utilisée comme objet).

Page 30: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 30

Interfaces et Classes Abstraites

● Définitions: Interfaces, Classes Abstraites

● Classe Abstraite: Classe Mère qui définit partiellement le comportement des ses Classes Filles, en particulier par le biais de méthodes abstraites, définies mais non implémentées.

● Signature d'une méthode: définition du nom, type de retour, type et nombre des paramètres, visibilité d'une méthode.

Page 31: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 31

CodeHelloWorld Expliqué

● String[] args– Tableau d'arguments

– Auquels on accède par args[i]

● static– Accès sur la classe (et non sur l'objet)

● void– Pas de donnée retournée par la function

● System.out.println– Affichage sur la sortie standard du Système

public class HelloWorld{ public static void main(String[] args) { System.out.println("Bonjour Monde"); }}

Page 32: POO 1/3 Introduction à la Programmation Orientée Objet · 2008-01-08 · Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type

Janvier 2008 Programmation Orientée Objet 32

ExerciceDialogue d'Objets

● Ecrire un programme simple qui réponde au cahier des charges suivant:– Une classe 'GestionClient'

● Avec une méthode ajoutClient(), qui crée un client, et affiche ses propriétés

– Une Classe 'Client'● Initialisé avec un nom (de type String), un identifiant (de type int)● Une méthode 'afficher', qui affiche les propriétés du client (nom, identifiant)

– Une Classe Scenario● Avec une méthode main● Créer les clients suivants par le biais de 'GestionClient':

– Gérard, identifiant=1– Amandine, identifiant=2;