Skip to content

Commit

Permalink
Merge pull request #115 from fuhrmanator/olon11/grasp4
Browse files Browse the repository at this point in the history
Ajouté la réponse de l'exercice 1 des GRASP.
  • Loading branch information
fuhrmanator authored Feb 6, 2024
2 parents 608684a + a3b79d2 commit a3c853f
Showing 1 changed file with 77 additions and 0 deletions.
77 changes: 77 additions & 0 deletions GRASP.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,83 @@ get plumage() {
}
```

:::: {.callout-note collapse="true" icon="false"}

## Voici une solution

Puisque le comportement de `getPlumage` change en fonction du type de l'oiseau, il est préférable de créer une classe concrète pour chaque oiseau (`EuropeanSwallow`, `AfricanSwallow`, `NorwegianBlueParrot`) afin d'améliorer la cohésion du code.
L'utilisation d'une classe abstraite `Bird` permet de garder un faible couplage malgré l'ajout de plusieurs nouvelles classes.
Par le principe de polymorphisme, les oiseaux concrets sont aussi considérés comme des `Bird`.
Puisque les oiseaux ne partagent pas de propriétés ou d'implémentation, il aurait aussi été possible d'utiliser une interface pour la classe `Bird`.

```{.plantuml #fig-GRASP_polymorphisme_sol caption='Classes "Bird" auxquelles on a appliqué le principe GRASP Polymorphisme.'}
@startuml
!include normal.pumlinclude
hide empty members
abstract Bird {
{abstract} getPlumage() : String
}
class EuropeanSwallow extends Bird
class AfricanSwallow extends Bird {
numberOfCoconuts : number
}
class NorwegianBlueParrot extends Bird {
voltage : number
}
@enduml
```

```javascript
abstract class Bird {
abstract get plumage(): string
}

class EuropeanSwallow extends Bird {
get plumage() {
return "average"
}
}

class AfricanSwallow extends Bird {
_numberOfCoconuts: number;

constructor(numberOfCoconuts: number) {
super();
this._numberOfCoconuts = numberOfCoconuts;
}

get plumage() {
return (this.numberOfCoconuts > 2) ? "tired" : "average";
}

get numberOfCoconuts() {
return this._numberOfCoconuts;
}
}

class NorwegianBlueParrot extends Bird {
_voltage: number;

constructor(voltage: number) {
super();
this._voltage = voltage;
}

get plumage() {
return (this.voltage > 100) ? "scorched" : "beautiful";
}

get voltage() {
return this._voltage;
}
}
```
::::

:::

<!-- ::: {#exr-GRASP_GOF_cohesion}
Expand Down

0 comments on commit a3c853f

Please sign in to comment.