Skip to content
Phần mềm trọn đời

Blog Cá Nhân | Kiến Thức Công Nghệ | Thủ Thuật

  • Trang chủ
    • Về chúng tôi
    • Bản quyền & Khiếu nại
    • Miễn trừ trách nhiệm
    • Quy định sử dụng
  • Kiến thức
  • Windows
  • Office
  • Game
  • Thủ thuật công nghệ
  • Hình ảnh
  • Trắc nghiệm
    • Đáp án Quiz
    • Phát triển Phần mềm và Dữ liệu Quiz
    • Hạ tầng Mạng và Quản trị Hệ thống Quiz
  • Liên hệ
  • Sitemap
  • Or check our Popular Categories...
    01680168 đổi thành đầu số gì0x0 0x01 vạn bằng bao nhiêu km1 vạn là bao nhiêu100% Full disk14/414/4 là ngày gì14/4 là ngày gì ai tặng quà cho ai
  • Trang chủ
    • Về chúng tôi
    • Bản quyền & Khiếu nại
    • Miễn trừ trách nhiệm
    • Quy định sử dụng
  • Kiến thức
  • Windows
  • Office
  • Game
  • Thủ thuật công nghệ
  • Hình ảnh
  • Trắc nghiệm
    • Đáp án Quiz
    • Phát triển Phần mềm và Dữ liệu Quiz
    • Hạ tầng Mạng và Quản trị Hệ thống Quiz
  • Liên hệ
  • Sitemap
Phần mềm trọn đời

Blog Cá Nhân | Kiến Thức Công Nghệ | Thủ Thuật

  • Or check our Popular Categories...
    01680168 đổi thành đầu số gì0x0 0x01 vạn bằng bao nhiêu km1 vạn là bao nhiêu100% Full disk14/414/4 là ngày gì14/4 là ngày gì ai tặng quà cho ai
Trang chủ » Trắc nghiệm online » Phát triển Phần mềm và Dữ liệu Quiz » 200+ câu hỏi trắc nghiệm Lập trình hướng đối tượng (Có đáp án)

Phát triển Phần mềm và Dữ liệu Quiz

200+ câu hỏi trắc nghiệm Lập trình hướng đối tượng (Có đáp án)

Ngày cập nhật: 12/07/2025

⚠️ Vui lòng đọc kỹ phần lưu ý và tuyên bố miễn trừ trách nhiệm trước khi bắt đầu: Bộ câu hỏi và đáp án trong bài trắc nghiệm này chỉ mang tính chất tham khảo, nhằm hỗ trợ quá trình học tập và ôn luyện. Đây KHÔNG PHẢI là đề thi chính thức và không đại diện cho bất kỳ tài liệu chuẩn hóa hay kỳ thi cấp chứng chỉ nào từ các cơ quan giáo dục hoặc tổ chức cấp chứng chỉ chuyên ngành. Website không chịu trách nhiệm về tính chính xác của nội dung cũng như bất kỳ quyết định nào được đưa ra dựa trên kết quả từ bài trắc nghiệm.

Đồng hành cùng bạn trong bộ 200+ câu hỏi trắc nghiệm Lập trình hướng đối tượng (Có đáp án). Bạn sẽ tham gia vào chuỗi câu hỏi được chọn lọc cẩn thận, giúp bạn củng cố lại kiến thức đã học. Vui lòng nhấn vào phần câu hỏi bên dưới để khởi động quá trình ôn tập của mình. Chúc bạn trải nghiệm làm bài thật vui và học thêm được nhiều điều thú vị!.

1. Trong OOP, khái niệm nào liên quan đến việc một đối tượng có thể có hành vi khác nhau khi thực hiện cùng một phương thức?

A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Đa hình (Polymorphism)
D. Trừu tượng hóa (Abstraction)

2. Trong OOP, một ‘abstract method’ (phương thức trừu tượng) là gì?

A. Một phương thức có thân đầy đủ các câu lệnh thực thi.
B. Một phương thức chỉ có khai báo, không có thân, và phải được định nghĩa lại bởi lớp con hoặc lớp triển khai.
C. Một phương thức chỉ có thể được gọi bởi các phương thức tĩnh.
D. Một phương thức được đánh dấu là ‘final’ để không thể bị ghi đè.

3. Đâu là một đặc điểm của ‘inheritance’ (kế thừa) trong OOP?

A. Nó cho phép một lớp có nhiều tên gọi khác nhau.
B. Nó cho phép một lớp con kế thừa thuộc tính và phương thức từ lớp cha, tạo ra mối quan hệ ‘is-a’.
C. Nó cho phép các đối tượng cùng loại có hành vi khác nhau.
D. Nó che giấu hoàn toàn các chi tiết bên trong của lớp cha.

4. Trong OOP, ‘encapsulation’ (đóng gói) giúp bảo vệ dữ liệu bằng cách nào?

A. Bằng cách làm cho tất cả các thuộc tính của lớp trở nên công khai (public).
B. Bằng cách sử dụng các bộ truy cập (access modifiers) như ‘private’ để hạn chế quyền truy cập trực tiếp từ bên ngoài lớp.
C. Bằng cách kế thừa tất cả các thuộc tính từ lớp cha.
D. Bằng cách sử dụng đa hình để thay đổi hành vi của dữ liệu.

5. Khái niệm ‘Đa hình’ (Polymorphism) trong OOP cho phép điều gì?

A. Một lớp có thể kế thừa từ nhiều lớp khác nhau.
B. Các đối tượng thuộc các lớp khác nhau có thể phản ứng với cùng một thông điệp (lời gọi phương thức) theo cách riêng của chúng.
C. Dữ liệu và phương thức được đóng gói chặt chẽ bên trong một lớp.
D. Chỉ có một thể hiện duy nhất của một lớp được tạo ra trong toàn bộ chương trình.

6. Trong OOP, ‘method overriding’ (ghi đè phương thức) khác với ‘method overloading’ (quá tải phương thức) ở điểm nào?

A. Method overriding xảy ra trong cùng một lớp, còn method overloading xảy ra giữa lớp cha và lớp con.
B. Method overriding yêu cầu các phương thức có tên và danh sách tham số giống hệt nhau giữa lớp cha và lớp con, còn method overloading yêu cầu tên giống nhưng danh sách tham số khác nhau trong cùng một lớp.
C. Method overriding cho phép nhiều phương thức cùng tên với các kiểu trả về khác nhau, còn method overloading chỉ cho phép một phương thức cùng tên.
D. Method overriding là về đa hình, còn method overloading là về đóng gói.

7. Khái niệm ‘cohesion’ (sự gắn kết) trong OOP đề cập đến điều gì?

A. Mức độ phụ thuộc giữa các lớp.
B. Mức độ liên quan và tập trung của các trách nhiệm trong một lớp hoặc module.
C. Khả năng một lớp được sử dụng lại trong các ngữ cảnh khác nhau.
D. Khả năng một đối tượng có nhiều hình dạng.

8. Khái niệm ‘composition’ (sở hữu/tập hợp) trong OOP khác với ‘inheritance’ (kế thừa) ở điểm nào?

A. Composition là mối quan hệ ‘is-a’ (là một), còn inheritance là mối quan hệ ‘has-a’ (có một).
B. Inheritance cho phép lớp con sử dụng lại mã từ lớp cha, còn composition cho phép một lớp sử dụng chức năng của một lớp khác bằng cách chứa một đối tượng của lớp đó như một thuộc tính.
C. Composition cho phép đa hình, còn inheritance không cho phép.
D. Lớp con trong inheritance không thể thay đổi hành vi của lớp cha, còn lớp chứa trong composition có thể thay đổi hành vi.

9. Chọn phát biểu ĐÚNG về ‘Đóng gói’ (Encapsulation) trong OOP.

A. Nó cho phép các lớp khác truy cập trực tiếp vào dữ liệu riêng tư của một lớp.
B. Nó kết hợp dữ liệu (thuộc tính) và phương thức xử lý dữ liệu đó vào một đơn vị duy nhất, đồng thời kiểm soát truy cập.
C. Nó cho phép một đối tượng có nhiều hình dạng khác nhau tùy thuộc vào ngữ cảnh.
D. Nó ẩn đi các chi tiết triển khai phức tạp và chỉ hiển thị những chức năng cần thiết.

10. Đâu là một ví dụ về ‘method overloading’ (quá tải phương thức) trong OOP?

A. Một lớp ‘Cong’ có hai phương thức cùng tên ‘tinhTong’ nhưng nhận vào các số lượng tham số khác nhau (ví dụ: ‘tinhTong(int a, int b)’ và ‘tinhTong(int a, int b, int c)’).
B. Một lớp ‘HinhTron’ kế thừa từ lớp ‘HinhHoc’ và định nghĩa lại phương thức ‘tinhDienTich’.
C. Một lớp ‘MayTinh’ có thuộc tính ‘manHinh’ và phương thức ‘batManHinh()’.
D. Một lớp ‘Oto’ có thể được coi là ‘PhuongTienGiaoThong’.

11. Trong OOP, ‘Trừu tượng hóa’ (Abstraction) tập trung vào điều gì?

A. Che giấu hoàn toàn các chi tiết triển khai của một đối tượng.
B. Hiển thị các đặc điểm và hành vi cần thiết của một đối tượng, đồng thời ẩn đi các chi tiết phức tạp không cần thiết.
C. Đảm bảo rằng một lớp chỉ có một thể hiện duy nhất.
D. Cho phép một lớp kế thừa các thuộc tính từ nhiều lớp cha.

12. Đâu là một ví dụ về ‘covariant return types’ (kiểu trả về đồng biến) trong OOP?

A. Một phương thức ghi đè có kiểu trả về khác với phương thức gốc.
B. Trong ghi đè phương thức, kiểu trả về của phương thức con có thể là một kiểu dẫn xuất (subclass) của kiểu trả về của phương thức cha.
C. Một phương thức tĩnh có kiểu trả về là một lớp trừu tượng.
D. Một phương thức có thể trả về nhiều kiểu dữ liệu khác nhau.

13. Trong các ngôn ngữ OOP hỗ trợ ‘kế thừa đa’ (multiple inheritance), điều gì có thể xảy ra nếu một lớp kế thừa thuộc tính ‘mauSac’ từ hai lớp cha khác nhau mà không có cơ chế xử lý xung đột?

A. Lớp con sẽ tự động chọn một trong hai giá trị ‘mauSac’.
B. Sẽ xảy ra lỗi biên dịch do xung đột tên thuộc tính (‘diamond problem’).
C. Lớp con sẽ có hai thuộc tính ‘mauSac’ riêng biệt.
D. Lớp con sẽ không thể kế thừa thuộc tính ‘mauSac’ từ bất kỳ lớp cha nào.

14. Tại sao việc sử dụng ‘private constructors’ (hàm tạo riêng tư) lại hữu ích trong OOP, ví dụ như trong mẫu thiết kế Singleton?

A. Để cho phép bất kỳ ai cũng có thể tạo ra nhiều đối tượng của lớp.
B. Để ngăn chặn việc khởi tạo đối tượng của lớp từ bên ngoài, đảm bảo rằng chỉ có một thể hiện duy nhất (Singleton) hoặc không có thể hiện nào (ví dụ: lớp tiện ích chỉ chứa phương thức static) được tạo ra.
C. Để tự động giải phóng bộ nhớ cho đối tượng khi không còn sử dụng.
D. Để đảm bảo tính đa hình cho các phương thức của lớp.

15. Nguyên tắc ‘O’ trong SOLID (Open/Closed Principle) phát biểu rằng các thực thể phần mềm (lớp, module, hàm, v.v.) nên:

A. Chỉ có thể được mở rộng bằng cách sửa đổi mã nguồn của chúng.
B. Nên mở cho việc mở rộng nhưng đóng cho việc sửa đổi.
C. Nên được đóng hoàn toàn và không thể mở rộng.
D. Nên được sửa đổi để phù hợp với mọi yêu cầu mới.

16. Đâu là một ví dụ về ‘dependency injection’ (tiêm phụ thuộc) trong thiết kế OOP?

A. Một lớp tự tạo ra các đối tượng mà nó cần sử dụng bên trong chính nó.
B. Một lớp nhận các đối tượng phụ thuộc của nó thông qua hàm tạo, phương thức setter hoặc giao diện, thay vì tự tạo ra chúng.
C. Một lớp kế thừa trực tiếp tất cả các phương thức từ một lớp cha.
D. Một lớp sử dụng các biến tĩnh để chia sẻ dữ liệu.

