surcharge d’opérateurs en java

Download Surcharge d’opérateurs en Java

Post on 03-Jan-2016

39 views

Category:

Documents

6 download

Embed Size (px)

DESCRIPTION

Surcharge d’opérateurs en Java. OO in J & ZKJC. Philippe Baqué Charles-Félix Chabert Christian Delbé Yannis Juan Encadré par Thomas Graf. Présentation du sujet. But : Permettre à l’utilisateur d’utiliser des opérateurs entre des types non-primitifs Sujet libre - PowerPoint PPT Presentation

TRANSCRIPT

  • Surcharge doprateurs en JavaPhilippe Baqu Charles-Flix ChabertChristian Delb Yannis Juan

    Encadr par Thomas GrafOOinJ & ZKJC

  • Prsentation du sujetBut : Permettre lutilisateur dutiliser des oprateurs entre des types non-primitifs

    Sujet librePourquoi une spcification ?Pourquoi une implmentation ?

  • Le plan

    Travail de recherche

    Spcification

    Implmentation

  • Le travail de rechercheLa surcharge dans les autres langages

    Voir lexistant

    En cerner les limites

    Pouvoir sen inspirer

  • Le travail de rechercheExplorer plusieurs routes avant de trouver son chemin PrprocesseurIntroduction dun nouveau type

  • PrprocesseurApproche simple et naturellea+b est remplac par a.operator_plus(b)Ncessit dune table de symboledune rsolution approrie

    Le prprocesseur devient un compilateurLe travail de recherche

  • Nouveau typeNombreuses propositions (Gosling, Joy, Darcy,)

    Propositions trs compltes

    mais modifications importantes !Par exemple, modification de la Machine Virtuelle Java Le travail de recherche

  • La spcification Points principaux

    Proposer une extension de Java

    Proposer une surcharge complte, mais simple

    Lefficacit nest pas le but !

  • GnralitsLutilisateur dclare des mthodes standards utilise les oprateurs dans son code

    Lextension rsout les occurrences doprateurs concerns passe la main JavaLa spcification

  • Les possibilits Avec OOinJ, on peut crire :

    OurInt o1 = (OurInt)1;OurInt o2 = (OurInt)2;OurInt [] oTab1 = {(OurInt)1, (OurInt)2};int [] Tab2 = {3,4};

    OurInt o3 = o1 + o2 * 2;OurInt [] oTab3 = oTab1 + Tab2;La spcification

  • Les oprateurs surchargeables

    oprateurs unaires : +, -, ++, --oprateurs binaires : +, -, *, /, %, >, =,

  • Les oprateurs non surchargeablesOprateur =

    Oprateurs ==, !=

    Oprateurs ||, &&

    Oprateur []La spcification

  • Dfinir les oprateurs Oprateurs unaires : operator:op(Type arg) Oprateurs binaires : operator:op(Type1 arg1, Type2 arg2) Oprateur de conversion :operator:(Type1)(Type2 arg)

    Exemple :static OutInt operator:+(OurInt a, int b){}La spcification

  • Oprateurs : mthodes de classe

    permettre lcriture de a+1 et de 1+aa+1 a.operator:+(1)1+a 1.operator:+(a) ??? A.operator:+(1,a) !!!

    simplicit de la rsolution Mthode dinstance : rsolution sur le type dynamique Mthode de classe : rsolution sur le type statique

    La spcification

  • Localisation des oprateurs

    Au moins un des paramtres doit tre :

    du type de la classe qui dclare la mthode

    ou un tableau dont le type terminal est le type de la classe qui dclare la mthode Maximum deux classes possible pour la rsolution La spcification

  • Les oprateurs particuliersAffectation compose : a op=bDriv automatiquement de opa op=b a = a op bAutomatique : pourquoi ?La surcharge de laffectation nest pas possible par lutilisateur

    Automatique : comment ?Utilisation de loprateur simple correspondant, avec une restriction sur le type de retour.Mcanisme dvaluation particulierLa spcification

  • Les oprateurs particuliersIncrment (++) et dcrment (--) :Une seule mthode pour postfixe et prfixeExemple :

    Mthode dvaluation :Rsultat de lexpression a++La rfrence de lobjet rfrenc par aRsultat de lexpression ++aA.operator:++(a)Dans les deux cas il y a affectation du rsultat de A.operator:++(a) la variable aLa spcification public static OurInt operator:++(OurInt i){return new OurInt(i.getValue());}

  • Les oprateurs particuliersConversion : (Type)a

    Beaucoup de restrictionsToutes les conversions autorises en Java ne peuvent tre redfinies

    Conversions explicites uniquementIl est ncessaire de diffrencier les oprateurs de conversion explicite et les oprateurs de conversion impliciteLa surcharge doprateurs de conversion implicite un trs grand impact sur JavaPossibilits de convertir des tableauxLes restrictions pour les conversions de tableau sont faites sur leur type terminal.Ces restrictions sont les mme que pour des types non tableauLa spcification

  • LimplmentationNe pas modifier KJCRester compatible avec les versions ultrieures

    Etendre et non pas modifier Java Compilation de tout programme Java standard Interprtation par toute machine virtuelle

    Respecter OOinJ

  • Phases de compilationPhase 1Phase 2Phase 3Phase 4Analyse syntaxiqueCrer la reprsentation intermdiaireVrification du corpsGnration de codeLimplmentation

  • Analyse syntaxique

    Accepter de nouvelles dfinitions : public static OurInt operator:+(OurInt a, OurInt b){ ...}

    tendre la grammaire de KJCLimplmentation

  • Reprsentation intermdiaire Appeler notre vrification : Soit on a une dclaration standard Traitement effectu par KJC : checkInterface()

    Soit on a une dclaration tendue Traitement effectu par ZKJC :On redfinit checkInterface()

    Limplmentation

  • Vrification du corpsSi on rencontre lexpression a + bOn rajoute une ZAddExpression dans larbre danalyse

    ZAddExpressionanalyseJAddExpressionanalyseZAddExpressiontentative de rsolutionexceptionOKLimplmentation exception

  • Gnration de codeOprateurs daffectation compossextension des oprateurs binaires arithmtiquesviter la double valuationOurInt T[]={(OurInt)1, (OurInt)2};int i = 0;T[i++] += 1;Limplmentation Mthode + entre OurInt et int

    Vrification du type retour

    Affectation manuelle dans la pile

  • Gnration de codeOprateurs daffectation compossextension des oprateurs binaires arithmtiquesviter la double valuationOurInt T[]={(OurInt)1, (OurInt)2};int i = 0;T[i++] += 1;Limplmentation T[0] = T[0] + 1 i = 1

    Mthode + entre OurInt et int

    Vrification du type retour

    Affectation manuelle dans la pile

  • Gnration de codeIncrment (++) et dcrment (--)une seule mthode dclareImpact sur la performancegnration de bytecode (duplication en pile)OurInt i = (OurInt) 1;i++;

    Mthode ++ applique OurIntPostfixe ou prfixe ?Duplication de i en pileAppel de mthode

    Limplmentation

  • Gnration de codeIncrment (++) et dcrment (--)une seule mthode dclareImpact sur la performancegnration de bytecode (duplication en pile)OurInt i = (OurInt) 1;i++;

    Mthode ++ applique OurIntPostfixe ou prfixe ?Duplication de i en pileAppel de mthode

    1 est renvoy i = 2Limplmentation

  • ConclusionVIVE LES VACANCES

Recommended

View more >