Héritage (2) Programmation Orientée Objet. Jean-Christophe Routier Licence mention Informatique Université Lille Sciences et Technologies

Similar documents
Classes internes, Classes locales, Classes anonymes

Sun Control Station. Performance Module. Sun Microsystems, Inc. Part No September 2003, Revision A

Test, beauty, cleanness. d après le cours de Alexandre Bergel

Oracle ZFS Storage Appliance Cabling Guide. For ZS3-x, 7x20 Controllers, and DE2-24, Sun Disk Shelves

SunVTS Quick Reference Card

VLANs. Commutation LAN et Wireless Chapitre 3

Préparation au concours ACM TP 2

Oracle Dual Port QDR InfiniBand Adapter M3. Product Notes

Solaris 8 6/00 Sun Hardware Roadmap

Java et Mascopt. Jean-François Lalande, Michel Syska, Yann Verhoeven. Projet Mascotte, I3S-INRIA Sophia-Antipolis, France

Solaris 9 9/04 Installation Roadmap

Collections. Collections. USTL routier 1

Collections version 1.4

Conception Orientée Objet. Romain Rouvoy Licence mention Informatique Université Lille 1

Sun Ethernet Fabric Operating System. LLA Administration Guide

Sun Management Center 3.6 Version 7 Add-On Software Release Notes

Traditional Chinese Solaris Release Overview

Sun Java System Connector for Microsoft Outlook Q4 Installation Guide

man pages section 6: Demos

AgileMesh Node Configuration Guide

Solaris 8 User Supplement. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

About Transferring License Rights for. PL7 V4.5 and Unity Pro V2.3 SP1 Software

Sun Ethernet Fabric Operating System. IGMP Administration Guide

Oracle ZFS Storage Appliance Simulator Quick Start Guide

VHDL par Ahcène Bounceur VHDL

Analyse statique de programmes avioniques

Java Desktop System Release 2 Installation Guide

SunVTS Quick Reference Card

Sun Patch Manager 2.0 Administration Guide for the Solaris 8 Operating System

Memory Hole in Large Memory X86 Based Systems

A <Basic> C++ Course

Rackmount Placement Matrix

READ ME FIRST QUICK INSTALL GUIDE. Wireless Controller XWC Includes: One: XWC-1000 Wireless Controller One: Rack Mount Kit One: Power Cord

Font Administrator User s Guide

User guide. Bluetooth Keyboard BKB10

Mardi 3 avril Epreuve écrite sur un document en anglais

QUICK INSTALL GUIDE READ ME FIRST XWC Package Contents: XWC-1000 Wireless Controller. Rack Mount Kit. Power Cord. Wireless Controller

Font Administrator User s Guide. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

Sun Management Center 4.0 Version 4 Add-On Software Release Notes

5. Enterprise JavaBeans 5.3 Entity Beans. Entity Beans

Sun Management Center 4.0 Version 3 Add-On Software Release Notes

Solaris 8 User Supplement. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

Java Desktop System Release 3 Troubleshooting Guide

Sun Ethernet Fabric Operating System RMON Administration Guide

Cable Management Guide

Ultra Enterprise 6000/5000/4000 Systems Power Cord Installation

GNOME 2.0 Desktop for the Solaris Operating Environment User Guide

Solaris 8 Desktop User Supplement. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

Sun Enterprise System 336-Mhz Processor Upgrade Instructions

QUICK START GUIDE EJ-UW700. Bluetooth C Pen

Oracle Flash Storage System and Oracle MaxRep for SAN Security Guide

110 SERIES SINGLE-WAN GIGABIT VPN ROUTERS

Solaris PC NetLink 1.2 Installation Guide

Netra Blade X3-2B (formerly Sun Netra X6270 M3 Blade) for VMware ESXi. Installation Guide

The Solaris Security Toolkit - Quick Start

COURSE 80434: FIXED ASSETS IN MICROSOFT DYNAMICS NAV 2013

