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 PixelCoordinatei PixelSizeklasy mają sens ? A może lepiej byłoby po prostu użyć std::pair<int,int>dla każdego. I czy warto mieć ZoomLevelklasę, 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
ZoomLevelw miejscu, w którymWeightoczekiwany 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
GPSCoordinatedoZoomLevelinnegoGPSCoordinate - Czynności prawne będą łatwe do reprezentowania i bezpieczne. tzn. odjęcie dwóch
GPSCoordinates 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?