17. Trong OOP, khái niệm ‘Constructor’ (Hàm tạo) được sử dụng để làm gì?

A. Để hủy bỏ một đối tượng và giải phóng bộ nhớ.
B. Để khởi tạo trạng thái ban đầu của một đối tượng khi nó được tạo ra.
C. Để định nghĩa các phương thức mà đối tượng sẽ sử dụng.
D. Để cho phép một lớp kế thừa từ nhiều lớp khác nhau.

18. Trong lập trình hướng đối tượng (OOP), khái niệm nào cho phép một lớp kế thừa các thuộc tính và phương thức từ một lớp khác?

A. Đóng gói (Encapsulation)
B. Trừu tượng hóa (Abstraction)
C. Đa hình (Polymorphism)
D. Kế thừa (Inheritance)

19. Khái niệm ‘encapsulation’ (đóng gói) trong OOP chủ yếu nhằm mục đích gì?

A. Tăng cường khả năng kế thừa giữa các lớp.
B. Bảo vệ dữ liệu và logic của một đối tượng bằng cách giới hạn quyền truy cập trực tiếp từ bên ngoài.
C. Cho phép một đối tượng có nhiều hình dạng khác nhau.
D. Ẩn đi tất cả các chi tiết triển khai của một lớp.

20. Trong OOP, ‘interface segregation principle’ (nguyên tắc phân tách giao diện) nói rằng:

A. Không có giao diện nào nên quá lớn.
B. Nên có nhiều giao diện nhỏ, chuyên biệt thay vì một giao diện lớn, đa năng.
C. Các lớp chỉ nên triển khai các phương thức mà chúng thực sự cần.
D. Tất cả các phương án trên đều đúng.

21. Trong OOP, ‘abstraction’ (trừu tượng hóa) giúp giải quyết vấn đề gì trong các hệ thống phần mềm phức tạp?

A. Tăng cường bảo mật dữ liệu.
B. Giảm bớt sự phức tạp bằng cách tập trung vào các khía cạnh quan trọng và ẩn đi các chi tiết không cần thiết.
C. Đảm bảo tất cả các phương thức đều có thể truy cập công khai.
D. Cho phép một đối tượng kế thừa từ nhiều lớp.

22. Đâu là một ví dụ về ‘class invariant’ (bất biến lớp) trong thiết kế OOP?

A. Một phương thức luôn trả về cùng một giá trị bất kể đầu vào.
B. Một điều kiện hoặc thuộc tính luôn đúng với mọi đối tượng của một lớp trong suốt vòng đời của chúng, được duy trì bởi các phương thức của lớp.
C. Một phương thức chỉ có thể được gọi sau khi một phương thức khác đã hoàn thành.
D. Một thuộc tính chỉ có thể được truy cập bởi chính lớp đó.

23. Khái niệm ‘static’ (tĩnh) trong OOP thường được áp dụng cho điều gì?

A. Các thuộc tính và phương thức thuộc về một đối tượng cụ thể.
B. Các thuộc tính và phương thức thuộc về chính lớp đó, không phụ thuộc vào bất kỳ đối tượng nào, và có thể truy cập trực tiếp thông qua tên lớp.
C. Các phương thức chỉ có thể được gọi bởi các phương thức khác trong cùng một lớp.
D. Các biến chỉ có thể được khai báo bên trong một phương thức.

24. Lớp ‘Dog’ kế thừa từ lớp ‘Animal’. Nếu chúng ta có một hàm nhận đối tượng kiểu ‘Animal’ và gọi phương thức ‘makeSound()’, thì hành vi của hàm này sẽ phụ thuộc vào điều gì để thể hiện tính đa hình (polymorphism)?

A. Kiểu dữ liệu khai báo của biến (Animal).
B. Kiểu dữ liệu thực tế của đối tượng được gán cho biến (Dog).
C. Việc lớp ‘Animal’ có phương thức ‘makeSound()’ hay không.
D. Sự tồn tại của các lớp khác kế thừa từ ‘Animal’.

25. Trong OOP, ‘composition over inheritance’ (sở hữu hơn kế thừa) là một nguyên tắc thiết kế quan trọng. Tại sao?

A. Vì kế thừa luôn tạo ra các lớp có sự gắn kết cao.
B. Vì sở hữu mang lại tính linh hoạt cao hơn, cho phép thay đổi hành vi của đối tượng tại thời điểm chạy bằng cách thay đổi đối tượng được chứa, đồng thời giảm sự phụ thuộc chặt chẽ so với kế thừa.
C. Vì kế thừa luôn tốt hơn sở hữu trong mọi trường hợp.
D. Vì sở hữu chỉ có thể được sử dụng với các lớp trừu tượng.

26. Trong OOP, ‘SOLID’ là một tập hợp các nguyên tắc thiết kế. Nguyên tắc ‘S’ trong SOLID là gì?

A. Substitution Principle (Nguyên tắc thay thế Liskov)
B. Single Responsibility Principle (Nguyên tắc trách nhiệm đơn lẻ)
C. Interface Segregation Principle (Nguyên tắc phân tách giao diện)
D. Open/Closed Principle (Nguyên tắc mở/đóng)

27. Khi một lớp triển khai một giao diện (interface), điều bắt buộc là gì?

A. Lớp triển khai phải kế thừa từ lớp cha của giao diện đó.
B. Lớp triển khai phải cung cấp định nghĩa (triển khai) cho TẤT CẢ các phương thức trừu tượng được khai báo trong giao diện.
C. Lớp triển khai chỉ cần cung cấp một số phương thức trừu tượng của giao diện.
D. Lớp triển khai không được có bất kỳ phương thức nào khác ngoài các phương thức của giao diện.

28. Đâu là một ví dụ về ‘getter’ (phương thức lấy giá trị) trong OOP?

A. Một phương thức để thay đổi giá trị của một thuộc tính riêng tư.
B. Một phương thức công khai để trả về giá trị của một thuộc tính riêng tư.
C. Một phương thức để tạo ra một đối tượng mới.
D. Một phương thức để hủy bỏ một đối tượng.

29. Trong OOP, ‘constructor chaining’ (chuỗi hàm tạo) xảy ra khi nào?

A. Khi một lớp kế thừa từ nhiều lớp cha.
B. Khi một hàm tạo của lớp con gọi hàm tạo của lớp cha.
C. Khi một phương thức gọi lại chính nó.
D. Khi một lớp chỉ có một hàm tạo duy nhất.

30. Tại sao ‘polymorphism’ (đa hình) là một khái niệm quan trọng trong OOP?

A. Để đảm bảo rằng tất cả các lớp đều có cùng một cấu trúc.
B. Để cho phép các lập trình viên viết mã linh hoạt hơn, có thể hoạt động với nhiều loại đối tượng khác nhau mà không cần biết chi tiết cụ thể của từng loại.
C. Để giới hạn quyền truy cập vào dữ liệu của một lớp.
D. Để làm cho các chương trình chạy nhanh hơn bằng cách giảm số lượng phương thức được gọi.

31. Khi một lớp kế thừa từ một lớp trừu tượng (abstract class), điều bắt buộc là gì?

A. Lớp kế thừa phải được đánh dấu là trừu tượng.
B. Lớp kế thừa phải cung cấp định nghĩa cho tất cả các phương thức trừu tượng của lớp cha.
C. Lớp kế thừa không được phép có bất kỳ phương thức trừu tượng nào.
D. Lớp kế thừa chỉ có thể kế thừa các thuộc tính, không được kế thừa phương thức.

32. Chọn phát biểu SAI về ‘Abstraction’ (Trừu tượng hóa) trong OOP.

A. Trừu tượng hóa giúp quản lý sự phức tạp bằng cách tập trung vào các khía cạnh quan trọng.
B. Một lớp trừu tượng (abstract class) có thể có cả phương thức trừu tượng và phương thức đã triển khai.
C. Giao diện (interface) là một hình thức của trừu tượng hóa.
D. Trừu tượng hóa yêu cầu lớp con phải cung cấp định nghĩa cho tất cả các phương thức của lớp cha.

33. Trong OOP, ‘Polymorphism’ (đa hình) thường được thực hiện thông qua cơ chế nào?

A. Đóng gói (Encapsulation)
B. Ghi đè phương thức (Method Overriding) và Giao diện (Interfaces).
C. Hàm tạo (Constructors).
D. Biến tĩnh (Static variables).

34. Trong OOP, ‘abstract class’ (lớp trừu tượng) và ‘interface’ (giao diện) có điểm gì chung quan trọng nhất?

A. Cả hai đều có thể được khởi tạo để tạo đối tượng.
B. Cả hai đều có thể chứa các phương thức không có thân (trừu tượng) và buộc các lớp con/triển khai phải cung cấp định nghĩa.
C. Cả hai đều là các loại lớp thông thường.
D. Cả hai đều chỉ có thể chứa thuộc tính tĩnh.

35. Đâu là một ví dụ về ‘kế thừa đơn’ (single inheritance) trong OOP?

A. Một lớp ‘XeHoi’ kế thừa từ cả ‘DongCo’ và ‘BanhXe’.
B. Một lớp ‘DongVatAnCo’ kế thừa từ lớp ‘DongVat’.
C. Một lớp ‘MangHinh’ triển khai giao diện ‘VeHinh’.
D. Một lớp ‘ConNguoi’ có thể có nhiều vai trò như ‘SinhVien’ và ‘NhanVien’ cùng lúc.

36. Đâu là một ví dụ về ‘factory pattern’ (mẫu thiết kế nhà máy) trong OOP?

A. Một lớp tự tạo ra chính nó.
B. Một lớp chuyên trách việc tạo ra các đối tượng của các lớp khác nhau, thường dựa trên một tham số đầu vào, mà không yêu cầu lớp gọi phải biết chi tiết về việc tạo đối tượng đó.
C. Một lớp chỉ có một thể hiện duy nhất.
D. Một lớp chỉ cung cấp các phương thức tĩnh.

37. Trong OOP, ‘immutable objects’ (đối tượng bất biến) là gì?

A. Các đối tượng có thể thay đổi trạng thái của chúng bất kỳ lúc nào.
B. Các đối tượng mà trạng thái của chúng không thể thay đổi sau khi được tạo ra.
C. Các đối tượng chỉ có thể được truy cập bởi lớp cha.
D. Các đối tượng không có thuộc tính hoặc phương thức.

38. Một lớp trừu tượng (abstract class) trong OOP có thể:

A. Được khởi tạo trực tiếp để tạo đối tượng.
B. Chứa các phương thức trừu tượng (không có thân) và các phương thức thông thường.
C. Chỉ được phép chứa các phương thức trừu tượng.
D. Không thể có bất kỳ phương thức nào.

39. Đâu là một ví dụ về ‘data hiding’ (che giấu dữ liệu) trong OOP, một khía cạnh của đóng gói?

A. Sử dụng từ khóa ‘public’ cho tất cả các thuộc tính.
B. Sử dụng từ khóa ‘private’ cho các thuộc tính và cung cấp các phương thức ‘getter’ và ‘setter’ để truy cập chúng.
C. Kế thừa tất cả các thuộc tính từ lớp cha.
D. Sử dụng các phương thức tĩnh để thao tác với dữ liệu.

40. Tại sao ‘coupling’ (sự liên kết) giữa các lớp trong một hệ thống OOP nên được giữ ở mức thấp?

A. Để làm cho hệ thống chạy nhanh hơn.
B. Để tăng khả năng tái sử dụng, dễ bảo trì, dễ thay đổi và giảm thiểu tác động khi một phần của hệ thống thay đổi.
C. Để cho phép các lớp truy cập trực tiếp vào dữ liệu của nhau.
D. Để đảm bảo rằng tất cả các lớp đều có cùng một cấu trúc.

41. Khái niệm ‘loose coupling’ (ghép nối lỏng lẻo) trong OOP được khuyến khích vì nó?

A. Làm cho hệ thống trở nên phức tạp hơn.
B. Giúp các lớp ít phụ thuộc vào nhau, làm cho việc thay đổi, tái sử dụng và bảo trì mã nguồn dễ dàng hơn.
C. Bắt buộc tất cả các lớp phải kế thừa lẫn nhau.
D. Ngăn chặn hoàn toàn việc sử dụng đa hình.

42. Nếu một lớp cha định nghĩa một phương thức là ‘final’ (cuối cùng) hoặc ‘sealed’ (kín), điều này có nghĩa là gì?

