Sto scrivendo una libreria per consentire agli utenti di generare modelli 3D in modo programmatico.
- Codice di scrittura utente (ad esempio
Square(4)
) - Anteprima visualizzazioni utente del modello 3D (con visualizzatore incorporato)
- L'utente può "stampare" il modello su un file
.obj
che può essere letto da altri programmi di modellazione 3D e visualizzatori
Qual è un buon modo per progettare gli oggetti dati e la funzionalità di cui sopra?
Supponiamo che un oggetto Square
sottoclassi una classe Polygon
.
Un Polygon
avrebbe
- vertici
- una faccia
- una trasformazione / traduzione
Alla fine, devo essere in grado di print
questo poligono sullo schermo. Alcune parti del mio programma dovranno sapere come renderlo usando una libreria grafica che userò. Tuttavia non voglio aggiungere questa funzionalità come parte della classe Polygon
perché vorrei che la classe Polygon
si preoccupasse solo di considerazioni geometriche pure, non dei dettagli delle librerie grafiche. Quindi, potrei semplicemente creare un oggetto Renderer
che possa prendere Polygons
e Circles
e Curves
e controllarli e quindi decidere come visualizzarli, ma non sembra molto orientato agli oggetti.
Quindi, per riassumere, voglio avere
- un gruppo di diversi tipi di oggetti geometrici (
Polygons
,Circles
,Curves
, ecc.) - alcuni modi diversi per "stampare" gli oggetti (visualizzare sullo schermo, scrivere su file, ecc.)
E non sono sicuro di dove mettere tutte queste funzionalità in modo che sia ben incapsulato, facile da mantenere ed estensibile.