1. Khi nào nên sử dụng 'abstract class′ thay vì 'interface′?
A. Khi muốn lớp con kế thừa nhiều hành vi từ nhiều nguồn khác nhau.
B. Khi muốn định nghĩa một 'hợp đồng′ mà các lớp thực thi phải tuân theo, không cung cấp bất kỳ cài đặt mặc định nào.
C. Khi muốn cung cấp một số cài đặt mặc định (phương thức không trừu tượng) và kế thừa trạng thái (thuộc tính) cho các lớp con.
D. Khi muốn tối ưu hóa hiệu suất của chương trình.
2. Mục đích chính của 'tính trừu tượng′ (abstraction) trong lập trình hướng đối tượng là gì?
A. Tăng tính bảo mật cho dữ liệu
B. Giảm sự phức tạp và tập trung vào chức năng cốt lõi
C. Tái sử dụng mã nguồn một cách hiệu quả
D. Cải thiện hiệu suất của chương trình
3. Mối quan hệ 'has-a′ trong OOP thường được thể hiện thông qua cơ chế nào?
A. Quan hệ kế thừa (Inheritance)
B. Quan hệ đa hình (Polymorphism)
C. Quan hệ hợp thành (Composition) hoặc kết hợp (Association)
D. Quan hệ trừu tượng (Abstraction)
4. Ưu điểm của việc sử dụng 'composition′ (hợp thành) so với 'inheritance′ (kế thừa) trong thiết kế OOP là gì?
A. Composition tạo ra mối quan hệ 'is-a′ rõ ràng hơn.
B. Composition cho phép tái sử dụng mã nguồn tốt hơn và linh hoạt hơn, tránh vấn đề 'kế thừa mong manh′.
C. Inheritance giúp giảm sự phụ thuộc giữa các lớp.
D. Inheritance luôn dễ hiểu và dễ bảo trì hơn composition.
5. Design Pattern (Mẫu thiết kế) là gì trong lập trình hướng đối tượng?
A. Một lỗi thường gặp trong thiết kế phần mềm OOP.
B. Một giải pháp đã được kiểm chứng cho các vấn đề thiết kế phần mềm thường gặp.
C. Một thuật toán đặc biệt để tối ưu hóa hiệu suất.
D. Một tiêu chuẩn ngôn ngữ lập trình OOP.
6. Nguyên tắc 'thay thế Liskov′ (Liskov Substitution Principle) phát biểu điều gì?
A. Các lớp dẫn xuất phải có thể thay thế hoàn toàn cho lớp cơ sở của chúng mà không làm thay đổi tính đúng đắn của chương trình.
B. Các lớp nên được mở rộng để thêm chức năng mới, nhưng đóng lại đối với việc sửa đổi mã nguồn hiện có.
C. Nhiều giao diện đặc thù tốt hơn là một giao diện chung chung.
D. Phụ thuộc vào trừu tượng, không phụ thuộc vào chi tiết.
7. Trong mô hình MVC (Model-View-Controller), thành phần 'Controller′ chịu trách nhiệm chính nào?
A. Hiển thị dữ liệu cho người dùng.
B. Quản lý dữ liệu và logic nghiệp vụ.
C. Xử lý tương tác người dùng và cập nhật Model∕View.
D. Lưu trữ dữ liệu vào cơ sở dữ liệu.
8. Phương pháp tiếp cận 'Test-Driven Development′ (TDD) liên quan mật thiết đến nguyên tắc OOP nào?
A. Tính đóng gói (Encapsulation)
B. Tính trừu tượng (Abstraction)
C. Nguyên tắc kiểm thử đơn vị (Unit Testing) và thiết kế hướng giao diện.
D. Tính đa hình (Polymorphism)
9. Khi nào thì việc sử dụng 'multiple inheritance′ (đa kế thừa) trong OOP có thể gây ra vấn đề 'diamond problem′?
A. Khi các lớp cha có cùng tên phương thức hoặc thuộc tính.
B. Khi lớp con ghi đè phương thức của một trong các lớp cha.
C. Khi lớp con kế thừa từ hai lớp cha có chung một lớp ông bà.
D. Khi lớp con không ghi đè bất kỳ phương thức nào từ lớp cha.
10. Nguyên tắc SOLID nào tập trung vào việc một lớp chỉ nên có một lý do duy nhất để thay đổi?
A. Nguyên tắc mở rộng - đóng (Open∕Closed Principle)
B. Nguyên tắc thay thế Liskov (Liskov Substitution Principle)
C. Nguyên tắc đơn trách nhiệm (Single Responsibility Principle)
D. Nguyên tắc phân tách giao diện (Interface Segregation Principle)
11. Mẫu thiết kế 'Factory′ (Nhà máy) giải quyết vấn đề gì?
A. Quản lý vòng đời của đối tượng.
B. Đóng gói thuật toán.
C. Tạo đối tượng mà không cần chỉ định lớp cụ thể của đối tượng được tạo.
D. Đảm bảo tính nhất quán của dữ liệu.
12. Mối quan hệ 'is-a′ trong OOP thường được thể hiện thông qua cơ chế nào?
A. Quan hệ hợp thành (Composition)
B. Quan hệ kết hợp (Association)
C. Quan hệ kế thừa (Inheritance)
D. Quan hệ phụ thuộc (Dependency)
13. Thuộc tính (attribute) của một đối tượng thể hiện điều gì?
A. Hành vi của đối tượng
B. Trạng thái của đối tượng
C. Kiểu dữ liệu của đối tượng
D. Giao diện của đối tượng
14. Trong lập trình hướng đối tượng, 'tính đóng gói′ (encapsulation) mang lại lợi ích chính nào?
A. Tăng tốc độ thực thi chương trình
B. Giảm dung lượng bộ nhớ sử dụng
C. Ẩn giấu thông tin và bảo vệ dữ liệu
D. Cho phép kế thừa thuộc tính giữa các lớp
15. Trong lập trình hướng đối tượng, 'composition′ (hợp thành) thường được ưu tiên hơn 'inheritance′ (kế thừa) trong trường hợp nào?
A. Khi cần tái sử dụng mã nguồn một cách triệt để.
B. Khi muốn tạo ra mối quan hệ 'is-a′ rõ ràng.
C. Khi muốn tạo ra mối quan hệ 'has-a′ và tăng tính linh hoạt, giảm sự phụ thuộc.
D. Khi muốn tối ưu hóa hiệu suất của chương trình.
16. Loại quan hệ nào thể hiện sự phụ thuộc tạm thời giữa hai lớp, trong đó một lớp sử dụng một lớp khác như một tham số hoặc biến cục bộ?
A. Quan hệ kết hợp (Association)
B. Quan hệ hợp thành (Composition)
C. Quan hệ phụ thuộc (Dependency)
D. Quan hệ kế thừa (Inheritance)
17. Phương pháp lập trình hướng đối tượng nào tập trung vào việc xây dựng hệ thống từ các 'actor′ tương tác với nhau thông qua việc gửi và nhận thông điệp?
A. Lập trình hướng sự kiện (Event-driven programming)
B. Lập trình hướng chức năng (Functional programming)
C. Lập trình hướng tác nhân (Actor-based programming)
D. Lập trình hướng thủ tục (Procedural programming)
18. Trong ngữ cảnh của kế thừa, lớp 'cha′ còn được gọi là gì?
A. Lớp con (Child class)
B. Lớp dẫn xuất (Derived class)
C. Lớp cơ sở (Base class)
D. Lớp giao diện (Interface class)
19. Phương thức (method) của một đối tượng thể hiện điều gì?
A. Trạng thái của đối tượng
B. Đặc điểm của đối tượng
C. Hành vi của đối tượng
D. Cấu trúc của đối tượng
20. Phương thức 'khởi tạo′ (constructor) trong lớp có vai trò gì?
A. Hủy đối tượng khi không còn sử dụng
B. Trả về giá trị của đối tượng
C. Khởi tạo trạng thái ban đầu cho đối tượng
D. Thực hiện các phép toán trên đối tượng
21. Đối tượng (object) trong lập trình hướng đối tượng là gì?
A. Một bản thiết kế của lớp
B. Một kiểu dữ liệu trừu tượng
C. Một thể hiện cụ thể của lớp
D. Một phương thức đặc biệt trong lớp
22. Khái niệm 'coupling′ (liên kết) trong OOP đề cập đến điều gì?
A. Mức độ độc lập giữa các lớp.
B. Mức độ phụ thuộc lẫn nhau giữa các lớp.
C. Khả năng tái sử dụng mã nguồn.
D. Tính dễ đọc của mã nguồn.
23. Khái niệm 'cohesion′ (kết dính) trong OOP đề cập đến điều gì?
A. Mức độ phụ thuộc lẫn nhau giữa các lớp.
B. Mức độ liên quan giữa các thành phần bên trong một lớp.
C. Khả năng mở rộng của hệ thống.
D. Tính dễ bảo trì của hệ thống.
24. Lợi ích của việc sử dụng 'Dependency Injection′ (DI) trong OOP là gì?
A. Tăng tốc độ thực thi chương trình.
B. Giảm sự phụ thuộc giữa các thành phần, tăng tính module hóa và khả năng kiểm thử.
C. Tự động tạo ra các đối tượng khi cần thiết.
D. Đảm bảo tính bảo mật cho ứng dụng.
25. Kiểu thiết kế 'Command Pattern′ (Mẫu lệnh) có mục đích chính là gì?
A. Đảm bảo chỉ có một thể hiện của một lớp.
B. Đóng gói một yêu cầu như một đối tượng, cho phép tham số hóa client với các yêu cầu khác nhau, hàng đợi hoặc ghi log yêu cầu.
C. Tạo đối tượng mà không cần chỉ định lớp cụ thể.
D. Cho phép một đối tượng thay đổi hành vi của mình khi trạng thái bên trong của nó thay đổi.
26. Đặc điểm nào sau đây **không** phải là trụ cột chính của lập trình hướng đối tượng?
A. Tính đóng gói (Encapsulation)
B. Tính đa hình (Polymorphism)
C. Tính trừu tượng (Abstraction)
D. Tính tuần tự (Sequential)
27. Lợi ích chính của việc sử dụng kế thừa trong OOP là gì?
A. Tăng tốc độ xử lý dữ liệu
B. Giảm thiểu lỗi cú pháp trong chương trình
C. Tái sử dụng mã nguồn và giảm sự trùng lặp
D. Cải thiện tính bảo mật của ứng dụng
28. Khái niệm 'đa hình′ (polymorphism) trong OOP được thể hiện rõ nhất qua cơ chế nào?
A. Nạp chồng phương thức (Method Overloading)
B. Đóng gói dữ liệu (Data Encapsulation)
C. Kế thừa lớp (Class Inheritance)
D. Trừu tượng hóa dữ liệu (Data Abstraction)
29. Mẫu thiết kế 'Singleton′ được sử dụng khi nào?
A. Khi cần tạo ra nhiều đối tượng của một lớp.
B. Khi cần đảm bảo chỉ có duy nhất một đối tượng của một lớp được tạo ra.
C. Khi cần tạo ra các đối tượng có cấu trúc phức tạp.
D. Khi cần tối ưu hóa tốc độ tạo đối tượng.
30. Điểm khác biệt chính giữa 'interface′ và 'abstract class′ trong OOP là gì?
A. Abstract class không thể chứa phương thức trừu tượng, interface thì có thể.
B. Interface có thể chứa thuộc tính, abstract class thì không.
C. Một lớp có thể kế thừa nhiều interface, nhưng chỉ có thể kế thừa một abstract class.
D. Abstract class định nghĩa hành vi, interface định nghĩa cấu trúc dữ liệu.