A. Phương thức đó có thể được ghi đè bởi lớp con.
B. Phương thức đó không thể bị ghi đè bởi lớp con.
C. Phương thức đó sẽ tự động được triển khai bởi trình biên dịch.
D. Phương thức đó chỉ có thể được gọi bởi lớp cha.

43. Singleton Pattern (Mẫu đơn thể) đảm bảo rằng?

A. Một lớp có thể có nhiều đối tượng.
B. Chỉ có duy nhất một đối tượng của một lớp được tạo ra trong toàn bộ ứng dụng.
C. Một lớp có thể kế thừa từ nhiều lớp khác.
D. Tất cả các đối tượng của một lớp đều chia sẻ cùng một bộ nhớ.

44. Trong OOP, ‘static’ (tĩnh) thường được sử dụng cho mục đích gì?

A. Để đảm bảo rằng một phương thức chỉ có thể được gọi bởi một đối tượng cụ thể.
B. Để tạo ra các biến hoặc phương thức thuộc về chính lớp đó, chứ không phải của một đối tượng cụ thể nào của lớp.
C. Để làm cho một thuộc tính không thể thay đổi giá trị sau khi khởi tạo.
D. Để cho phép một lớp kế thừa từ nhiều lớp cha.

45. Nguyên tắc ‘Dependency Inversion Principle’ (Nguyên tắc đảo ngược phụ thuộc) trong SOLID nói về điều gì?

A. Các module cấp cao không nên phụ thuộc vào các module cấp thấp, cả hai nên phụ thuộc vào trừu tượng.
B. Các lớp con không nên phụ thuộc vào lớp cha.
C. Các module cấp thấp nên phụ thuộc vào các module cấp cao.
D. Các lớp nên chỉ phụ thuộc vào các lớp cụ thể.

46. Nguyên tắc ‘Liskov Substitution Principle’ (Nguyên tắc thay thế Liskov) trong SOLID phát biểu điều gì?

A. Các đối tượng của lớp con phải có thể thay thế cho các đối tượng của lớp cha mà không làm thay đổi tính đúng đắn của chương trình.
B. Một lớp không nên phụ thuộc vào các lớp con của nó.
C. Các lớp con không nên có nhiều phương thức hơn lớp cha.
D. Mọi lớp đều phải có ít nhất một phương thức trừu tượng.

47. Đâu là một ví dụ về mối quan hệ ‘is-a’ trong OOP?

A. Một lớp ‘Cửa Sổ’ chứa một đối tượng ‘Nút Bấm’.
B. Một lớp ‘Động Vật’ có một phương thức ‘ăn()’.
C. Một lớp ‘Chó’ kế thừa từ lớp ‘Động Vật’.
D. Một lớp ‘Máy Tính’ có thể thực hiện phép tính.

48. Đâu là vai trò của ‘getter’ và ‘setter’ trong mô hình đóng gói?

A. Để định nghĩa các phương thức mà lớp con bắt buộc phải có.
B. Để cung cấp các phương thức công khai (public methods) để truy cập và thay đổi giá trị của các thuộc tính riêng tư (private attributes) một cách có kiểm soát.
C. Để tạo ra các phương thức trừu tượng trong lớp trừu tượng.
D. Để cho phép một lớp kế thừa các phương thức từ nhiều lớp cha.

49. Adapter Pattern (Mẫu bộ chuyển đổi) được sử dụng để làm gì?

A. Tạo ra các đối tượng phức tạp một cách từng bước.
B. Cho phép các lớp có giao diện không tương thích làm việc với nhau.
C. Cung cấp một giao diện đơn giản hóa cho một hệ thống con phức tạp.
D. Theo dõi sự thay đổi của một đối tượng và thông báo cho các đối tượng khác.

50. Trong OOP, ‘abstraction’ (trừu tượng hóa) đề cập đến việc gì?

A. Che giấu tất cả các chi tiết triển khai của một lớp.
B. Tập trung vào các thuộc tính và hành vi thiết yếu của một đối tượng, ẩn đi các chi tiết không cần thiết.
C. Cho phép một lớp kế thừa từ nhiều lớp cha.
D. Đảm bảo rằng tất cả các phương thức đều có thể được gọi từ bất kỳ đâu.

51. Phương thức nào sau đây thường không thể được ghi đè (override) bởi lớp con?

A. Phương thức public đã được định nghĩa ở lớp cha.
B. Phương thức protected đã được định nghĩa ở lớp cha.
C. Phương thức private của lớp cha.
D. Phương thức abstract của lớp cha.

52. Trong lập trình hướng đối tượng, ‘inheritance’ (thừa kế) giúp đạt được mục tiêu nào sau đây?

A. Đảm bảo mỗi đối tượng chỉ có thể được tạo ra một lần duy nhất.
B. Tái sử dụng mã bằng cách cho phép một lớp mới (lớp con) kế thừa các thuộc tính và phương thức từ một lớp đã có (lớp cha).
C. Ngăn chặn việc ghi đè lên các phương thức đã được định nghĩa ở lớp cha.
D. Tăng cường bảo mật bằng cách ẩn hoàn toàn dữ liệu của lớp cha.

53. Factory Pattern (Mẫu nhà máy) thuộc nhóm mẫu thiết kế nào?

A. Behavioral Patterns (Mẫu hành vi)
B. Structural Patterns (Mẫu cấu trúc)
C. Creational Patterns (Mẫu tạo sinh)
D. Concurrency Patterns (Mẫu đồng thời)

54. Sự khác biệt chính giữa ‘composition’ và ‘inheritance’ là gì?

A. Thừa kế là mối quan hệ ‘có một’, còn hợp thành là mối quan hệ ‘là một’.
B. Thừa kế là mối quan hệ ‘là một’ (is-a), còn hợp thành là mối quan hệ ‘có một’ (has-a).
C. Thừa kế chỉ áp dụng cho các phương thức, còn hợp thành cho cả thuộc tính và phương thức.
D. Hợp thành cho phép đa hình, còn thừa kế thì không.

55. Khái niệm ‘cohesion’ (tính kết dính) trong OOP đề cập đến điều gì?

A. Mức độ mà một lớp phụ thuộc vào các lớp khác.
B. Mức độ mà các yếu tố bên trong một lớp (thuộc tính, phương thức) liên quan chặt chẽ và cùng hướng tới một mục tiêu chung.
C. Khả năng tái sử dụng mã.
D. Khả năng một lớp có nhiều phương thức khởi tạo.

56. Đâu là một ví dụ về ‘downcasting’ (ép kiểu xuống) trong OOP?

A. Ép một đối tượng lớp cha thành một đối tượng lớp con.
B. Ép một đối tượng lớp con thành một đối tượng lớp cha.
C. Ép một đối tượng sang một kiểu dữ liệu hoàn toàn khác.
D. Ép một biến hằng thành biến có thể thay đổi.

57. Khi sử dụng ‘interface’ (giao diện) trong OOP, điều quan trọng nhất là gì?

A. Giao diện có thể chứa dữ liệu thành viên công khai (public data members).
B. Giao diện định nghĩa một hợp đồng về các phương thức mà các lớp triển khai nó phải cung cấp.
C. Một lớp chỉ có thể triển khai duy nhất một giao diện.
D. Giao diện tự nó có thể tạo ra đối tượng.

58. Nguyên tắc ‘Interface Segregation Principle’ (Nguyên tắc phân tách giao diện) trong SOLID đề xuất gì?

A. Không nên có nhiều giao diện trong một hệ thống.
B. Các client không nên bị buộc phải phụ thuộc vào các phương thức mà chúng không sử dụng.
C. Một lớp chỉ nên triển khai một giao diện.
D. Giao diện nên chứa càng nhiều phương thức càng tốt.

59. Một phương thức được khai báo là ‘abstract’ (trừu tượng) trong một lớp trừu tượng có ý nghĩa gì?

A. Phương thức này có thể được gọi trực tiếp từ lớp trừu tượng.
B. Phương thức này không có phần thân (implementation) và bắt buộc các lớp con không trừu tượng phải định nghĩa lại (override) nó.
C. Phương thức này chỉ có thể được gọi bởi các lớp kế thừa từ lớp trừu tượng.
D. Phương thức này sẽ tự động được triển khai bởi trình biên dịch.

60. Khi một phương thức trong lớp con có cùng tên, cùng kiểu trả về và cùng danh sách tham số với một phương thức trong lớp cha, đó gọi là gì?

A. Method hiding (ẩn phương thức)
B. Method overloading (quá tải phương thức)
C. Method overriding (ghi đè phương thức)
D. Method composition (hợp thành phương thức)

61. Decorator Pattern (Mẫu trang trí) cho phép?

A. Ẩn giấu hoàn toàn các chi tiết triển khai của một lớp.
B. Thêm chức năng mới cho một đối tượng một cách động, mà không ảnh hưởng đến các đối tượng khác cùng lớp.
C. Đảm bảo rằng chỉ có một đối tượng duy nhất tồn tại.
D. Cho phép các lớp không liên quan kế thừa lẫn nhau.

62. Trong lập trình hướng đối tượng, khái niệm ‘encapsulation’ (đóng gói) chủ yếu nhằm mục đích gì?

A. Giảm thiểu việc sử dụng thừa kế để tránh phức tạp hóa mã nguồn.
B. Liên kết dữ liệu và các phương thức thao tác trên dữ liệu đó lại với nhau, đồng thời kiểm soát truy cập.
C. Cho phép một lớp kế thừa nhiều lớp cha để tái sử dụng mã.
D. Biến đổi kiểu dữ liệu của các đối tượng một cách linh hoạt trong quá trình thực thi.

63. Khái niệm ‘abstract class’ (lớp trừu tượng) trong OOP cho phép điều gì?

A. Tạo ra đối tượng trực tiếp từ lớp trừu tượng.
B. Chỉ định nghĩa giao diện chung mà không cung cấp toàn bộ phần triển khai, buộc các lớp con phải hoàn thiện.
C. Đảm bảo rằng tất cả các phương thức đều có thể được truy cập từ bất kỳ đâu.
D. Ngăn chặn mọi hình thức thừa kế từ lớp đó.

64. Đâu là đặc điểm cốt lõi của ‘polymorphism’ (đa hình) trong lập trình hướng đối tượng?

A. Khả năng một đối tượng có thể có nhiều trạng thái khác nhau tùy thuộc vào thuộc tính của nó.
B. Khả năng các đối tượng thuộc các lớp khác nhau phản ứng theo cách riêng của chúng đối với cùng một thông điệp (lời gọi phương thức).
C. Khả năng che giấu thông tin chi tiết của lớp để bảo vệ dữ liệu.
D. Khả năng một lớp kế thừa mọi thuộc tính và phương thức từ một lớp cơ sở duy nhất.

65. Trong OOP, ‘method overloading’ (quá tải phương thức) khác với ‘method overriding’ (ghi đè phương thức) ở điểm nào?

A. Quá tải xảy ra trong cùng một lớp, còn ghi đè xảy ra giữa lớp cha và lớp con.
B. Quá tải yêu cầu chữ ký phương thức khác nhau, còn ghi đè yêu cầu chữ ký phương thức giống hệt.
C. Quá tải cho phép thay đổi kiểu trả về, còn ghi đè thì không.
D. Quá tải là một hình thức của đa hình, còn ghi đè thì không.

66. Khi một lớp con gọi phương thức khởi tạo của lớp cha, nó thường sử dụng từ khóa nào?

A. ‘this’
B. ‘super’ hoặc ‘base’
C. ‘parent’
D. ‘static’

67. Nguyên tắc ‘Open/Closed Principle’ (Nguyên tắc mở/đóng) trong SOLID đề xuất rằng?

A. Các thực thể phần mềm (lớp, module, hàm, v.v.) nên đóng lại để thay đổi.
B. Các thực thể phần mềm nên mở cho việc mở rộng nhưng đóng cho việc sửa đổi.
C. Tất cả các lớp đều phải được đóng gói chặt chẽ.
D. Các lớp con không được phép ghi đè phương thức của lớp cha.

68. Khái niệm ‘design patterns’ (mẫu thiết kế) trong OOP nhằm mục đích gì?

A. Thay thế hoàn toàn cho việc viết mã trực tiếp.
B. Cung cấp các giải pháp đã được kiểm chứng và tái sử dụng cho các vấn đề thiết kế phần mềm phổ biến.
C. Tự động hóa quá trình biên dịch mã.
D. Đảm bảo rằng tất cả các lớp đều được đóng gói chặt chẽ.

