Skip to content

Instantly share code, notes, and snippets.

@DamienDabernat
Last active October 17, 2022 09:20
Show Gist options
  • Save DamienDabernat/5ee54f13a299a6ab457fcfd8a7a9f622 to your computer and use it in GitHub Desktop.
Save DamienDabernat/5ee54f13a299a6ab457fcfd8a7a9f622 to your computer and use it in GitHub Desktop.
Projet Zoo - Consignes

Projet Zoo

Etape 1: Installation

Architecture en PHP

Créez un nouveau dossier et dedans, créer un fichier composer.json avec le contenu suivant.

{
    "name": "votre-nom/zoo",
    "autoload": {
        "psr-4": {
            "App\\":"src"
        }
    }
}

Pour la suite du projet, le dossier aura cette structure:

.
├── app.php
├── composer.json
└── src

Dans le fichier app.php il faut ajouter le contenu suivant:

<?php
require __DIR__ . '/vendor/autoload.php';


// Here comes your code.

Pour tester son travail, il faut faire

php app.php

à cette étape du projet, ce fichier lance une erreur. C'est normal.

Mise en place de composer

On va initialiser le projet en faisant un composer install dans le répertoire du projet.

Cela aura pour conséquence de créer un dossier vendor qui ne doit pas être commit.

A partir de maintenant, tester ses instances se fera dans le fichier app.php, et les classes devront être déclarées dans le namespace 'App' dans le dossier src.

Tip: on n'oublie pas de commit

Architecture en Java

Créez un nouveau projet en Java avec Intelij (ou votre IDE Java préféré)

Pour la suite du projet, le dossier aura cette structure:

.
└── src
    ├── main
    │   ├── java
    │   │   └── org
    │   │       └── example
    │   │           └── Main.java

Pour tester son travail, il faut faire exécuter la function main du fichier Main.java.

Initialisation du GIT

On va définir le dossier comme étant un projet GIT.

Pour cela, on va effectuer un :

git init

la totalité du projet doit être commité avec la commande git commit -m "mon message de commit".

A chaque fin d'étapes, penser à commiter avec un message explicite.

Etape 2: Des animaux en pagaille

On va commencer par créer une classe abstraite Animal. ⚠️ Il faut typer ses valeurs de retour.

Cette classe aura: - Un attribut name, privé, qui sera définie au constructeur, et un accesseur en lecture seulement. - Une méthode protégée abstraite appelé getNoise qui ne prendra pas de paramètres, et qui renverra une chaine de caractères. - Une méthode publique appelée noise qui fera un appel à la méthode précédement créée et renverra son résultat.

On va également créer des classes qui vont hériter de la classe Animal :

  • Animals\Fish
  • Animals\BubbleFish
  • Animals\CatFish
  • Animals\ClownFish
  • Animals\Whale
  • Animals\Zebra
  • Animals\Elephant
  • Animals\Parrot
  • Animals\Dove

N'oubliez pas d'implémenter les différentes méthodes de la classe qu'ils héritent.

⚠️ On veut pousser l'héritage plus loin avec certains animaux en particulier, sans faire de classes abstraites.

Lexique des cris d'animaux :

  • L'éléphant : toooooout
  • Le zèbre : hiiiii
  • Le poisson : bloubloublou
  • La balaine : splash
  • Le perroquet : coco
  • La colombe : Rou Rouuu

Test du code

Pour tester le code effectué, on va modifier notre point d'entrée :

On va instancier un tableau animals qui contiendra :

  • 5 poissons
  • 3 boisson bulle
  • 2 poissons chat
  • 1 poisson clown
  • 2 éléphants
  • 1 Zèbre
  • 10 perroquets
  • 2 colombes

Une fois cela fait, il faudra, avec une simple boucle sur le tableau animals afficher le nom de l'animal et son cri.

Tip: on n'oublie pas de commit

Etape 3: Des Enclos adaptés

On veut maintenant savoir si les enclos sont adaptés aux besoin.

Notre Zoo aura 3 enclos : - Aquarium - Aviary - Fence

La règle est simple :

  • Si un animal peut voler, il faut le mettre dans la volière,
  • s'il peut marcher il faut le mettre dans un enclos,
  • et s'il ne peut que nager, il faut le mettre dans l' aquarium.

On va donc créer des interfaces: CanSwim, CanFly, CanWalk.

Ces interfaces ne déclareront pas de méthodes supplémentaires. Ajouter une ou plusieurs de ces interfaces aux différentes classes.


Il faut créer une classe Enclosure qui va contenir un tableau animals avec une méthode addAnimal qui prendra un Animal en paramètre. et une méthode to String qui nous permettra de voir (et d'entendre crier) les animaux !


On va enfin créer une classe Zoo qui aura 3 attributs privés statiques de type Enclosure : aquarium, aviary et fence. Par défaut, ces propriétés sont à null.

Cette classe aura 3 méthodes pour récupérer l'aquarium, la volière et la cage.

Créer la méthode publique qui s'appellera également addAnimal et qui va nous permettre de mettre un Animal dans l'enclos qui lui correspond en fonction de l'interface qu'ils instancient.

Pour terminer sur cette partie, on va créer une méthode visitTheZoo, qui va afficher le contenu des différentes cages. Si un enclos n'a pas d'animaux alors on n'affiche rien.

Test du code

On va modifier notre point d'entré pour que cette fois, chaque animaux soit mis dans la classe Zoo.

on n'oublie pas de commit

Enfin

envoyez votre code sur GitHub dans un repo public partagé avec @DamienDabernat

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