Durante um projeto recente em que estou trabalhando, tive que usar várias funções que se parecem com isso:
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);
Então, eu quero refatorá-lo para algo parecido com isto:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Isso me parece significativamente mais legível e seguro do que o primeiro método. Mas faz sentido criar PixelCoordinate
e PixelSize
classes? Ou seria melhor usar apenas std::pair<int,int>
para cada um. E faz sentido ter uma ZoomLevel
aula ou devo apenas usar uma double
?
Minha intuição por trás do uso de classes para tudo é baseada nessas suposições:
- Se houver classes para tudo, seria impossível passar um
ZoomLevel
dentro de onde umWeight
objeto era esperado; portanto, seria mais difícil fornecer argumentos errados para uma função - Da mesma forma, algumas operações ilegais causariam erros de compilação, como adicionar um
GPSCoordinate
a umZoomLevel
ou outroGPSCoordinate
- As operações legais serão fáceis de representar e tipificar com segurança. ou seja, subtrair dois
GPSCoordinate
s produziria umaGPSDisplacement
No entanto, a maioria dos códigos C ++ que eu vi usa muitos tipos primitivos, e imagino que deve haver uma boa razão para isso. É uma boa ideia usar objetos para qualquer coisa, ou tem desvantagens das quais não estou ciente?