1. Điều gì xảy ra khi bạn gọi một phương thức `virtual` (ảo) trong lớp cha thông qua một tham chiếu đến đối tượng lớp con?
A. Phương thức của lớp cha luôn được thực thi
B. Phương thức của lớp con (nếu được ghi đè) sẽ được thực thi, thể hiện tính đa hình
C. Lỗi biên dịch sẽ xảy ra
D. Phương thức của lớp cha và lớp con sẽ được thực thi lần lượt
2. Sự khác biệt chính giữa `lớp trừu tượng` (abstract class) và `interface` là gì?
A. Lớp trừu tượng có thể chứa cả phương thức trừu tượng và phương thức đã được triển khai, trong khi interface chỉ chứa phương thức trừu tượng (hoặc các hằng số)
B. Interface có thể chứa phương thức khởi tạo, lớp trừu tượng thì không
C. Lớp trừu tượng hỗ trợ đa kế thừa, interface thì không
D. Không có sự khác biệt đáng kể giữa lớp trừu tượng và interface
3. Trong OOP, `đa kế thừa` (multiple inheritance) là gì và nó thường gây ra vấn đề gì?
A. Một lớp kế thừa từ nhiều lớp con, vấn đề là xung đột tên phương thức
B. Một lớp kế thừa từ nhiều lớp cha, vấn đề là `vấn đề kim cương` (diamond problem) và độ phức tạp
C. Một đối tượng thuộc nhiều lớp, vấn đề là quản lý bộ nhớ
D. Một phương thức được kế thừa bởi nhiều lớp, vấn đề là hiệu suất
4. Trong mối quan hệ kế thừa, lớp con còn được gọi là:
A. Lớp cơ sở
B. Lớp cha
C. Lớp dẫn xuất
D. Lớp trừu tượng
5. Lập trình hướng đối tượng phù hợp nhất cho loại dự án phần mềm nào?
A. Các dự án nhỏ và đơn giản, chỉ cần vài dòng mã
B. Các dự án có yêu cầu hiệu suất cực cao và thời gian thực
C. Các dự án phức tạp, quy mô lớn, đòi hỏi tính tái sử dụng, bảo trì và mở rộng cao
D. Các dự án liên quan đến xử lý dữ liệu số lượng lớn
6. Nguyên tắc `SOLID` nào trong OOP 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 thế chỗ Liskov (Liskov Substitution Principle)
B. Nguyên tắc đơn trách nhiệm (Single Responsibility Principle)
C. Nguyên tắc mở rộng - đóng (Open/Closed Principle)
D. Nguyên tắc đảo ngược phụ thuộc (Dependency Inversion Principle)
7. Ưu điểm chính của việc sử dụng OOP so với lập trình hướng thủ tục là gì?
A. Chương trình chạy nhanh hơn
B. Mã nguồn ngắn gọn hơn
C. Tính tái sử dụng mã, tính bảo trì và khả năng mở rộng cao hơn
D. Ít lỗi hơn trong quá trình phát triển
8. Điều gì KHÔNG phải là một lợi ích chính của lập trình hướng đối tượng?
A. Tái sử dụng mã
B. Tính bảo trì cao
C. Tăng tốc độ phát triển phần mềm
D. Hiệu suất thực thi nhanh hơn so với lập trình hướng thủ tục trong mọi trường hợp
9. Phương thức `constructor` trong lớp có vai trò gì?
A. Phá hủy đối tượng khi nó không còn được sử dụng
B. Được gọi tự động khi một đối tượng được tạo ra, thường để khởi tạo trạng thái ban đầu của đối tượng
C. Thực hiện các phép tính toán phức tạp
D. Truy cập các thuộc tính private của lớp
10. Mục đích của `interface` (giao diện) trong OOP là gì?
A. Cung cấp một cách triển khai cụ thể cho các phương thức
B. Định nghĩa một hợp đồng, quy định các lớp phải thực hiện các phương thức nào
C. Thay thế hoàn toàn cho lớp trừu tượng
D. Tăng tính bảo mật cho dữ liệu
11. Khi nào nên sử dụng `inheritance` (kế thừa) và khi nào nên sử dụng `composition` (kết hợp) trong thiết kế OOP?
A. Luôn sử dụng inheritance vì nó mạnh mẽ hơn composition
B. Luôn sử dụng composition vì nó linh hoạt hơn inheritance
C. Sử dụng inheritance khi có mối quan hệ `is-a` (là một), và composition khi có mối quan hệ `has-a` (có một)
D. Sử dụng inheritance cho các lớp trừu tượng, composition cho các lớp cụ thể
12. Khái niệm `design pattern` (mẫu thiết kế) trong OOP là gì?
A. Một thuật toán cụ thể để giải quyết một vấn đề lập trình
B. Một giải pháp thiết kế tổng quát, đã được kiểm chứng và tái sử dụng cho các vấn đề thường gặp trong thiết kế phần mềm hướng đối tượng
C. Một ngôn ngữ lập trình hướng đối tượng cụ thể
D. Một công cụ để kiểm thử phần mềm hướng đối tượng
13. Phương thức `static` trong lớp có đặc điểm gì?
A. Phải được ghi đè trong lớp con
B. Thuộc về lớp chứ không thuộc về bất kỳ đối tượng cụ thể nào của lớp đó, và có thể được gọi trực tiếp thông qua tên lớp
C. Chỉ có thể được gọi từ bên trong lớp
D. Luôn được gọi tự động khi đối tượng được tạo ra
14. Trong OOP, `coupling` (khớp nối) và `cohesion` (kết dính) là gì và mối quan hệ lý tưởng giữa chúng là gì?
A. Coupling là mức độ liên kết giữa các lớp, cohesion là mức độ liên kết bên trong một lớp. Lý tưởng là khớp nối cao và kết dính thấp
B. Coupling là mức độ liên kết bên trong một lớp, cohesion là mức độ liên kết giữa các lớp. Lý tưởng là khớp nối thấp và kết dính cao
C. Coupling là mức độ liên kết giữa các lớp, cohesion là mức độ liên kết bên trong một lớp. Lý tưởng là khớp nối thấp và kết dính cao
D. Coupling và cohesion đều là mức độ liên kết giữa các lớp. Lý tưởng là cả hai đều thấp
15. Thuộc tính `private` trong OOP có ý nghĩa gì?
A. Thuộc tính có thể được truy cập từ bất kỳ đâu
B. Thuộc tính chỉ có thể được truy cập từ bên trong lớp chứa nó
C. Thuộc tính có thể được truy cập từ lớp con
D. Thuộc tính có thể được truy cập từ các lớp khác trong cùng gói
16. Khái niệm `trừu tượng hóa` (abstraction) trong OOP tập trung vào điều gì?
A. Ẩn giấu cách triển khai chi tiết và chỉ hiển thị giao diện cần thiết cho người dùng
B. Tăng tính phức tạp của hệ thống
C. Tối ưu hóa hiệu suất bộ nhớ
D. Giảm số lượng lớp trong chương trình
17. Điều gì KHÔNG phải là một nguyên tắc cơ bản của OOP?
A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Đa hình (Polymorphism)
D. Phân tích cấu trúc (Structured Analysis)
18. Trong ngữ cảnh OOP, `dependency injection` (tiêm phụ thuộc) là gì và mục đích của nó là gì?
A. Một kỹ thuật để giảm kích thước bộ nhớ của đối tượng
B. Một mẫu thiết kế để cung cấp các phụ thuộc (dependencies) của một đối tượng từ bên ngoài, thay vì để đối tượng tự tạo hoặc tìm kiếm chúng
C. Một phương pháp để tăng tốc độ thực thi chương trình
D. Một cách để kiểm tra lỗi trong chương trình OOP
19. Tính `đa hình` (polymorphism) trong OOP 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. Một đối tượng có thể có nhiều kiểu dữ liệu
D. Một đối tượng hoặc phương thức có thể có nhiều hình thức hoặc hành vi khác nhau trong các ngữ cảnh khác nhau
20. Trong OOP, `composition` (kết hợp) khác với `inheritance` (kế thừa) như thế nào?
A. Composition thể hiện mối quan hệ `là một` (is-a), inheritance thể hiện mối quan hệ `có một` (has-a)
B. Inheritance thể hiện mối quan hệ `là một` (is-a), composition thể hiện mối quan hệ `có một` (has-a)
C. Composition tạo ra mối quan hệ lỏng lẻo hơn giữa các lớp, inheritance tạo ra mối quan hệ chặt chẽ hơn
D. Không có sự khác biệt đáng kể giữa composition và inheritance
21. Điều gì xảy ra khi bạn tạo một đối tượng của một lớp?
A. Lớp được xóa khỏi bộ nhớ
B. Một vùng nhớ được cấp phát để lưu trữ đối tượng, và constructor của lớp được gọi
C. Phương thức static của lớp được thực thi
D. Chương trình kết thúc
22. Mẫu thiết kế `Singleton` được sử dụng để làm gì?
A. Tạo ra nhiều đối tượng của một lớp
B. Đả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 đó
C. Quản lý bộ nhớ hiệu quả hơn
D. Tăng tốc độ thực thi chương trình
23. Trong lập trình hướng đối tượng, `tính kế thừa` (inheritance) 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 mức sử dụng bộ nhớ
C. Tái sử dụng mã và thiết lập mối quan hệ `là một` giữa các lớp
D. Tăng tính bảo mật cho dữ liệu
24. Phương pháp nào cho phép một lớp con (subclass) định nghĩa lại một phương thức đã được định nghĩa trong lớp cha (superclass)?
A. Nạp chồng phương thức (Method Overloading)
B. Ghi đè phương thức (Method Overriding)
C. Che giấu phương thức (Method Hiding)
D. Đa hình phương thức (Method Polymorphism)
25. Trong OOP, `lớp` (class) và `đối tượng` (object) có mối quan hệ như thế nào?
A. Lớp là một thể hiện cụ thể của đối tượng
B. Đối tượng là bản thiết kế, lớp là thực thể được tạo ra từ bản thiết kế đó
C. Lớp là bản thiết kế, đối tượng là một thể hiện cụ thể (instance) của lớp
D. Lớp và đối tượng là hai khái niệm hoàn toàn độc lập
26. Trong ngôn ngữ lập trình hướng đối tượng, `garbage collection` (thu gom rác) là gì?
A. Một quá trình thủ công để giải phóng bộ nhớ đã cấp phát
B. Một cơ chế tự động để giải phóng bộ nhớ không còn được sử dụng bởi chương trình
C. Một kỹ thuật để tối ưu hóa tốc độ thực thi chương trình
D. Một loại lỗi thường gặp trong lập trình hướng đối tượng
27. Nguyên tắc `thế chỗ Liskov` (Liskov Substitution Principle) trong SOLID nói về điều gì?
A. Các lớp con phải có khả năng thay thế cho lớp cha 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 phải được mở để mở rộng nhưng đóng để sửa đổi
C. Phụ thuộc vào trừu tượng, không phụ thuộc vào các lớp cụ thể
D. Nhiều interface đặc thù tốt hơn là một interface đa năng
28. Trong OOP, `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 để yêu cầu thực hiện một hành động
C. Việc hiển thị thông báo lỗi cho người dùng
D. Việc ghi log hoạt động của chương trình
29. Lỗi `NullPointerException` thường xảy ra trong OOP khi nào?
A. Khi cố gắng truy cập một thuộc tính hoặc phương thức của một đối tượng mà đối tượng đó chưa được khởi tạo (có giá trị null)
B. Khi chia một số cho 0
C. Khi truy cập một phần tử mảng vượt quá chỉ số cho phép
D. Khi thiếu bộ nhớ để tạo đối tượng mới
30. Khái niệm nào sau đây là trụ cột cơ bản của lập trình hướng đối tượng, cho phép nhóm dữ liệu và phương thức liên quan vào một đơn vị duy nhất?
A. Kế thừa
B. Đa hình
C. Đóng gói
D. Trừu tượng