69. Trong các tình huống đa hình, khi gọi một phương thức trên một tham chiếu kiểu lớp cha, phương thức nào sẽ được thực thi?

A. Phương thức được định nghĩa trong lớp cha.
B. Phương thức được định nghĩa trong lớp con (nếu có ghi đè).
C. Phương thức được định nghĩa gần nhất với lớp cha.
D. Phương thức được gọi đầu tiên.

70. Trong các nguyên tắc SOLID cho thiết kế hướng đối tượng, nguyên tắc ‘Single Responsibility Principle’ (Nguyên tắc trách nhiệm đơn lẻ) nói về điều gì?

A. Một lớp chỉ nên có một phương thức.
B. Một lớp chỉ nên có một lý do để thay đổi, nghĩa là nó chỉ chịu trách nhiệm cho một chức năng duy nhất.
C. Một lớp không nên kế thừa từ nhiều lớp.
D. Một lớp chỉ nên được truy cập bởi các lớp cùng gói (package).

71. Trong OOP, ‘tight coupling’ (ghép nối chặt chẽ) giữa các lớp thường được coi là một nhược điểm vì nó?

A. Làm cho việc tái sử dụng mã dễ dàng hơn.
B. Giảm thiểu khả năng lan truyền lỗi khi thay đổi một phần của hệ thống.
C. Gây khó khăn cho việc bảo trì, sửa đổi và mở rộng hệ thống vì thay đổi ở một lớp có thể ảnh hưởng đến nhiều lớp khác.
D. Tăng cường tính đa hình.

72. Khái niệm ‘coupling’ (mức độ phụ thuộc) giữa các lớp trong OOP đề cập đến điều gì?

A. Mức độ mà một lớp chịu trách nhiệm cho một chức năng duy nhất.
B. Mức độ mà một lớp phụ thuộc vào các lớp khác để hoạt động.
C. Khả năng tạo ra nhiều đối tượng từ một lớp.
D. Khả năng một lớp kế thừa từ nhiều lớp cha.

73. Trong các mẫu thiết kế, Observer Pattern (Mẫu quan sát) thường được sử dụng cho mục đích gì?

A. Tạo ra các đối tượng mà không cần biết lớp cụ thể.
B. Định nghĩa một-nhiều mối quan hệ giữa các đối tượng, sao cho khi một đối tượng thay đổi trạng thái, tất cả các đối tượng phụ thuộc vào nó sẽ được thông báo và cập nhật tự động.
C. Sao chép đối tượng một cách hiệu quả.
D. Cung cấp một giao diện chung cho một họ các lớp.

74. Một lớp không có phương thức nào được khai báo là ‘public’ thì có thể truy cập các thuộc tính và phương thức của nó như thế nào?

A. Chỉ có thể truy cập thông qua các phương thức public của chính lớp đó.
B. Không thể truy cập từ bên ngoài lớp.
C. Chỉ có thể truy cập thông qua các lớp bạn (friend classes).
D. Có thể truy cập trực tiếp vào các thuộc tính nếu chúng được khai báo là protected.

75. Đâu là ví dụ về ‘composition’ (hợp thành) trong OOP?

A. Một lớp ‘XeHoi’ kế thừa từ lớp ‘DongCo’.
B. Một lớp ‘XeHoi’ có một thuộc tính là đối tượng của lớp ‘DongCo’.
C. Một lớp ‘DongCo’ có thể được gọi từ bất kỳ lớp nào.
D. Một lớp ‘DongCo’ có thể có nhiều phương thức giống hệt với lớp ‘XeHoi’.

76. Trong OOP, ‘virtual function’ (hàm ảo) chủ yếu được sử dụng để hỗ trợ loại cơ chế nào?

A. Đóng gói (Encapsulation)
B. Đa hình (Polymorphism) thông qua ghi đè phương thức.
C. Trừu tượng hóa (Abstraction).
D. Hợp thành (Composition).

77. Khi nào thì việc sử dụng ‘inheritance’ (thừa kế) có thể dẫn đến ‘fragile base class problem’ (vấn đề lớp cơ sở dễ vỡ)?

A. Khi lớp con không ghi đè phương thức nào của lớp cha.
B. Khi lớp cha có các phương thức private hoặc protected mà lớp con không thể kiểm soát hoặc dự đoán được hành vi của chúng khi thay đổi.
C. Khi lớp con kế thừa quá nhiều lớp cha.
D. Khi lớp cha không có phương thức khởi tạo.

78. Trong OOP, ‘type casting’ (ép kiểu) được sử dụng khi nào?

A. Để tạo ra một đối tượng mới.
B. Để chuyển đổi một biến từ kiểu dữ liệu này sang một kiểu dữ liệu khác, có thể là cùng một phân cấp thừa kế hoặc khác.
C. Để ẩn đi các chi tiết triển khai của một lớp.
D. Để đảm bảo rằng một lớp chỉ có một đối tượng duy nhất.

79. Khi một lớp không định nghĩa phương thức khởi tạo (constructor) của riêng mình, điều gì sẽ xảy ra?

A. Lớp đó sẽ không thể tạo ra đối tượng.
B. Trình biên dịch hoặc trình thông dịch sẽ tự động cung cấp một phương thức khởi tạo mặc định (default constructor).
C. Chương trình sẽ gặp lỗi biên dịch ngay lập tức.
D. Đối tượng sẽ được khởi tạo với các giá trị ngẫu nhiên cho tất cả các thuộc tính.

80. Khái niệm ‘constructor overloading’ (quá tải phương thức khởi tạo) cho phép điều gì?

A. Một lớp có nhiều phương thức khởi tạo với cùng tên nhưng danh sách tham số khác nhau.
B. Một lớp có nhiều phương thức khởi tạo với tên khác nhau.
C. Một phương thức khởi tạo có thể tự gọi lại chính nó.
D. Một phương thức khởi tạo có thể thay đổi kiểu dữ liệu của đối tượng.

81. Kịch bản nào sau đây mô tả tốt nhất ‘Đa hình’ (Polymorphism) trong OOP?

A. Một lớp có thể kế thừa từ nhiều lớp cha.
B. Một phương thức có thể được gọi trên các đối tượng thuộc các lớp khác nhau và thực hiện hành vi khác nhau tùy thuộc vào kiểu đối tượng.
C. Dữ liệu và phương thức được đóng gói trong một đơn vị.
D. Các đối tượng được tạo ra từ cùng một lớp.

82. Khi định nghĩa một lớp trừu tượng (abstract class), điều gì là bắt buộc?

A. Phải có ít nhất một phương thức trừu tượng.
B. Không thể có bất kỳ phương thức nào được triển khai.
C. Phải định nghĩa tất cả các phương thức được khai báo trong giao diện mà nó triển khai.
D. Không thể tạo đối tượng trực tiếp từ lớp trừu tượng.

83. Đâu là một ví dụ về ‘coupling’ trong OOP?

A. Một lớp tự quản lý dữ liệu của mình.
B. Một lớp phụ thuộc vào việc triển khai chi tiết của lớp khác.
C. Một lớp tái sử dụng mã từ lớp cha.
D. Một lớp trừu tượng hóa các chức năng cốt lõi.

84. Phương thức khởi tạo (Constructor) trong OOP có vai trò gì?

A. Được gọi khi đối tượng bị hủy.
B. Được sử dụng để ghi đè phương thức của lớp cha.
C. Được tự động gọi khi một đối tượng của lớp được tạo ra để khởi tạo trạng thái ban đầu.
D. Dùng để định nghĩa các thuộc tính của lớp.

85. Khái niệm ‘Abstract Method’ (Phương thức trừu tượng) trong OOP yêu cầu điều gì?

A. Phương thức đó phải có triển khai cụ thể trong lớp trừu tượng.
B. Phương thức đó không có phần thân (body) và phải được triển khai bởi các lớp con không trừu tượng.
C. Phương thức đó chỉ có thể được gọi bởi lớp cha.
D. Phương thức đó chỉ có thể có một kiểu trả về duy nhất.

86. Đâu là một trong những lợi ích chính của việc sử dụng Đóng gói (Encapsulation) trong OOP?

A. Tăng khả năng tái sử dụng mã thông qua đa hình.
B. Giảm sự phức tạp của hệ thống bằng cách ẩn đi các chi tiết triển khai.
C. Cho phép nhiều lớp kế thừa từ một lớp cha duy nhất.
D. Tạo ra các đối tượng độc lập có thể hoạt động mà không cần tương tác.

87. Khái niệm nào trong OOP giúp ngăn chặn việc thay đổi trực tiếp các thuộc tính của một đối tượng từ bên ngoài lớp?

A. Kế thừa
B. Đa hình
C. Trừu tượng hóa
D. Đóng gói

88. Khái niệm ‘Trừu tượng hóa’ (Abstraction) trong OOP tập trung vào điều gì?

A. Tạo ra các lớp cha chung cho nhiều lớp con.
B. Ẩn đi các chi tiết không cần thiết và chỉ hiển thị các chức năng cốt lõi.
C. Cho phép đối tượng có nhiều hình dạng khác nhau.
D. Liên kết chặt chẽ dữ liệu và phương thức trong một đơn vị.

89. Trong OOP, ‘composition’ (sự thành phần) thể hiện mối quan hệ gì?

A. Is-a (Là một)
B. Has-a (Có một)
C. Uses-a (Sử dụng một)
D. Knows-a (Biết một)

90. Trong OOP, ‘Polymorphism’ (Đa hình) cho phép:

A. Một lớp có thể có nhiều phương thức cùng tên nhưng khác tham số.
B. Một đối tượng có thể được xử lý như một đối tượng thuộc các kiểu khác nhau thông qua các phương thức được định nghĩa trong phân cấp kế thừa.
C. Dữ liệu được ẩn đi và chỉ truy cập qua các phương thức công khai.
D. Các lớp có thể kế thừa thuộc tính và phương thức từ nhiều lớp cha.

91. Đâu là một ví dụ về ‘tight coupling’ (sự phụ thuộc chặt chẽ) trong thiết kế OOP?

A. Một lớp sử dụng một giao diện để tương tác với một lớp khác.
B. Một lớp trực tiếp tạo ra một thể hiện của một lớp cụ thể và gọi trực tiếp các phương thức public của nó.
C. Một lớp trừu tượng hóa các chức năng.
D. Một lớp kế thừa các thuộc tính từ lớp cha.

92. Giao diện (Interface) trong OOP khác biệt với lớp trừu tượng (Abstract Class) ở điểm nào?

A. Giao diện chỉ có thể chứa phương thức trừu tượng, còn lớp trừu tượng có thể chứa cả phương thức trừu tượng và đã triển khai.
B. Lớp trừu tượng có thể kế thừa từ nhiều lớp trừu tượng khác, nhưng giao diện thì không.
C. Giao diện không cho phép định nghĩa thuộc tính, trong khi lớp trừu tượng có thể.
D. Lớp trừu tượng có thể có hàm khởi tạo, giao diện thì không.

93. Trong OOP, một ‘lớp’ (class) được định nghĩa là gì?

A. Một thực thể duy nhất có trạng thái và hành vi.
B. Một bản thiết kế hoặc khuôn mẫu để tạo ra các đối tượng.
C. Một biến lưu trữ dữ liệu.
D. Một tập hợp các hàm độc lập.

94. Trong OOP, ‘method overloading’ (quá tải phương thức) cho phép:

A. Một lớp con cung cấp một triển khai khác cho phương thức của lớp cha.
B. Nhiều phương thức trong cùng một lớp có cùng tên nhưng khác nhau về danh sách tham số (số lượng, kiểu hoặc thứ tự).
C. Một phương thức có thể có nhiều kiểu trả về.
D. Một phương thức có thể được gọi với các đối tượng thuộc các kiểu khác nhau.

95. Trong OOP, ‘tính kế thừa’ giúp đạt được mục tiêu gì?

A. Giảm thiểu số lượng lớp trong chương trình.
B. Tăng khả năng tái sử dụng mã và tạo ra hệ thống phân cấp lớp.
C. Đảm bảo mỗi lớp chỉ có một trách nhiệm duy nhất.
D. Cho phép gọi cùng một phương thức với các hành vi khác nhau.

96. Đâu là ví dụ về ‘Trừu tượng hóa dữ liệu’ (Data Abstraction)?

