4 Commits
main ... TP5

23 changed files with 123 additions and 599 deletions

View File

@ -1,5 +1,4 @@
import net.itsthesky.projetbut2.qualdev.FindInstrumentTester_v_Et;
void main() { void main(String[] args) {
FindInstrumentTester_v_Et.main(new String[]{}); if (args.length == 0) return;
} }

View File

@ -0,0 +1,10 @@
package net.itsthesky.projetbut2.model.route;
public class SuivreAlizés implements SuivreRoute {
@Override
public void suivreRoute() {
System.out.println("Suivi de route par les alizés");
}
}

View File

@ -0,0 +1,8 @@
package net.itsthesky.projetbut2.model.route;
public class SuivreOrthodromie implements SuivreRoute {
@Override
public void suivreRoute() {
IO.println("Suivi de route par orthodromie");
}
}

View File

@ -0,0 +1,7 @@
package net.itsthesky.projetbut2.model.route;
public interface SuivreRoute {
void suivreRoute();
}

View File

@ -0,0 +1,13 @@
package net.itsthesky.projetbut2.model.voilier;
public class Monocoque extends Voilier {
public Monocoque(String nom) {
this.nom = nom;
}
@Override
public String toString() {
return "Monocoque{" + super.toString() + '}';
}
}

View File

@ -0,0 +1,13 @@
package net.itsthesky.projetbut2.model.voilier;
public class Multicoque extends Voilier {
public Multicoque(String nom) {
this.nom = nom;
}
@Override
public String toString() {
return "Multicoque{" + super.toString() + '}';
}
}

View File

@ -0,0 +1,22 @@
package net.itsthesky.projetbut2.model.voilier;
import net.itsthesky.projetbut2.model.route.SuivreRoute;
public abstract class Voilier {
protected String nom;
protected SuivreRoute suivreRoute;
public void appliquerSuivreRoute() {
suivreRoute.suivreRoute();
}
public void setSuivreRoute(SuivreRoute suivreRoute) {
this.suivreRoute = suivreRoute;
}
@Override
public String toString() {
return nom;
}
}

View File

@ -1,7 +0,0 @@
package net.itsthesky.projetbut2.qualdev;
/**
* Classe représentant un client de guitare.
*/
public class ClientGuitar {
}

View File

