1. Trong OOP, 'message passing′ (truyền thông điệp) là cơ chế gì?
A. Gửi dữ liệu trực tiếp giữa các đối tượng
B. 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. Chia sẻ bộ nhớ giữa các đối tượng
D. Truyền dữ liệu thông qua biến toàn cục
2. Điều gì KHÔNG phải là một nguyên tắc SOLID trong OOP?
A. Single Responsibility Principle
B. Open∕Closed Principle
C. Don′t Repeat Yourself (DRY)
D. Liskov Substitution Principle
3. Trong OOP, 'abstract class′ (lớp trừu tượng) khác với 'concrete class′ (lớp cụ thể) như thế nào?
A. Abstract class có thể tạo đối tượng trực tiếp, concrete class thì không
B. Abstract class không thể chứa phương thức, concrete class thì có thể
C. Abstract class không thể khởi tạo trực tiếp đối tượng, concrete class thì có thể
D. Abstract class không hỗ trợ kế thừa, concrete class thì có
4. Phương thức 'virtual′ (ảo) trong một số ngôn ngữ OOP (như C++) liên quan đến khái niệm nào?
A. Tính đóng gói
B. Tính đa hình động (runtime polymorphism)
C. Tính trừu tượng
D. Tính kế thừa
5. Phương thức 'destructor′ (phương thức hủy) trong OOP có chức năng chính là gì?
A. Khởi tạo đối tượng
B. Giải phóng tài nguyên khi đối tượng bị hủy
C. Thay đổi trạng thái đối tượng
D. Kiểm tra tính hợp lệ của đối tượng
6. Khái niệm 'coupling′ (kết nối) và 'cohesion′ (liên kết) trong OOP liên quan đến điều gì?
A. Hiệu suất và tốc độ chương trình
B. Mức độ độc lập và tính gắn kết của các thành phần
C. Tính bảo mật và an toàn dữ liệu
D. Khả năng tái sử dụng và mở rộng
7. Trong OOP, 'association′ (kết hợp), 'aggregation′ (tập hợp), và 'composition′ (hợp thành) là các loại quan hệ nào?
A. Quan hệ kế thừa
B. Quan hệ giữa các đối tượng
C. Quan hệ giữa lớp và đối tượng
D. Quan hệ giữa các phương thức
8. Thuộc tính 'static′ trong OOP có đặc điểm gì?
A. Thuộc về một thể hiện cụ thể của lớp (object)
B. Chỉ có thể truy cập từ bên trong lớp
C. Thuộc về lớp chứ không phải thể hiện cụ thể nào của lớp
D. Không thể thay đổi giá trị sau khi khởi tạo
9. Lỗi 'NullPointerException′ (hoặc tương đương trong ngôn ngữ khác) trong OOP thường xảy ra do nguyên nhân nào?
A. Truy cập vào một biến static chưa được khởi tạo
B. Cố gắng truy cập một phương thức private từ bên ngoài lớp
C. Cố gắng truy cập thành viên của một đối tượng tham chiếu null
D. Chia cho số 0 trong một phương thức
10. Điều gì KHÔNG phải là một 'design pattern′ (mẫu thiết kế) phổ biến trong OOP?
A. Singleton
B. Factory
C. Bubble Sort
D. Observer
11. Trong OOP, 'access modifiers′ (bộ điều khiển truy cập) như 'public′, 'private′, 'protected′ dùng để làm gì?
A. Tăng tốc độ truy cập dữ liệu
B. Kiểm soát phạm vi truy cập của các thành viên lớp
C. Tối ưu hóa bộ nhớ sử dụng
D. Đơn giản hóa việc kế thừa
12. Khi nào nên sử dụng 'inheritance′ (kế thừa) thay vì 'composition′ (tổ hợp) trong thiết kế OOP?
A. Khi muốn tái sử dụng code mà không muốn tạo quan hệ 'is-a′
B. Khi muốn tạo quan hệ 'has-a′ giữa các lớp
C. Khi muốn tạo quan hệ 'is-a′ giữa các lớp và tận dụng đa hình
D. Khi muốn giảm sự phụ thuộc giữa các lớp
13. 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. 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 của đối tượng khi tạo mới
D. Thực hiện các phép toán trên đối tượng
14. Điều gì KHÔNG phải là một đặc điểm của 'pure object-oriented programming language′ (ngôn ngữ lập trình hướng đối tượng thuần túy)?
A. Mọi thứ đều là đối tượng
B. Hỗ trợ đa kế thừa
C. Dữ liệu và phương thức được đóng gói trong đối tượng
D. Tập trung vào tính đa hình và kế thừa
15. Trong OOP, 'method overriding′ (ghi đè phương thức) xảy ra khi nào?
A. Hai phương thức có cùng tên trong cùng một lớp
B. Lớp con định nghĩa lại phương thức đã có của lớp cha
C. Phương thức gọi phương thức khác trong cùng lớp
D. Phương thức được gọi từ một đối tượng khác lớp
16. Trong mô hình hướng đối tượng, 'responsibility′ (trách nhiệm) của một lớp nên được thiết kế như thế nào theo nguyên tắc 'Single Responsibility Principle′?
A. Lớp nên đảm nhận càng nhiều trách nhiệm càng tốt để tối ưu hóa code
B. Lớp nên có một và chỉ một lý do để thay đổi
C. Lớp nên phụ thuộc vào nhiều lớp khác để phân tán trách nhiệm
D. Lớp nên được thiết kế để dễ dàng kế thừa và mở rộng
17. Phương thức 'getter′ và 'setter′ thường được sử dụng để làm gì trong OOP?
A. Tối ưu hóa hiệu suất chương trình
B. Quản lý bộ nhớ cho đối tượng
C. Truy cập và sửa đổi thuộc tính của đối tượng một cách kiểm soát
D. Thực hiện đa hình tại thời gian biên dịch
18. Khái niệm nào trong 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 so với đối tượng thuộc lớp cha khi cùng nhận một thông điệp?
A. Tính đóng gói (Encapsulation)
B. Tính đa hình (Polymorphism)
C. Tính kế thừa (Inheritance)
D. Tính trừu tượng (Abstraction)
19. Khái niệm 'composition′ (tổ hợp) trong OOP khác với 'inheritance′ (kế thừa) như thế nào?
A. Composition thể hiện quan hệ 'is-a′, inheritance thể hiện 'has-a′
B. Composition là quan hệ 'part-of′, inheritance là 'is-a′
C. Composition là quan hệ 'is-a′, inheritance là 'part-of′
D. Composition và inheritance đều thể hiện quan hệ 'is-a′
20. Ưu điểm chính của việc sử dụng 'polymorphism′ (đa hình) trong OOP là gì?
A. Giảm dung lượng bộ nhớ chương trình
B. Tăng tính linh hoạt và khả năng mở rộng của chương trình
C. Đơn giản hóa việc quản lý dữ liệu
D. Tăng tốc độ biên dịch chương trình
21. Mục đích chính của việc sử dụng 'interface′ (giao diện) trong OOP là gì?
A. Tăng cường tính đóng gói
B. Định nghĩa một tập hợp các phương thức mà lớp phải thực hiện
C. Thay thế cho việc kế thừa đa lớp
D. Giảm độ phức tạp của kế thừa
22. Khái niệm 'abstraction′ (trừu tượng hóa) trong OOP giúp giải quyết vấn đề nào?
A. Tăng tốc độ phát triển phần mềm
B. Quản lý độ phức tạp của hệ thống
C. Cải thiện khả năng tái sử dụng code
D. Bảo mật dữ liệu
23. Trong ngữ cảnh lập trình hướng đối tượng, 'inheritance′ (kế thừa) thể hiện mối quan hệ nào giữa các lớp?
A. 'Sở hữu′ (has-a relationship)
B. 'Là một loại′ (is-a relationship)
C. 'Sử dụng′ (uses-a relationship)
D. 'Thành phần của′ (part-of relationship)
24. Khi nào thì 'method overloading′ (nạp chồng phương thức) được sử dụng trong OOP?
A. Khi muốn ghi đè phương thức của lớp cha
B. Khi muốn tạo nhiều phương thức có cùng tên nhưng khác tham số trong cùng một lớp
C. Khi muốn gọi phương thức của lớp cha từ lớp con
D. Khi muốn ẩn thông tin chi tiết triển khai của phương thức
25. Điều gì xảy ra khi một phương thức 'private′ của lớp cha được gọi từ một đối tượng của lớp con?
A. Phương thức của lớp cha sẽ được thực thi bình thường
B. Phương thức của lớp con sẽ được thực thi thay thế
C. Lỗi biên dịch hoặc lỗi thời gian chạy sẽ xảy ra
D. Phương thức của lớp cha sẽ được thực thi, nhưng chỉ với quyền truy cập hạn chế
26. Trong OOP, 'garbage collection′ (thu gom rác) là quá trình gì?
A. Giải phóng bộ nhớ đã cấp phát cho các đối tượng không còn được sử dụng
B. Tối ưu hóa hiệu suất chương trình bằng cách sắp xếp lại bộ nhớ
C. Kiểm tra và sửa lỗi bộ nhớ trong quá trình chạy
D. Cấp phát bộ nhớ cho các đối tượng mới
27. 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à một thể hiện cụ thể của Object
B. Object là bản thiết kế, Class là thể hiện thực tế
C. Class là bản thiết kế, Object là thể hiện cụ thể
D. Class và Object là hai khái niệm hoàn toàn độc lập
28. Tính đóng gói (Encapsulation) trong OOP chủ yếu hướng đến mục tiêu nào?
A. Tăng tính linh hoạt của chương trình
B. Giảm sự phụ thuộc giữa các thành phần
C. Ẩn giấu thông tin và bảo vệ dữ liệu
D. Đơn giản hóa việc kế thừa
29. Đ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 khả năng tái sử dụng mã nguồn
B. Giảm độ phức tạp của chương trình
C. Tăng tốc độ thực thi chương trình
D. Dễ dàng bảo trì và mở rộng
30. Điều gì KHÔNG phải là một lợi ích của việc sử dụng 'design patterns′ (mẫu thiết kế) trong OOP?
A. Tăng tốc độ phát triển phần mềm
B. Cải thiện khả năng tái sử dụng code
C. Giảm độ phức tạp của chương trình
D. Tăng hiệu suất thực thi chương trình