2010-10-23 31 views
7

Có ai có thể giải thích cho tôi về việc đóng gói dữ liệu trong Mục tiêu-C là gì không? Tôi đã được cho biết rằng đây là một khái niệm quan trọng của Objective-C nhưng tôi không thấy tại sao ...Đóng gói dữ liệu ...?

Giải thích cho tôi như thể tôi là 5 và sau đó như thể tôi là 25 ....

Cảm ơn thời gian của bạn, ~ Daniel

+0

Tại sao lại có các phiếu bầu? – CesarGon

+0

FWIW: Việc đóng gói dữ liệu không theo cách cụ thể đối với mục tiêu C, hay thậm chí là lập trình hướng đối tượng, thay vào đó là một kỹ thuật rất chung để kiểm soát một lớp phức tạp trong hầu hết mọi môi trường lập trình. – dmckee

+2

Tôi đồng ý rằng điều này (đóng gói) là kém "giải thích". Đối với một số lý do, hầu như mọi thứ trong mục tiêu C là "như thế" .. Tất cả các khái niệm đều dễ thương, trừu tượng, bán liên quan, tiếng anh "tên" .. thật không may là hoàn toàn không có ý nghĩa với nhau… ĐỂ bạn hiểu ... Sau đó, một công tắc flips, và tất cả mọi người mà không nhận được nó có vẻ câm. Tôi thề ... cách họ đã tóm tắt các khái niệm là đúng ở rìa của những gì _normal_ mọi người có thể hiểu .. đến điểm mà một khi bạn làm được nó ..bạn gần như sợ phải quay lại và cố gắng giải thích nó, lol. –

Trả lời

4

Từ http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-2/:

Những gì chúng ta ý nghĩa của dữ liệu đóng gói là dữ liệu được chứa (so to speak) bằng các phương pháp có nghĩa là để truy cập vào nó chúng ta cần sử dụng đã gặp hods. Một số người trong số các bạn đã được lập trình bằng các ngôn ngữ khác và không được nghe về việc đóng gói dữ liệu có thể tự hỏi tại sao chúng tôi làm điều này theo cách này. Câu trả lời là bởi dữ liệu gói gọn, có một đệm đẹp giữa nhà phát triển của lớp học và người dùng của một lớp học. Bởi vì các phương thức lớp quản lý và duy trì các thuộc tính trong lớp, có thể dễ dàng duy trì dữ liệu toàn vẹn. Một lợi ích lớn khác là khi nhà phát triển phân phối lớp học của mình, những người sử dụng nó không có số để lo lắng về nội bộ của lớp học . Nhà phát triển có thể cập nhật phương thức để làm cho nhanh hơn hoặc hiệu quả hơn, hoặc , nhưng bản cập nhật này là minh bạch cho người dùng của lớp vì họ vẫn sử dụng cùng một phương pháp mà không thay đổi mã của họ.

Trong điều kiện đơn giản, người dùng được cung cấp những gì nhà phát triển muốn họ có và "bảo vệ" mọi thứ khác. Nhà phát triển có thể thay đổi bất kỳ nội dung nào mà không cần người dùng phải viết lại mã của họ.

Nếu nhà phát triển không tuân thủ gói dữ liệu, chúng tôi sẽ cần phải viết lại mã của chúng tôi mỗi khi phiên bản mới của thư viện, đoạn mã hoặc toàn bộ chương trình được phát hành.

3

Việc đóng gói dữ liệu trong Mục tiêu-C có nghĩa là chỉ chính lớp đó sẽ chạm vào các biến mẫu của nó. Do đó bạn phải luôn đánh dấu chúng là riêng tư và chỉ hiển thị chúng thông qua các thuộc tính, như sau:

@interface Foo : NSObject { 
@private 
    int numberOfBars; 
    Baz* contentBaz; 
} 
@property(nonatamic, assign) int numberOfBars; 
@property(nonatomic, retain) Baz* contentBaz; 
@end 

Điều này có nghĩa là lớp có thể thực hiện xác thực trong phương thức setter của nó. Và thậm chí tốt hơn nếu bạn sử dụng @synthesize để tạo ra getter và setters của bạn hơn bạn thậm chí không cần phải lo lắng về mô hình bộ nhớ của Cocoa ở tất cả (ngoại trừ việc phát hành ivars của bạn trong dealloc).

+0

Thật tuyệt vời..u được giải thích bằng một câu ... Nếu bạn đã giải thích ví dụ với nhiều chi tiết hơn sẽ tốt đẹp ... Bất kỳ cách nào cảm ơn bạn. –

+0

@Peylow - Đặt độc đáo! –

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