Note: I couldn't get formatting to work inside a code block for italics and things, so there is some makeshift markup to attempt to convey the meaning. Also the html escape character for a filled diamond would not work. Hopefully it still makes sense
I have a project in my Java class where I need to create a GUI program that basically models a small inventory database. The main focus is to create it in an object oriented manner. So basically before getting started I've mapped out a simplified UML which just specifies the classes, composition and inheritance without defining variables or methods - implementing those will be easy but I want to make sure I have a solid heirarchial structure of good object oriented design before I start adding in the details.
So if you could please take the time to look over my project structure and let me know if there's anything I should change, omit or add.
The project will basically be a makeshift video game store application that simply reads and writes records to a text file, and the administrator managing the database should have a graphical interface to navigate, add, delete, and edit records. I will spruce it up nicely with some great functionality, but for right now, I'm only focused on making sure my structure is good.
**list of classes**
DatabaseRecord <abstract>
VideoGameDatabaseRecord
DatabaseNavigator
Database <abstract>
VideoGameDatabase
Game <abstract>
VideoGame <abstract> (superclass for platform-specific video games)
XBoxGame
PlaystationGame
NintendoGame
etc for all subclasses that would pertain to the needs of the inventory
I'm still a little new to UML modelling, so I hope I've used conventions properly, and where text-based UML caused conventions to be impossible to follow, I hope the meaning is still clear with "a" and "c" inside diamonds to indicate aggregation or composition, and a capital "A" to indicate an abstract class (italics wouldn't show inside code markdown)
------A----- 0..* ----------A-------- ----A---
| Database | <c>------------- | DatabaseRecord | | Game |
------------ ------------------- --------
^ ^ ^
| | |
| | |
--------------------- 0..* ----------------------------- 1 ------A------
| VideoGameDatabase | <c>------- | VideoGameDataBaseRecord | <a>-------- | VideoGame |
--------------------- ----------------------------- -------------
<a> ^ ^ ^
| | | |
1 | | | |
----------------------- -------------| | |
| DatabaseNavigator | | XBoxGame | | |
----------------------- -------------- | |
-------------| |
| PS2Game | |
-------------- |
|
--------|
| etc. |
---------
Again, I'm looking only for guidance on the hierarchy, OOP design, composition etc. of my program structure. i.e. should this be abstract, should that be an interface, should I add more/less levels of subclassing, etc. I'm confident about churning out the code reliably, but my grasp and command of OOP design principles is still not good enough.
Thanks in advance for your help!