@ -1,90 +0,0 @@
package net.itsthesky.projetbut2.qualdev;
import net.itsthesky.projetbut2.qualdev.model.common.Builder;
import net.itsthesky.projetbut2.qualdev.model.common.Style;
import net.itsthesky.projetbut2.qualdev.model.common.Type;
import net.itsthesky.projetbut2.qualdev.model.common.Wood;
import net.itsthesky.projetbut2.qualdev.model.guitar.GuitarSpec;
import net.itsthesky.projetbut2.qualdev.model.mandoline.MandolineSpec;
import java.util.Iterator;
import java.util.List;
/**
* Classe de test pour rechercher des instruments dans l'inventaire.
*/
public class FindInstrumentTester_v_Et {
/**
* Point d'entrée principal du programme de test.
* @param args arguments de ligne de commande
*/
public static void main(String[] args) {
// Set up Rick's guitar inventory
Inventory inventory = new Inventory();
initializeInventory(inventory);
GuitarSpec whatErinLikes= new GuitarSpec( Builder.FENDER, "Stratocastor", Type.ELECTRIC,
Wood.ALDER, Wood.ALDER, 6);
MandolineSpec whatErinLikes2 = new MandolineSpec(Builder.PRS, "F-5G", Type.ACOUSTIC, Wood.MAPLE,
Wood.MAPLE, Style.A);
List matchingInstruments = inventory.search (whatErinLikes);
if (!matchingInstruments.isEmpty()) {
System.out.println( matchingInstruments);
}
else {
System.out.println("Sorry, Erin, we have nothing for you.");
}
}
/**
* Initialise l'inventaire avec des guitares et mandolines de test.
* @param inventory l'inventaire à initialiser
*/
public static void initializeInventory(Inventory inventory) {
// Ajout des guitares à l'inventaire
inventory.addInstrument("11277", 3999.95,
new GuitarSpec(Builder.COLLINGS, "CJ", Type.ACOUSTIC,
Wood.INDIAN_ROSEWOOD, Wood.SITKA, 6));
inventory.addInstrument("V95693", 1499.95,
new GuitarSpec(Builder.FENDER, "Stratocastor",Type.ELECTRIC,
Wood.ALDER, Wood.ALDER, 12));
inventory.addInstrument("V9512", 1549.95,
new GuitarSpec(Builder.FENDER, "Stratocastor", Type.ELECTRIC,
Wood.ALDER, Wood.ALDER, 6));
inventory.addInstrument("122784", 5495.95,
new GuitarSpec(Builder.MARTIN, "D-18", Type.ACOUSTIC,
Wood.MAHOGANY, Wood.ADIRONDACK, 6));
inventory.addInstrument("76531", 6295.95,
new GuitarSpec(Builder.MARTIN, "OM-28", Type.ACOUSTIC,
Wood.BRAZILIAN_ROSEWOOD, Wood.ADIRONDACK, 6));
inventory.addInstrument("70108276", 2295.95,
new GuitarSpec(Builder.GIBSON, "Les Paul", Type.ELECTRIC,
Wood.MAHOGANY, Wood.MAHOGANY, 6));
inventory.addInstrument("82765501", 1890.95,
new GuitarSpec(Builder.GIBSON, "SG '61 Reissue", Type.ELECTRIC,
Wood.MAHOGANY, Wood.MAHOGANY, 6));
inventory.addInstrument("77023", 6275.95,
new GuitarSpec(Builder.MARTIN, "D-28", Type.ACOUSTIC,
Wood.BRAZILIAN_ROSEWOOD, Wood.ADIRONDACK, 6));
inventory.addInstrument("1092", 12995.95,
new GuitarSpec(Builder.OLSON, "SJ", Type.ACOUSTIC,
Wood.INDIAN_ROSEWOOD, Wood.CEDAR, 12));
inventory.addInstrument("566-62", 8999.95,
new GuitarSpec(Builder.RYAN, "Cathedral", Type.ACOUSTIC,
Wood.COCOBOLO, Wood.CEDAR, 12));
inventory.addInstrument("6 29584", 2100.95,
new GuitarSpec(Builder.PRS, "Dave Navarro Signature", Type.ELECTRIC,
Wood.MAHOGANY, Wood.MAPLE, 6));
// Ajout des mandolines à l'inventaire
inventory.addInstrument("8819920", 5495.99 ,
new MandolineSpec(Builder.PRS, "F-5G", Type.ACOUSTIC,
Wood.MAPLE, Wood.MAPLE, Style.F));
inventory.addInstrument("9019920", 745.99 ,
new MandolineSpec (Builder.PRS, "F-5G", Type.ACOUSTIC,
Wood.MAPLE, Wood.MAPLE, Style.A));
}
}

View File

@ -1,31 +0,0 @@
package net.itsthesky.projetbut2.qualdev;
import net.itsthesky.projetbut2.qualdev.model.Instrument;
import net.itsthesky.projetbut2.qualdev.model.InstrumentSpec;
import net.itsthesky.projetbut2.qualdev.model.guitar.Guitar;
import net.itsthesky.projetbut2.qualdev.model.guitar.GuitarSpec;
import net.itsthesky.projetbut2.qualdev.model.mandoline.Mandoline;
import net.itsthesky.projetbut2.qualdev.model.mandoline.MandolineSpec;
/**
* Factory permettant de créer des instruments de musique en fonction de leurs spécifications.
*/
public class InstrumentFactory {
/**
* Crée un instrument basé sur son numéro de série, son prix et ses spécifications.
* @param serialNumber le numéro de série de l'instrument
* @param price le prix de l'instrument
* @param instrumentSpec les spécifications de l'instrument
* @return l'instrument créé, ou <code>null</code> si le type de spécification n'est pas reconnu
*/
public static Instrument createInstrument(String serialNumber, double price, InstrumentSpec instrumentSpec) {
if (instrumentSpec instanceof GuitarSpec guitarSpec)
return new Guitar(serialNumber, price, guitarSpec);
if (instrumentSpec instanceof MandolineSpec mandolineSpec)
return new Mandoline(serialNumber, price, mandolineSpec);
return null;
}
}

View File

