<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: An Nguyen</title>
    <description>The latest articles on DEV Community by An Nguyen (@an_nguyen_ad704927b49a31d).</description>
    <link>https://dev.to/an_nguyen_ad704927b49a31d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4201466%2F4290fb76-7ecf-40c1-ac28-5bca3097b235.png</url>
      <title>DEV Community: An Nguyen</title>
      <link>https://dev.to/an_nguyen_ad704927b49a31d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/an_nguyen_ad704927b49a31d"/>
    <language>en</language>
    <item>
      <title>Giải thích OOP theo phong các truyện kiếm hiệp Kim Dung</title>
      <dc:creator>An Nguyen</dc:creator>
      <pubDate>Fri, 23 Oct 2026 08:21:46 +0000</pubDate>
      <link>https://dev.to/an_nguyen_ad704927b49a31d/giai-thich-oop-theo-phong-cac-truyen-kiem-hiep-kim-dung-2kd0</link>
      <guid>https://dev.to/an_nguyen_ad704927b49a31d/giai-thich-oop-theo-phong-cac-truyen-kiem-hiep-kim-dung-2kd0</guid>
      <description>&lt;p&gt;Ta thử tưởng tượng đang xây dựng m``ột hệ thống quản lý Võ Lâm Giang Hồ dựa trên truyện kiếm hiệp của Kim Dung.&lt;/p&gt;

&lt;p&gt;Trong hệ thống này, các nhân vật như Quách Tĩnh, Dương Quá, Trương Vô Kỵ đều là những Object, được tạo ra từ các Class.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inheritance – Tính kế thừa
Ý nghĩa: Class con có thể kế thừa thuộc tính và phương thức từ class cha, đồng thời bổ sung hoặc tùy chỉnh hành vi riêng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ: Trong võ lâm, tất cả cao thủ đều có tên, nội lực và khả năng thi triển võ công.&lt;/p&gt;

&lt;p&gt;`class CaoThu {&lt;br&gt;
    String ten;&lt;br&gt;
    int noiLuc;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void tanCong() {
    System.out.println("Thi triển võ công");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;class QuachTinh extends CaoThu {&lt;br&gt;
    void hangLongThapBatChuong() {&lt;br&gt;
        System.out.println("Hàng Long Thập Bát Chưởng");&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;QuachTinh qt = new QuachTinh();&lt;br&gt;
qt.ten = "Quách Tĩnh";&lt;br&gt;
qt.tanCong();                 // Kế thừa&lt;br&gt;
qt.hangLongThapBatChuong();   // Riêng`&lt;/p&gt;

&lt;p&gt;Ghi nhớ: Cha có gì, con được thừa hưởng cái đó (theo phạm vi truy cập cho phép), và có thể phát triển thêm.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Encapsulation – Tính đóng gói
Ý nghĩa: Che giấu dữ liệu bên trong Object, chỉ cho phép truy cập hoặc thay đổi thông qua những phương thức được kiểm soát.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ: Trương Vô Kỵ luyện Cửu Dương Thần Công, sở hữu nội lực rất mạnh.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, người ngoài không thể tùy tiện thay đổi nội lực của Trương Vô Kỵ từ 1.000 thành 1.000.000. Muốn tăng nội lực phải thông qua quá trình luyện công.&lt;/p&gt;

&lt;p&gt;`class TruongVoKy {&lt;br&gt;
    private int noiLuc = 1000;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public void luyenCong() {
    noiLuc += 100;
}

public int getNoiLuc() {
    return noiLuc;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;TruongVoKy tvk = new TruongVoKy();&lt;/p&gt;

&lt;p&gt;tvk.noiLuc = 999999; // ❌ Không được phép&lt;/p&gt;

&lt;p&gt;tvk.luyenCong();     // ✅ Tăng nội lực&lt;br&gt;
tvk.getNoiLuc();     // 1100`&lt;/p&gt;

&lt;p&gt;Ở đây:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;private: Bảo vệ nội lực, không cho bên ngoài sửa trực tiếp.&lt;/li&gt;
&lt;li&gt;public: Cung cấp cách tương tác hợp lệ.&lt;/li&gt;
&lt;li&gt;luyenCong(): Kiểm soát quy tắc tăng nội lực.
Ghi nhớ: Không cho người ngoài tùy tiện thay đổi trạng thái bên trong Object, mà phải thông qua các phương thức được cho phép.&lt;/li&gt;
&lt;li&gt;Polymorphism – Tính đa hình
Ý nghĩa: Cùng một phương thức hoặc lời gọi, nhưng các Object khác nhau có thể thực hiện những hành vi khác nhau.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ: Khi ra lệnh tanCong(), mỗi cao thủ sẽ thi triển một loại võ công riêng.&lt;/p&gt;

&lt;p&gt;`class CaoThu {&lt;br&gt;
    void tanCong() {&lt;br&gt;
        System.out.println("Tấn công");&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class QuachTinh extends CaoThu {&lt;br&gt;
    &lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
    void tanCong() {&lt;br&gt;
        System.out.println("Hàng Long Thập Bát Chưởng");&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class DuongQua extends CaoThu {&lt;br&gt;
    &lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
    void tanCong() {&lt;br&gt;
        System.out.println("Ám Nhiên Tiêu Hồn Chưởng");&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Điểm thú vị nằm ở đây:&lt;br&gt;
CaoThu a = new QuachTinh();&lt;br&gt;
CaoThu b = new DuongQua();&lt;/p&gt;

&lt;p&gt;a.tanCong(); // Hàng Long Thập Bát Chưởng&lt;br&gt;
b.tanCong(); // Ám Nhiên Tiêu Hồn Chưởng`&lt;/p&gt;

