Hallo!
Ik heb net een cursus C++ achter de rug, en ik wou nu wat gaan oefenen. Om het een beetje leuk te houden, heb ik wat bedacht ivm. mijn hobby: voetballen.
Wat ik wil maken: een programma dat per competitie (champ. league, ...) de teams bijhoudt die eraan meedoen, en per team de spelers (met hun profiel, prestaties, ..).
Het probleem is dat ik geen ervaring heb met het maken van grote programmas, en dat ik dus niet goed weet hoe ik er eigenlijk aan moet beginnen.
Na wat literatuur te lezen over programming-design, heb ik volgende 3 voorstellen kunnen "bedenken".
voorstel 1:
--> Een klasse League: naam, lijst teams, lijst players, array relatie teams<->players
--> Een klasse Team: naam, land, voorzitter, ...
--> Een klasse Player: naam, land, goals, ...
In de klasse League hou ik een lijst (bijv. een array) van objecten van het type Team + een lijst van objecten van het type Player. Eenmaal ik deze 2 lijsten gemaakt heb, maak ik een array aan met lengte het aantal teams, en met indices telkens een lijst van spelers. De bedoeling van deze array is dat ik de relatie kan leggen dus een team (een index (komt overeen met een teamid) in de array), en de spelers van dat bepaald team (de lijst die aan die index hangt.)
voorstel 2:
--> Een klasse League: naam, wat pure virtual functies zoals "geefInformatie()"
--> Een klasse Team : public League: naam, land, voorzitter, geefInformatie(), ...
--> Een klasse Player : public Team: naam, land, goals, geefInformatie(), ...
Hier ga ik Team afleiden van League, en Player op zijn beurt van Team. Ik krijg dus een soort boomstructuur League->Team->Player. In deze opzet kan ik gebruik maken van de voordelen van inheritance: ik kan functies herdefiniëren met dezelfde betekenis, ik kan gebruik gaan maken van polymorfisme, ...
voorstel 3:
--> Een klasse Player: naam, land, goals, ...
--> Een klasse Team : public Player: naam, land, voorzitter, ...
--> Een klasse League : public Team: naam, ...
Hier ga ik voorstel 2 op zijn kop zetten: Player->Team->League
Mijn probleem is nu dat ik niet weet welk voorstel ik moet kiezen, omdat ik niet goed weet in welke gevallen ik bijvoorbeeld inheritance moet gaan gebruiken, en in welke gevallen juist niet. Een probleem in voorstel 2 en voorstel 3 is volgens mij dat ik telkens dubbele informatie moet gaan ingeven: telkens als ik een nieuwe speler aanmaak, moet ik per speler altijd opnieuw heel de ploeg-informatie + league-informatie gaan ingeven, omdat ik anders onvolledige structuren krijg. Dit probleem heb ik met voorstel 1 niet. Langs de andere kant kan ik in voorstel 1 niet echt gebruik maken van de voordelen van OO in C++, omdat in dat geval geen sprake is van inheritance/polymorfisme/function overloading/...
Hoe zouden jullie dit aanpakken? Is 1 van mijn voorstellen oké, of moet ik een tussenweg proberen te zoeken tussen de verschillende voorstellen?
Liefst ook goed funderen, want zoals je ziet ben ik niet echt mee in het opstellen van een structuur
ps: dit was mijn eerste post! aangenaam!
Ik heb net een cursus C++ achter de rug, en ik wou nu wat gaan oefenen. Om het een beetje leuk te houden, heb ik wat bedacht ivm. mijn hobby: voetballen.
Wat ik wil maken: een programma dat per competitie (champ. league, ...) de teams bijhoudt die eraan meedoen, en per team de spelers (met hun profiel, prestaties, ..).
Het probleem is dat ik geen ervaring heb met het maken van grote programmas, en dat ik dus niet goed weet hoe ik er eigenlijk aan moet beginnen.
Na wat literatuur te lezen over programming-design, heb ik volgende 3 voorstellen kunnen "bedenken".
voorstel 1:
--> Een klasse League: naam, lijst teams, lijst players, array relatie teams<->players
--> Een klasse Team: naam, land, voorzitter, ...
--> Een klasse Player: naam, land, goals, ...
In de klasse League hou ik een lijst (bijv. een array) van objecten van het type Team + een lijst van objecten van het type Player. Eenmaal ik deze 2 lijsten gemaakt heb, maak ik een array aan met lengte het aantal teams, en met indices telkens een lijst van spelers. De bedoeling van deze array is dat ik de relatie kan leggen dus een team (een index (komt overeen met een teamid) in de array), en de spelers van dat bepaald team (de lijst die aan die index hangt.)
voorstel 2:
--> Een klasse League: naam, wat pure virtual functies zoals "geefInformatie()"
--> Een klasse Team : public League: naam, land, voorzitter, geefInformatie(), ...
--> Een klasse Player : public Team: naam, land, goals, geefInformatie(), ...
Hier ga ik Team afleiden van League, en Player op zijn beurt van Team. Ik krijg dus een soort boomstructuur League->Team->Player. In deze opzet kan ik gebruik maken van de voordelen van inheritance: ik kan functies herdefiniëren met dezelfde betekenis, ik kan gebruik gaan maken van polymorfisme, ...
voorstel 3:
--> Een klasse Player: naam, land, goals, ...
--> Een klasse Team : public Player: naam, land, voorzitter, ...
--> Een klasse League : public Team: naam, ...
Hier ga ik voorstel 2 op zijn kop zetten: Player->Team->League
Mijn probleem is nu dat ik niet weet welk voorstel ik moet kiezen, omdat ik niet goed weet in welke gevallen ik bijvoorbeeld inheritance moet gaan gebruiken, en in welke gevallen juist niet. Een probleem in voorstel 2 en voorstel 3 is volgens mij dat ik telkens dubbele informatie moet gaan ingeven: telkens als ik een nieuwe speler aanmaak, moet ik per speler altijd opnieuw heel de ploeg-informatie + league-informatie gaan ingeven, omdat ik anders onvolledige structuren krijg. Dit probleem heb ik met voorstel 1 niet. Langs de andere kant kan ik in voorstel 1 niet echt gebruik maken van de voordelen van OO in C++, omdat in dat geval geen sprake is van inheritance/polymorfisme/function overloading/...
Hoe zouden jullie dit aanpakken? Is 1 van mijn voorstellen oké, of moet ik een tussenweg proberen te zoeken tussen de verschillende voorstellen?
Liefst ook goed funderen, want zoals je ziet ben ik niet echt mee in het opstellen van een structuur
ps: dit was mijn eerste post! aangenaam!