2012-07-25 33 views
5

Đây là câu hỏi về bài tập về nhà của tôi: Lớp nào sau đây KHÔNG được đóng gói chặt chẽ?Lớp đóng gói chặt chẽ

class A 
{ 
    private int x; 
} 
class B 
{ 
    private int x; 
    public void setX(int x) 
    { 
     this.x=x; 
    } 
    public int getX() 
    { 
     return x; 
    } 
} 
class C 
{ 
    private int x; 
    private void setX(int x) 
    { 
     this.x=x; 
    } 
    private int getX() 
    { 
     return x; 
    } 
} 

Tôi đã dành chút thời gian tìm kiếm trên coderanch nhưng không thể nhận được nội dung yêu cầu. Ai đó làm ơn giúp tôi với?

Điều tôi nghĩ là lớp C không được đóng gói chặt chẽ, vì các phương pháp là riêng tư. Và về lớp A, điều tôi cảm thấy là nó không chỉ đóng gói. Bởi vì định nghĩa cơ bản của đóng gói nói rằng "Bạn phải ẩn các thành viên của bạn và cung cấp cho các phương pháp người dùng lớp mà hành xử theo cách bạn muốn." Bây giờ lớp A không có phương thức bộ biến tần. Vì vậy, A không nên được coi là đóng gói. Tôi không chắc lắm. Hãy sửa tôi nếu tôi sai.

+0

này có lẽ sẽ không giúp bạn, nhưng câu hỏi được đặt ra (có lẽ là bởi những người chỉ dẫn của bạn) một cách trừu tượng vô lý. Một lớp được đóng gói chặt chẽ khi nó chỉ phơi bày giao diện mà khách hàng của nó cần. Nó khá là không thể nói một cách có ý nghĩa mà không biết mục đích của một lớp học nhất định. – millimoose

Trả lời

1

Bạn hoàn toàn đúng. Cả hai loại A và Class C không được đóng gói chặt chẽ bởi vì đóng gói chặt chẽ ngụ ý các lĩnh vực tư nhân kết hợp với getters công cộng và setters.

+0

Bây giờ tôi đang bối rối ... Vì tôi có 4 lựa chọn: A: Loại A B: Class B C: Class C D: Không ai ở trên – user1500024

+2

Truy cập trực tiếp vào nội bộ của bạn ngụ ý đóng gói? – jeff

1

Định nghĩa của bạn về đóng gói là chính xác. Nhưng tôi nghĩ bạn đang đi lạc một chút.

Đóng gói nghĩa là bạn không cho phép người khác có quyền truy cập trực tiếp vào nội bộ của bạn. Bạn vạch trần chức năng của người dùng và bạn quản lý nội bộ của riêng mình.

Vì vậy, nếu tôi là tài khoản ngân hàng - Tôi có một trường riêng gọi là tổng số. Tôi không cho phép người dùng trực tiếp đặt tổng số của tôi. Thay vào đó, tôi tiếp xúc với việc rút tiền (double amt) và ký quỹ (double amt) và tôi quản lý tổng số khi cần.

Không bị treo lên Chỉ có một thành viên riêng. Xem xét các phân đoạn lớp này - như chức năng của người dùng không được hiển thị và thử trả lời lại.

+0

Trên thực tế, câu hỏi này được hỏi trong bài kiểm tra năng khiếu tuyển dụng với 4 tùy chọn: lớp A, B, C hoặc Không có. Trong số họ, chỉ có một là chính xác. Vậy câu trả lời đúng nhất là gì? – user1500024

+0

@ user1500024 Ngoài các tùy chọn đó? Tôi muốn nói Không bởi vì 'B' phơi bày tất cả nội bộ của nó, và' A' và 'C' phơi bày không có gì và do đó vô dụng. Điều đó nói rằng có một đối số được thực hiện để trả lời "' B' "(bởi vì trong khi nó phơi bày' x' nó ít nhất là điều khiển truy cập vào nó); cũng như có một đối số được tạo ra cho 'A' và' C' vì chúng không lộ ra 'x'. Nó chỉ là một câu hỏi mơ hồ lố bịch. – millimoose