&lt;p&gt;Mặc dù cả hai biến đều có kiểu CaoThu, nhưng chương trình tự xác định phương thức cần thực thi dựa trên Object thực tế.&lt;br&gt;
tanCong()&lt;/p&gt;

&lt;p&gt;Cùng một lời gọi phương thức&lt;/p&gt;

&lt;p&gt;Quách Tĩnh&lt;/p&gt;

&lt;p&gt;Hàng Long Thập Bát Chưởng&lt;/p&gt;

&lt;p&gt;Dương Quá&lt;/p&gt;

&lt;p&gt;Ám Nhiên Tiêu Hồn Chưởng&lt;/p&gt;

&lt;p&gt;Ghi nhớ: Cùng một hành động, mỗi đối tượng có thể thực hiện theo cách khác nhau.&lt;/p&gt;

&lt;p&gt;Lưu ý: Override là một cơ chế giúp thực hiện đa hình, nhưng đa hình không chỉ có override.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abstraction – Tính trừu tượng
Ý nghĩa: Chỉ thể hiện những hành vi cần thiết của một đối tượng, che giấu chi tiết triển khai bên trong.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ: Võ lâm có quy định rằng một cao thủ phải biết tanCong() và phongThu().&lt;/p&gt;

&lt;p&gt;Nhưng hệ thống không cần biết Quách Tĩnh vận khí như thế nào để thi triển Hàng Long Thập Bát Chưởng, hay Dương Quá sử dụng nội lực ra sao.&lt;/p&gt;

&lt;p&gt;Ta chỉ cần định nghĩa một contract chung.&lt;br&gt;
`&lt;br&gt;
interface VoCong {&lt;br&gt;
    void tanCong();&lt;br&gt;
    void phongThu();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class QuachTinh implements VoCong {&lt;br&gt;
    public void tanCong() {&lt;br&gt;
        System.out.println("Hàng Long Thập Bát Chưởng");&lt;br&gt;
    }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public void phongThu() {
    System.out.println("Vận Cửu Âm Chân Kinh");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Khi sử dụng:&lt;br&gt;
VoCong caoThu = new QuachTinh();&lt;/p&gt;

&lt;p&gt;caoThu.tanCong();&lt;br&gt;
caoThu.phongThu();&lt;br&gt;
`&lt;br&gt;
Code bên ngoài chỉ cần biết VoCong cung cấp hai phương thức, không cần quan tâm cách Quách Tĩnh thực hiện chúng.&lt;/p&gt;

&lt;p&gt;Ghi nhớ: Quan tâm đối tượng có thể làm gì, không cần biết chi tiết nó thực hiện như thế nào.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Phân biệt nhanh 4 nguyên lý OOP&lt;br&gt;
Nguyên lý Câu hỏi cần nhớ  Ví dụ kiếm hiệp&lt;br&gt;
Inheritance Kế thừa từ ai?    Quách Tĩnh kế thừa đặc điểm của CaoThu&lt;br&gt;
Encapsulation   Bảo vệ cái gì?    Nội lực không được sửa tùy tiện&lt;br&gt;
Polymorphism    Cùng hành động, khác cách thực hiện? Mỗi cao thủ có chiêu tấn công riêng&lt;br&gt;
Abstraction Cần biết làm gì, không cần biết cách làm?  Chỉ cần biết cao thủ có thể tấn công và phòng thủ&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hai nguyên lý dễ nhầm nhất: Encapsulation và Abstraction&lt;br&gt;
Cả hai đều có yếu tố che giấu, nhưng mục đích khác nhau.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Encapsulation (Đóng gói):&lt;br&gt;
Nội lực của Trương Vô Kỵ là bí mật. Muốn tăng nội lực phải luyện công, không thể tùy tiện thay đổi.&lt;/p&gt;

&lt;p&gt;Trọng tâm là bảo vệ trạng thái và kiểm soát quyền truy cập.&lt;/p&gt;

&lt;p&gt;Abstraction (Trừu tượng):&lt;br&gt;
Trương Vô Kỵ có thể thi triển Càn Khôn Đại Na Di. Người sử dụng chỉ cần gọi chiêu thức, không cần hiểu cách vận hành nội công.&lt;/p&gt;

&lt;p&gt;Trọng tâm là ẩn sự phức tạp và cung cấp giao diện sử dụng đơn giản.&lt;br&gt;
Tóm tắt để ghi nhớ khi phỏng vấn&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inheritance: Reuse and extend behavior from a parent class.&lt;/li&gt;
&lt;li&gt;Encapsulation: Protect internal state through controlled access.&lt;/li&gt;
&lt;li&gt;Polymorphism: Same interface, different implementations.&lt;/li&gt;
&lt;li&gt;Abstraction: Hide implementation details and expose essential behaviors.
Một điểm quan trọng trong thiết kế phần mềm thực tế: OOP không có nghĩa là phải sử dụng Inheritance ở mọi nơi. Trong nhiều trường hợp, Composition kết hợp với Interface sẽ giúp code linh hoạt và dễ bảo trì hơn.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>oop</category>
    </item>
  </channel>
</rss>