Simplified Chinese Solaris Release Overview

Solaris Common Desktop Environment: User s Transition Guide

Sun Ethernet Fabric Operating System. ONET Administration Guide

SunPCi Release Notes

Solaris Common Desktop Environment: User s Transition Guide. Sun Microsystems, Inc Garcia Avenue Mountain View, CA U.S.A.

Scenario Planning - Part 1

Sun StorageTek 2500 Series Array Firmware Upgrade Guide

Quick Start. AC1200 WiFi Range Extender Model EX6150

Solaris 8 Desktop User Supplement

Sun Fire V100 Server Product Notes

GNOME 2.0 Desktop for the Solaris Operating Environment Installation Guide

LVB-2 INSTRUCTION SHEET. Leakage Current Verification Box

PermaNetPlus for Pcorr+ and Permalog+ Quickstart Guide

This document is a preview generated by EVS

FlexArmor 24V dc Sinking Input Modules

Managing Boot EnvironmentsWith Oracle Solaris 11 Express

Forte for Java (Community Edition) QuickStart Guide

This manual provides information on the Extron MDA 4V EQ video distribution amplifier and discusses how to install and operate them.

UltraSPARC - IIs CPU Module Installation Guide

TP 3 des architectures logicielles Séance 3 : Architecture n-tiers distribuée à base d EJB. 1 Préparation de l environnement Eclipse

Sun Netra TM X4200 M2 Server Product Notes

User guide. Stereo Bluetooth Headset SBH60

User guide. Stereo Bluetooth Headset SBH80

Sun StorEdge Network 2 Gb Brocade SilkWorm 3200 and 3800 Switches Release Notes

DRDC Toronto No. CR Development and Documentation of the Software to Control the Noise Simulation Facility at DRDC Toronto

Sun Control Station. Software Installation. Sun Microsystems, Inc. Part No January 2004, Revision A

Sun Ethernet Fabric Operating System. MLDS Administration Guide

Sun StorEdge 3310 SCSI Array Best Practices Manual

Traditional Chinese Solaris Release Overview

20-40 Gbyte 8mm Tape Drive Installation and User s Guide

Sun Ultra TM. 5 and Ultra 10 Product Notes. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

Automating LDAP Client Installations

Sun Fire V60x and V65x Servers ReadMe

Sun Ultra 2 UltraSPARC -IIModuleX-Option

THE BEST VERSION FOR US

1. Getting to know the gimbal

Special Documentation Bluetooth module (BT10)

Sun Management Center 4.0 Version 2 Add-On Software Release Notes

Sun Java System Directory Server Release Notes for HP-UX

Sun Management Center 3.5 Service Availability Manager User s Guide

Brocade 5100 Switch Hardware Release Notes

Sun Ultra 2 UltraSPARC -II Module Upgrade

Fortran 90 Browser. f90browse

Transcription:

Héritage (2) Programmation Orientée Objet Jean-Christophe Routier Licence mention Informatique Université Lille Sciences et Technologies Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 1

Exemple : Dessin de Formes on souhaite réaliser une application de dessin permettant, entre autres, la manipulation de différentes formes graphiques : cercles, triangles, rectangles, polygônes, carrés, etc. un objet Canvas gère l état courant du dessin, l application dispose d outils permettant de déplacer la forme sélectionnée, d en changer la taille, de lui appliquer une rotation, etc. Canvas et chacune des classes décrivant les outils doivent pouvoir être implémentées indépendamment des formes existantes on doit pouvoir facilement ajouter des formes à l application. (Open Close Principle) Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 2

