Oefening 3: Het leven, universum en objectoriëntatie

Doel

Maak gebruik van klassen en collecties, bvb. ArrayList en LocalDateTime.

Opdracht

Maak een winkelbeheersysteem Brol.com.

ArrayList

  1. Maak een nieuw project.
  2. Voeg de klassen Artikel en ArtikelTest toe. Edit -> Add class from file.

    Vraag 1

     Wat is het correcte UML klassendiagram voor de klasse Artikel?
    
  3. Maak een klasse Voorraad en een Unit Test klasse VoorraadTest.

  4. Importeer de ArrayList klasse in de klasse Voorraad.
  5. Maak een attribuut voorraad in de klasse Voorraad van het type ArrayList<Artikel>.
  6. Maak een constructor voor Voorraad waarin een nieuwe lege ArrayList<Artikel> wordt gemaakt.
import java.util.ArrayList;

public class Voorraad {
  private ArrayList<Artikel> voorraad;

  public Voorraad(){
    voorraad = new ArrayList<Artikel>();
  }
}

Methoden van ArrayList

  1. De documentatie van ArrayList is terug te vinden op: https://docs.oracle.com/javase/8/docs/api/
  2. Maak een methode public void voegToe(String naam, double prijs, int aantal), die een nieuw Artikel toevoegt aan de voorraad.

    Vraag 2

     Welke methode van ArrayList voegt een nieuw element toe?
    
  3. Maak een methode die het aantal unieke artikelen in de voorraad teruggeeft. Veronderstel dat er geen duplicate Artikel objecten in de lijst opgenomen zijn.
  4. Maak een test waarin een aantal artikelen aan de voorraad worden toegevoegd en controleer het aantal.

Aggregatie

  1. Maak een methode die het aantal artikelen in de voorraad teruggeeft.
    public int aantalInVoorraad(){
       int totaal = 0;
       for(Artikel a : voorraad){
           totaal += a.getAantal();
       }
       return totaal;
    }
    
    1. De for-lus loopt over alle elementen van een collectie, zoals de ArrayList.
    2. Rechts van de dubbelepunt in de for-expressie bepaalt welke collectie, i.e. het voorraad attribuut.
    3. Links van de dubbelepunt wordt een variabele van het type van de elementen in de collectie aangeduid. Deze variabele werkt als een cursor, met name het huidig object in de collectie wordt aangeduid.
  2. Schrijf een test voor de methode aantalInVoorraad.
  3. Schrijf en test een methode om de totale prijs van de voorraad te berekenen.

    Vraag 3

     Wat is de totale prijs van een voorraad die volgende artikelen bevat?
       naam: "koekjes", prijs: 2.5, aantal: 5
       naam: "snoep", prijs: 1.8, aantal: 6
       naam: "frietjes", prijs: 1.5, aantal: 4
       naam: "bier", prijs: 3, aantal: 7
    
  4. Maak een toString methode die een overzicht geeft van alle artikelen in de voorraad.

Zoeken

  1. Maak een methode die een Artikel zoekt aan de hand van de naam. Geef het Artikel terug indien het gevonden is. Indien het Artikel niet in de voorraad zit, geef dan null terug.
  2. Maak een test voor de zoek methode.
  3. Maak een methode die een lijst van artikelen waarvan het aantal onder een bepaalde waarde ligt terug.
  4. Indien een artikel reeds in de voorraad zit, pas dan de methode voegToe aan zodat geen nieuw artikel wordt toegevoegd, maar het aantal van het artikel wordt verhoogd.

LocalDateTime

  1. Voeg een LocalDateTime, zie Java 8 API, attribuut toe aan de Artikel klasse. Dit attribuut toont aan wanneer het Artikel aangemaakt of gewijzigd werd. Voorzie de juiste import.
  2. Wijs het huidige tijdstip als een instantie van LocalDateTime toe aan het attribuut bij het aanroepen van de constructor van Artikel. Tip: een statische methode roep je aan op de naam van de klasse i.p.v. op een object van de klasse.

    Vraag 4

     Hoe wordt het huidig tijdstip toegewezen aan het attribuut tijd in de klasse Artikel? Vul aan.
    
     public class Artikel{
       private LocalDateTime tijd;
    
       public Artikel(){
         tijd = /*toewijzing van het huidig tijdstip*/
       }
     }
    
  3. Voorzie een getter en setter voor het LocalDateTime attribuut.
  4. Pas de methode voegToe van de klasse Voorraad aan zodat het tijd attribuut van een bestaand artikel gewijzigd wordt op het moment dat het aantal wijzigt.
  5. Maak een methode in de klasse Voorraad die het laatst aangemaakt of gewijzigde Artikel zoekt.

Extra

  1. Refactor de toString methode van de klasse Voorraad. Gebruik een StringBuffer, zie Java 8 API, om efficiënter een String in verschillende stappen samen te stellen. Maak hiervoor gebruik van de methodes append en toString.
  2. Maak een methode om de prijs van een artikel in de voorraad aan te passen. Zoek het artikel op naam geef de nieuwe prijs als parameter van de methode mee.
  3. Pas de voegToe methode aan zodat de prijs van een bestaand artikel ook aangepast wordt als de nieuwe prijs verschilt van de oude.
  4. Maak een methode sorteer in de klasse Voorraad die alle Artikel van meest recent tot minst recent in een lijst terug geeft.

results matching ""

    No results matching ""