Sono relativamente nuovo a OOP. A volte mi imbatto in situazioni in cui non sono sicuro di dove dovrebbe andare un metodo. Proverò a dare un esempio minimo; Spero di non esagerare e di renderlo troppo astratto.Una funzione dovrebbe andare in una/entrambe le due classi o essere indipendente?
Dire che ho una classe Point
che contiene la posizione di un punto e una classe Line
che contiene l'equazione di una linea. Ora ho bisogno di un metodo che calcoli la distanza (perpendicolare) tra un Point
e un Line
. Ho potuto fare:
- Point :: distance_to_line (linea L)
- linea :: distance_to_point (punto P)
- una funzione di free-standing: point_line_distance (linea L, punto P)
C'è un modo preferito in OOP in generale, o dipende dalla lingua? In C++ una funzione indipendente è un'opzione, ma dalla mia comprensione limitata di Java, non consente le funzioni free-standing. In tal caso creeresti una classe come PointLineDistanceCalculator
?
Se mi ponessi un tale problema, farei quanto segue. Crea file '. GeometryHelper' .h' e' .cpp' che hanno un sacco di funzioni libere. Farebbero cose come 'point_line_distance',' line_intersection', ecc. – CoryKramer
Ha senso che un punto abbia dei metodi per calcolare la sua distanza da ogni singolo tipo di forma sotto il sole? Probabilmente no.Quindi dovrebbe probabilmente essere una funzione non membro, che ti permette di mantenere l'interfaccia Point semplice e pulita. E i nomi delle funzioni non devono avere nomi lunghi come 'point_line_distance', ma potrebbero semplicemente essere chiamati' distance'. – juanchopanza
Purché funzionalmente identici, lo inserirò come membro della classe di linea solo per ridurre le dipendenze tra punto e linea dato che la linea ha già una dipendenza dal punto, non c'è motivo di introdurre il contrario – cppguy