public class Canvas { protected List<Shape> lesformes; public void repaint() { for(shape s: this.lesformes) { s.draw(); public class MoveTool { public void move(shape selectedshape) { selectedshape.move(...); public class RotateTool { public void rotate(shape selectedshape) { selectedshape.rotate(...); public class ResizeTool { public void resize(shape selectedshape) { selectedshape.resize(...); Il est nécessaire de disposer d un type Shape Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 3

Interface ou héritage? interface il n est pas possible de définir un comportement pour les méthodes draw, rotate, resize ou d autres de Shape. héritage un certain nombre de comportements et d attributs peuvent être définis de manière commune pour toutes les formes : couleur du trait, motif du remplissage, épaisseur du trait, gestion du plan de profondeur d affichage, etc. Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 4

Interface ou héritage? interface il n est pas possible de définir un comportement pour les méthodes draw, rotate, resize ou d autres de Shape. héritage un certain nombre de comportements et d attributs peuvent être définis de manière commune pour toutes les formes : couleur du trait, motif du remplissage, épaisseur du trait, gestion du plan de profondeur d affichage, etc. Autre possibilité, utiliser une approche hybride : une classe abstraite Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 4

Classes abstraites Une classe abstraite est une classe (comporte donc des attributs et des méthodes), Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5

Classes abstraites Une classe abstraite est une classe (comporte donc des attributs et des méthodes), déclare de méthodes sans comportement attaché, ces méthodes sont dites méthodes abstraites, Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5

Classes abstraites Une classe abstraite est une classe (comporte donc des attributs et des méthodes), déclare de méthodes sans comportement attaché, ces méthodes sont dites méthodes abstraites, ne peut pas créer d instance (même si elle peut déclarer un constructeur), Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5

Classes abstraites Une classe abstraite est une classe (comporte donc des attributs et des méthodes), déclare de méthodes sans comportement attaché, ces méthodes sont dites méthodes abstraites, ne peut pas créer d instance (même si elle peut déclarer un constructeur), les classes qui en héritent doivent concrétiser le comportement de toutes les méthodes abstraites sous peine d être elles aussi abstraites Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 5

abstract déclaration classe abstraite : ajouter le qualificatif abstract avant class dans l entête de déclaration. public abstract class SomeAbstractClass... {... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 6

abstract déclaration classe abstraite : ajouter le qualificatif abstract avant class dans l entête de déclaration. déclaration méthode abstraite : ajouter le qualificatif abstract avant le type de retour dans la signature de la méthode et ne donner aucun corps. public abstract class SomeAbstractClass... {... public abstract Type exampleofabstractmethod(...); Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 6

abstract déclaration classe abstraite : ajouter le qualificatif abstract avant class dans l entête de déclaration. déclaration méthode abstraite : ajouter le qualificatif abstract avant le type de retour dans la signature de la méthode et ne donner aucun corps. public abstract class SomeAbstractClass... {... public abstract Type exampleofabstractmethod(...); abstract SomeAbstractClass...... + exampleofabstractmethod() Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 6

Retour en Forme public abstract class Shape { protected int linewidth; protected FillStyle fillstyle; protected byte depth; public void setlinewidth(int width) { this.linewidth = width public void tofront() { depth = 0; public FillStyle getfillstyle() { return fillstyle; public abstract void draw(); public abstract void rotate(double angle); public abstract void move(...); public abstract void resize(...); public class Circle extends Shape { protected Point center; protected int radius; public void draw() {... code... public void rotate(double angle) {... code... public void move(...) {... code... public void resize(...) {... code... public Point getcenter() {... code... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 7

public abstract class Shape {... public class Circle extends Shape {... public abstract class AbstractPolygon extends Shape { protected List<Edge> edges; public abstract int getnumberofedges();... // les deux classes suivantes fournissent une définition pour getnumberofedges() // (et les autres méthodes abstraites de Shape) public class Triangle extends AbstractPolygon {... public class Rectangle extends AbstractPolygon {... // réutilise le getnumberofedges() de Rectangle public class Square extends Rectangle {... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 8

personnages de jeu public abstract class GameCharacter { protected static final int DEFAULT LIFEPOINTS = 12; protected static final int DEFAULT STRENGTH = 8; protected int lifepoints; protected int strength; public GameCharacter() { this(gamecharacter.default LIFEPOINTS, GameCharacter.DEFAULT STRENGTH); public GameCharacter(int lifepoints, int strength) { this.lifepoints = lifepoints; this.strength = strength; public abstract void interactwith(gamecharacter other); public int isdead() { return this.lifepoints <= 0; public int removelifepoints(int lp) { return this.lifepoints -= lp; public int strength() { return this.strength; public int flee() {... public void attack(gamecharacter other) { other.removelifepoints(this.strength); Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 9

personnages de jeu public abstract class GameCharacter { protected static final int DEFAULT LIFEPOINTS = 12; protected static final int DEFAULT STRENGTH = 8; protected int lifepoints; protected int strength; public GameCharacter() { this(gamecharacter.default LIFEPOINTS, GameCharacter.DEFAULT STRENGTH); public GameCharacter(int lifepoints, int strength) { this.lifepoints = lifepoints; this.strength = strength; public abstract void interactwith(gamecharacter other); public int isdead() { return this.lifepoints <= 0; public int removelifepoints(int lp) { return this.lifepoints -= lp; public int strength() { return this.strength; public int flee() {... public void attack(gamecharacter other) { other.removelifepoints(this.strength); public class Orc extends GameCharacter { protected static final int ORC LIFEPOINTS = 10; protected PersonneId pid; public Orc(int strength) { super(orc LIFEPOINTS, strength); public void interactwith(gamecharacter other) { this.attack(other); // moi vois, moi tue... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 9

personnages de jeu public abstract class GameCharacter { protected static final int DEFAULT LIFEPOINTS = 12; protected static final int DEFAULT STRENGTH = 8; protected int lifepoints; protected int strength; public GameCharacter() { this(gamecharacter.default LIFEPOINTS, GameCharacter.DEFAULT STRENGTH); public GameCharacter(int lifepoints, int strength) { this.lifepoints = lifepoints; this.strength = strength; public abstract void interactwith(gamecharacter other); public int isdead() { return this.lifepoints <= 0; public int removelifepoints(int lp) { return this.lifepoints -= lp; public int strength() { return this.strength; public int flee() {... public void attack(gamecharacter other) { other.removelifepoints(this.strength); public class Orc extends GameCharacter { protected static final int ORC LIFEPOINTS = 10; protected PersonneId pid; public Orc(int strength) { super(orc LIFEPOINTS, strength); public void interactwith(gamecharacter other) { this.attack(other); // moi vois, moi tue... public class CarefulCharacter extends GameCharacter { protected int cautionthreshold; public CarefulCharacter(int strength, limit) { super(); this.cautionthreshold = limit; public void interactwith(gamecharacter other) { // inutile de prendre des risques if (other.strength() - this.strength > this.cautionthreshold) { this.flee(); else { this.attack(other);... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 9

Héritage d interfaces il est possible de définir une interface héritant d une autre interface. comme pour les classes, on peut étendre par héritage. public interface Aquatic { public void swim(); public interface Marine extends Aquatic { public interface Predator { public void hunt(); public interface MarinePredator extends Marine, Predator { public float kilooffisheatenaday(); intérêt : typage mutiple = intersection de types. Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 10

public interface Animal { public interface Aquatic { Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

public interface Animal { public interface Aquatic { public interface AquaticAnimal extends Animal, Aquatic { Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

public interface Animal { public interface Aquatic { public interface AquaticAnimal extends Animal, Aquatic { public class Zoo { public void addanimal(animal animal) {... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

public interface Animal { public interface Aquatic { public interface AquaticAnimal extends Animal, Aquatic { public class Zoo { public void addanimal(animal animal) {... public class Aquarium { public void add(aquatic aquatic) {... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

public interface Animal { public interface Aquatic { public interface AquaticAnimal extends Animal, Aquatic { public class Zoo { public void addanimal(animal animal) {... public class Aquarium { public void add(aquatic aquatic) {... public class ZooWithAquarium extends Zoo { protected Aquarium aquarium; public void addaquaticanimal(aquaticanimal aquanimal) { this.addanimal(aquanimal); this.aquarium.add(aquanimal);... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

public interface Animal { public interface Aquatic { public interface AquaticAnimal extends Animal, Aquatic { public class Zoo { public void addanimal(animal animal) {... public class Aquarium { public void add(aquatic aquatic) {... public class ZooWithAquarium extends Zoo { protected Aquarium aquarium; public void addaquaticanimal(aquaticanimal aquanimal) { this.addanimal(aquanimal); this.aquarium.add(aquanimal);... public class Mammal implements Animal {... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

public interface Animal { public interface Aquatic { public interface AquaticAnimal extends Animal, Aquatic { public class Zoo { public void addanimal(animal animal) {... public class Aquarium { public void add(aquatic aquatic) {... public class ZooWithAquarium extends Zoo { protected Aquarium aquarium; public void addaquaticanimal(aquaticanimal aquanimal) { this.addanimal(aquanimal); this.aquarium.add(aquanimal);... public class Mammal implements Animal {... public class Cetacean extends Mammal implements AquaticAnimal {... Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

public interface Animal { public interface Aquatic { public interface AquaticAnimal extends Animal, Aquatic { public class Zoo { public void addanimal(animal animal) {... public class Aquarium { public void add(aquatic aquatic) {... public class ZooWithAquarium extends Zoo { protected Aquarium aquarium; public void addaquaticanimal(aquaticanimal aquanimal) { this.addanimal(aquanimal); this.aquarium.add(aquanimal);... public class Mammal implements Animal {... public class Cetacean extends Mammal implements AquaticAnimal {... public class WaterLily implements Aquatic {... // water lily = nénuphar Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

public interface Animal { public interface Aquatic { public interface AquaticAnimal extends Animal, Aquatic { public class Zoo { public void addanimal(animal animal) {... public class Aquarium { public void add(aquatic aquatic) {... public class ZooWithAquarium extends Zoo { protected Aquarium aquarium; public void addaquaticanimal(aquaticanimal aquanimal) { this.addanimal(aquanimal); this.aquarium.add(aquanimal);... public class Mammal implements Animal {... public class Cetacean extends Mammal implements AquaticAnimal {... public class WaterLily implements Aquatic {... // water lily = nénuphar //... utilisation... ZooWithquarium zoo = new ZooWithAquarium(); Cetacean cet = new Cetacean(); zoo.addaquaticanimal(cet); zoo.getaquarium().add(new WaterLily()); Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 11

final il est possible d interdire l héritage d une classe il suffit de mentionner le modificateur final dans l entête de déclaration de classe. public final class ExtendsNotPossibleClass {... java.lang.string, java.lang.boolean, java.net.inetaddress, etc. Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 12

il est possible d interdire la surcharge (redéfinition) d une méthode il suffit de mentionner le modificateur final dans la signature de la méthode. public class SomeClass { public final void somemethod() {... public class SomeSubClasse extends SomeClass { // ne peut pas redéfinir public void somemethod() dans classe java.applet.applet public final void setstub(appletstub stub) public static final AudioClip newaudioclip(url url) final constant Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 13

Application Question Quel(s) intérêt(s) à définir une méthode final? Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 14

Application fermer le code à l extension garantir le code exécuté indépendamment de tout héritage possible. Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 14

Application fermer le code à l extension garantir le code exécuté indépendamment de tout héritage possible. ex : dans une classe Poll (scrutin), garantir l anonymat du votant quelque soit le (sous-)type de scrutin : public final void vote(person person) throws ImpossibleVoteException { // vote and voter (person) are never memorized together if (this.canvote(person)) { Vote vote = person.vote(this.possiblevotes); // gets the vote from person this.storevote(vote); // stores vote but not the voter this.votedone(person); // person has voted else { throw new ImpossibleVoteException (); private final void storevote(vote vote) { // no information about voter while storing vote this.allvotes.add(vote); Université Lille Sciences et Technologies - Licence mention Informatique Programmation Orientée Objet 14