+1

Tôi hoàn toàn đồng ý ... Tôi CURSE người đã thiết kế một câu hỏi như vậy. – user1500024

4

Cách "đóng gói chặt chẽ" được xác định trong lớp học của bạn? Không có học viện hay định nghĩa toàn ngành về điều này theo như tôi có thể nói từ tìm kiếm của Google.

Tôi có thể lập luận rằng mỗi lớp được đóng gói tốt hoặc mỗi lớp được đóng gói kém. Tại sao khách hàng tiếp xúc với tên của biến riêng X? Có vẻ không may. Tại sao lớp A không phơi bày bất kỳ chức năng nào? Có phải "đúng" đối với C để chỉ hiển thị một getter trong tên miền mà nó nên được sử dụng không?

Câu hỏi này chỉ xuyên tạc khái niệm đóng gói. Bạn không thể chạy mã thông qua "thường trình xác minh đóng gói". Đó là một quyết định thiết kế của con người, trong đó bạn nói rằng cái được phơi bày phải là cái gì đó và cái không phải là không được. Về cơ bản, điều này thường đòi hỏi dữ liệu phải riêng tư, nhưng liệu một phương pháp nên công khai hay riêng tư phụ thuộc hoàn toàn vào những gì nó thực sự có nghĩa là và đang làm.

0

Tôi nghĩ rằng sự cần thiết của người truy cập công cộng được đề cập trong định nghĩa đóng gói bởi vì nó chỉ đơn giản là có ý nghĩa và không có lý do nào khác. Vì vậy, tôi muốn nói rằng lớp đóng gói chặt chẽ là một lớp ẩn các thành viên của nó, ngăn chặn truy cập trực tiếp vào chúng bởi các đối tượng của các lớp khác. Đó là tất cả. Tôi muốn đi với None, như tất cả các lớp học được đóng gói ngay cả khi hai trong số họ không có ý nghĩa nhiều.

0

đây lớp B sẽ được đóng gói chặt chẽ vì theo định nghĩa "nếu một lớp được khai báo với các biến riêng & tài sản công cộng, nó được cho là đóng gói chặt chẽ "

0

Tất cả các lớp trên của bạn được đóng gói chặt chẽ.

Lớp học được cho là được đóng gói chặt chẽ nếu và chỉ khi, tất cả các thành viên dữ liệu được khai báo là riêng tư. Ở đây chúng ta không nên lo lắng về việc liệu những người truy cập công cộng hay những người đột biến có mặt hay không.

-1

Một lớp được cho là được "đóng gói chặt chẽ" khi và chỉ khi tất cả các biến được khai báo là tư nhân. (Không phân biệt nếu chúng chứa getter hoặc setter phương pháp hay không.

Trong ví dụ của bạn Tất cả ba lớp học được đóng gói chặt chẽ vì mỗi lớp có mỗi biến như tư nhân.

0

Tất cả ba lớp được mô tả bởi bạn đang encapsulated chặt chẽ.

tôi f một lớp chỉ có các biến riêng và không có biến công cộng nào khác thì một lớp được gọi là lớp đóng gói chặt chẽ.

Nó không phụ thuộc vào phương thức getter hoặc setter.

Chúng ta cần phải có getter và Setters vì chúng ta cần tạo các biến để chúng ta có thể sử dụng chúng trong các lớp hoặc hàm khác.

Vì vậy, bất kể phương thức getter và setter công khai, tất cả ba lớp đều được đóng gói chặt chẽ.

0

lớp Encapsulated chặt chẽ có nghĩa là tất cả các biến thành viên khai báo là tin vì vậy tất cả các lớp học được đóng gói chặt chẽ NB nếu một lớp cha mẹ chứa một biến thành viên đó được định nghĩa là không tin lớp con của bạn sẽ không được đóng gói chặt chẽ

Các vấn đề liên quan