Tính đóng gói (encapsulation) của Java – giải thích siêu chi tiết

Tính đóng gói (encapsulation) của Java – giải thích siêu chi tiết
4 Tháng Chín 2024 - 12:54 sáng
155
155
Với người mới học Java, việc nhắc đến các đặc tính hướng đối tượng như trên sẽ khiến các bạn bối rối. Nhưng đây chỉ là trạng thái ban đầu... và sau khi trải qua code vài project, bạn sẽ hiểu rõ các đặc tính này và biết khi nào nên sử dụng chúng.

<p>Tứ trụ l&agrave;m điểm nhấn cho ng&ocirc;n ngữ lập tr&igrave;nh hướng đối tượng Java l&agrave; 4 đặc t&iacute;nh: trừu tượng (abstraction), đ&oacute;ng g&oacute;i (encapsulation), đa h&igrave;nh (polymorphism) v&agrave; kế thừa (inheritance).</p>

<p>Với người mới học Java, việc nhắc đến c&aacute;c đặc t&iacute;nh hướng đối tượng như tr&ecirc;n sẽ khiến c&aacute;c bạn bối rối. Nhưng đ&acirc;y chỉ l&agrave; trạng th&aacute;i ban đầu… v&agrave; sau khi trải qua code v&agrave;i project, bạn sẽ hiểu r&otilde; c&aacute;c đặc t&iacute;nh n&agrave;y v&agrave; biết khi n&agrave;o n&ecirc;n sử dụng ch&uacute;ng.</p>

<p>H&atilde;y xem đoạn code v&iacute; dụ dưới đ&acirc;y:</p>

<pre>

<code class=”language-java”>1.

