Tôi đang học OOP. Tôi đã nghiên cứu nhiều về đóng gói nhưng càng đọc tôi càng thấy bối rối.
Tôi hiểu rằng chúng tôi ẩn (bằng cách tạo dữ liệu riêng tư) và hiển thị nó cho người dùng của lớp (nhà phát triển khác) dưới dạng các thuộc tính hoặc phương thức. Tôi cũng hiểu bằng cách đóng gói chúng tôi ẩn chi tiết.
Trong một bài viết (http://www.csharp-station.com/Tutorial/CSharp/lesson19) tôi đã đọc:
Tóm tắt từ bài viết
Khi thiết kế một đối tượng, bạn phải suy nghĩ về cách người khác có thể sử dụng nó. Trong trường hợp tốt nhất, bất kỳ chương trình nào sử dụng đối tượng sẽ được thiết kế tốt và mã sẽ không bao giờ thay đổi. Tuy nhiên, thực tế là các chương trình thay đổi thường xuyên và trong môi trường nhóm, nhiều người chạm vào cùng một mã lúc này hay lúc khác. Do đó, nó có lợi để xem xét những gì có thể đi sai cũng như hình ảnh nguyên sơ như thế nào đối tượng nên được sử dụng.
Trong trường hợp đối tượng BankAccount, hãy kiểm tra tình huống mã bên ngoài đối tượng của bạn có thể truy cập vào trường Số tiền thập phân hoặc trường chuỗi Tên khách hàng. Tại thời điểm mã được viết, mọi thứ sẽ hoạt động tốt. Tuy nhiên, sau này trong chu kỳ phát triển, bạn nhận ra rằng đối tượng BankAccount nên theo dõi một ID khách hàng chứ không phải chuỗi Tên khách hàng vì bạn không muốn sao chép mối quan hệ giữa thông tin (hoặc một số lý do hợp lệ khác để thay đổi định nghĩa về trạng thái nội bộ) . Những thay đổi như vậy gây ra hiệu ứng gợn sóng trong mã của bạn vì nó được xây dựng để sử dụng lớp BankAccount, như được thiết kế ban đầu (với CustomerName là một chuỗi) và bây giờ bạn phải thay đổi mã truy cập trạng thái đó trong toàn bộ ứng dụng của bạn.
Nguyên tắc Encapsulation hướng đối tượng giúp tránh các vấn đề như vậy, cho phép bạn ẩn trạng thái nội bộ và truy cập trừu tượng vào nó mặc dù các thành viên kiểu như phương thức, thuộc tính và bộ chỉ mục. Đóng gói giúp bạn giảm sự ghép nối giữa các đối tượng và tăng khả năng duy trì mã của bạn.
Câu hỏi Làm thế nào đóng gói sẽ giúp khi thực hiện các thay đổi trong mã và từ các hiệu ứng gợn sóng của nó. Đối với một thành viên dữ liệu, nếu tôi thay đổi kiểu của nó từ int thành float, (ngay cả khi tôi phơi bày điều này bằng cách sử dụng thuộc tính), tôi sẽ cần thay đổi loại biến mà tôi đang sử dụng đã sử dụng mã này.
Vui lòng hướng dẫn cho tôi cách đóng gói sẽ giúp với những thay đổi như vậy.
Cảm ơn sự giúp đỡ và hướng dẫn này.