Trang chủ > Uncategorized > Getter/setter

Getter/setter

Ngày xưa khi học C++ hay được dạy phải để field của object là private, sau đó tạo hai method public là get…() và set…(…) để truy cập và thay đổi các field này. Nhưng không ai dặn mình phải dùng nó một cách cẩn thận. Có quá nhiều lí do để get/set là dấu hiệu của một thiết kế yếu kém.

Thường thì chúng ta get một field để lấy thông tin của đối tượng, và thao tác trên thông tin đó. Vấn đề là tại sao phải trực tiếp làm việc trên thông tin này. Xét cho cùng, đối tượng là một thực thể mà tất cả những gì bên ngoài (nên) được biết về nó là các “dịch vụ” mà nó cung cấp. Cho nên, thay vì lấy thông tin từ đối tượng để thực hiện một công việc, hãy bảo đối tượng này làm nó cho chúng ta. Nếu điều này là không thể, thì có vẻ như thiết kế của chương trình có vấn đề, các đối tượng đã không được xây dựng để làm các công việc của nó một cách tách bạch, rõ ràng. Và khi sự coupling giữa các đối tượng càng cao, việc bảo trì và mở rộng trong tương lai sẽ càng khó khăn, phức tạp.

Mặt khác, khi get hay set một field nào đó, thường chúng ta đã có giả định về kiểu và ý nghĩa của nó. Nói cách khác, chúng ta đã có hiểu biết nhất định về hiện thực bên trong của đối tượng. Có điều, hiện thực của một đối tượng không phải là một bất biến. Khó có thể đảm bảo trong tương lai, khi đối tượng được xây dựng lại, các private field đó sẽ giữ nguyên kiểu và ý nghĩa như hôm nay, thậm chí nó có thể không tồn tại nữa. Hệ quả là, những đoạn mã có sử dụng get/set cũng trở nên vô dụng. Điều đó đồng nghĩa với việc không đạt được tính dễ bảo trì và mở rộng—mục tiêu mà lập trình hướng đối tượng hướng tới.

Tất nhiên, nói như thế không có nghĩa là chúng ta phải tránh xa get/set. Get/set sẽ tồn tại nếu chúng thực sự là những “dịch vụ” cần thiết, và không phụ thuộc và thay đổi của bất kì cách hiện thực nào của đối tượng. Nhưng lúc đó thì get/set lại không hẳn liên quan đến cái get/set người ta hay dạy cho học sinh nữa.

  1. Khách
    Tháng Mười Hai 2, 2012 lúc 1:40 sáng

    hay qua

  2. Tháng Mười Một 27, 2013 lúc 9:12 chiều

    Bạn đưa ra ví dụ nữa thì hay

  1. No trackbacks yet.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: