2008 januari examen Maak voor de examenopdracht een UML klassendiagramma. Werk elke klasse uit en maak voor elke klasse een Testklasse (zonder gebruik te maken van JUnit) Omschrijving examenopdracht  G&T ziet een gedroomde kans om mee in de GSM wereld te stappen en ‘low–cost’ operator te worden in België. Zo een beetje als Aldi-talk maar dan enkel voor SMS berichten. Als goede bedrijfsleiders willen we onze klanten serieus opvolgen en het project bijsturen indien nodig. Aan jullie de eer om het geheel te informatiseren. De uit te werken klassen: De klasse Operator bevat: een naam (bv. “G&T communication”) een ArrayList  : een lijst met al de Abonnee-objecten in onze firma. De klasse Abonnee bevat: een gsm-nummer (String) een naam (String) een tarief (Tarief) een tabel favorieten van 3 favoriete gsm-nummers. (In de toekomst kan het aantal favoriete GSM nrs wijzigen) een lijst SMS_en, d.i. een ArrayList of tabel van SMS objecten. 2 constructoren: eentje met en één zonder Tarief object. Als er geen tarief wordt meegegeven dan wordt er default een Tarief object geïnitialiseerd met prijs 5 (cent) en geen gratis sms’en. setTarief (tarief:Tarief) isFavoriet (gsmNr:String) : boolean. Deze methode controleert of een bep. Gsm-nummer is ingesteld als favoriet van dit Abonnee object. Je geeft een boolean terug. addSMS ( sms:SMS ): boolean. Deze methode voegt een SMS object toe, na eerst een check of dit nummer niet reeds in de lijst SMS-en staat. Geeft een boolean terug of dit al dan niet gelukt is. voegFavorietToe (i:int,nr:String) Deze methode voegt een gsm nr. (String) toe aan je tabel OP DE PLAATS die je meegeeft met de integer parameter. Let op:  i moet >= 1 en <= 3 en enkel als de plaats vrij is kan je toevoegen!!! • veranderFavoriet(i:int, nr:String): boolean Deze methode verandert een favoriet op plaats i (i>=1 en i<=3). Enkel als er al een GSM nr. staat kan je veranderen!!! Deze methode geeft een boolean terug. berekenSMSFact(maand:int, jaar:int):double Deze methode geeft je de prijs (double) terug van de opgegeven maand en opgegeven jaar. Bv. 12.56 je moet je eurocenten dus herleiden naar euro’s. toString():String Deze methode geeft je een String notatie van de Abonnee klasse. Je dient mee te geven: je instantievariabelen en een overzicht van de favoriten. Je gebruikt hiervoor de toString() van de desbetreffende klasses. Return voorbeeld:  Abonnee : 0477/406003 Bob Base 4 cent/SMS aantal gratis: 50 Favorieten : 0477/123456 0476/456789 0474/345678 Opmerking. Werk in de klasse Abonnee een methode uit die een aantal SMS berichten random genereert: public void randomSMS (int aantal, int jaar, int vanMaand, int totMaand). Deze methode genereert zowel SMS berichten naar favorieten als naar een dummy Gsm nr (0499/999999) De klasse SMS bevat: naarGSMNr: String datum: Datum uur: Tijd equals ( sms:SMS ): boolean Deze methode controleert wanneer 2 SMS objecten gelijk zijn. SMS objecten zijn gelijk als de datum en het uur gelijk zijn. De methode geeft een boolean terug. toString():String Deze methode geeft een String notatie van je klasse SMS. Return voorbeeld:  0477/123045 02-10-2008 12:03 De klasse Tarief bevat: prijs:int aantalGratis.:int constructor Tarief (prijs:int, aantalGratis:int) de nodige getters en setters • equals (tarief:Tarief): boolean. Deze methode gaat na wanneer 2 Tarief objecten gelijk zijn. Tarief objecten zijn gelijk als prijs en aantal gratis gelijk is. De methode geeft een boolean terug. toString():String: String notatie van de Tarief klasse. Return voorbeeld  4 cent/SMS aantal gratis: 50 Nog even wat achtergrond info over tarief: per maand zijn de eerste aantalGratis SMS’en gratis. De prijs voor 1 bijkomend sms is prijs eurocent. De prijs voor 1 SMS naar één van je favorieten is 50% van de gewone prijs afgekapt naar onder dus 5 eurocent wordt 2 eurocent of 7 eurocent wordt 3 eurocent.