Tác giả của Code Complete có ý nghĩa gì khi nói về việc ẩn dữ liệu toàn cầu?


25

Trong phần 6.4 của Code Complete 2nd Edition có một đoạn về việc ẩn dữ liệu toàn cầu. Điều tôi đặc biệt quan tâm, đó là McConnell (tác giả của cuốn sách) đưa ra các ví dụ về lợi ích của việc che giấu dữ liệu toàn cầu. Có một ví dụ mà tôi không thể hiểu. Tôi không có phiên bản tiếng Anh của cuốn sách, vì vậy tôi sẽ cố gắng dịch văn bản.

Ẩn dữ liệu toàn cầu. (...) Bạn có thể thay đổi cấu trúc dữ liệu mà không cần sửa đổi chương trình.

McConnell có nghĩa là gì? Có phải anh ấy đang nói về việc thay đổi dữ liệu toàn cầu? Nếu vậy, tại sao bạn không phải sửa đổi chương trình của mình khi bạn đang sử dụng các phương thức để truy xuất dữ liệu đó? Hoặc có thể anh ta đang đề cập đến một cái gì đó khác ở đây?

Tôi sẽ đánh giá rất cao nếu ai đó có thể làm sáng tỏ sự nhầm lẫn của tôi. Nếu bạn cũng có thể cung cấp một ví dụ, nó sẽ rất tuyệt (ví dụ rất tuyệt vời, bạn biết đấy).

Câu trả lời:


44

Tác giả đang nói về cấu trúc của dữ liệu toàn cầu và cách thay đổi cấu trúc đó sẽ ảnh hưởng đến mã sử dụng nó.

Nếu dữ liệu toàn cầu có thể truy cập trực tiếp, thì việc thay đổi cấu trúc dữ liệu có nghĩa là có khả năng phải thay đổi tất cả mã sử dụng nó.

Nếu dữ liệu toàn cầu chỉ có thể truy cập thông qua một giao diện (ví dụ: một bộ các chức năng), thì việc thay đổi cấu trúc có nghĩa là chỉ thay đổi các bộ truy cập này. Phần còn lại của mã không phải thay đổi.

Như ví dụ đơn giản sẽ là mã bắt đầu bằng một mảng các số nguyên ( static int[]ví dụ, trong một số lớp Java). Nếu mảng đó có thể truy cập toàn cầu, thì mọi người sẽ bắt đầu sử dụng nó với cú pháp mảng (tức là Global.cool_stuff[x] = 1;). Nếu vì lý do nào đó bạn muốn thay đổi mảng đó thành loại tập hợp (vectơ, danh sách, bất cứ điều gì), thì bạn phải thay đổi tất cả mã sử dụng đoạn dữ liệu toàn cầu này vì ít nhất là về mặt cú pháp, không hợp lệ.

Nếu dữ liệu đó chỉ có thể truy cập được thông qua một tập hợp các hàm truy cập / trình biến đổi ("ẩn đằng sau" một giao diện), thì bạn chỉ cần thay đổi tập hợp các hàm nhỏ đó. Mã thực sự sử dụng dữ liệu có thể không thay đổi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.