Ik ben een applicatie aan het ontwikkelen waarbij ik een bibliotheek simuleer. Deze bibliotheek kan exemplaren van verschillende items uitlenen, waaronder boeken, CD's en DVD's.
De belangrijkste classes:
Item (abstract class)
Item is een abstract class. Item bevat de properties en methods waarover elke subclass van Item sowieso moet beschikken. Het ItemType (enum), de titel, enzovoorts.
Boek/CD/DVD (subclasses van Item)
Deze subclasses van Item bezitten sowieso de properties en methods van Item. Daarnaast bevatten ze over specifieke properties en methods. In het geval van Boek is dat bijvoorbeeld het ISBN nummer.
Exemplaar
Exemplaar is simpelweg een exemplaar van een Item. Ook kan er per Exemplaar opgegeven worden aan wie het is uitgeleend.
Bibliotheek
Doet alles wat je van een bibliotheek zou verwachten. Het uitlenen/terugnemen van exemplaren, toevoegen van leden, overzicht tonen van aanwezige exemplaren, enzovoorts.
Nu heb ik twee vragen.
1. In Boek/CD/DVD vraag ik in de constructor om een titel, omdat elke subclass van Item een titel nodig heeft. Vervolgens gebruik ik super() om deze titel door te geven aan de constructor van Item (de superclass). Dit is an sich geen probleem, maar wanneer ik de constructor van Item ga uitbreiden, moet ik alle subclasses van Item gaan aanpassen. Duidt dit op een slecht ontwerp? Zo ja, hoe zou ik dit kunnen verbeteren?
2. Ik zou graag voor elk Item een categorie willen aanwijzen. Deze categorieën zijn per subclass van Item verschillend. Je kunt je voorstellen dat je bij Boek andere categorieën wilt gebruiken dan bij CD. Nu had ik het plan opgevat om een enum genaamd Categorie te gebruiken. Hoe kan ik per subclass van Item een andere invulling geven aan deze enum? Of moet ik per subclass van Item een andere enum gebruiken, zoals BoekCategorie, CDCategorie, enzovoorts? Dat lijkt me niet wenselijk, omdat ik dan per subclass een andere naam moet gebruiken om de categorie op te vragen.
De belangrijkste classes:
Item (abstract class)
Item is een abstract class. Item bevat de properties en methods waarover elke subclass van Item sowieso moet beschikken. Het ItemType (enum), de titel, enzovoorts.
Boek/CD/DVD (subclasses van Item)
Deze subclasses van Item bezitten sowieso de properties en methods van Item. Daarnaast bevatten ze over specifieke properties en methods. In het geval van Boek is dat bijvoorbeeld het ISBN nummer.
Exemplaar
Exemplaar is simpelweg een exemplaar van een Item. Ook kan er per Exemplaar opgegeven worden aan wie het is uitgeleend.
Bibliotheek
Doet alles wat je van een bibliotheek zou verwachten. Het uitlenen/terugnemen van exemplaren, toevoegen van leden, overzicht tonen van aanwezige exemplaren, enzovoorts.
Nu heb ik twee vragen.
1. In Boek/CD/DVD vraag ik in de constructor om een titel, omdat elke subclass van Item een titel nodig heeft. Vervolgens gebruik ik super() om deze titel door te geven aan de constructor van Item (de superclass). Dit is an sich geen probleem, maar wanneer ik de constructor van Item ga uitbreiden, moet ik alle subclasses van Item gaan aanpassen. Duidt dit op een slecht ontwerp? Zo ja, hoe zou ik dit kunnen verbeteren?
2. Ik zou graag voor elk Item een categorie willen aanwijzen. Deze categorieën zijn per subclass van Item verschillend. Je kunt je voorstellen dat je bij Boek andere categorieën wilt gebruiken dan bij CD. Nu had ik het plan opgevat om een enum genaamd Categorie te gebruiken. Hoe kan ik per subclass van Item een andere invulling geven aan deze enum? Of moet ik per subclass van Item een andere enum gebruiken, zoals BoekCategorie, CDCategorie, enzovoorts? Dat lijkt me niet wenselijk, omdat ik dan per subclass een andere naam moet gebruiken om de categorie op te vragen.