Code Monkey home page Code Monkey logo

isi3-tp2-strategy's Introduction

ISI 3 TP 2: Design Pattern Strategy

Philippe Charrière :octocat: @k33g

⚠️ Si vous avez une question, créez une issue dams votre projet et notifiez moi avec @k33g

Le rapport est à saisir dans le ficher RAPPORT.md en utilisant le formalisme MarkDown

Exercice 0

Faites une calculette

  • codez une classe Calculator.java (cf. projet /calculator)
  • ajoutez l'addition
  • ajoutez la soustraction
  • faites une classe Main.java qui va "utiliser" Calculator.java
  • lancez un build: mvn compile assembly:single
  • exécutez java -jar calculator.1.0-SNAPSHOT.jar
  • ajoutez la multiplication
  • ajoutez la division

Discutons

  • présentez votre solution
  • conclusion(s) ?

Rappel: le pattern Strategy

Le pattern Strategy a pour objectif d'adapter le comportement et les algorithmes d'un objet en fonction d'un besoin sans changer les interactions de cet objet avec les clients.

strategy-uml

  • la stratégie, c'est l'interface qui va définir la(les) méthode(s) des stratégies(options) que l'on va implémenter
  • les stratégies, (les opérations de la calculette par exemple) vont implémenter l'interface stratégie
  • le contexte, c'est la classe qui va utiliser les stratégies pour faire toujours la même action mais avec un résultat différent à chaque fois (par exemple notre classe Calculator qui va utiliser des opérations)

autre exemple: modes de transport

strategy-use-case

Exercice 1

Comment ajouter des opérations à la classe Calculator sans être obligé de la modifier à chaque fois?

  • re-faites la calculette en utilisant le pattern Strategy

Discutons

  • présentez votre solution
  • conclusion(s) ?

Exercice 2

Happy Hour

Enoncé/contexte: modélisez le concept d'happy hour dans un pub. Le serveur sert des bières sur lesquelles il peut appliquer des réductions.

  • le serveur est le contexte
  • les réductions sont les stratégies

À faire: dans le projet /beers

  • ajoutez le code nécessaire pour que les tests fonctionnent (lancez mvn test)
  • ajoutez une réduction de 50%
  • ajoutez et modifiez les tests nécessaires

exo-01

Exercice 3

Logo (Turtle)

Le Logo est un langage éducatif (créé en 1967) destiné à apprendre des notions de programmation aux enfants en faisant déplacer un curseur (turtle) sur l'écran avec des commandes simples (droite, gauche, ...).

À faire: Utilisez le pattern Strategy pour coder un "mini" Logo:

Position startPosition = new Position(5,5);
Right moveToRight = new Right();
Left moveLeft = new Left();
Up moveUp = new Up();
Down moveDown = new Down();

Turtle turtle = new Turtle("O");

turtle
    .setStrategy(startPosition).move()
    .setStrategy(moveToRight).move().move().move()
    .setStrategy(moveUp).move().move()
    .setStrategy(moveLeft).move().move().move()
    .setStrategy(moveDown).move().move();

Vous devriez obtenir ceci comme rendu:

    OOOO
    O  O
    OOOO

À savoir

Pour positionner le curseur dans un terminal:

// set the cursor position to row 5 and column 10
char escapeCode = 0x1B;
System.out.print(String.format("%c[;%d;%df",escapeCode,5, 10));

Utilisez le projet /logo

Ressources

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.