@ -1,59 +0,0 @@
package net.itsthesky.projetbut2.qualdev;
import net.itsthesky.projetbut2.qualdev.model.Instrument;
import net.itsthesky.projetbut2.qualdev.model.InstrumentSpec;
import java.util.ArrayList;
import java.util.List;
/**
* Gère l'inventaire des instruments
*/
public class Inventory {
private final List<Instrument> instruments = new ArrayList<>();
/**
* Rajoute un instrument à cet inventaire, basé sur son serial number,
* prix et spécifications.
* @param serialNumber le numéro de série de l'instrument
* @param price le prix de l'instrument
* @param instrumentSpec les spécifications de l'instrument
* @see InstrumentFactory
* @see InstrumentSpec
*/
public void addInstrument(String serialNumber, double price, InstrumentSpec instrumentSpec) {
final var instrument = InstrumentFactory.createInstrument(serialNumber, price, instrumentSpec);
if (instrument != null)
instruments.add(instrument);
}
/**
* Récupère un instrument de cet instrument basé sur son numéro de série.
* @param serialNumber le numéro de série à chercher
* @return l'instrument trouvé avec le même numéro de série fourni, sinon <code>null</code>
*/
public Instrument getInstrument(String serialNumber) {
return instruments.stream()
.filter(instrument -> instrument.getSerialNumber().equals(serialNumber))
.findFirst()
.orElse(null);
}
/**
* Recherche tous les instruments correspondant aux spécifications fournies.
* @param instrumentSpec les spécifications à rechercher
* @return une liste d'instruments correspondant aux spécifications
*/
public List<Instrument> search(InstrumentSpec instrumentSpec) {
final var result = new ArrayList<Instrument>();
for (Instrument instrument : instruments) {
if (instrumentSpec.matches(instrument.getInstrumentSpec()))
result.add(instrument);
}
return result;
}
}

View File

@ -1,22 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model;
import net.itsthesky.projetbut2.qualdev.model.common.Builder;
import net.itsthesky.projetbut2.qualdev.model.common.Style;
import net.itsthesky.projetbut2.qualdev.model.common.Type;
import net.itsthesky.projetbut2.qualdev.model.common.Wood;
public class Caracteristique<T> {
public static Caracteristique<Builder> BUILDER = new Caracteristique<>(Builder.class);
public static Caracteristique<String> MODEL = new Caracteristique<>(String.class);
public static Caracteristique<Integer> NUMBER_OF_STRINGS = new Caracteristique<>(Integer.class);
public static Caracteristique<Type> TYPE = new Caracteristique<>(Type.class);
public static Caracteristique<Wood> WOOD = new Caracteristique<>(Wood.class);
public static Caracteristique<Style> STYLE = new Caracteristique<>(Style.class);
private final Class<T> type;
public Caracteristique(Class<T> type) {
this.type = type;
}
}

View File

@ -1,64 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model;
/**
* Classe abstraite représentant un instrument de musique.
*/
public abstract class Instrument {
private final String serialNumber;
private final InstrumentSpec instrumentSpec;
private double price;
/**
* Constructeur d'un instrument.
* @param serialNumber le numéro de série de l'instrument
* @param price le prix de l'instrument
* @param instrumentSpec les spécifications de l'instrument
*/
public Instrument(String serialNumber, double price, InstrumentSpec instrumentSpec) {
this.serialNumber = serialNumber;
this.instrumentSpec = instrumentSpec;
this.price = price;
}
/**
* Récupère le numéro de série de l'instrument.
* @return le numéro de série
*/
public String getSerialNumber() {
return serialNumber;
}
/**
* Récupère les spécifications de l'instrument.
* @return les spécifications
*/
public InstrumentSpec getInstrumentSpec() {
return instrumentSpec;
}
/**
* Récupère le prix de l'instrument.
* @return le prix
*/
public double getPrice() {
return price;
}
/**
* Modifie le prix de l'instrument.
* @param price le nouveau prix
*/
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Instrument{" +
"serialNumber='" + serialNumber + '\'' +
", instrumentSpec=" + instrumentSpec +
", price=" + price +
'}';
}
}

View File

@ -1,50 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model;
import net.itsthesky.projetbut2.qualdev.model.common.Wood;
/**
* Classe abstraite représentant les spécifications d'un instrument de musique.
*/
public abstract class InstrumentSpec {
private final Wood topWood;
private final Wood backWood;
/**
* Constructeur des spécifications de l'instrument.
* @param topWood le type de bois de la face supérieure
* @param backWood le type de bois de la face arrière
*/
protected InstrumentSpec(Wood topWood, Wood backWood) {
this.topWood = topWood;
this.backWood = backWood;
}
/**
* Vérifie si ces spécifications correspondent à d'autres spécifications.
* @param otherSpec les spécifications à comparer
* @return <code>true</code> si les spécifications correspondent, <code>false</code> sinon
*/
public boolean matches(InstrumentSpec otherSpec) {
if (otherSpec == null) return false;
if (topWood != otherSpec.topWood) return false;
if (backWood != otherSpec.backWood) return false;
return true;
}
/**
* Récupère le type de bois de la face supérieure.
* @return le type de bois supérieur
*/
public Wood getTopWood() {
return topWood;
}
/**
* Récupère le type de bois de la face arrière.
* @return le type de bois arrière
*/
public Wood getBackWood() {
return backWood;
}
}

