Skip to content

Instantly share code, notes, and snippets.

@gbougeard
Created November 4, 2014 18:09
Show Gist options
  • Select an option

  • Save gbougeard/a60915a958695f96c5b2 to your computer and use it in GitHub Desktop.

Select an option

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
Copy Markdown
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