Hallo allemaal,
ter oefening wil ik klass(en) voor complexe getallen maken in PHP en Java.
Nu zit ik een beetje te twijfelen over de (toch redelijk simpele) structuur, dus dacht ik: laat ik GoT eens om zijn mening vragen
Zoals gezegd gaat het om complexe getallen. Voor degenen die er onbekend mee zijn: het zijn getallen volgens "a + b*i" waarbij a en b reele ("normale") getallen zijn en i2 = -1.
Nu is er nog een andere vorm waarin je deze getallen kan opslaan, de polaire vorm: r(cos(a) + sin(a)*i, de andere heet de Cartetische vorm). De polaire vorm vereenvoudigd sommige moeilijkere berekeningen (maar maakt eenvoudige moeilijker)
Daar zit hem de crux, een complex getal heeft dus twee gepresentaties, nu zit ik te twijfelen hoe ik dit ga doen:
1. Beide opslaan in één klasse en afhankelijk van de handigste die gebruiken.
Voordeel: Beide zijn altijd beschikbaar
Nadelene:
- het kost (marginaal) meer geheugen en iets meer rekentijd (aangezien na elke berekening de andere vorm berekend moet worden). Ook dit is echter heel weinig.
- Ook is er een iets grotere kans op fouten, aangezien de conversie ergens vergeten kan worden.
- Er moet een enum/flag meegegeven worden in de constructor om te bepalen welke vorm wordt meegegeven, aangezien beide argumenten in beide gevallen integers zijn
2. Aparte klassen maken waarna de gebruiker zelf kan kiezen
2a: Abstracte "Complex" class met kinderen "CartComplex" en "PolComplex", eventueel met static methode die een van beide teruggeeft (dus bijv: Complex.getCart(a, b) of Complex.getPol(r, a)
Voordeel: berekeningen gaan effiecenter als de gebruiker weet wanneer wat beter is
Nadelen:
-Gebruiker heeft meer kennis nodig van complexe getallen.
- Het is iets meer typewerk
2b. Niet-abstracte "Complex" class die getallen als een bepaalde vorm opslaat en een child class die het als de andere vorm doet in geval de te maken berekeningen daarmee efficiënter kunnen worden gedaan.
Voordelen: Makkelijker in gebruik (enkel als de gebruiker heel zeker weet dat iets efficienter is kan hij de andere klasse gebruiken)
Nadelen: - Een bepaalde vorm wordt "Belangrijker" gemaakt dan de ander
Wat vinden jullie?
Overigens is dus puur om wat meer vaardigheid te krijgen in OOP en programmeren, dus de dingen misschien wat overengineered zijn is geen probleem
ter oefening wil ik klass(en) voor complexe getallen maken in PHP en Java.
Nu zit ik een beetje te twijfelen over de (toch redelijk simpele) structuur, dus dacht ik: laat ik GoT eens om zijn mening vragen
Zoals gezegd gaat het om complexe getallen. Voor degenen die er onbekend mee zijn: het zijn getallen volgens "a + b*i" waarbij a en b reele ("normale") getallen zijn en i2 = -1.
Nu is er nog een andere vorm waarin je deze getallen kan opslaan, de polaire vorm: r(cos(a) + sin(a)*i, de andere heet de Cartetische vorm). De polaire vorm vereenvoudigd sommige moeilijkere berekeningen (maar maakt eenvoudige moeilijker)
Daar zit hem de crux, een complex getal heeft dus twee gepresentaties, nu zit ik te twijfelen hoe ik dit ga doen:
1. Beide opslaan in één klasse en afhankelijk van de handigste die gebruiken.
Voordeel: Beide zijn altijd beschikbaar
Nadelene:
- het kost (marginaal) meer geheugen en iets meer rekentijd (aangezien na elke berekening de andere vorm berekend moet worden). Ook dit is echter heel weinig.
- Ook is er een iets grotere kans op fouten, aangezien de conversie ergens vergeten kan worden.
- Er moet een enum/flag meegegeven worden in de constructor om te bepalen welke vorm wordt meegegeven, aangezien beide argumenten in beide gevallen integers zijn
2. Aparte klassen maken waarna de gebruiker zelf kan kiezen
2a: Abstracte "Complex" class met kinderen "CartComplex" en "PolComplex", eventueel met static methode die een van beide teruggeeft (dus bijv: Complex.getCart(a, b) of Complex.getPol(r, a)
Voordeel: berekeningen gaan effiecenter als de gebruiker weet wanneer wat beter is
Nadelen:
-Gebruiker heeft meer kennis nodig van complexe getallen.
- Het is iets meer typewerk
2b. Niet-abstracte "Complex" class die getallen als een bepaalde vorm opslaat en een child class die het als de andere vorm doet in geval de te maken berekeningen daarmee efficiënter kunnen worden gedaan.
Voordelen: Makkelijker in gebruik (enkel als de gebruiker heel zeker weet dat iets efficienter is kan hij de andere klasse gebruiken)
Nadelen: - Een bepaalde vorm wordt "Belangrijker" gemaakt dan de ander
Wat vinden jullie?
Overigens is dus puur om wat meer vaardigheid te krijgen in OOP en programmeren, dus de dingen misschien wat overengineered zijn is geen probleem