View File

@ -1,14 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model.common;
/**
* Représente un constructeur d'instrument de musique.
*/
public enum Builder {
COLLINGS,
FENDER,
GIBSON,
MARTIN,
OLSON,
RYAN,
PRS
}

View File

@ -1,10 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model.common;
/**
* Représente le style d'une {@link net.itsthesky.projetbut2.qualdev.model.mandoline.MandolineSpec mandoline}; A pour
* Acoustique et F pour Fender.
*/
public enum Style {
A,
F
}

View File

@ -1,8 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model.common;
/**
* Représent le type d'une {@link net.itsthesky.projetbut2.qualdev.model.guitar.GuitarSpec guitar}.
*/
public enum Type {
ACOUSTIC, ELECTRIC
}

View File

@ -1,17 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model.common;
/**
* Représente le type de bois utilisé dans la confection
* de l'{@link net.itsthesky.projetbut2.qualdev.model.Instrument instrument}.
*/
public enum Wood {
ADIRONDACK,
CEDAR,
COCOBOLO,
MAHOGANY,
MAPLE,
SITKA,
ALDER,
BRAZILIAN_ROSEWOOD,
INDIAN_ROSEWOOD
}

View File

@ -1,20 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model.guitar;
import net.itsthesky.projetbut2.qualdev.model.Instrument;
/**
* Représente une guitare, un type spécifique d'instrument de musique.
*/
public class Guitar extends Instrument {
/**
* Constructeur d'une guitare.
* @param serialNumber le numéro de série de la guitare
* @param price le prix de la guitare
* @param instrumentSpec les spécifications de la guitare
*/
public Guitar(String serialNumber, double price, GuitarSpec instrumentSpec) {
super(serialNumber, price, instrumentSpec);
}
}

View File

@ -1,90 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model.guitar;
import net.itsthesky.projetbut2.qualdev.model.InstrumentSpec;
import net.itsthesky.projetbut2.qualdev.model.common.Builder;
import net.itsthesky.projetbut2.qualdev.model.common.Type;
import net.itsthesky.projetbut2.qualdev.model.common.Wood;
/**
* Représente les spécifications d'une guitare.
*/
public class GuitarSpec extends InstrumentSpec {
private final Builder builder;
private final int numStrings;
private final String model;
private final Type type;
/**
* Constructeur des spécifications d'une guitare.
* @param builder le constructeur de la guitare
* @param model le modèle de la guitare
* @param type le type de guitare (acoustique ou électrique)
* @param topWood le type de bois de la face supérieure
* @param backWood le type de bois de la face arrière
* @param numStrings le nombre de cordes
*/
public GuitarSpec(Builder builder, String model, Type type, Wood topWood, Wood backWood, int numStrings) {
super(topWood, backWood);
this.builder = builder;
this.numStrings = numStrings;
this.model = model;
this.type = type;
}
/**
* Récupère le constructeur de la guitare.
* @return le constructeur
*/
public Builder getBuilder() {
return builder;
}
/**
* Récupère le nombre de cordes de la guitare.
* @return le nombre de cordes
*/
public int getNumStrings() {
return numStrings;
}
/**
* Récupère le type de guitare.
* @return le type (acoustique ou électrique)
*/
public Type getType() {
return type;
}
@Override
public boolean matches(InstrumentSpec otherSpec) {
if (!super.matches(otherSpec)) return false;
if (otherSpec instanceof GuitarSpec otherGuitarSpec) {
if (builder != otherGuitarSpec.builder) return false;
if (numStrings != otherGuitarSpec.numStrings) return false;
if (type != otherGuitarSpec.type) return false;
return true;
} else {
return false;
}
}
/**
* Récupère le modèle de la guitare.
* @return le modèle
*/
public String getModel() {
return model;
}
@Override
public String toString() {
return "GuitarSpec{" +
"builder=" + builder +
", numStrings=" + numStrings +
", model='" + model + '\'' +
", type=" + type +
'}';
}
}

View File

@ -1,21 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model.mandoline;
import net.itsthesky.projetbut2.qualdev.model.Instrument;
import net.itsthesky.projetbut2.qualdev.model.InstrumentSpec;
/**
* Représente une mandoline, un type spécifique d'instrument de musique.
*/
public class Mandoline extends Instrument {
/**
* Constructeur d'une mandoline.
* @param serialNumber le numéro de série de la mandoline
* @param price le prix de la mandoline
* @param instrumentSpec les spécifications de la mandoline
*/
public Mandoline(String serialNumber, double price, MandolineSpec instrumentSpec) {
super(serialNumber, price, instrumentSpec);
}
}

View File

@ -1,93 +0,0 @@
package net.itsthesky.projetbut2.qualdev.model.mandoline;
import net.itsthesky.projetbut2.qualdev.model.InstrumentSpec;
import net.itsthesky.projetbut2.qualdev.model.common.Builder;
import net.itsthesky.projetbut2.qualdev.model.common.Style;
import net.itsthesky.projetbut2.qualdev.model.common.Type;
import net.itsthesky.projetbut2.qualdev.model.common.Wood;
import java.util.Objects;
/**
* Représente les spécifications d'une mandoline.
*/
public class MandolineSpec extends InstrumentSpec {
private final Style style;
private final Builder builder;
private final String model;
private final Type type;
/**
* Constructeur des spécifications d'une mandoline.
* @param builder le constructeur de la mandoline
* @param model le modèle de la mandoline
* @param type le type de mandoline (acoustique ou électrique)
* @param topWood le type de bois de la face supérieure
* @param backWood le type de bois de la face arrière
* @param style le style de la mandoline (A ou F)
*/
public MandolineSpec(Builder builder, String model, Type type, Wood topWood, Wood backWood, Style style) {
super(topWood, backWood);
this.style = style;
this.builder = builder;
this.model = model;
this.type = type;
}
/**
* Récupère le style de la mandoline.
* @return le style (A ou F)
*/
public Style getStyle() {
return style;
}
/**
* Récupère le constructeur de la mandoline.
* @return le constructeur
*/
public Builder getBuilder() {
return builder;
}
/**
* Récupère le modèle de la mandoline.
* @return le modèle
*/
public String getModel() {
return model;
}
/**
* Récupère le type de mandoline.
* @return le type (acoustique ou électrique)
*/
public Type getType() {
return type;
}
@Override
public boolean matches(InstrumentSpec otherSpec) {
if (!super.matches(otherSpec)) return false;
if (otherSpec instanceof MandolineSpec otherMandolineSpec) {
if (style != otherMandolineSpec.style) return false;
if (builder != otherMandolineSpec.builder) return false;
if (!Objects.equals(model, otherMandolineSpec.model)) return false;
if (type != otherMandolineSpec.type) return false;
return true;
} else {
return false;
}
}
@Override
public String toString() {
return "MandolineSpec{" +
"style=" + style +
", builder=" + builder +
", model='" + model + '\'' +
", type=" + type +
'}';
}
}

View File

@ -0,0 +1,48 @@
package net.itsthesky.projetbut2.model.voilier;
import net.itsthesky.projetbut2.model.route.SuivreAlizés;
import net.itsthesky.projetbut2.model.route.SuivreOrthodromie;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class VoilierTest {
private Voilier monocoque;
private Voilier multicoque;
@BeforeEach
void setUp() {
monocoque = new Monocoque("TestVoilier");
multicoque = new Multicoque("TestVoilier");
monocoque.setSuivreRoute(new SuivreAlizés());
multicoque.setSuivreRoute(new SuivreOrthodromie());
}
@Test
void appliquerSuivreRoute() {
monocoque.appliquerSuivreRoute();
multicoque.appliquerSuivreRoute();
assertTrue(true);
}
@Test
void setSuivreRoute() {
monocoque.setSuivreRoute(new SuivreOrthodromie());
multicoque.setSuivreRoute(new SuivreAlizés());
monocoque.appliquerSuivreRoute();
multicoque.appliquerSuivreRoute();
assertTrue(true);
}
@Test
public void testToString() {
assertEquals("Monocoque{TestVoilier}", monocoque.toString());
assertEquals("Multicoque{TestVoilier}", multicoque.toString());
}
}