Trong một dự án gần đây tôi đang thực hiện, tôi đã phải sử dụng rất nhiều chức năng giống như thế này:
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);
Vì vậy, tôi muốn cấu trúc lại nó để trông giống như thế này:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Điều này đối với tôi có thể dễ đọc và an toàn hơn đáng kể so với phương pháp đầu tiên. Nhưng nó có ý nghĩa để tạo PixelCoordinate
và PixelSize
các lớp? Hoặc tôi sẽ tốt hơn nếu chỉ sử dụng std::pair<int,int>
cho mỗi. Và nó có ý nghĩa để có một ZoomLevel
lớp học, hay tôi chỉ nên sử dụng một double
?
Trực giác của tôi đằng sau việc sử dụng các lớp học cho mọi thứ dựa trên những giả định sau:
- Nếu có các lớp cho tất cả mọi thứ, sẽ không thể vượt qua một
ZoomLevel
nơi mà mộtWeight
đối tượng được mong đợi, do đó việc cung cấp các đối số sai cho một hàm sẽ khó khăn hơn - Tương tự, một số hoạt động bất hợp pháp sẽ gây ra lỗi biên dịch, chẳng hạn như thêm
GPSCoordinate
mộtZoomLevel
hoặc một cái khácGPSCoordinate
- Hoạt động pháp lý sẽ dễ dàng để đại diện và loại an toàn. tức là trừ hai
GPSCoordinate
s sẽ mang lại mộtGPSDisplacement
Tuy nhiên, hầu hết mã C ++ mà tôi thấy sử dụng rất nhiều kiểu nguyên thủy và tôi tưởng tượng rằng phải có một lý do chính đáng cho điều đó. Đó có phải là một ý tưởng tốt để sử dụng các đối tượng cho bất cứ điều gì, hoặc nó có nhược điểm mà tôi không nhận thức được?