1. Trong OOP, `đối tượng` (object) là gì?
A. Một lớp (class).
B. Một bản thiết kế cho lớp.
C. Một thể hiện cụ thể của một lớp.
D. Một phương thức trong lớp.
2. Mục đích chính của tính trừu tượng (abstraction) trong OOP là gì?
A. Tăng tính bảo mật cho dữ liệu.
B. Giảm sự phụ thuộc giữa các lớp.
C. Đơn giản hóa sự phức tạp bằng cách chỉ tập trung vào các khía cạnh quan trọng.
D. Cho phép tái sử dụng mã nguồn.
3. Lớp trừu tượng (abstract class) khác với lớp thông thường như thế nào?
A. Lớp trừu tượng không thể có thuộc tính.
B. Lớp trừu tượng không thể được khởi tạo trực tiếp.
C. Lớp trừu tượng chỉ chứa các phương thức trừu tượng.
D. Lớp trừu tượng không thể được kế thừa.
4. Sự khác biệt chính giữa `Tổng hợp` (Aggregation) và `Kết hợp` (Composition) trong quan hệ `has-a` là gì?
A. Tổng hợp thể hiện quan hệ mạnh hơn Kết hợp.
B. Kết hợp thể hiện quan hệ mạnh hơn Tổng hợp về mặt thời gian tồn tại của các đối tượng.
C. Tổng hợp chỉ áp dụng cho lớp trừu tượng, Kết hợp cho lớp cụ thể.
D. Không có sự khác biệt đáng kể giữa Tổng hợp và Kết hợp.
5. Thuộc tính (attribute) của một đối tượng trong OOP tương ứng với khái niệm nào trong lập trình hướng thủ tục?
A. Hàm (Function)
B. Biến (Variable)
C. Cấu trúc điều khiển (Control Structure)
D. Thủ tục (Procedure)
6. Quan hệ `has-a` (có một) trong OOP thường được thể hiện thông qua cơ chế nào?
A. Kế thừa (Inheritance)
B. Tổng hợp (Aggregation) hoặc Kết hợp (Composition)
C. Đa hình (Polymorphism)
D. Trừu tượng (Abstraction)
7. Interface trong OOP được sử dụng để làm gì?
A. Tạo ra các đối tượng phức tạp.
B. Định nghĩa một hợp đồng mà các lớp phải tuân theo.
C. Ẩn thông tin chi tiết của đối tượng.
D. Tái sử dụng mã nguồn giữa các lớp không liên quan.
8. Phương thức trừu tượng (abstract method) là gì?
A. Phương thức không có tham số.
B. Phương thức được định nghĩa trong lớp trừu tượng nhưng không có phần thân (body).
C. Phương thức không thể được gọi trực tiếp từ bên ngoài lớp.
D. Phương thức chỉ có thể được gọi bởi lớp cha.
9. Ví dụ nào sau đây KHÔNG phải là một nguyên tắc SOLID trong OOP?
A. Single Responsibility Principle (Nguyên tắc đơn trách nhiệm)
B. Open/Closed Principle (Nguyên tắc đóng mở)
C. Don`t Repeat Yourself (DRY) Principle (Nguyên tắc đừng lặp lại chính mình)
D. Liskov Substitution Principle (Nguyên tắc thay thế Liskov)
10. Phương thức khởi tạo (constructor) trong OOP được sử dụng để làm gì?
A. Xóa một đối tượng khỏi bộ nhớ.
B. Tạo và khởi tạo một đối tượng mới.
C. Gọi một phương thức khác trong cùng lớp.
D. Định nghĩa kiểu dữ liệu của đối tượng.
11. Trong OOP, `đa kế thừa` (multiple inheritance) là gì và nó có thể gây ra vấn đề gì?
A. Một lớp kế thừa từ nhiều lớp cha; có thể gây ra vấn đề `diamond problem` (vấn đề hình thoi).
B. Một lớp có thể thực hiện nhiều interface; không gây ra vấn đề gì.
C. Một đối tượng có thể thuộc nhiều lớp; gây ra vấn đề về quản lý bộ nhớ.
D. Một phương thức có thể được kế thừa từ nhiều lớp cha; gây ra vấn đề trùng tên.
12. Quan hệ `is-a` trong OOP thường được thể hiện thông qua cơ chế nào?
A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Đa hình (Polymorphism)
D. Trừu tượng (Abstraction)
13. Lỗi `NullPointerException` thường xảy ra trong OOP do nguyên nhân nào?
A. Cố gắng truy cập một biến cục bộ ngoài phạm vi.
B. Cố gắng truy cập một đối tượng tham chiếu null.
C. Chia cho số 0.
D. Lỗi tràn bộ nhớ stack.
14. Khái niệm nào sau đây mô tả khả năng một đối tượng thuộc lớp con có thể thực hiện phương thức của lớp cha theo cách riêng của nó?
A. Nạp chồng phương thức (Method Overloading)
B. Ghi đè phương thức (Method Overriding)
C. Đa hình thời gian biên dịch (Compile-time Polymorphism)
D. Đóng gói (Encapsulation)
15. Khi nào nên sử dụng tính kế thừa trong thiết kế OOP?
A. Khi muốn tạo ra các đối tượng độc lập, không liên quan đến nhau.
B. Khi muốn tái sử dụng mã nguồn và thiết lập quan hệ `is-a` giữa các lớp.
C. Khi muốn ẩn thông tin chi tiết của đối tượng.
D. Khi muốn thực hiện các hành động khác nhau tùy thuộc vào kiểu đối tượng.
16. Trong OOP, `tính đóng gói` (encapsulation) giúp đạt được điều gì?
A. Tăng tốc độ biên dịch chương trình.
B. Giảm dung lượng bộ nhớ sử dụng.
C. Kiểm soát quyền truy cập và bảo vệ dữ liệu bên trong đối tượng.
D. Cho phép đa kế thừa.
17. Khi nào thì việc sử dụng `composition` (kết hợp) được ưu tiên hơn `inheritance` (kế thừa) trong OOP?
A. Khi muốn tạo ra quan hệ `is-a`.
B. Khi muốn tái sử dụng mã nguồn mà không tạo ra quan hệ `is-a`, và ưu tiên tính linh hoạt và giảm sự phụ thuộc.
C. Khi cần đa kế thừa.
D. Khi muốn tăng tốc độ thực thi chương trình.
18. Lợi ích chính của việc sử dụng các `design pattern` (mẫu thiết kế) trong OOP là gì?
A. Tăng tốc độ thực thi chương trình.
B. Cung cấp các 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. Giảm dung lượng bộ nhớ chương trình.
D. Tự động sinh mã nguồn chương trình.
19. Kỹ thuật `composition` (kết hợp) trong OOP giúp đạt được điều gì?
A. Đa kế thừa.
B. Tái sử dụng mã nguồn bằng cách tạo quan hệ `has-a` giữa các đối tượng.
C. Tăng tốc độ thực thi chương trình.
D. Ẩn thông tin triển khai của lớp.
20. Nguyên tắc cơ bản nào của lập trình hướng đối tượng cho phép ẩn thông tin chi tiết bên trong của một đối tượng và chỉ hiển thị giao diện cần thiết ra bên ngoài?
A. Kế thừa (Inheritance)
B. Đa hình (Polymorphism)
C. Đóng gói (Encapsulation)
D. Trừu tượng (Abstraction)
21. Mục đích của việc sử dụng `tính trừu tượng hóa dữ liệu` (data abstraction) là gì?
A. Tăng tốc độ truy cập dữ liệu.
B. Ẩn chi tiết triển khai dữ liệu và chỉ cung cấp giao diện thao tác dữ liệu.
C. Giảm dung lượng lưu trữ dữ liệu.
D. Mã hóa dữ liệu để bảo mật.
22. Phương thức `getter` và `setter` thường được sử dụng để làm gì trong OOP?
A. Tạo và xóa đối tượng.
B. Quản lý bộ nhớ cho đối tượng.
C. Truy cập và sửa đổi giá trị của thuộc tính đối tượng một cách kiểm soát.
D. Gọi các phương thức khác trong cùng lớp.
23. Trong lập trình hướng đối tượng, thuật ngữ `message passing` (truyền thông điệp) đề cập đến điều gì?
A. Việc gửi dữ liệu giữa các đối tượng thông qua mạng.
B. Việc một đối tượng gọi một phương thức của đối tượng khác.
C. Việc chia sẻ bộ nhớ giữa các đối tượng.
D. Việc đồng bộ hóa hoạt động của nhiều đối tượng.
24. Nguyên tắc `Open/Closed Principle` (OCP) trong SOLID khuyến khích điều gì?
A. Mã nguồn nên được giữ bí mật và đóng lại với bên ngoài.
B. Các lớp nên được thiết kế để dễ dàng sửa đổi khi có yêu cầu mới.
C. Các thực thể phần mềm (lớp, module, hàm...) nên mở cho mở rộng nhưng đóng cho sửa đổi.
D. Mã nguồn nên được mở hoàn toàn cho bất kỳ ai sửa đổi.
25. Điểm khác biệt chính giữa lớp trừu tượng (abstract class) và interface là gì?
A. Interface có thể có thuộc tính, lớp trừu tượng thì không.
B. Lớp trừu tượng có thể có phương thức đã được triển khai, interface thì không (trước Java 8).
C. Lớp trừu tượng hỗ trợ đa kế thừa, interface thì không.
D. Interface chỉ được sử dụng cho quan hệ `is-a`, lớp trừu tượng thì không.
26. Nguyên tắc `Single Responsibility Principle` (SRP) trong SOLID nói về điều gì?
A. Mỗi lớp chỉ nên có một lý do duy nhất để thay đổi.
B. Một lớp nên mở cho mở rộng nhưng đóng cho sửa đổi.
C. Các 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.
D. Nhiều interface chuyên biệt tốt hơn là một interface đa năng.
27. Điều gì KHÔNG phải là lợi ích chính của lập trình hướng đối tượng?
A. Tăng tốc độ thực thi chương trình.
B. Tái sử dụng mã nguồn.
C. Giảm độ phức tạp của chương trình.
D. Dễ bảo trì và mở rộng chương trình.
28. Phương pháp lập trình hướng đối tượng tập trung vào việc giải quyết vấn đề bằng cách nào?
A. Chia chương trình thành các hàm nhỏ và thủ tục.
B. Tổ chức chương trình thành các đối tượng tương tác với nhau.
C. Sử dụng cấu trúc dữ liệu tuyến tính để lưu trữ thông tin.
D. Tập trung vào luồng điều khiển chương trình.
29. Trong lập trình hướng đối tượng, `lớp` (class) đóng vai trò gì?
A. Một thể hiện cụ thể của đối tượng.
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 phương thức đặc biệt để khởi tạo đối tượng.
D. Một biến toàn cục dùng chung cho tất cả các đối tượng.
30. Trong OOP, `tính đa hình` (polymorphism) có nghĩa là gì?
A. Một đối tượng có nhiều thuộc tính.
B. Một lớp có nhiều phương thức.
C. Các đối tượng khác nhau có thể phản ứng khác nhau với cùng một thông điệp.
D. Một phương thức có thể được gọi từ nhiều lớp khác nhau.