A. Một lớp có nhiều phương thức cùng tên.
B. Việc chỉ hiển thị các phương thức công khai (public methods) để tương tác với một đối tượng, ẩn đi cách dữ liệu được lưu trữ và xử lý bên trong.
C. Khả năng một đối tượng có thể có nhiều kiểu.
D. Việc một lớp kế thừa tất cả các thuộc tính của lớp cha.

97. Đâu là một ví dụ về ‘Dependency Inversion Principle’ (Nguyên tắc đảo ngược phụ thuộc) trong thiết kế OOP?

A. Các module cấp cao không nên phụ thuộc vào các module cấp thấp; cả hai nên phụ thuộc vào sự trừu tượng.
B. Lớp con nên có thể thay thế lớp cha.
C. Lớp nên đóng gói dữ liệu và phương thức.
D. Mỗi lớp chỉ nên có một trách nhiệm.

98. Đâu là một ví dụ về ‘Open/Closed Principle’ (Nguyên tắc Mở/Đóng) trong thiết kế OOP?

A. Các thực thể phần mềm (lớp, module, hàm…) nên được mở cho việc mở rộng, nhưng đóng cho việc sửa đổi.
B. Mỗi lớp nên có một trách nhiệm duy nhất.
C. Các lớp con phải có thể thay thế lớp cha.
D. Các module cấp cao không nên phụ thuộc vào module cấp thấp.

99. Đa hình (Polymorphism) cho phép một đối tượng có thể được xem như là một đối tượng của các kiểu khác nhau. Điều này thường được thực hiện thông qua:

A. Đóng gói dữ liệu và phương thức.
B. Kế thừa và ghi đè phương thức (method overriding).
C. Trừu tượng hóa các thuộc tính chung.
D. Tạo ra các lớp trừu tượng.

100. Trong lập trình hướng đối tượng (OOP), khái niệm nào cho phép một lớp kế thừa các thuộc tính và phương thức từ một lớp khác?

A. Đóng gói (Encapsulation)
B. Trừu tượng hóa (Abstraction)
C. Kế thừa (Inheritance)
D. Đa hình (Polymorphism)

101. Đâu là một ví dụ về ‘loose coupling’ (sự phụ thuộc lỏng lẻo) trong thiết kế OOP?

A. Một lớp gọi trực tiếp phương thức của một lớp cụ thể.
B. Một lớp phụ thuộc vào một giao diện hoặc lớp trừu tượng để tương tác với các đối tượng khác.
C. Một lớp kế thừa tất cả các phương thức của lớp cha.
D. Một lớp có nhiều phương thức với cùng tên.

102. Khi một lớp triển khai (implement) một giao diện (interface), nó phải:

A. Tạo ra một bản sao của các phương thức của giao diện.
B. Cung cấp một triển khai cụ thể cho tất cả các phương thức được khai báo trong giao diện.
C. Chỉ cần gọi lại các phương thức của giao diện.
D. Đảm bảo rằng các phương thức của giao diện có cùng tên với các phương thức trong lớp cha.

103. Khái niệm ‘Cohesion’ trong OOP đề cập đến điều gì?

A. Mức độ phụ thuộc giữa các lớp.
B. Mức độ liên quan và tập trung của các chức năng bên trong một lớp hoặc module.
C. Khả năng một đối tượng có nhiều hình dạng.
D. Việc ẩn giấu chi tiết triển khai.

104. Trong OOP, ‘inheritance’ (kế thừa) và ‘composition’ (thành phần) đều là các mối quan hệ giữa các lớp. Mối quan hệ ‘is-a’ (là một) thường đại diện cho:

A. Composition
B. Inheritance
C. Aggregation
D. Association

105. Khi sử dụng ‘private constructor’, mục đích chính là gì?

A. Để lớp có thể kế thừa từ nhiều lớp cha.
B. Để ngăn chặn việc tạo đối tượng trực tiếp từ lớp đó, thường được dùng trong các mẫu thiết kế như Singleton hoặc Factory.
C. Để đảm bảo phương thức khởi tạo luôn được gọi.
D. Để cho phép lớp con ghi đè phương thức khởi tạo.

106. Khái niệm ‘Composition over Inheritance’ (Sử dụng composition thay vì inheritance) thường được khuyến khích trong OOP vì:

A. Nó đơn giản hóa việc ghi đè phương thức.
B. Nó tạo ra các mối quan hệ lỏng lẻo hơn, dễ bảo trì và linh hoạt hơn so với kế thừa.
C. Nó cho phép một lớp kế thừa từ nhiều lớp.
D. Nó luôn luôn nhanh hơn về hiệu suất.

