1. Hạn chế chính của việc sử dụng đa kế thừa (multiple inheritance) là gì?
A. Giảm hiệu suất chương trình
B. Gây ra vấn đề 'diamond problem′ và độ phức tạp trong thiết kế
C. Khó khăn trong việc triển khai tính đa hình
D. Tăng kích thước mã nguồn
2. Nguyên tắc 'Dependency Inversion Principle′ (DIP) trong SOLID khuyến khích đ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 abstraction
B. Các lớp nên có một và chỉ một lý do để thay đổi
C. Interface-specific clients are better than one general-purpose interface
D. Các đối tượng trong một chương trình nên có thể thay thế lẫn nhau
3. Lớp trừu tượng (abstract class) khác với lớp thông thường ở điểm nào?
A. Lớp trừu tượng không thể chứa 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ỉ có thể chứa phương thức trừu tượng
D. Lớp trừu tượng luôn phải là lớp cha
4. Tính trừu tượng (abstraction) trong OOP tập trung vào điều gì?
A. Ẩn giấu cách thức cài đặt phức tạp và chỉ hiển thị giao diện đơn giản
B. Tăng tốc độ truy cập dữ liệu
C. Tạo ra các đối tượng ảo
D. Phân chia chương trình thành các module nhỏ hơn
5. Tính trừu tượng hóa dữ liệu (data abstraction) khác với tính đóng gói (encapsulation) như thế nào?
A. Trừu tượng hóa dữ liệu là một dạng đặc biệt của đóng gói
B. Đóng gói là một dạng đặc biệt của trừu tượng hóa dữ liệu
C. Trừu tượng hóa dữ liệu tập trung vào việc ẩn chi tiết cài đặt, đóng gói tập trung vào việc bảo vệ dữ liệu
D. Trừu tượng hóa dữ liệu và đóng gói là hai khái niệm hoàn toàn giống nhau
6. Phương thức 'static′ trong OOP có đặc điểm gì?
A. Luôn được kế thừa bởi lớp con
B. Thuộc về lớp chứ không phải đối tượng cụ thể của lớp
C. Chỉ được gọi bên trong lớp định nghĩa
D. Tự động được gọi khi đối tượng bị hủy
7. Trong mô hình hướng đối tượng, 'đối tượng′ thường được xem là sự kết hợp của những yếu tố nào?
A. Dữ liệu và thuật toán
B. Thuộc tính (attributes) và hành vi (behaviors∕methods)
C. Lớp và interface
D. Biến và hàm
8. Từ khóa 'super′ thường được sử dụng để làm gì trong ngữ cảnh kế thừa?
A. Truy cập các thuộc tính private của lớp cha
B. Gọi constructor hoặc phương thức của lớp cha từ lớp con
C. Tạo một đối tượng mới của lớp cha
D. Xóa đối tượng của lớp cha
9. Trong lập trình hướng đối tượng, 'đa hình′ (polymorphism) thường được thể hiện qua hình thức nào?
A. Nạp chồng phương thức (method overloading) và ghi đè phương thức (method overriding)
B. Tính đóng gói và tính kế thừa
C. Tính trừu tượng và tính mô đun
D. Sử dụng con trỏ và tham chiếu
10. Trong lập trình hướng đối tượng, 'message passing′ đề 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 các đối tượng tương tác với nhau bằng cách gọi phương thức của nhau
C. Việc truyền thông tin lỗi trong chương trình
D. Việc đồng bộ hóa dữ liệu giữa các đối tượng
11. Khi nào thì nên sử dụng lớp 'final′ trong OOP?
A. Khi muốn lớp đó luôn được kế thừa
B. Khi muốn ngăn chặn việc lớp đó bị kế thừa thêm
C. Khi muốn tối ưu hóa hiệu suất của lớp
D. Khi lớp đó chỉ chứa các phương thức static
12. Phương thức trừu tượng (abstract method) là gì?
A. Phương thức có phần thân được định nghĩa đầy đủ trong lớp cha
B. Phương thức chỉ được khai báo trong lớp cha mà không có phần thân, và phải được định nghĩa lại ở lớp con
C. Phương thức không thể được gọi từ bên ngoài lớp
D. Phương thức dùng để tạo ra các đối tượng trừu tượng
13. SOLID là một tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ 'L′ trong SOLID đại diện cho nguyên tắc nào?
A. Liskov Substitution Principle
B. Law of Demeter
C. Least Knowledge Principle
D. Loose Coupling Principle
14. Ví dụ nào sau đây thể hiện rõ nhất tính đa hình (polymorphism) trong thực tế?
A. Một nút 'Mở' trong phần mềm có thể mở nhiều loại file khác nhau (văn bản, hình ảnh, video)
B. Một lớp 'Động vật′ có các lớp con như 'Chó', 'Mèo′, 'Gà'
C. Một lớp 'Hình chữ nhật′ có các thuộc tính 'chiều dài′ và 'chiều rộng′
D. Một phương thức 'tính diện tích′ được định nghĩa trong nhiều lớp khác nhau
15. Nguyên tắc 'Open∕Closed Principle′ (OCP) trong SOLID phát biểu rằng:
A. Các lớp nên mở cho việc mở rộng nhưng đóng cho việc sửa đổi
B. Các lớp nên đóng cho việc mở rộng và đóng cho việc sửa đổi
C. Các lớp nên mở cho việc mở rộng và mở cho việc sửa đổi
D. Các lớp nên đóng cho việc mở rộng nhưng mở cho việc sửa đổi
16. Tính kế thừa (inheritance) trong lập trình hướng đối tượng mang lại lợi ích nào sau đây?
A. Giảm tính phức tạp của chương trình
B. Tăng tính bảo mật của dữ liệu
C. Tái sử dụng mã nguồn và mở rộng chức năng
D. Cải thiện hiệu suất chương trình
17. Mục đích chính của việc sử dụng 'design patterns′ (mẫu thiết kế) trong OOP là gì?
A. Tăng tốc độ phát triển phần mềm
B. Cung cấp các giải pháp đã được kiểm chứng cho các vấn đề thiết kế thường gặp
C. Giảm thiểu lỗi lập trình
D. Tối ưu hóa hiệu suất chương trình
18. Trong lập trình hướng đối tượng, 'class′ và 'object′ có mối quan hệ như thế nào?
A. Class là thể hiện của object
B. Object là bản thiết kế của class
C. Class là bản thiết kế, object là thể hiện cụ thể của class
D. Class và object là hai khái niệm độc lập, không liên quan
19. Ưu điểm chính của tính đóng gói (encapsulation) trong lập trình hướng đối tượng là gì?
A. Tăng tốc độ thực thi chương trình
B. Giảm thiểu sử dụng bộ nhớ
C. Che giấu thông tin và bảo vệ dữ liệu
D. Cho phép đa kế thừa
20. Khi nào thì nên sử dụng 'composition′ thay vì 'inheritance′ trong thiết kế OOP?
A. Khi muốn tái sử dụng mã nguồn một cách triệt để
B. Khi có quan hệ 'is-a′ giữa các lớp
C. Khi muốn tạo ra một hệ thống phân cấp lớp phức tạp
D. Khi có quan hệ 'has-a′ và muốn linh hoạt hơn trong việc thay đổi hành vi
21. Khái niệm nào sau đây của lập trình hướng đối tượng cho phép một đối tượng thuộc lớp con có thể hành xử khác nhau tùy thuộc vào ngữ cảnh, mặc dù cùng được gọi bằng một phương thức?
A. Tính đóng gói (Encapsulation)
B. Tính kế thừa (Inheritance)
C. Tính đa hình (Polymorphism)
D. Tính trừu tượng (Abstraction)
22. Trong lập trình hướng đối tượng, 'phương thức ảo′ (virtual method) liên quan mật thiết đến khái niệm nào?
A. Tính đóng gói
B. Tính kế thừa và đa hình
C. Tính trừu tượng
D. Tính mô đun
23. Điểm khác biệt chính giữa 'is-a′ và 'has-a′ relationship trong OOP là gì?
A. 'Is-a′ thể hiện tính đóng gói, 'has-a′ thể hiện tính kế thừa
B. 'Is-a′ thể hiện quan hệ kế thừa, 'has-a′ thể hiện quan hệ kết hợp (composition∕aggregation)
C. 'Is-a′ dùng cho lớp trừu tượng, 'has-a′ dùng cho lớp cụ thể
D. 'Is-a′ và 'has-a′ là hai tên gọi khác nhau của cùng một loại quan hệ
24. Trong ngữ cảnh của OOP, thuật ngữ 'coupling′ (kết nối) và 'cohesion′ (kết dính) được hiểu như thế nào?
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
B. Coupling và cohesion đều chỉ mức độ liên kết bên trong một lớp
C. Coupling và cohesion đều chỉ mức độ liên kết giữa các lớp
D. Coupling là tính tái sử dụng mã, cohesion là tính đóng gói
25. Mục tiêu của việc thiết kế hướng đối tượng là gì?
A. Tối ưu hóa tốc độ thực thi chương trình
B. Mô hình hóa thế giới thực một cách tự nhiên và dễ quản lý
C. Giảm thiểu số dòng code trong chương trình
D. Tăng tính bảo mật hệ thống
26. Tại sao lập trình hướng đối tượng thường được ưu tiên hơn lập trình hướng thủ tục trong các dự án phần mềm lớn và phức tạp?
A. OOP luôn nhanh hơn và tiết kiệm bộ nhớ hơn lập trình thủ tục
B. OOP giúp quản lý mã nguồn dễ dàng hơn, tăng tính tái sử dụng và bảo trì
C. OOP có cú pháp đơn giản và dễ học hơn lập trình thủ tục
D. OOP tương thích tốt hơn với phần cứng máy tính hiện đại
27. Phương thức khởi tạo (constructor) trong một lớp được sử dụng để làm gì?
A. Hủy bỏ đối tượng khi không còn sử dụng
B. Thay đổi trạng thái của đối tượng sau khi tạo
C. Khởi tạo trạng thái ban đầu cho đối tượng khi mới được tạo
D. Khai báo các thuộc tính của đối tượng
28. Khi thiết kế một hệ thống OOP, việc xác định lớp và trách nhiệm của mỗi lớp là bước quan trọng trong giai đoạn nào?
A. Giai đoạn kiểm thử
B. Giai đoạn triển khai
C. Giai đoạn phân tích và thiết kế
D. Giai đoạn bảo trì
29. Ưu điểm của việc sử dụng interface so với lớp trừu tượng trong một số trường hợp là gì?
A. Interface có thể chứa code thực thi
B. Một lớp có thể thực hiện nhiều interface, nhưng chỉ có thể kế thừa từ một lớp trừu tượng
C. Interface giúp tăng tính bảo mật cao hơn lớp trừu tượng
D. Interface hỗ trợ đa kế thừa thuộc tính tốt hơn
30. Interface (giao diện) trong lập trình hướng đối tượng có vai trò gì?
A. Cung cấp cài đặt mặc định cho các phương thức
B. Định nghĩa một tập hợp các phương thức mà các lớp thực hiện interface phải tuân thủ
C. Thay thế cho lớp trừu tượng trong mọi trường hợp
D. Cho phép đa kế thừa hành vi từ nhiều lớp