Extra: OOP voor 6vin2
❗️ Voordat je start
Ga naar Replit met de volgende link:
https://replit.com/@Krisvan1/ObjectOrientedProgramming
Fork de repository. Maak eventueel een account aan als je die nog niet hebt.
Elke opdracht kan je zelf testen door op de “Run” knop te drukken.
TIP: Je kan ook checken of je opdracht echt klopt door de Unit tests te runnen. Deze vind je of recht naast je console of links onder bij Tools.
TIP: Onderaan deze pagina staat een cheat-sheet voor de syntax van JavaScript.
📦️ Classes
TIP:: Je kan een methode aanroepen door de naam van de class te gebruiken, gevolgd door een punt en de naam van de methode. Bijvoorbeeld: myBook.printDetails()
🗺️ UML Diagrams
Je hebt keuze! Kies uit een makkelijke of moeilijke opdracht.
Pak papier of je iPad erbij om een UML diagram te tekenen.
Je bent gevraagd om een basis UML klassendiagram te ontwerpen voor een bakkerij systeem. Het systeem moet producten en klanten bijhouden.
Vereisten
Product:
- Elk product heeft een unieke productcode, een naam (bijv. brood, taart, croissant) en een prijs.
- Producten kunnen worden verkocht of bijgevuld.
Klant:
- Klanten hebben een unieke klantID, naam en een aankoopgeschiedenis (een lijst van gekochte producten).
- Klanten kunnen producten kopen.
Taak
Ontwerp een UML klassendiagram dat de klassen, attributen, methoden en relaties vastlegt op basis van de verstrekte vereisten.
Achtergrond
Je hebt de taak om een basis UML klassendiagram te ontwerpen voor een bibliotheeksysteem. Het systeem moet boeken, leners en personeelsleden bijhouden.
Vereisten
Boek:
- Elk boek heeft een uniek ISBN-nummer, een titel, een auteur, een publicatiejaar en een status (bijv. beschikbaar, uitgeleend, in onderhoud).
- Boeken kunnen worden geleend of teruggebracht.
Lener:
- Leners hebben een unieke ID, naam, adres en een lijst van boeken die ze hebben geleend.
- Leners kunnen een boek lenen, mits ze geen achterstallige boeken hebben.
- Leners kunnen een boek terugbrengen.
Personeel:
- Personeelsleden hebben een ID, naam, functie (bijv. bibliothecaris, onderhoud, admin) en een werkschema.
- Personeel kan boeken aan het systeem toevoegen of verwijderen.
- Bibliothecarissen kunnen boeken uitlenen aan leners.
- Onderhoudspersoneel kan een boek markeren als in onderhoud.
Relaties:
- Een lener kan meerdere boeken lenen, maar elk boek kan op een bepaald moment slechts door één lener worden geleend.
- Personeel kan meerdere boeken beheren, en elk boek kan door meerdere personeelsleden worden beheerd.
Geef bij elke relatie aan of het een één-op-één, één-op-veel of veel-op-veel relatie is.
Taak
Ontwerp een UML klassendiagram dat de klassen, attributen, methoden en relaties vastlegt op basis van de verstrekte vereisten.
Oplossingen
🌳 Overerving (Inheritence)
Maak de opdrachten van de volgende replit:
https://replit.com/@Krisvan1/Inheritence#index.js
Fork de repository. Maak eventueel een account aan als je die nog niet hebt.
Elke opdracht kan je zelf testen door op de “Run” knop te drukken.
Maak vervolgens een instantie van de Zoogdier klasse genaamd “Leeuw” met een leeftijd van 3, gewicht van 190 kg, en een vachtkleur van “goudkleurig”. Laat de leeuw eten, slapen, en rennen.
🕵️ 🥏 Inkapseling
Maak de opdrachten van de volgende replit: https://replit.com/@Krisvan1/PrivateGetSet#index.js
TIP: Gebruik de instructies om de code te testen
TIP: Gebruik het cheat sheet als je niet meer weet hoe je alles moet typen
Klaar? Ga verder met Opdracht 3 van de reguliere opdrachten:
https://informatica.emmauscollege.nl/theorie/objectoriented_verwerkingsopdrachten/#opdracht-3
🚑️ Oefenopdracht
Je gaat oefenen met alles wat je tot nu toe geleerd hebt.
In het Ziekenhuis van Sint-Elisabeth draait alles om de zorg voor patiënten. Patiëntenprivacy staat hierbij hoog in het vaandel. Elk patiëntendossier bevat naast medische gegevens zoals leeftijd, medische geschiedenis en allergieën ook een geheime patiëntencode. Deze code is strikt voor intern gebruik en wordt niet met de patiënt gedeeld.
Het ziekenhuis kent verschillende afdelingen, maar Cardiologie en Neurologie zijn de meest bezochte. Elke doctor in het ziekenhuis is een specialist. Dr. Hartman, een ervaren cardioloog met 300 uitgevoerde operaties op zijn naam, werkt op de afdeling Cardiologie. Hij is bekend om zijn efficiëntie en gebruikt de getDetails methode om snel een patiëntendossier in te zien. Aan de andere kant is er Dr. Brein van de afdeling Neurologie, die gespecialiseerd is in neurologisch onderzoek en al 200 MRI-scans en CT-scans uitgevoerd heeft. Elke doctor heeft een lijst van patienten waarvoor hij zorgt. Elke doctor kan ook een patient onderzoeken
Mevrouw Jansen, 67 jaar oud, komt voor haar jaarlijkse hartcontrole. Ze is allergisch voor penicilline en heeft vorig jaar een hartoperatie ondergaan. Terwijl Dr. Hartman haar dossier inziet met de getDetails methode, merkt hij op dat haar geheime patiëntencode, zoals het hoort, verborgen blijft.
Maak een UML Diagram van de verschillende classes, attributen en methoden.
TIP: Denk goed na wat de relatie is tussen de verschillende classes.
Kijk je UML diagram na
Fork hiervoor de volgende replit: https://replit.com/@Krisvan1/ZiekenhuisSysteem#index.js
Natuurlijk, laten we dat aanpakken.
🗒️ JavaScript Cheat Sheet
Creating an Object
Een object is een verzameling van sleutel-waarde paren. In dit voorbeeld bevat het object player
drie sleutels: name
, score
en level
.
var player = {
name: 'John',
score: 100,
level: 2
};
Creating an Array of Objects
Arrays zijn geordende lijsten van items. Hier hebben we een array van objecten.
var players = [
{
name: 'John',
score: 100,
level: 2
},
{
name: 'Jane',
score: 150,
level: 3
}
];
Accessing Object Properties
Je kunt de waarde van een objecteigenschap opvragen door de naam van het object gevolgd door een punt en daarna de eigenschapsnaam.
console.log(player.name); // John
Looping Through an Array of Objects
Een for
loop herhaalt een reeks instructies een bepaald aantal keer. In dit geval loopt de loop door elk object in de players
array en drukt de naam en score van elke speler af.
Uitleg loop:
i = 0
: Initialiseert de tellervariabelei
op 0.i < players.length
: De loop blijft draaien zolangi
kleiner is dan het aantal items in deplayers
array.i++
: Verhoogt de waarde vani
met 1 na elke loop.
for(var i = 0; i < players.length; i++) {
console.log(players[i].name + ' has a score of ' + players[i].score);
}
Creating a Class
Een klasse definieert de eigenschappen (variabelen) en gedragingen (methoden) die zijn objecten (instanties) zullen hebben.
class Player {
name;
score;
level;
constructor(name, score, level) {
this.name = name;
this.score = score;
this.level = level;
}
increaseScore(amount) {
this.score += amount;
}
increaseLevel() {
this.level++;
}
printDetails() {
console.log(this.name + ' has a score of ' + this.score + ' and is on level ' + this.level);
}
}
Creating an Instance of a Class
var player1 = new Player('John', 100, 2);
Accessing Class Properties
console.log(player1.name); // John
Inheritance in JavaScript
Inheritance stelt je in staat om een nieuwe klasse te maken die is gebaseerd op een bestaande klasse. De nieuwe klasse erft eigenschappen en gedrag van de ouderklasse.
class Goalkeeper extends Player {
savedGoals;
constructor(name, score, level, savedGoals) {
super(name, score, level);
this.savedGoals = savedGoals;
}
printGoalkeeperStatistics() {
console.log('Saved Goals: ' + this.savedGoals);
}
}
Prive variabelen & Getters en Setters
Private variabelen (zoals #saldo
) zijn alleen toegankelijk binnen de klasse waarin ze zijn gedefinieerd. Getters en Setters zijn speciale methoden die respectievelijk worden gebruikt om waarden van deze private variabelen op te vragen of in te stellen.
class BankRekening {
#saldo; // Prive variabele
constructor() {
this.#saldo = 0;
}
getSaldo() {
console.log("Saldo opvragen");
return this.#saldo;
}
setSaldo(bedrag) {
if (bedrag >= 0) {
this.#saldo = bedrag;
} else {
console.log("Ongeldig saldo");
}
}
}
const rekening = new BankRekening();
console.log(rekening.getSaldo()); // Saldo opvragen + het huidige saldo
rekening.setSaldo(-1000); // Ongeldig saldo
Door het gebruik van getters en setters kunnen we ervoor zorgen dat de regels voor toegang tot of wijziging van data worden nageleefd.