1. Điều gì sẽ xảy ra nếu bạn cố gắng truy cập một thuộc tính `private` của một đối tượng từ bên ngoài lớp của nó?
A. Thuộc tính sẽ được trả về với giá trị mặc định
B. Chương trình sẽ biên dịch thành công nhưng có thể gặp lỗi thời gian chạy
C. Lỗi biên dịch sẽ xảy ra, ngăn chương trình chạy
D. Thuộc tính sẽ được tự động chuyển thành `public` để cho phép truy cập
2. Lợi ích 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. Chương trình OOP luôn chạy nhanh hơn
B. Chương trình OOP luôn chiếm ít bộ nhớ hơn
C. OOP giúp quản lý mã nguồn phức tạp tốt hơn, tăng tính tái sử dụng và bảo trì
D. Lập trình hướng thủ tục không hỗ trợ tái sử dụng mã nguồn
3. Mục đích của `design patterns` (mẫu thiết kế) trong lập trình hướng đối tượng là gì?
A. Tăng tốc độ biên dịch 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. Hạn chế sự linh hoạt của mã nguồn
D. Thay thế hoàn toàn việc thiết kế phần mềm thủ công
4. Trong OOP, `phương thức ảo` (virtual method) thường liên quan đến khái niệm nào?
A. Tính đóng gói
B. Tính trừu tượng
C. Tính đa hình
D. Tính kế thừa
5. Mối quan hệ `tổng hợp` (aggregation) và `hợp thành` (composition) trong OOP khác nhau như thế nào?
A. Tổng hợp thể hiện mối quan hệ `là một loại`, hợp thành thể hiện mối quan hệ `có một`
B. Tổng hợp là một dạng mạnh hơn của hợp thành
C. Hợp thành thể hiện mối quan hệ `có một` mạnh hơn, trong đó đối tượng thành phần phụ thuộc vào đối tượng chứa nó
D. Không có sự khác biệt giữa tổng hợp và hợp thành
6. Trong OOP, thuật ngữ `message passing` (truyền thông điệp) thường liên quan đến điều gì?
A. Việc truyền dữ liệu giữa các đối tượng thông qua việc gọi phương thức
B. Việc gửi thông báo lỗi đến người dùng
C. Việc trao đổi dữ liệu giữa các chương trình khác nhau
D. Việc mã hóa và giải mã dữ liệu
7. Trong lập trình hướng đối tượng, `đa kế thừa` (multiple inheritance) có nghĩa là gì?
A. Một lớp có thể kế thừa từ nhiều lớp cha
B. Một lớp cha có thể có nhiều lớp con
C. Một đối tượng có thể thuộc về nhiều lớp
D. Một phương thức có thể được kế thừa nhiều lần
8. 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 để ẩn thông tin
D. Một cách để thực hiện đa hình
9. Điểm khác biệt chính giữa `lớp trừu tượng` (abstract class) và `giao diện` (interface) trong OOP là gì?
A. Lớp trừu tượng có thể chứa các phương thức đã được triển khai, trong khi giao diện chỉ chứa các phương thức trừu tượng
B. Giao diện có thể chứa các thuộc tính, trong khi lớp trừu tượng thì không
C. Lớp trừu tượng hỗ trợ đa kế thừa, trong khi giao diện chỉ hỗ trợ đơn kế thừa
D. Không có sự khác biệt, `lớp trừu tượng` và `giao diện` là các thuật ngữ đồng nghĩa
10. 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 trừu tượng (Abstraction)
C. Tính đa hình (Polymorphism)
D. Tính tuần tự (Sequence)
11. 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
12. Điều gì xảy ra khi bạn tạo một đối tượng từ một lớp?
A. Lớp bị xóa khỏi bộ nhớ
B. Một bản sao của lớp được tạo ra trong bộ nhớ, chứa dữ liệu cụ thể của đối tượng đó
C. Chỉ có con trỏ đến lớp được tạo ra
D. Không có gì xảy ra cho đến khi bạn gọi một phương thức của đối tượng
13. Phương thức `getter` và `setter` thường được sử dụng để làm gì trong lập trình hướng đối tượng?
A. Tạo ra các đối tượng mới
B. Truy cập và sửa đổi các thuộc tính riêng tư (private) của một đối tượng
C. Thực hiện tính đa hình
D. Hủy bỏ các đối tượng
14. Khái niệm `interface` trong OOP giúp đạt được điều gì?
A. Triển khai chi tiết cụ thể của một lớp
B. Định nghĩa một hợp đồng mà các lớp phải tuân theo, đảm bảo tính nhất quán về hành vi
C. Tăng tốc độ thực thi của chương trình
D. Ẩn hoàn toàn dữ liệu của đối tượng
15. Trong OOP, `tính đóng gói` chủ yếu giúp đạt được mục tiêu nào sau đây?
A. Tăng tốc độ thực thi chương trình
B. Giảm dung lượng bộ nhớ sử dụng
C. Bảo vệ dữ liệu và giảm sự phụ thuộc lẫn nhau giữa các thành phần của chương trình
D. Tăng cường khả năng tái sử dụng mã nguồn thông qua kế thừa
16. Mục đích chính của việc sử dụng `tính đa hình` (polymorphism) trong lập trình hướng đối tượng là gì?
A. Tăng tốc độ biên dịch chương trình
B. Giảm sự phức tạp của mã nguồn và tăng tính linh hoạt
C. Cải thiện hiệu suất sử dụng bộ nhớ
D. Hạn chế khả năng tái sử dụng mã nguồn
17. Trong lập trình hướng đối tượng, `overloading` (nạp chồng) phương thức là gì?
A. Ghi đè một phương thức của lớp cha trong lớp con
B. Tạo ra nhiều phương thức trong cùng một lớp có cùng tên nhưng khác nhau về tham số
C. Ẩn chi tiết triển khai của một phương thức
D. Tối ưu hóa hiệu suất của một phương thức
18. Khi nào thì nên sử dụng `tính kế thừa` (inheritance) trong thiết kế hướng đối tượng?
A. Khi các lớp không có mối quan hệ `là một loại` (is-a)
B. Khi muốn giảm sự phức tạp của lớp cha
C. Khi có mối quan hệ `là một loại` (is-a) giữa các lớp và muốn tái sử dụng mã nguồn
D. Khi cần tạo ra nhiều đối tượng độc lập mà không có liên quan đến nhau
19. Khi nào thì nên sử dụng `composition` thay vì `inheritance` trong thiết kế OOP?
A. Khi có mối quan hệ `là một loại` (is-a)
B. Khi muốn tái sử dụng mã nguồn từ lớp cha
C. Khi muốn tạo ra mối quan hệ `có một` (has-a) và tránh các vấn đề liên quan đến kế thừa sâu
D. Khi cần đa hình thời gian biên dịch
20. Nguyên tắc `Dependency Inversion Principle` (DIP) trong SOLID khuyến khích điều gì?
A. Các lớp cấp cao nên phụ thuộc vào các lớp cấp thấp
B. Các lớp cấp thấp nên phụ thuộc vào các lớp cấp cao
C. Cả lớp cấp cao và lớp cấp thấp nên phụ thuộc vào các trừu tượng (abstractions)
D. Không có sự phụ thuộc giữa các lớp
21. Trong ngữ cảnh của `tính kế thừa`, lớp `cha` (superclass) còn được gọi là gì?
A. Lớp con (subclass)
B. Lớp dẫn xuất (derived class)
C. Lớp cơ sở (base class)
D. Lớp giao diện (interface class)
22. Đa hình (polymorphism) trong lập trình hướng đối tượng 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 khởi tạo
C. 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 hoặc phương thức
D. Một phương thức có thể được gọi từ nhiều lớp khác nhau
23. Trong lập trình hướng đối tượng, `đối tượng` (object) là gì?
A. Một lớp (class) được định nghĩa
B. Một bản thiết kế của lớp
C. Một thể hiện cụ thể của một lớp
D. Một phương thức trong một lớp
24. Thuật ngữ `tính trừu tượng` (abstraction) trong OOP liên quan đến điều gì?
A. Ẩn giấu chi tiết triển khai phức tạp và chỉ hiển thị giao diện cần thiết cho người dùng
B. Sao chép dữ liệu từ đối tượng này sang đối tượng khác
C. Tạo ra nhiều bản sao của một đối tượng
D. Phân chia một lớp thành nhiều lớp nhỏ hơn
25. Khái niệm nào sau đây là trụ cột của lập trình hướng đối tượng, đề cập đến việc gói gọn dữ liệu và phương thức hoạt động trên dữ liệu đó vào một đơn vị duy nhất?
A. Tính trừu tượng
B. Tính đóng gói
C. Tính đa hình
D. Tính kế thừa
26. Phương thức nào sau đây thường được sử dụng để giải phóng tài nguyên mà một đối tượng nắm giữ khi đối tượng đó không còn được sử dụng?
A. Phương thức khởi tạo (constructor)
B. Phương thức hủy bỏ (destructor)
C. Phương thức getter
D. Phương thức setter
27. Tính kế thừa (inheritance) trong OOP cho phép điều gì?
A. Một lớp có thể ẩn dữ liệu của lớp khác
B. Một lớp có thể truy cập trực tiếp vào dữ liệu riêng tư của lớp khác
C. Một lớp con (subclass) có thể kế thừa các thuộc tính và phương thức từ lớp cha (superclass)
D. Một đối tượng có thể thay đổi lớp của nó trong quá trình chạy
28. 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 nó không còn cần thiết
B. Tạo ra một lớp mới
C. Khởi tạo trạng thái ban đầu của 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
29. Phương thức nào sau đây thường được gọi là `phương thức truy cập` (accessor method)?
A. Phương thức khởi tạo (constructor)
B. Phương thức hủy bỏ (destructor)
C. Phương thức getter (get method)
D. Phương thức setter (set method)
30. Trong lập trình hướng đối tượng, `phương thức tĩnh` (static method) có đặc điểm gì?
A. Nó có thể truy cập trực tiếp các thuộc tính không tĩnh của lớp
B. Nó được gọi trên một thể hiện cụ thể của lớp (đối tượng)
C. Nó thuộc về lớp chứ không phải bất kỳ đối tượng cụ thể nào của lớp
D. Nó chỉ có thể được gọi từ bên trong lớp chứa nó