107. Một lớp có thể kế thừa (inherit) từ bao nhiêu lớp cha trực tiếp trong hầu hết các ngôn ngữ OOP hiện đại (như Java, C#)?

A. Một
B. Hai
C. Nhiều
D. Không giới hạn

108. Khái niệm ‘Duck Typing’ trong OOP thường được liên kết với ngôn ngữ nào?

A. Java
B. C++
C. Python hoặc Ruby
D. C#

109. Khái niệm ‘Abstract Factory’ trong OOP thuộc về nhóm mẫu thiết kế nào?

A. Creational (Sáng tạo)
B. Structural (Cấu trúc)
C. Behavioral (Hành vi)
D. Behavioral (Hành vi)

110. Trong các ngôn ngữ OOP, ‘static’ keyword thường được sử dụng với thuộc tính hoặc phương thức để chỉ điều gì?

A. Thuộc tính/phương thức đó thuộc về một đối tượng cụ thể.
B. Thuộc tính/phương thức đó thuộc về lớp, chia sẻ bởi tất cả các đối tượng của lớp đó.
C. Thuộc tính/phương thức đó chỉ có thể truy cập từ bên trong lớp.
D. Thuộc tính/phương thức đó chỉ có thể được ghi đè bởi lớp con.

111. Đâu là một ví dụ về ‘Interface Segregation Principle’ (Nguyên tắc phân tách giao diện) trong thiết kế OOP?

A. Một lớp lớn với nhiều phương thức được chia thành nhiều lớp nhỏ hơn, mỗi lớp nhỏ chịu trách nhiệm cho một tập hợp các chức năng liên quan.
B. Không nên yêu cầu một lớp triển khai các phương thức mà nó không sử dụng.
C. Một lớp chỉ nên có một lý do để thay đổi.
D. Các lớp con nên có thể thay thế lớp cha mà không làm thay đổi tính đúng đắn của chương trình.

112. Trong OOP, ‘Encapsulation’ và ‘Abstraction’ có mối quan hệ như thế nào?

A. Chúng là hai khái niệm hoàn toàn độc lập.
B. Abstraction thường được hỗ trợ bởi Encapsulation, vì Encapsulation giúp ẩn đi các chi tiết triển khai mà Abstraction muốn che giấu.
C. Encapsulation là một dạng cụ thể của Abstraction.
D. Abstraction là cách duy nhất để đạt được Encapsulation.

113. Trong OOP, ‘tính trừu tượng’ có thể được biểu diễn bằng cách sử dụng:

A. Các lớp thông thường với tất cả các phương thức được triển khai.
B. Các lớp trừu tượng (abstract classes) và giao diện (interfaces).
C. Các đối tượng đơn lẻ.
D. Các biến toàn cục.

114. Đâu là một ví dụ về ‘Single Responsibility Principle’ (Nguyên tắc trách nhiệm đơn lẻ) trong thiết kế OOP?

A. Một lớp có thể thực hiện nhiều chức năng khác nhau.
B. Mỗi lớp hoặc module nên chỉ chịu trách nhiệm cho một khía cạnh cụ thể của chức năng của phần mềm.
C. Một lớp con có thể ghi đè mọi phương thức của lớp cha.
D. Các lớp nên được thiết kế để có sự phụ thuộc lỏng lẻo.

115. Khi một lớp con ghi đè (override) một phương thức của lớp cha, điều gì xảy ra?

A. Lớp con có thêm một phương thức mới với tên giống phương thức cha.
B. Lớp con cung cấp một triển khai riêng cho phương thức đó, thay thế cho triển khai của lớp cha khi được gọi trên đối tượng lớp con.
C. Phương thức của lớp cha không thể được gọi từ lớp con.
D. Cả hai phương thức (cha và con) đều được gọi đồng thời.

116. Trong OOP, ‘Destructor’ (Hàm hủy) thường được sử dụng cho mục đích gì?

A. Khởi tạo các thuộc tính của đối tượng.
B. Giải phóng các tài nguyên (như bộ nhớ, file handles) mà đối tượng đã sử dụng khi đối tượng không còn cần thiết nữa.
C. Tạo ra các đối tượng mới.
D. Ghi đè phương thức của lớp cha.

117. Một ‘đối tượng’ (object) trong OOP là gì?

A. Chỉ là một tập hợp các thuộc tính.
B. Một thực thể cụ thể được tạo ra từ một lớp, có trạng thái và hành vi.
C. Một khái niệm trừu tượng không có hình thức cụ thể.
D. Một hàm dùng để thực thi một tác vụ.

118. Trong OOP, ‘Virtual Method’ (Phương thức ảo) là gì?

A. Một phương thức không thể được ghi đè bởi lớp con.
B. Một phương thức trong lớp cha mà lớp con có thể ghi đè để cung cấp triển khai riêng.
C. Một phương thức chỉ có thể được gọi từ bên trong lớp.
D. Một phương thức thuộc về lớp, không phải đối tượng.

119. Câu lệnh `super` (hoặc tương đương) trong lớp con thường được sử dụng để làm gì?

A. Truy cập các thành viên private của lớp cha.
B. Gọi phương thức khởi tạo hoặc các thành viên của lớp cha.
C. Hủy đối tượng của lớp cha.
D. Định nghĩa lại các phương thức trừu tượng của lớp cha.

120. Đâu là một ví dụ về ‘Liskov Substitution Principle’ (Nguyên tắc thay thế Liskov) trong thiết kế OOP?

A. Một lớp con có thể thay thế lớp cha mà không làm thay đổi tính đúng đắn của chương trình.
B. Một lớp nên có một lý do duy nhất để thay đổi.
C. Một lớp không nên phụ thuộc vào các chi tiết triển khai của lớp khác.
D. Các lớp con nên có thể ghi đè phương thức của lớp cha.

121. Khi hai lớp có mối quan hệ ‘Association’ (Kết hợp), điều đó có nghĩa là:

A. Các đối tượng của một lớp có mối liên hệ hoặc tương tác với các đối tượng của lớp khác, nhưng không nhất thiết phải sở hữu hoặc kế thừa.
B. Một lớp kế thừa tất cả các thuộc tính và phương thức từ một lớp khác.
C. Một lớp chứa một hoặc nhiều đối tượng của lớp khác như là một phần của nó.
D. Một lớp định nghĩa một tập hợp các phương thức mà các lớp khác phải triển khai.

122. Trong OOP, khi một lớp con ghi đè (override) một phương thức ‘virtual’ của lớp cha, điều này cho phép:

A. Lớp con cung cấp một triển khai riêng cho phương thức đó, thay thế hành vi mặc định của lớp cha.
B. Lớp con không cần triển khai phương thức đó.
C. Lớp con chỉ có thể gọi phương thức của lớp cha.
D. Lớp con không thể gọi phương thức của lớp cha.

123. Trong lập trình hướng đối tượng, khi sử dụng từ khóa ‘protected’, các thành viên của lớp:

A. Có thể truy cập được từ bên trong lớp đó và từ các lớp con của nó.
B. Chỉ có thể truy cập được từ bên trong lớp đó.
C. Có thể truy cập được từ bất kỳ đâu trong chương trình.
D. Chỉ có thể truy cập được từ các lớp không kế thừa.

124. Mẫu thiết kế ‘Observer’ thuộc nhóm mẫu nào?

A. Behavioral Patterns (Mẫu hành vi).
B. Creational Patterns (Mẫu tạo sinh).
C. Structural Patterns (Mẫu cấu trúc).
D. Gang of Four Patterns (Mẫu của Bốn).

125. Từ khóa ‘public’ trong OOP có ý nghĩa gì đối với các thành viên của lớp?

A. Các thành viên có thể được truy cập từ bất kỳ đâu trong chương trình, kể cả từ bên ngoài lớp.
B. Chỉ có thể truy cập từ bên trong lớp.
C. Chỉ có thể truy cập từ các lớp con.
D. Không thể truy cập từ bất kỳ đâu.

126. Nguyên tắc ‘Liskov Substitution Principle’ (LSP) trong SOLID khẳng định rằng:

A. Các đối tượng của một lớp con phải có thể thay thế cho các đối tượng của lớp cha mà không làm thay đổi tính đúng đắn của chương trình.
B. Một lớp không nên có quá nhiều trách nhiệm.
C. Một lớp chỉ nên mở rộng để thêm chức năng, không nên sửa đổi chức năng đã có.
D. Các lớp con chỉ nên phụ thuộc vào các lớp trừu tượng, không phụ thuộc vào các lớp cụ thể.

127. Trong các mẫu thiết kế, ‘Adapter Pattern’ được sử dụng để:

A. Cho phép các lớp có giao diện không tương thích làm việc cùng nhau bằng cách cung cấp một lớp trung gian.
B. Đảm bảo một lớp chỉ có một thể hiện duy nhất.
C. Tạo ra các đối tượng mà không cần chỉ định chính xác lớp của chúng.
D. Thông báo cho nhiều đối tượng về sự thay đổi trạng thái của một đối tượng.

128. Mẫu thiết kế ‘Strategy’ thuộc nhóm mẫu nào?

A. Behavioral Patterns (Mẫu hành vi).
B. Creational Patterns (Mẫu tạo sinh).
C. Structural Patterns (Mẫu cấu trúc).
D. Gang of Four Patterns (Mẫu của Bốn).

129. Trong OOP, ‘virtual’ keyword (trong một số ngôn ngữ như C++) thường được sử dụng với phương thức để:

A. Cho phép phương thức đó có thể bị ghi đè (override) bởi các lớp con.
B. Ngăn chặn phương thức đó bị ghi đè bởi các lớp con.
C. Làm cho phương thức đó là static.
D. Che giấu hoàn toàn phương thức đó.

130. Nguyên tắc ‘Open/Closed Principle’ (OCP) trong SOLID đề cập đến việc:

A. Các thực thể phần mềm (lớp, module, hàm, v.v.) nên mở để mở rộng nhưng đóng để sửa đổi.
B. Tất cả các lớp phải có thể truy cập dữ liệu của nhau.
C. Các lớp con phải có thể ghi đè mọi phương thức của lớp cha.
D. Mọi lớp phải có ít nhất một constructor.

131. Khái niệm ‘Encapsulation’ trong Lập trình hướng đối tượng (OOP) nhằm mục đích chính là gì?

A. Che giấu dữ liệu nội bộ của đối tượng và chỉ cho phép truy cập thông qua các phương thức công khai (public methods), giúp bảo vệ tính toàn vẹn của dữ liệu và kiểm soát cách dữ liệu được thay đổi.
B. Tạo ra các lớp con kế thừa toàn bộ thuộc tính và phương thức từ lớp cha để tái sử dụng mã.
C. Cho phép một đối tượng có thể có nhiều hình dạng khác nhau, tùy thuộc vào kiểu dữ liệu thực tế của biến.
D. Cung cấp một giao diện chung cho một tập hợp các lớp có quan hệ với nhau, đảm bảo chúng có các phương thức chung.

132. Phát biểu nào sau đây mô tả đúng nhất mối quan hệ ‘Composition’ (Thành phần) giữa các lớp trong OOP?

A. Một lớp chứa các đối tượng của lớp khác như là một phần của nó, thể hiện mối quan hệ ‘có một’ (has-a).
B. Một lớp kế thừa tất cả các thuộc tính và phương thức từ một lớp cha.
C. Một lớp có thể có nhiều hình dạng, tùy thuộc vào kiểu dữ liệu của biến.
D. Một lớp cung cấp một tập hợp các phương thức mà không có dữ liệu liên quan.

133. Đâu là một ví dụ về ‘Constructor’ (Hàm tạo) trong OOP?

A. Một phương thức đặc biệt trong lớp, có tên trùng với tên lớp, được gọi tự động khi một đối tượng của lớp đó được tạo ra để khởi tạo trạng thái của đối tượng.
B. Một phương thức dùng để giải phóng bộ nhớ mà đối tượng đã sử dụng khi đối tượng không còn được tham chiếu.
C. Một phương thức có thể được ghi đè (override) bởi các lớp con để cung cấp hành vi cụ thể.
D. Một phương thức chỉ được định nghĩa trong lớp trừu tượng và không có phần thân, yêu cầu lớp con triển khai.

134. Nguyên tắc ‘Single Responsibility Principle’ (SRP) trong SOLID đề xuất rằng một lớp nên:

A. Chỉ có một lý do để thay đổi, nghĩa là chỉ chịu trách nhiệm cho một chức năng hoặc một khía cạnh cụ thể của phần mềm.
B. Có thể kế thừa từ nhiều lớp cha cùng lúc.
C. Chỉ chứa các phương thức trừu tượng.
D. Có thể truy cập dữ liệu của bất kỳ lớp nào khác.

135. Trong OOP, thuật ngữ ‘Cohesion’ (Sự gắn kết) đề cập đến:

A. Mức độ mà các yếu tố bên trong một module hoặc lớp có liên quan chặt chẽ và cùng hướng đến một mục tiêu chung.
B. Mức độ mà một lớp phụ thuộc vào các lớp khác.
C. Khả năng một đối tượng có thể có nhiều hình dạng.
D. Khả năng một lớp chỉ có một lý do để thay đổi.

136. Từ khóa ‘private’ trong OOP có ý nghĩa gì đối với các thành viên của lớp?

A. Các thành viên chỉ có thể truy cập được từ bên trong chính lớp đó, không thể truy cập từ lớp con hay bên ngoài.
B. Có thể truy cập từ bên trong lớp và từ các lớp con.
C. Có thể truy cập từ bất kỳ đâu.
D. Có thể được ghi đè bởi các lớp con.

137. Để đạt được ‘High Cohesion’ trong một lớp, một lập trình viên nên:

A. Đảm bảo các phương thức và thuộc tính trong lớp đều tập trung vào một chức năng hoặc nhiệm vụ duy nhất.
B. Cho phép lớp này phụ thuộc vào càng nhiều lớp khác càng tốt.
C. Tạo ra các phương thức với nhiều trách nhiệm khác nhau.
D. Sử dụng các biến toàn cục cho tất cả các thuộc tính.

138. Nguyên tắc ‘Dependency Inversion Principle’ (DIP) trong SOLID đề xuất rằng:

A. Các module cấp cao không nên phụ thuộc vào các module cấp thấp; cả hai nên phụ thuộc vào các trừu tượng hóa, và các trừu tượng hóa không nên phụ thuộc vào chi tiết.
B. Các lớp con không nên ghi đè phương thức của lớp cha.
C. Một lớp chỉ nên chứa một phương thức.
D. Dữ liệu không nên được che giấu.

139. Khái niệm ‘Data Hiding’ (Che giấu dữ liệu) trong OOP tương tự với nguyên tắc nào?

A. Encapsulation (Đóng gói).
B. Inheritance (Kế thừa).
C. Polymorphism (Đa hình).
D. Abstraction (Trừu tượng hóa).

140. Khái niệm ‘Delegation’ (Ủy quyền) trong OOP là gì?

A. Một đối tượng chuyển giao một phần hoặc toàn bộ trách nhiệm của mình cho một đối tượng khác.
B. Một đối tượng kế thừa tất cả các thuộc tính của đối tượng khác.
C. Một đối tượng che giấu hoàn toàn dữ liệu của mình.
D. Một đối tượng có thể có nhiều hình dạng.

141. Khái niệm ‘Abstract Class’ (Lớp trừu tượng) trong OOP có đặc điểm gì?

A. Là một lớp không thể tạo đối tượng trực tiếp từ nó, có thể chứa cả phương thức trừu tượng (không có thân) và phương thức thông thường, dùng để làm lớp cơ sở cho các lớp khác.
B. Là một lớp mà tất cả các phương thức của nó đều là private.
C. Là một lớp mà tất cả các phương thức của nó đều là static.
D. Là một lớp mà tất cả các phương thức của nó đều phải được triển khai bởi lớp con.

142. Khái niệm ‘Method Overloading’ (Quá tải phương thức) cho phép:

A. Một lớp có nhiều phương thức cùng tên nhưng khác nhau về số lượng, kiểu dữ liệu hoặc thứ tự các tham số đầu vào.
B. Một lớp con ghi đè (override) một phương thức của lớp cha để cung cấp hành vi khác.
C. Một lớp có thể triển khai các phương thức được định nghĩa trong một giao diện.
D. Một đối tượng có thể thực hiện các hành động khác nhau dựa trên cùng một lời gọi phương thức.

143. Trong OOP, ‘Method Overriding’ (Ghi đè phương thức) xảy ra khi:

A. Một lớp con cung cấp một triển khai cụ thể cho một phương thức đã được định nghĩa trong lớp cha, với cùng tên, kiểu trả về và danh sách tham số.
B. Một lớp định nghĩa nhiều phương thức có cùng tên nhưng khác nhau về danh sách tham số.
C. Một lớp che giấu dữ liệu nội bộ và chỉ cho phép truy cập qua các phương thức công khai.
D. Một lớp sử dụng các phương thức từ một lớp trừu tượng.

144. Đâu là một ví dụ về ‘Interface’ (Giao diện) trong OOP?

A. Một hợp đồng định nghĩa một tập hợp các phương thức mà một lớp phải triển khai, nhưng không cung cấp phần thân cho các phương thức đó.
B. Một lớp cơ sở có thể được kế thừa nhưng không thể tạo đối tượng trực tiếp từ nó.
C. Một lớp chứa các biến thành viên và các phương thức có thể được truy cập từ bất kỳ đâu.
D. Một cơ chế cho phép một đối tượng có nhiều hình dạng.

145. Mẫu thiết kế ‘Factory Method’ thuộc nhóm mẫu nào?

A. Creational Patterns (Mẫu tạo sinh).
B. Structural Patterns (Mẫu cấu trúc).
C. Behavioral Patterns (Mẫu hành vi).
D. Architectural Patterns (Mẫu kiến trúc).

146. Mẫu thiết kế ‘Singleton’ có mục đích chính là gì?

A. Đảm bảo rằng một lớp chỉ có duy nhất một thể hiện (instance) và cung cấp một điểm truy cập toàn cục đến thể hiện đó.
B. Tạo ra nhiều đối tượng của cùng một lớp.
C. Cho phép một lớp kế thừa từ nhiều lớp khác nhau.
D. Che giấu hoàn toàn dữ liệu của đối tượng.

147. Mẫu thiết kế ‘Decorator’ thuộc nhóm mẫu nào?

A. Structural Patterns (Mẫu cấu trúc).
B. Creational Patterns (Mẫu tạo sinh).
C. Behavioral Patterns (Mẫu hành vi).
D. Gang of Four Patterns (Mẫu của Bốn).

148. Đâu là một kỹ thuật để giảm ‘Coupling’ trong OOP?

A. Sử dụng các Interface hoặc lớp trừu tượng để định nghĩa các hợp đồng, thay vì phụ thuộc trực tiếp vào các lớp cụ thể.
B. Tăng cường sử dụng các biến thành viên public.
C. Cố gắng làm cho các lớp có càng nhiều phụ thuộc càng tốt.
D. Ghi đè tất cả các phương thức của lớp cha.

149. Trong lập trình hướng đối tượng, ‘Abstraction’ (Trừu tượng hóa) là quá trình:

A. Tập trung vào những thuộc tính và hành vi quan trọng của đối tượng, đồng thời ẩn đi những chi tiết phức tạp không cần thiết cho người dùng, tạo ra một mô hình đơn giản hóa.
B. Tạo ra một lớp cha và cho phép các lớp con kế thừa tất cả các thuộc tính và phương thức của nó.
C. Đảm bảo rằng dữ liệu của một đối tượng chỉ có thể được truy cập và sửa đổi thông qua các phương thức của chính đối tượng đó.
D. Cho phép một đối tượng có thể được xem là một thể hiện của nhiều kiểu dữ liệu khác nhau.

150. Khi một lớp triển khai một Interface, lớp đó phải:

A. Cung cấp phần thân (implementation) cho tất cả các phương thức được khai báo trong Interface.
B. Kế thừa tất cả các thuộc tính từ Interface.
C. Chỉ định nghĩa các phương thức trừu tượng.
D. Trở thành một lớp trừu tượng.

151. Khái niệm ‘Polymorphism’ (Đa hình) trong OOP thể hiện điều gì?

A. Khả năng các đối tượng thuộc các lớp khác nhau phản hồi cùng một thông điệp (lời gọi phương thức) theo cách riêng của chúng, cho phép một giao diện chung xử lý các đối tượng thuộc nhiều kiểu khác nhau.
B. Việc một lớp có thể sở hữu nhiều phương thức cùng tên nhưng khác nhau về tham số đầu vào.
C. Việc đóng gói dữ liệu và các phương thức xử lý dữ liệu đó vào một đơn vị duy nhất để bảo vệ tính toàn vẹn.
D. Khả năng một đối tượng có thể có nhiều hình dạng, tùy thuộc vào ngữ cảnh sử dụng.

152. Nguyên tắc ‘Interface Segregation Principle’ (ISP) trong SOLID khuyên rằng:

A. Khách hàng không nên bị buộc phải phụ thuộc vào các phương thức mà họ không sử dụng; nên tạo ra các giao diện nhỏ, cụ thể.
B. Một lớp chỉ nên có một lý do để thay đổi.
C. Các lớp con phải có thể thay thế cho lớp cha.
D. Các lớp nên mở để mở rộng nhưng đóng để sửa đổi.

153. Khái niệm ‘SOLID principles’ trong OOP nhằm mục đích gì?

A. Cung cấp một bộ các nguyên tắc thiết kế giúp tạo ra các hệ thống phần mềm dễ hiểu, linh hoạt, dễ bảo trì và có khả năng mở rộng.
B. Đảm bảo mọi đối tượng đều có thể truy cập dữ liệu của mọi đối tượng khác.
C. Tạo ra các lớp có thể ghi đè mọi phương thức của lớp cha.
D. Buộc tất cả các lớp phải có ít nhất một phương thức trừu tượng.

154. Trong OOP, ‘Static’ (Tĩnh) keyword được sử dụng cho thành viên của lớp với mục đích gì?

A. Thuộc về lớp thay vì thuộc về một thể hiện (instance) cụ thể của lớp; các thành viên static được chia sẻ bởi tất cả các đối tượng của lớp đó.
B. Chỉ có thể truy cập từ bên trong lớp đó.
C. Không thể truy cập từ bên ngoài lớp.
D. Chỉ có thể được gọi bởi một đối tượng duy nhất của lớp.

155. Trong OOP, thuật ngữ ‘Coupling’ (Sự ràng buộc) đề cập đến:

A. Mức độ mà một module hoặc lớp phụ thuộc vào các module hoặc lớp khác.
B. Khả năng một lớp che giấu dữ liệu nội bộ của nó.
C. Khả năng một đối tượng có thể có nhiều hình dạng.
D. Mức độ mà một lớp có một trách nhiệm duy nhất.

156. Đâu là một ví dụ về ‘Design Pattern’ (Mẫu thiết kế) trong OOP?

A. Một giải pháp chung, có thể tái sử dụng cho một vấn đề phổ biến xảy ra trong thiết kế phần mềm, ví dụ như Singleton, Factory, Observer.
B. Một quy tắc bắt buộc phải tuân theo trong mọi dự án OOP.
C. Một kiểu dữ liệu nguyên thủy như int hoặc float.
D. Một cấu trúc điều khiển luồng như if-else hoặc for loop.

157. Trong OOP, ‘Inheritance’ (Kế thừa) cho phép một lớp mới:

A. Kế thừa các thuộc tính và phương thức từ một hoặc nhiều lớp cha, cho phép tái sử dụng mã và xây dựng mối quan hệ ‘là một’ (is-a).
B. Truy cập trực tiếp vào dữ liệu riêng tư (private data) của lớp khác để thay đổi giá trị.
C. Biểu diễn các hành vi khác nhau dựa trên cùng một giao diện, cho phép các đối tượng thuộc các lớp khác nhau phản hồi cùng một lời gọi phương thức theo cách riêng của chúng.
D. Tạo ra một bản sao độc lập của một đối tượng hiện có, bao gồm cả trạng thái và hành vi của nó.

158. Trong OOP, ‘Composition over Inheritance’ là một mẫu thiết kế khuyến khích điều gì?

A. Ưu tiên sử dụng mối quan hệ ‘has-a’ (Composition) thay vì mối quan hệ ‘is-a’ (Inheritance) để tạo ra sự linh hoạt và giảm sự phụ thuộc chặt chẽ giữa các lớp.
B. Chỉ sử dụng kế thừa và tránh mọi hình thức composition.
C. Tạo ra các lớp trừu tượng thay vì các lớp cụ thể.
D. Luôn luôn ghi đè mọi phương thức của lớp cha.

159. Trong OOP, khi một lớp kế thừa từ một lớp khác, lớp được kế thừa gọi là gì?

A. Lớp cha (Superclass/Parent Class/Base Class).
B. Lớp con (Subclass/Child Class/Derived Class).
C. Lớp trừu tượng (Abstract Class).
D. Lớp giao diện (Interface Class).

160. Đâu là một ví dụ về mối quan hệ ‘Aggregation’ (Tập hợp) trong OOP?

A. Một lớp chứa các đối tượng của lớp khác, nhưng vòng đời của các đối tượng được chứa không phụ thuộc vào vòng đời của lớp chứa nó (mối quan hệ ‘has-a’ lỏng lẻo).
B. Một lớp kế thừa tất cả các thuộc tính và phương thức từ lớp cha, với vòng đời phụ thuộc.
C. Một lớp che giấu dữ liệu nội bộ và chỉ cho phép truy cập qua các phương thức công khai.
D. Một lớp có thể có nhiều hình dạng khác nhau.

161. Nếu một lớp cha có một phương thức được đánh dấu là ‘final’ (hoặc tương đương trong ngôn ngữ lập trình), lớp con có thể làm gì với phương thức đó?

A. Ghi đè (Override) phương thức đó.
B. Tải lại (Overload) phương thức đó.
C. Không thể ghi đè (Override) phương thức đó.
D. Gọi phương thức đó từ lớp cha.

162. Một lớp có thể kế thừa từ bao nhiêu lớp cha trực tiếp trong hầu hết các ngôn ngữ OOP phổ biến (như Java, C#)?

A. Một
B. Hai
C. Nhiều
D. Không giới hạn

163. Khái niệm ‘Upcasting’ trong OOP đề cập đến việc gì?

A. Chuyển đổi một đối tượng từ lớp cha sang một kiểu lớp con.
B. Chuyển đổi một đối tượng từ lớp con sang một kiểu lớp cha.
C. Chuyển đổi một đối tượng sang kiểu nguyên thủy.
D. Chuyển đổi một đối tượng sang một lớp không liên quan.

164. Khái niệm ‘Abstraction’ thường được triển khai bằng cách nào trong OOP?

A. Chỉ sử dụng lớp trừu tượng và phương thức trừu tượng.
B. Đóng gói tất cả dữ liệu và phương thức.
C. Ghi đè tất cả phương thức của lớp cha.
D. Tạo nhiều đối tượng từ một lớp.

165. Trong OOP, một lớp có thể có nhiều bản sao (thể hiện) độc lập của chính nó. Mỗi bản sao này được gọi là gì?

A. Thuộc tính (Attribute)
B. Lớp (Class)
C. Phương thức (Method)
D. Đối tượng (Object)

166. Khái niệm nào trong OOP tập trung vào việc ẩn đi các chi tiết triển khai nội bộ và chỉ hiển thị những gì cần thiết cho người dùng?

A. Đa hình (Polymorphism)
B. Kế thừa (Inheritance)
C. Trừu tượng hóa (Abstraction)
D. Đóng gói (Encapsulation)

167. Trong OOP, mục tiêu của ‘Low Coupling’ (Sự ràng buộc thấp) là gì?

A. Tăng cường sự phụ thuộc giữa các lớp.
B. Giúp mã nguồn dễ bảo trì, tái sử dụng và ít bị ảnh hưởng bởi thay đổi.
C. Giảm số lượng phương thức trong mỗi lớp.
D. Đảm bảo tất cả các lớp đều là lớp trừu tượng.

168. Nếu bạn muốn tạo một phương thức trong lớp cha mà lớp con có thể ghi đè và bạn muốn đảm bảo rằng lớp con *phải* ghi đè nó, bạn sẽ sử dụng định danh nào (tùy thuộc ngôn ngữ)?

A. final
B. abstract
C. static
D. public

169. Một lớp không thể được khởi tạo trực tiếp và thường được sử dụng làm lớp cơ sở cho các lớp khác. Lớp này được gọi là gì?

A. Lớp cha (Superclass)
B. Lớp con (Subclass)
C. Lớp trừu tượng (Abstract Class)
D. Lớp cuối (Final Class)

170. Trong OOP, ‘Cohesion’ (Sự gắn kết) đo lường điều gì?

A. Mức độ phụ thuộc giữa các lớp.
B. Mức độ liên quan và tập trung của các trách nhiệm trong một lớp hoặc module.
C. Số lượng phương thức trong một lớp.
D. Khả năng kế thừa của một lớp.

171. Tại sao việc sử dụng các phương thức ‘getter’ và ‘setter’ lại quan trọng trong việc thực hiện đóng gói (Encapsulation)?

A. Để cho phép truy cập trực tiếp vào thuộc tính của lớp.
B. Để kiểm soát việc truy cập và sửa đổi dữ liệu của thuộc tính, thêm logic xác thực nếu cần.
C. Để tăng tốc độ truy xuất dữ liệu.
D. Để bắt buộc sử dụng kế thừa.

172. Đâu là một ví dụ về mối quan hệ ‘is-a’ trong OOP?

A. Một ‘Xe Hơi’ ‘có một’ ‘Động cơ’.
B. Một ‘Chó’ ‘là một’ ‘Động vật có vú’.
C. Một ‘Cửa hàng’ ‘có một’ ‘Nhân viên’.
D. Một ‘Cuốn sách’ ‘có một’ ‘Trang’.

173. Khái niệm ‘Abstract Method’ (Phương thức trừu tượng) trong một lớp trừu tượng yêu cầu điều gì?

A. Phương thức đó phải có một triển khai mặc định.
B. Phương thức đó phải được ghi đè (override) bởi các lớp con.
C. Phương thức đó có thể được gọi trực tiếp từ lớp trừu tượng.
D. Phương thức đó không cần có chữ ký (signature).

174. Khi một lớp cha và lớp con có cùng tên phương thức, nhưng triển khai khác nhau, hành vi này được gọi là gì?

A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Trừu tượng hóa (Abstraction)
D. Đa hình (Polymorphism)

175. Khái niệm ‘Interface’ trong OOP có vai trò gì?

A. Cung cấp triển khai mặc định cho các phương thức.
B. Định nghĩa một ‘hợp đồng’ gồm các phương thức mà lớp triển khai phải cung cấp.
C. Cho phép một lớp kế thừa từ nhiều lớp khác.
D. Đóng gói tất cả dữ liệu và phương thức vào một đơn vị.

176. Khái niệm ‘Encapsulation’ giúp ích gì cho việc phát triển phần mềm theo quan điểm quản lý lỗi?

A. Nó làm tăng khả năng xảy ra lỗi do quá nhiều truy cập.
B. Nó giúp cô lập các thay đổi và giới hạn phạm vi ảnh hưởng của lỗi.
C. Nó loại bỏ hoàn toàn khả năng xảy ra lỗi.
D. Nó làm cho việc gỡ lỗi trở nên phức tạp hơn.

177. Trong các ngôn ngữ OOP hỗ trợ đa kế thừa cho lớp (ví dụ: C++), vấn đề ‘Diamond Problem’ (Vấn đề kim cương) phát sinh khi nào?

A. Khi một lớp kế thừa từ một lớp duy nhất.
B. Khi hai lớp kế thừa từ cùng một lớp cha, và một lớp khác lại kế thừa từ cả hai lớp đó.
C. Khi một lớp có hai phương thức cùng tên nhưng khác tham số.
D. Khi một lớp không thể ghi đè phương thức của lớp cha.

178. Trong ngữ cảnh của OOP, ‘Polymorphism’ giúp ích gì cho việc phát triển phần mềm?

A. Giảm thiểu số lượng lớp cần thiết.
B. Tăng cường khả năng mở rộng và bảo trì mã nguồn.
C. Đảm bảo tất cả các thuộc tính đều là private.
D. Ngăn chặn việc tạo đối tượng từ lớp trừu tượng.

179. Trong OOP, ‘Constructor Chaining’ (Chuỗi Constructor) đề cập đến hành động gì?

A. Một lớp có nhiều constructor.
B. Một constructor gọi một constructor khác trong cùng lớp.
C. Một constructor của lớp con gọi constructor của lớp cha.
D. Một constructor gọi một phương thức khác.

180. Khái niệm ‘Duck Typing’ (Gõ vịt) trong một số ngôn ngữ lập trình (như Python, Ruby) khác biệt với kiểu gõ mạnh (strong typing) của OOP truyền thống như thế nào?

A. Duck typing tập trung vào kiểu dữ liệu khai báo, còn strong typing tập trung vào hành vi.
B. Trong duck typing, một đối tượng được coi là thuộc một kiểu nếu nó có các phương thức và thuộc tính cần thiết, bất kể kiểu khai báo chính thức của nó; ngược lại, strong typing dựa vào kiểu khai báo rõ ràng.
C. Duck typing yêu cầu tất cả các lớp phải kế thừa từ một lớp cơ sở chung.
D. Strong typing cho phép đa hình, còn duck typing thì không.

181. Đâu là đặc điểm chính của đóng gói (Encapsulation) trong OOP?

A. Cho phép một phương thức có nhiều biểu hiện khác nhau.
B. Liên kết dữ liệu (thuộc tính) và các phương thức xử lý dữ liệu đó vào một đơn vị duy nhất.
C. Cho phép một lớp kế thừa từ nhiều lớp cha.
D. Ẩn đi các chi tiết triển khai phức tạp, chỉ hiển thị giao diện cần thiết.

182. Trong một lớp, các thuộc tính thường được khai báo với mức truy cập nào để đảm bảo tính đóng gói?

A. Public
B. Protected
C. Private
D. Default (package-private)

183. Đâu là một ví dụ về ‘Coupling’ (Sự ràng buộc) trong OOP?

A. Một lớp không phụ thuộc vào bất kỳ lớp nào khác.
B. Một lớp phụ thuộc vào việc triển khai chi tiết của một lớp khác.
C. Một lớp chỉ sử dụng các phương thức trừu tượng.
D. Một lớp chỉ có các phương thức public.

184. Khi một lớp A kế thừa từ lớp B, và lớp B kế thừa từ lớp C, thì lớp A cũng có thể truy cập các thành viên của lớp nào?

A. Chỉ lớp B.
B. Chỉ lớp C.
C. Cả lớp B và lớp C.
D. Không lớp nào trong số B và C.

185. Làm thế nào để một lớp có thể thực hiện nhiều ‘hợp đồng’ khác nhau mà không vi phạm nguyên tắc kế thừa đơn?

A. Bằng cách ghi đè (override) tất cả các phương thức của lớp cha.
B. Bằng cách sử dụng đa hình (polymorphism).
C. Bằng cách triển khai (implement) nhiều interface.
D. Bằng cách sử dụng đóng gói (encapsulation).

186. Nếu một lớp cha có phương thức ‘protected’, thì lớp con có thể làm gì với phương thức đó?

A. Truy cập trực tiếp từ bất kỳ lớp nào.
B. Truy cập và ghi đè (override) từ lớp con.
C. Không thể truy cập hoặc ghi đè.
D. Chỉ có thể gọi từ lớp cha.

187. Khái niệm ‘Virtual Method’ (Phương thức ảo) trong một số ngôn ngữ OOP (như C++) có ý nghĩa gì?

A. Phương thức này không thể được ghi đè (override) bởi lớp con.
B. Phương thức này có thể được ghi đè (override) bởi lớp con, và việc gọi phương thức sẽ được quyết định tại thời điểm chạy.
C. Phương thức này chỉ có thể được gọi từ lớp cha.
D. Phương thức này không yêu cầu bất kỳ tham số nào.

188. Trong OOP, khi một lớp cha có một phương thức được đánh dấu là ‘abstract’ và lớp con không ghi đè nó, điều gì sẽ xảy ra?

A. Chương trình sẽ chạy bình thường.
B. Lớp con đó sẽ trở thành lớp trừu tượng.
C. Lỗi biên dịch (compile-time error).
D. Phương thức của lớp cha sẽ được sử dụng.

189. Trong OOP, ‘static’ keyword thường được sử dụng để chỉ điều gì?

A. Rằng thành viên thuộc về một đối tượng cụ thể.
B. Rằng thành viên thuộc về lớp, không phải đối tượng riêng lẻ, và chia sẻ giữa tất cả các đối tượng.
C. Rằng thành viên không thể được truy cập từ bên ngoài lớp.
D. Rằng thành viên là phương thức trừu tượng.

190. Khái niệm ‘Object-Oriented Programming’ (OOP) được xây dựng dựa trên các nguyên tắc cơ bản nào?

A. Cấu trúc, tuần tự, lựa chọn.
B. Kế thừa, đóng gói, trừu tượng hóa, đa hình.
C. Vòng lặp, điều kiện, hàm.
D. Quản lý bộ nhớ, biên dịch, liên kết.

191. Trong lập trình hướng đối tượng (OOP), khái niệm nào cho phép một lớp kế thừa các thuộc tính và phương thức từ một lớp khác, thúc đẩy việc tái sử dụng mã?

A. Đóng gói (Encapsulation)
B. Trừu tượng hóa (Abstraction)
C. Kế thừa (Inheritance)
D. Đa hình (Polymorphism)

192. Khái niệm ‘Late Binding’ (Liên kết muộn) thường gắn liền với đặc điểm nào của OOP?

A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Trừu tượng hóa (Abstraction)
D. Đa hình (Polymorphism)

193. Đâu là một ví dụ về mối quan hệ ‘has-a’ trong OOP?

A. Một ‘Mèo’ ‘là một’ ‘Động vật có vú’.
B. Một ‘Xe ô tô’ ‘là một’ ‘Phương tiện di chuyển’.
C. Một ‘Máy tính’ ‘có một’ ‘Bàn phím’.
D. Một ‘Nhân viên’ ‘là một’ ‘Con người’.

194. Trong OOP, ‘Finalizer’ (hay Destructor trong C++) có vai trò gì?

A. Khởi tạo đối tượng.
B. Giải phóng tài nguyên không được quản lý (unmanaged resources) trước khi đối tượng bị hủy.
C. Đảm bảo phương thức được ghi đè.
D. Kiểm soát việc truy cập dữ liệu.

195. Khái niệm ‘Downcasting’ trong OOP đề cập đến việc gì?

A. Chuyển đổi một đối tượng từ lớp cha sang một kiểu lớp con.
B. Chuyển đổi một đối tượng từ lớp con sang một kiểu lớp cha.
C. Chuyển đổi một đối tượng từ lớp này sang một lớp không liên quan.
D. Chuyển đổi một đối tượng sang kiểu nguyên thủy.

196. Đâu là một ví dụ điển hình về ‘Design Pattern’ (Mẫu thiết kế) phổ biến trong OOP?

A. Vòng lặp for (for loop).
B. Biến toàn cục (Global variable).
C. Singleton Pattern.
D. Mảng (Array).

197. Trong OOP, ‘Method Overloading’ (Tải lại phương thức) cho phép điều gì?

A. Một lớp có thể có nhiều phương thức với cùng tên nhưng có chữ ký (parameter list) khác nhau.
B. Một lớp có thể ghi đè phương thức của lớp cha.
C. Một lớp có thể kế thừa thuộc tính và phương thức từ nhiều lớp cha.
D. Một phương thức có thể thay đổi hành vi dựa trên kiểu dữ liệu của đối tượng.

198. Phương thức nào trong OOP có cùng tên với lớp và được gọi tự động khi một đối tượng của lớp đó được tạo ra?

A. Destructor
B. Constructor
C. Method Overriding
D. Method Overloading

199. Mục tiêu của ‘High Cohesion’ (Sự gắn kết cao) trong thiết kế lớp OOP là gì?

A. Làm cho mỗi lớp thực hiện càng nhiều chức năng càng tốt.
B. Giúp lớp tập trung vào một trách nhiệm duy nhất, làm cho nó dễ hiểu, dễ bảo trì và tái sử dụng hơn.
C. Tăng sự phụ thuộc giữa các lớp.
D. Giảm số lượng phương thức trong lớp.

200. Trong OOP, ‘Composition’ và ‘Aggregation’ đều mô tả mối quan hệ ‘has-a’ (có một). Điểm khác biệt chính giữa chúng là gì?

A. Composition thể hiện mối quan hệ ‘is-a’, còn Aggregation thể hiện mối quan hệ ‘has-a’.
B. Trong Composition, đối tượng thành phần không thể tồn tại độc lập hoặc được chia sẻ với các đối tượng khác, còn trong Aggregation thì có thể.
C. Aggregation yêu cầu tất cả các phương thức phải được ghi đè, còn Composition thì không.
D. Composition chỉ áp dụng cho các lớp trừu tượng, còn Aggregation áp dụng cho mọi loại lớp.

Số câu đã làm: 0/0
Thời gian còn lại: 00:00:00
  • Đã làm
  • Chưa làm
  • Cần kiểm tra lại

Về Phần Mềm Trọn Đời

Phần Mềm Trọn Đời - Blog cá nhân, chuyên chia sẻ kiến thức về công nghệ, thủ thuật công nghệ, game PC, Mobile, thủ thuật Game, đồ họa, video,…

Gmail: info.phanmemtrondoi@gmail.com

Địa chỉ: 123 Đ Nguyễn Văn Tăng, Long Thạnh Mỹ, Thủ Đức, Hồ Chí Minh 700000, Việt Nam

Giờ làm việc: T2-CN: 09:00 – 17:00

Social

  • LinkedIn
  • Pinterest
  • Tumblr
  • Gravatar
  • Vimeo

Miễn Trừ Trách Nhiệm

Các thông tin trên trang web này chỉ dành cho mục đích tham khảo và tra cứu.

Phần Mềm Trọn Đời không chịu trách nhiệm dưới bất kỳ hình thức nào đối với các thiệt hại, dù là trực tiếp hay gián tiếp, phát sinh từ việc sử dụng hoặc làm theo các nội dung trên trang web.

Phần Mềm Trọn Đời được xây dựng nhằm mục đích thử nghiệm, hỗ trợ học tập và nghiên cứu.

Bộ câu hỏi và đáp án trên trang Trắc nghiệm chỉ mang tính chất tham khảo, nhằm hỗ trợ quá trình học tập và ôn luyện. KHÔNG PHẢI là đề thi chính thức và không đại diện cho bất kỳ tài liệu chuẩn hóa hay kỳ thi cấp chứng chỉ nào từ các cơ quan giáo dục hoặc tổ chức cấp chứng chỉ chuyên ngành. Website không chịu trách nhiệm về tính chính xác của câu hỏi, đáp án cũng như bất kỳ quyết định nào được đưa ra dựa trên kết quả từ bài trắc nghiệm.

Chịu Trách Nhiệm Nội Dung

Blogger Công Nghệ: Phần Mềm Trọn Đời

Mọi vấn đề liên quan đến bản quyền nội dung vui lòng liên hệ qua Gmail: info.phanmemtrondoi@gmail.com

Website Cùng Hệ Thống

All Thing Share - Sharing | Knowledge | Technology | Tips | Pets | Life Tài Liệu Trọn Đời - Thư Viện Tài Liệu Học Tập Miễn Phí Kiến Thức Live - Tin Tức | Kiến Thức Cuộc Sống | Công Nghệ All Thing Pet – We Love Pets Trending New 24h - Cập Nhật Xu Hướng | Trend | News 24h
Copyright © 2025 Phần Mềm Trọn Đời

Bạn ơi!!! Để xem được kết quả, bạn vui lòng làm nhiệm vụ nhỏ xíu này nha

HƯỚNG DẪN TÌM MẬT KHẨU

Đang tải nhiệm vụ...

Bước 1: Mở tab mới và truy cập Google.com. Sau đó tìm kiếm chính xác từ khóa sau:

Bước 2: Tìm và click vào kết quả có trang web giống như hình ảnh dưới đây:

Hướng dẫn tìm kiếm

Bước 3: Kéo xuống cuối trang đó để tìm mật khẩu như hình ảnh hướng dẫn:

Hướng dẫn lấy mật khẩu

Nếu tìm không thấy mã bạn có thể Đổi nhiệm vụ để lấy mã khác nhé.