Durante un proyecto reciente en el que he estado trabajando, tuve que usar muchas funciones que se ven así:
static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude,
double plane_roll, double plane_pitch, double plane_heading,
double gimbal_roll, double gimbal_pitch, double gimbal_yaw,
int target_x, int target_y, double zoom,
int image_width_pixels, int image_height_pixels,
double & Target_Latitude, double & Target_Longitude, double & Target_Height);
Así que quiero refactorizarlo para que se vea así:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Esto me parece significativamente más legible y seguro que el primer método. ¿Pero tiene sentido crear PixelCoordinate
y PixelSize
clases? ¿O sería mejor usar solo std::pair<int,int>
para cada uno? ¿Y tiene sentido tener una ZoomLevel
clase, o debería usar una double
?
Mi intuición detrás del uso de clases para todo se basa en estos supuestos:
- Si hay clases para todo, sería imposible pasar un
ZoomLevel
lugar dondeWeight
se esperaba un objeto, por lo que sería más difícil proporcionar argumentos incorrectos para una función - Del mismo modo, algunas operaciones ilegales causarían errores de compilación, como agregar una
GPSCoordinate
aZoomLevel
otraGPSCoordinate
- Las operaciones legales serán fáciles de representar y seguras. es decir, restar dos
GPSCoordinate
s produciría unGPSDisplacement
Sin embargo, la mayoría del código de C ++ que he visto usa muchos tipos primitivos, e imagino que debe haber una buena razón para eso. ¿Es una buena idea usar objetos para algo, o tiene inconvenientes que desconozco?