Lí thuyết OOP

0.0(0)
Studied by 0 people
call kaiCall Kai
Locked
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
GameKnowt Play
Card Sorting

1/30

encourage image

There's no tags or description

Looks like no tags are added yet.

Last updated 3:48 AM on 6/19/26
Name
Mastery
Learn
Test
Matching
Spaced
Call with Kai
Chat

No analytics yet

Send a link to your students to track their progress

31 Terms

1
New cards

Abstract Class vs Interface (Khi nào dùng)

Abstract Class đại diện cho bản chất đối tượng (Is-A), dùng khi các lớp con chung chủng loại và cần chia sẻ code logic. Interface đại diện cho khả năng/bản hợp đồng hành vi (Can-Do), dùng cho các lớp không liên quan nhưng chung hành vi để tạo Loose Coupling. Một Class chỉ kế thừa được 1 Abstract Class nhưng implement được nhiều Interface.

Abstract class có thể lưu giữ trạng thái, có kế thừa thuộc tính còn interface thì ko

2
New cards

Overloading vs Overriding (Thời điểm xảy ra)

Overloading (Nạp chồng) là các hàm cùng tên khác tham số trong cùng một Class, quyết định ở Compile-time (Static Binding). Overriding (Ghi đè) là lớp con viết lại hàm của lớp cha (cùng tên, tham số, kiểu trả về), được quyết định ở Runtime (Dynamic Binding) và là biểu hiện rõ nhất của tính Đa hình.

3
New cards

Composition hơn Inheritance (Tại sao ưu tiên)

Inheritance tạo liên kết quá chặt chẽ (Tight Coupling), dễ lỗi dây chuyền (Fragile Base Class) và phơi bày chi tiết lớp cha. Composition tạo mối quan hệ lỏng lẻo (Has-A) bằng cách nhét đối tượng làm thuộc tính, giúp code linh hoạt, dễ tráo đổi cấu phần ở Runtime và dễ viết Unit Test (Mocking).

4
New cards

Diamond Problem

Lỗi xảy ra trong đa kế thừa khi lớp D kế thừa từ cả B và C, mà B và C lại cùng kế thừa và ghi đè một hàm của lớp A. Khi D gọi hàm đó, máy tính không biết chọn logic của B hay C. Java/C# giải quyết bằng cách cấm đa kế thừa class, chỉ cho đa kế thừa Interface.

5
New cards

Lạm dụng Getter/Setter vô tội vạ

Hành vi vi phạm tính đóng gói (Encapsulation) bằng cách biến thuộc tính private thành một dạng "global variable trá hình", ai cũng truy cập được, phơi bày cấu trúc bên trong và vi phạm quy tắc "Tell, Don't Ask". Đúng chuẩn là phải viết hàm nghiệp vụ ngay trong Class để nó tự xử lý dữ liệu của chính nó.

6
New cards

Từ khóa Static và tính Đa hình

Static định nghĩa thuộc tính/phương thức thuộc về cấp độ Lớp (Class) chứ không phải thực thể (Instance). Hàm static KHÔNG THỂ bị Override (ghi đè) vì nó sử dụng static binding ở compile-time; nếu viết trùng tên ở lớp con thì đó là Method Hiding (Ẩn hàm) chứ không phải Đa hình.

7
New cards

Immutable Object (Cách tạo và Ứng dụng)

Đối tượng không thể bị thay đổi trạng thái dữ liệu sau khi khởi tạo a(như String). Cách tạo: class final, thuộc tính private final, không viết Setter, gán qua Constructor. Ứng dụng thực tế lớn nhất là đảm bảo an toàn đa luồng (Thread-safe) mà không cần dùng cơ chế khóa (Lock) phức tạp.

8
New cards

Open/Closed Principle ứng dụng qua Đa hình

Nguyên lý yêu cầu hệ thống đóng với việc sửa đổi code cũ nhưng mở với việc mở rộng tính năng mới. Tính đa hình thực hiện điều này bằng cách cho class chính tương tác qua Interface; khi có chức năng mới, chỉ cần tạo Class mới thực thi Interface đó mà không cần sửa code cũ đang chạy ổn định.

9
New cards

Upcasting vs Downcasting (Nguy cơ)

Upcasting là chuyển kiểu từ con lên cha (tự động, luôn an toàn). Downcasting là ép kiểu ngược từ cha xuống con (thủ công, không an toàn). Nguy cơ lớn nhất của Downcasting là gây sập ứng dụng lúc runtime (ClassCastException) nếu vùng nhớ không đúng kiểu, cần dùng từ khóa kiểm tra (instanceof, is/as) trước khi ép.