class Person{ // Trường hợp này sẽ ẩn đi các biến trung gian

private int age;

private String name;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

2.

private void swap(int[]arr,int m, int n){ // Trường hợp này là ẩn một hàm

int temp=arr[m];

arr[m]=arr[n];

arr[n]=temp;

}

3.

public class JavaTest {

public static void main(String[] args) {

Person p1=Person.getPersonInstance();

}

}

class Person{ // Trường hợp này thiết lập thuộc tính chỉ đọc và ẩn đi thuộc tính ghi

private Person(){}

public static Person getPersonInstance(){

return new Person();

}

}

</code></pre>

<h2>T&iacute;nh đ&oacute;ng g&oacute;i (encapsulation) l&agrave; g&igrave; v&agrave; khi n&agrave;o n&ecirc;n sử dụng?</h2>

<blockquote>

<p>Định nghĩa đơn giản thế n&agrave;y: Trong một class, việc ch&uacute;ng ta ẩn đi (khai b&aacute;o <em>private, </em><em>protected</em>) cho c&aacute;c thuộc t&iacute;nh v&agrave; thay v&agrave;o đ&oacute; chỉ cho sử dụng&nbsp;c&ocirc;ng khai (khai b&aacute;o <em>public</em>) c&aacute;c phương thức.&nbsp;</p>

</blockquote>

<h3>C&aacute;c coder thường sử dụng nguy&ecirc;n tắc đ&oacute;ng g&oacute;i trong c&aacute;c trường hợp như sau:</h3>

<p><strong>Muốn l&agrave;m gọn một class: </strong>Nếu như bạn lu&ocirc;n khai b&aacute;o public cho tất cả c&aacute;c biến, thuộc t&iacute;nh, phương thức, h&agrave;m&hellip; th&igrave; khi cần sử dụng một class sẽ c&oacute; rất nhiều đối tượng kh&ocirc;ng cần thiết phải hiển thị.</p>

<p><strong>Muốn ẩn đi sự phước tạp của c&aacute;c đối tượng:</strong> Nếu như bạn l&agrave; một người lập tr&igrave;nh thư viện v&agrave; sau khi ho&agrave;n th&agrave;nh sẽ b&agrave;n giao thư viện n&agrave;y để cho c&aacute;c bộ phận kh&aacute;c. Việc ẩn đi c&aacute;c thuộc t&iacute;nh, phương thức, h&agrave;m&hellip;phức tạp, dễ g&acirc;y xung đột sẽ tạo độ an to&agrave;n nhất định cho c&aacute;c đoạn code.</p>

<p><strong>Muốn đơn giản h&oacute;a việc thiết lập gi&aacute; trị cho c&aacute;c biến, phương thức:</strong> Thay v&igrave; lần lượt thiết lập một t&aacute; c&aacute;c gi&aacute; trị cho một class. V&iacute; dụ như: thanhpho = &ldquo;Hồ Ch&iacute; Minh&rdquo;; quan = &ldquo;B&igrave;nh Thạnh&rdquo;; Phuong = &ldquo;22&rdquo;&hellip; Nhưng khi sử dụng nguy&ecirc;n tắc đ&oacute;ng g&oacute;i, ch&uacute;ng ta chỉ cần thiết lập đơn giản như sau: DiaChi(&ldquo;Hồ Ch&iacute; Minh&rdquo;, &ldquo;B&igrave;nh Thạnh&rdquo;, &ldquo;22&rdquo;) ;.</p>

<p><strong>Muốn ngăn chặn việc khai th&aacute;c tr&aacute;i ph&eacute;p c&aacute;c thư viện:</strong> Ngo&agrave;i ra, c&aacute;c c&aacute;c thuộc t&iacute;nh, phương thức, h&agrave;m&hellip; m&agrave; nguy cơ g&acirc;y ảnh hưởng ti&ecirc;u cực đến dữ liệu l&agrave; lớn, c&oacute; nguy cơ g&acirc;y sụp đổ hệ thống th&igrave; việc sử dụng nguy&ecirc;n tắc đ&oacute;ng g&oacute;i sẽ l&agrave;m cho project đạt được mức độ bảo mật v&agrave; an to&agrave;n cao.</p>

<h2>&nbsp;3 trường hợp sử dụng nguy&ecirc;n tắc đ&oacute;ng g&oacute;i</h2>

<p><strong>Đ&oacute;ng g&oacute;i c&aacute;c thuộc t&iacute;nh:</strong> Thiết lập (private) cho c&aacute;c biến th&agrave;nh vi&ecirc;n cần ẩn đi v&agrave; c&aacute;c biến cần c&ocirc;ng khai (public).</p>

<p><strong>Đ&oacute;ng g&oacute;i phương thức: </strong>Một số phương thức được thiết lập private để sử dụng trong nội bộ lớp v&agrave; kh&ocirc;ng cần c&ocirc;ng khai.</p>

<p><strong>Đ&oacute;ng g&oacute;i h&agrave;m:</strong> Thiết lập private để ngăn chặn c&aacute;c lớp kh&aacute;c truy cập v&agrave;o, ph&ograve;ng ngừa xung đột code.</p>

<h2>Lợi &iacute;ch của việc sử dụng nguy&ecirc;n tắc đ&oacute;ng g&oacute;i</h2>

<p>Quy tr&igrave;nh v&agrave; hệ thống h&oacute;a c&ocirc;ng t&aacute;c truy cập dữ liệu, đảm bảo t&iacute;nh thống nhất cho to&agrave;n bộ project.</p>

<p>Ẩn đi c&aacute;c chi tiết c&aacute;ch triển khai, khai th&aacute;c dữ liệu nhạy cảm.</p>

<p>Gi&uacute;p dễ d&agrave;ng sửa đổi v&agrave; bảo tr&igrave; code.</p>

Nguyễn Văn Hiến

Tôi là Nguyễn Văn Hiến, Founder của Tummosoft. Tôi có hơn 20 năm lập trình, vào thời điểm máy vi tính còn là tài sản quý giá của người giàu. Nhưng sức đam mê công nghệ của tôi đã giúp tôi vượt qua những khó khăn và theo đuổi nghề lập trình. Đối với tôi, sáng tạo các sản phẩm công nghệ bằng ngôn ngữ cũng giống như người nghệ sĩ sáng tác những họa phẩm.

Bài viết liên quan

    Tính đóng gói (encapsulation) của Java – giải thích siêu chi tiết