Đáp lại câu trả lời của Aaronaught cho câu hỏi tại:
Tôi không thể sử dụng tất cả các phương thức tĩnh?
Không có ít bộ nhớ được sử dụng cho một phương thức tĩnh? Tôi có ấn tượng rằng mỗi phiên bản đối tượng mang theo phiên bản thực thi riêng của hàm chức năng không tĩnh.
Bất kể có bao nhiêu chi phí liên quan đến việc gọi một phương thức tĩnh, bất kể thiết kế OO kém và đau đầu có thể xảy ra, không phải nó sử dụng ít bộ nhớ hơn khi chạy?
Đây là một ví dụ:
Tôi tạo một vectơ của các đối tượng khởi tạo bằng không. Mỗi đối tượng chứa một phần dữ liệu (một hình tam giác gồm chín đôi). Mỗi đối tượng được điền theo thứ tự từ dữ liệu đọc từ tệp .stl. Chỉ có một phương pháp tĩnh là cần thiết. Thiết kế OO thích hợp chỉ ra rằng một phương thức xử lý dữ liệu trực tiếp nên được phân phối cho từng đối tượng. Đây là giải pháp OO tiêu chuẩn:
foreach(obj in vec) {
obj.readFromFile(fileName);
}
Mỗi obj mang readFromFile
mã được biên dịch cùng với dữ liệu!
Bộ nhớ là mối quan tâm nhiều hơn hiệu năng trong trường hợp này và có RẤT NHIỀU dữ liệu trên một hệ thống bị hạn chế.
Các giải pháp:
- Phương thức không gian tên (tuyệt vời cho C ++ nhưng không khả dụng trong Java)
- Một phương thức tĩnh trong lớp obj. Mã thực thi được giữ ở một nơi trong thời gian chạy. Có một chi phí nhỏ để gọi phương thức.
- Một lớp cha mà từ đó obj được dẫn xuất, chứa phương thức riêng
readFromFile
. Gọi vớisuper.callPrivateMethod()
cuộc gọi nàoreadFromFile
. Lộn xộn, và vẫn còn một số bộ nhớ trên mỗi đối tượng. - Triển khai
readFromFile
bên ngoài phạm vi của obj, vì vậy trong lớp của vec hoặc trong lớp gọi. Điều này, theo tôi, phá vỡ đóng gói dữ liệu.
Tôi nhận ra đối với một lượng lớn dữ liệu, một đối tượng rõ ràng cho mỗi tam giác không phải là cách tiếp cận tốt nhất. Đây chỉ là một ví dụ.