1. Khái niệm 'lớp trừu tượng′ (abstract class) trong OOP có đặc điểm nào?
A. Có thể tạo ra đối tượng trực tiếp từ lớp trừu tượng.
B. Không thể chứa bất kỳ phương thức nào.
C. Có thể chứa các phương thức trừu tượng (abstract method) mà lớp con phải hiện thực.
D. Luôn là lớp gốc trong hệ thống kế thừa.
2. Thuật ngữ 'đa hình′ (polymorphism) có nghĩa đen là gì?
A. Nhiều hình dạng.
B. Một hình dạng duy nhất.
C. Hình dạng trừu tượng.
D. Hình dạng kế thừa.
3. Mục đích chính của việc sử dụng 'tính đóng gói′ (encapsulation) là gì?
A. Tăng tính linh hoạt của chương trình.
B. Giảm thời gian biên dịch mã nguồn.
C. Bảo vệ dữ liệu khỏi bị truy cập và sửa đổi không mong muốn.
D. Cho phép đa kế thừa.
4. Trong OOP, mối quan hệ 'is-a′ thường được thể hiện thông qua cơ chế nào?
A. Tính đóng gói.
B. Tính kế thừa.
C. Tính đa hình.
D. Tính trừu tượng.
5. Nguyên tắc 'Interface Segregation Principle′ (ISP) trong SOLID khuyến nghị điều gì?
A. Sử dụng ít giao diện nhất có thể.
B. Không nên sử dụng giao diện.
C. Nhiều giao diện đặc thù tốt hơn một giao diện đa năng.
D. Tất cả các lớp nên hiện thực cùng một giao diện.
6. Nguyên tắc 'Single Responsibility Principle′ (SRP) trong SOLID khuyến khích điều gì?
A. Mỗi lớp nên có nhiều trách nhiệm để tăng tính hiệu quả.
B. Mỗi lớp chỉ nên có một và chỉ một lý do để thay đổi.
C. Các lớp nên phụ thuộc chặt chẽ vào nhau.
D. Không nên sử dụng kế thừa.
7. Phương thức khởi tạo (constructor) trong lập trình hướng đối tượng được sử dụng để làm gì?
A. Xóa một đối tượng khỏi bộ nhớ.
B. Định nghĩa các thuộc tính của lớp.
C. Khởi tạo trạng thái ban đầu cho một đối tượng khi nó được tạo ra.
D. Gọi một phương thức khác trong lớp.
8. Trong OOP, 'giao diện′ (interface) khác với 'lớp trừu tượng′ (abstract class) chủ yếu ở điểm nào?
A. Giao diện có thể chứa các phương thức đã được hiện thực, còn lớp trừu tượng thì không.
B. Lớp có thể kế thừa từ nhiều giao diện, nhưng chỉ có thể kế thừa từ một lớp trừu tượng.
C. Giao diện định nghĩa trạng thái (thuộc tính), còn lớp trừu tượng thì không.
D. Lớp trừu tượng được sử dụng để tạo đối tượng, còn giao diện thì không.
9. Khái niệm nào sau đây là **trụ cột** của lập trình hướng đối tượng, cho phép ẩn giấu thông tin chi tiết bên trong và chỉ hiển thị giao diện tương tác bên ngoài?
A. Tính đa hình (Polymorphism)
B. Tính kế thừa (Inheritance)
C. Tính đóng gói (Encapsulation)
D. Tính trừu tượng (Abstraction)
10. Trong ngữ cảnh của tính đa hình (polymorphism), 'ghi đè phương thức′ (method overriding) nghĩa là gì?
A. Tạo ra nhiều lớp có cùng tên.
B. Định nghĩa lại một phương thức đã có ở lớp cha trong lớp con.
C. Gọi một phương thức từ một lớp khác.
D. Ẩn một phương thức của lớp cha.
11. Điều gì sẽ xảy ra nếu một lớp con không ghi đè (override) một phương thức kế thừa từ lớp cha?
A. Chương trình sẽ báo lỗi biên dịch.
B. Phương thức của lớp cha sẽ không thể được gọi từ đối tượng lớp con.
C. Đối tượng của lớp con sẽ sử dụng phiên bản phương thức được định nghĩa trong lớp cha.
D. Phương thức của lớp cha sẽ bị xóa khỏi lớp con.
12. Trong OOP, 'phạm vi truy cập′ (access modifiers) được sử dụng để làm gì?
A. Tăng tốc độ thực thi phương thức.
B. Kiểm soát quyền truy cập đến các thành viên (thuộc tính, phương thức) của lớp từ bên ngoài.
C. Định nghĩa kiểu dữ liệu cho thuộc tính.
D. Tạo ra các lớp trừu tượng.
13. Từ khóa nào thường được sử dụng để thể hiện tính kế thừa trong nhiều ngôn ngữ lập trình hướng đối tượng?
A. new
B. extends
C. class
D. interface
14. Trong ngữ cảnh OOP, 'đa kế thừa′ (multiple inheritance) đề cập đến điều gì?
A. Một lớp kế thừa từ nhiều lớp con.
B. Một lớp kế thừa từ nhiều lớp cha.
C. Một lớp có nhiều phương thức khởi tạo.
D. Một phương thức có thể thực hiện nhiều hành vi khác nhau.
15. Khi nào nên sử dụng 'tính đa hình′ (polymorphism) trong thiết kế hướng đối tượng?
A. Khi cần tạo ra nhiều đối tượng có cùng kiểu dữ liệu.
B. Khi muốn các đối tượng thuộc các lớp khác nhau có thể phản ứng khác nhau với cùng một thông điệp.
C. Khi cần ẩn giấu thông tin chi tiết của đối tượng.
D. Khi muốn tái sử dụng mã nguồn từ các lớp khác.
16. Mối 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.
B. Đóng gói.
C. Tổng hợp (Aggregation) hoặc Hợp thành (Composition).
D. Trừu tượng.
17. Khái niệm 'tính trừu tượng′ (abstraction) trong OOP tập trung vào điều gì?
A. Hiện thực chi tiết của một đối tượng.
B. Ẩn giấu sự phức tạp và chỉ hiển thị các đặc điểm cần thiết.
C. Tạo ra các lớp trừu tượng không thể khởi tạo.
D. Định nghĩa các giao diện (interface) cho các lớp.
18. Nguyên tắc 'Liskov Substitution Principle′ (LSP) trong SOLID liên quan đến điều gì?
A. Thay thế các lớp bằng giao diện.
B. Các lớp con phải có khả năng thay thế hoàn toàn 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.
C. Giảm sự phụ thuộc giữa các lớp.
D. Tăng cường tính đóng gói.
19. Trong lập trình hướng đối tượng, 'thành phần′ (component) thường được hiểu là gì?
A. Một biến cục bộ.
B. Một đoạn mã nhỏ không tái sử dụng.
C. Một khối xây dựng phần mềm độc lập, có thể tái sử dụng và thay thế được.
D. Một phương thức tĩnh.
20. Tính kế thừa (inheritance) mang lại lợi ích chính nào trong lập trình hướng đối tượng?
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ã nguồn và giảm sự trùng lặp.
D. Tăng tính bảo mật cho dữ liệu.
21. 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 loại biến toàn cục.
22. Sự khác biệt chính giữa 'tổng hợp′ (aggregation) và 'hợp thành′ (composition) trong mối quan hệ 'has-a′ là gì?
A. Tổng hợp thể hiện mối quan hệ mạnh hơn hợp thành.
B. Hợp thành thể hiện mối quan hệ mạnh hơn tổng hợp, đối tượng 'con′ phụ thuộc vào vòng đời của đối tượng 'cha′.
C. Tổng hợp chỉ áp dụng cho lớp trừu tượng, hợp thành thì không.
D. Hợp thành cho phép chia sẻ đối tượng 'con′ giữa nhiều đối tượng 'cha′, tổng hợp thì không.
23. Nguyên tắc 'Open∕Closed Principle′ (OCP) trong SOLID phát biểu rằng phần mềm nên như thế nào?
A. Mở để sửa đổi, đóng để mở rộng.
B. Đóng để sửa đổi, mở để mở rộng.
C. Mở cho cả sửa đổi và mở rộng.
D. Đóng cho cả sửa đổi và mở rộng.
24. Vấn đề 'kim cương′ (diamond problem) trong OOP liên quan đến khái niệm nào?
A. Tính đóng gói.
B. Đa kế thừa.
C. Tính trừu tượng.
D. Tính đa hình.
25. Nguyên tắc 'SOLID′ trong OOP là tập hợp các nguyên tắc thiết kế hướng đến mục tiêu gì?
A. Tăng tốc độ phát triển phần mềm.
B. Giảm chi phí phần cứng.
C. Thiết kế phần mềm dễ bảo trì, mở rộng và linh hoạt.
D. Tăng tính bảo mật cho ứng dụng web.
26. Phương thức nào sau đây **không** phải là một trong bốn 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 kế thừa (Inheritance).
C. Tính trừu tượng (Abstraction).
D. Tính năng module hóa (Modularity).
27. Phương thức 'static′ trong OOP có đặc điểm gì?
A. Phải được gọi thông qua một đối tượng cụ thể của lớp.
B. Có thể truy cập trực tiếp từ tên lớp mà không cần tạo đối tượng.
C. Luôn được ghi đè bởi lớp con.
D. Chỉ được sử dụng trong lớp trừu tượng.
28. Trong lập trình hướng đối tượng, 'đối tượng′ (object) là gì?
A. Một lớp (class).
B. Một bản thiết kế.
C. Một thể hiện cụ thể của một lớp.
D. Một phương thức.
29. Ưu điểm chính của việc sử dụng lập trình hướng đối tượng so với lập trình hướng thủ tục là gì?
A. Tốc độ thực thi nhanh hơn.
B. Dễ dàng quản lý và bảo trì mã nguồn khi dự án lớn và phức tạp.
C. Sử dụng ít bộ nhớ hơn.
D. Khả năng tương thích tốt hơn với phần cứng.
30. Nguyên tắc 'Dependency Inversion Principle′ (DIP) trong SOLID tập trung vào việc giảm sự phụ thuộc giữa các thành phần phần mềm bằng cách nào?
A. Tăng cường sự phụ thuộc vào các lớp cụ thể.
B. Phụ thuộc vào các lớp trừu tượng (interfaces hoặc abstract classes) thay vì các lớp cụ thể.
C. Loại bỏ hoàn toàn sự phụ thuộc giữa các lớp.
D. Sử dụng đa kế thừa để giảm phụ thuộc.