Skip to content

Instantly share code, notes, and snippets.

@gbougeard
Created November 4, 2014 18:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gbougeard/a60915a958695f96c5b2 to your computer and use it in GitHub Desktop.
Save gbougeard/a60915a958695f96c5b2 to your computer and use it in GitHub Desktop.
TP Scala : AST, typage et heritage
Modéliser le règne animal tel que tout animal peut dire qui il est.
Définir:
- les oiseaux (ils ont des plumes)
- les mammifères (ils peuvent allaiter)
- les reptiles (ils ont le sang froid)
- les poissons (ils ont des branchies)
- les ovipares
- les animaux marins
- les animaux volants
Définir le pingouin, l'ornithorynque, la chauve-souris, le beluga et le requin zèbre et le requin marteau.
(pour les questions http://lmgtfy.com/)
@gbougeard
Copy link
Author

reponse 1 :

 /** Mode de reproduction */
  sealed trait Reproduction

  trait Ovipare extends Reproduction

  trait Mammifere extends Reproduction


  /** Milieu de vie */
  sealed trait MilieuAnimal

  trait Marin extends MilieuAnimal

  trait Volant extends MilieuAnimal

  trait Animal[Reproduction, MilieuAnimal]

  /** Type d'animaux */
  trait Oiseau[X <: MilieuAnimal] extends Animal[Ovipare, X]
trait Reptile extends Animal

  trait Poisson extends Animal

 /** Animaux */
  class Pingouin extends Oiseau[Beluga] // WTF! comment ca peut compiler!

  class Beluga extends Poisson with Marin with Mammifere

  class Ornithorynque extends Mammifere with Reptile

  class ChauveSouris extends Oiseau with Volant with Mammifere

  class RequinZebre extends Poisson with Marin with Ovipare

  class RequinMarteau extends Poisson with Marin

@gbougeard
Copy link
Author

un peu mieux comme ca

 /** Mode de reproduction */
  sealed trait Reproduction

  trait Ovipare extends Reproduction

  trait Vivipare extends Reproduction


  /** Milieu de vie */
  sealed trait MilieuAnimal

  trait Marin extends MilieuAnimal

  trait Volant extends MilieuAnimal

  trait Animal[X <: Reproduction, Y <: MilieuAnimal]

  /** Type d'animaux */
  trait Oiseau[X <: MilieuAnimal] extends Animal[Ovipare, X]

  trait Reptile[X <: MilieuAnimal] extends Animal[Ovipare, X]

  trait Poisson[X <: Reproduction] extends Animal[X, Marin]

  trait Mammifere[X <: Reproduction, Y <: MilieuAnimal] extends Animal[X, Y]


  /** Animaux */
  class Pingouin extends Oiseau[Marin]

  class Beluga extends Mammifere[Vivipare, Marin]

  class Ornithorynque extends Mammifere[Ovipare, Marin]

  class ChauveSouris extends Mammifere[Vivipare, Volant]

  class RequinZebre extends Poisson[Ovipare]

  class RequinMarteau extends Poisson[Vivipare]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment