1.4-Software-Development-Principles

Containerships

Wij zijn ingehuurd om een systeem te bouwen dat containerschepen en hun lading bijhoudt.

Een containerschip heeft een bepaalde grootte die wordt uitgedrukt in het aantal containers, dat het schip kan vervoeren. Een containerschip heeft ook een maximum gewicht waarmee het geladen kan worden. Het gewicht van containers kan enorm variëren, afhankelijk van wat erin is opgeslagen. Een containerschip heeft ook een minimumdiepte die het nodig heeft om in een haven te kunnen aanmeren. Elk containerschip heeft een geordende lijst van havens die het zal aandoen. Het schip zal alleen havens accepteren met een voldoende diepte. Bij aankomst in een haven kan het schip alle containers lossen die voor die haven bestemd zijn. Terwijl het schip in een haven ligt, kan het nieuwe containers laden, maar alleen containers die bestemd zijn voor een van de havens die het schip zal bezoeken, worden geaccepteerd. Als u een container probeert te laden die bestemd is voor een haven die het schip niet aandoet, zal deze worden geweigerd.

Een schip is ofwel in de haven of op weg naar een haven.

Een team van business it-consultants heeft de behoeften van de klant geanalyseerd en is tot het volgende domeindiagram gekomen.

Ship managment domain model

In our world we only deal with ships, ports and containers.

Het schip heeft de volgende use cases
Ship managment use case

Een haven kan aan het schip worden toegevoegd als bestemming. Het zal dan de laatste aanloophaven zijn (totdat een andere haven wordt toegevoegd)
Een schip kan in een haven aankomen. De haven is dan de haven waar het schip is afgemeerd en containers voor die haven kunnen worden gelost.
Wanneer een schip in een haven is afgemeerd, kunnen containers op het schip worden geladen. Alleen containers die bestemd zijn voor een van de havens die het schip aandoet, kunnen aan het schip worden toegevoegd.
Een schip kan de haven verlaten, op dat moment kunnen er geen containers op het schip worden geladen, totdat het schip zijn bestemming heeft bereikt.

Ontwerp system

We ontwerpen eerst een systeem op “papier”. Begin met het maken van een klassendiagram. Je kunt papier gebruiken, een grafisch hulpmiddel zoals Draw.io, Visual paradigm onlin of een tekst-gebaseerde tool lijn plantuml om dit te doen.

Bouw het system.

Gebruik het klassendiagram als uitgangspunt en implementeer het systeem.
Wij hebben Main klasse gemaakt (zie hieronder) die je als uitgangspunt kunt gebruiken.

De toestand opslaan

We hebben de klassen gecreëerd die het type objecten definiëren dat nodig is voor ons systeem. Nu hebben we een manier nodig om toegang te krijgen tot alle objecten in ons systeem. We zullen een ship management system class creëren om dit voor ons te doen.

De klasse die we hiervoor gaan gebruiken ziet er als volgt uit:

Ship managment system class

Andere ontwikkelaars kunnen deze klasse gebruiken om toegang te krijgen tot de objecten in ons systeem.

Nadat je het systeem hebt geïmplementeerd zou de code die hieronder is uitgecommentarieerd in de Main klasse zonder problemen moeten werken.

public class Main {


    public static void main(String[] args) {
        /*
            todo: After you finished implementing the system
            the code beneath should work
         */

        /*
        ShipManagment shipManagment = new ShipManagment();
        shipManagment.addShip(new Ship("BigSur",30,30000,20));
        shipManagment.addShip(new Ship("Adrianna",40,40000,25));
        shipManagment.addPort(new Port(30,"SanFrancisco"));
        shipManagment.addPort(new Port(15,"Curacao"));
        shipManagment.addPort(new Port(40,"Los Angeles"));

        Ship s = shipManagment.getShip("BigSur");
        s.addDestination(shipManagment.getPort("SanFrancisco"));
        s.addDestination(shipManagment.getPort("Curacao"));
        s.addDestination(shipManagment.getPort("Los Angeles"));
        boolean result;
        result = s.addContainer(new Container(300,shipManagment.getPort("SanFrancisco")));
        System.out.println("Should be true: " + result);
        result = s.addContainer(new Container(200,shipManagment.getPort("SanFrancisco")));
        System.out.println("Should be true: " + result);
        result = s.addContainer(new Container(250,shipManagment.getPort("Curacao")));
        System.out.println("Should be false: " + result);
        result = s.addContainer(new Container(350,shipManagment.getPort("Los Angeles")));
        System.out.println("Should be true: " + result);
        */

    }
}