10
New cards
Lập trình hướng đối tượng (OOP)
Phương pháp lập trình phân rã hệ thống thành các thực thể độc lập gọi là đối tượng (Object), giúp mô hình hóa các bài toán nghiệp vụ phức tạp ngoài đời thực vào mã nguồn một cách tự nhiên và mạch lạc.
11
New cards
Tính đóng gói (Encapsulation)
Việc gom dữ liệu và các hàm liên quan vào một Class, đồng thời che giấu trạng thái nội bộ bằng access modifier (private); giúp bảo vệ tính toàn vẹn của dữ liệu và ngăn chặn việc các module khác can thiệp hoặc sửa đổi ngoài ý muốn.
12
New cards
Tính kế thừa (Inheritance)
Cơ chế cho phép một lớp con tái sử dụng toàn bộ thuộc tính và phương thức của lớp cha; giải quyết triệt để vấn đề trùng lặp mã nguồn (Code Duplication) và giúp việc mở rộng hệ thống trở nên nhanh chóng hơn.
13
New cards
Tính đa hình (Polymorphism)
Khả năng các đối tượng khác nhau phản hồi cùng một phương thức theo những cách riêng biệt; giúp loại bỏ các cấu trúc rẽ nhánh if-else hoặc switch-case phức tạp khi hệ thống cần xử lý nhiều loại đối tượng có hành vi tương tự.
14
New cards
Tính trừu tượng (Abstraction)
Việc ẩn đi các chi tiết cài đặt phức tạp bên dưới và chỉ cung cấp các giao diện cốt lõi thông qua Abstract Class hoặc Interface; giúp giảm tải nhận thức cho lập trình viên bằng cách tập trung vào việc "lớp này làm gì" thay vì "làm như thế nào".
15
New cards
Interface (Giao diện quy ước)
Một bản hợp đồng quy ước các hành vi mà lớp thực thi bắt buộc phải có; giúp tạo ra sự liên kết lỏng lẻo (Loose Coupling), cho phép nhiều lập trình viên phát triển song song các module độc lập mà không bị phụ thuộc chéo.
16
New cards
Spaghetti Code (Mã nguồn rối rắm)
Tình trạng code đan xen chằng chịt và thiếu cấu trúc rõ ràng trong lập trình tuyến tính; OOP giải quyết triệt để vấn đề này bằng cách chia nhỏ hệ thống thành các đối tượng có ranh giới và trách nhiệm cụ thể.
17
New cards
Biến toàn cục (Global Variables)
Tác nhân nguy hiểm khiến dữ liệu bị thay đổi ngoài ý muốn từ bất kỳ hàm nào trong hệ thống; OOP giải quyết bằng cách đưa các biến này vào bên trong Class (Encapsulation) để kiểm soát quyền truy cập chặt chẽ.
18
New cards
Khả năng bảo trì (Maintainability)
Lợi ích thực tế lớn nhất của OOP; cho phép chỉnh sửa logic bên trong một đối tượng hoặc thêm tính năng mới thông qua kế thừa mà không làm ảnh hưởng hay gây lỗi cho các vùng code cũ đang chạy ổn định.
19
New cards
20
New cards
Delegate (Ủy quyền trong lập trình)
Một kiểu dữ liệu đặc biệt dùng để đóng gói và lưu trữ một hoặc nhiều phương thức dưới dạng một biến (Type-safe function pointer); giải quyết bài toán làm Callback (gọi ngược), xử lý sự kiện (Event Click/Touch) và giúp truyền hàm làm tham số cho một hàm khác nhằm giảm độ phụ thuộc giữa các module (Decoupling).
21
New cards
Biểu diễn Class trong UML
Quy ước biểu diễn một lớp (Class) trong biểu đồ UML bằng một hình hộp gồm đúng 3 ngăn (Tên lớp, Thuộc tính/Dữ liệu, và Phương thức/Hành vi).
22
New cards
Thành phần KHÔNG được kế thừa
Khi một lớp con kế thừa từ lớp cha, nó được thừa hưởng các thuộc tính và phương thức thuộc phạm vi public/protected nhưng hoàn toàn không kế thừa Hàm tạo (Constructor) và Hàm hủy (Destructor) của lớp cha.
23
New cards
Số lượng hàm hủy (Destructor) tối đa
Trong cấu trúc thiết kế của một lớp đối tượng, hệ thống quy định chỉ được phép có duy nhất một hàm hủy.
24
New cards
Cách truy cập thành viên tĩnh (Static member)
Thành viên tĩnh (static) là thành phần dùng chung cho tất cả các đối tượng và không thuộc về riêng thực thể nào; vì vậy ta bắt buộc phải truy cập nó thông qua Tên lớp chứ không phải qua tên của một đối tượng cụ thể.
25
New cards
Mối quan hệ Lớp bao (Composition / Has-A)
Mối quan hệ xảy ra khi một lớp chứa thuộc tính là thực thể của một lớp khác (Ví dụ: lớp Tam giác chứa các đối tượng thuộc lớp Điểm); lớp chứa được gọi là lớp bao của lớp thành phần.
26
New cards
Hàm mà bất kỳ Class nào cũng có
Bất kỳ một lớp đối tượng nào khi định nghĩa cũng đều sở hữu Hàm tạo (Constructor) để phục vụ việc khởi tạo đối tượng và cấp phát bộ nhớ.
27
New cards
Giới hạn truy xuất của thành phần Private
Thành phần private của lớp cha chỉ cho phép các phương thức bên trong chính lớp đó truy xuất; lớp con dù kế thừa lớp cha cũng không có quyền truy cập trực tiếp vào các thành phần private này.
28
New cards
Bản chất phương thức trong Interface
Interface (giao diện quy ước) là một thành phần đặc biệt mà bên trong nó hoàn toàn không được phép cài đặt phần thân của các phương thức.
29
New cards
Điều kiện để lớp con ghi đè (Override)
Để một lớp dẫn xuất có thể ghi đè và cài đặt lại một phương thức trùng tên từ lớp cơ sở, phương thức đó ở lớp cha bắt buộc phải được khai báo ở dạng cho phép ghi đè (như phương thức ảo - virtual hoặc phương thức trừu tượng - abstract).
30
New cards
Giới hạn truy xuất Protected
Phạm vi không cho phép môi trường bên ngoài truy xuất trực tiếp, nhưng cho phép các phương thức bên trong cùng một lớp và các lớp con kế thừa từ nó được quyền truy xuất
31
New cards
Giới hạn truy xuất Public
Phạm vi mở hoàn toàn, không giới hạn quyền truy cập, cho phép truy xuất công khai từ cả bên trong lớp, bên ngoài lớp và từ các lớp kế thừa