Podczas ostatniego projektu, nad którym pracowałem, musiałem użyć wielu funkcji, które wyglądają tak:
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);
Chcę go zmienić tak, aby wyglądał mniej więcej tak:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Wydaje mi się, że jest znacznie bardziej czytelny i bezpieczny niż pierwsza metoda. Ale czy tworzenie PixelCoordinate
i PixelSize
klasy mają sens ? A może lepiej byłoby po prostu użyć std::pair<int,int>
dla każdego. I czy warto mieć ZoomLevel
klasę, czy powinienem po prostu użyć double
?
Moja intuicja dotycząca używania klas do wszystkiego opiera się na następujących założeniach:
- Jeśli istnieją klasy dla wszystkiego, nie byłoby możliwe podanie
ZoomLevel
w miejscu, w którymWeight
oczekiwany był obiekt, więc trudniej byłoby podać niewłaściwe argumenty funkcji - Podobnie, niektóre nielegalne operacje spowodowałyby błędy kompilacji, takie jak dodanie a
GPSCoordinate
doZoomLevel
innegoGPSCoordinate
- Czynności prawne będą łatwe do reprezentowania i bezpieczne. tzn. odjęcie dwóch
GPSCoordinate
s dałoby aGPSDisplacement
Jednak większość kodu C ++, który widziałem, używa wielu prymitywnych typów i myślę, że musi to mieć dobry powód. Czy warto używać obiektów do czegokolwiek, czy ma wady, których nie jestem świadomy?