1. Loại đa hình nào được quyết định tại thời điểm biên dịch?
A. Đa hình thời gian chạy (runtime polymorphism)
B. Đa hình tĩnh (static polymorphism) hoặc đa hình thời gian biên dịch (compile-time polymorphism)
C. Đa hình động (dynamic polymorphism)
D. Đa hình tham số (parametric polymorphism)
2. Trong lập trình hướng đối tượng, `tính trừu tượng` (abstraction) đề cập đến điều gì?
A. Khả năng một đối tượng thuộc nhiều lớp.
B. Cơ chế che giấu thông tin chi tiết phức tạp và chỉ hiển thị các tính năng cần thiết của đối tượng.
C. Quá trình tạo ra các lớp mới từ các lớp đã có.
D. Khả năng một phương thức hoạt động theo nhiều cách khác nhau tùy thuộc vào đối tượng gọi nó.
3. Mục đích của việc sử dụng `lớp trừu tượng` (abstract class) là gì?
A. Để tạo ra các đối tượng không thể thay đổi.
B. Để định nghĩa một lớp cơ sở mà các lớp con phải kế thừa và thực hiện các phương thức trừu tượng.
C. Để tăng hiệu suất của chương trình.
D. Để ẩn toàn bộ lớp khỏi các phần khác của chương trình.
4. Trong OOP, `lớp` (class) và `đối tượng` (object) khác nhau như thế nào?
A. Lớp là một thể hiện cụ thể, còn đối tượng là bản thiết kế.
B. Lớp là một bản thiết kế hoặc khuôn mẫu, còn đối tượng là một thể hiện cụ thể của lớp đó.
C. Lớp và đối tượng là các khái niệm tương đương và có thể sử dụng thay thế cho nhau.
D. Lớp chứa các đối tượng, còn đối tượng chứa các lớp.
5. Điều gì xảy ra nếu một lớp con không ghi đè một phương thức trừu tượng của lớp cha trừu tượng?
A. Chương trình sẽ biên dịch thành công và chạy bình thường.
B. Lớp con cũng trở thành lớp trừu tượng và không thể khởi tạo đối tượng.
C. Phương thức trừu tượng của lớp cha sẽ bị bỏ qua.
D. Chương trình sẽ báo lỗi biên dịch.
6. Phân biệt `nạp chồng phương thức` (method overloading) và `ghi đè phương thức` (method overriding) trong OOP.
A. Nạp chồng phương thức là định nghĩa nhiều phương thức cùng tên trong cùng một lớp với tham số khác nhau, ghi đè phương thức là định nghĩa lại phương thức của lớp cha trong lớp con.
B. Nạp chồng phương thức và ghi đè phương thức là hai tên gọi khác nhau cho cùng một khái niệm.
C. Nạp chồng phương thức là ghi đè phương thức của lớp cha trong lớp con, ghi đè phương thức là định nghĩa nhiều phương thức cùng tên trong cùng một lớp.
D. Cả hai đều là cơ chế để ẩn dữ liệu.
7. Trong lập trình hướng đối tượng, `tính mô-đun` (modularity) được cải thiện như thế nào?
A. Bằng cách viết code dài và phức tạp hơn.
B. Bằng cách chia chương trình thành các đối tượng và lớp độc lập, có trách nhiệm rõ ràng.
C. Bằng cách sử dụng các biến toàn cục.
D. Bằng cách loại bỏ hoàn toàn việc sử dụng hàm.
8. Trong OOP, `phương thức tĩnh` (static method) thuộc về...
A. Một đối tượng cụ thể của lớp.
B. Chính lớp đó, không phải bất kỳ đối tượng cụ thể nào của lớp.
C. Lớp cha của lớp hiện tại.
D. Một giao diện (interface).
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 nhóm dữ liệu và phương thức thao tác dữ liệu đó 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 hóa
10. Điều gì là lợi ích chính của việc sử dụng tính đóng gói 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. Bảo vệ dữ liệu của đối tượng khỏi bị truy cập và sửa đổi trực tiếp từ bên ngoài, tăng tính bảo mật và dễ bảo trì.
D. Cho phép tạo ra các đối tượng phức tạp hơn.
11. Trong OOP, `phạm vi truy cập` (access modifier) `protected` có ý nghĩa gì?
A. Thuộc tính hoặc phương thức chỉ có thể được truy cập từ bên trong lớp và các lớp con của nó.
B. Thuộc tính hoặc phương thức có thể được truy cập từ bất kỳ đâu.
C. Thuộc tính hoặc phương thức chỉ có thể được truy cập từ bên trong lớp.
D. Thuộc tính hoặc phương thức không thể được truy cập từ bất kỳ đâu.
12. Điều gì KHÔNG phải là một nguyên tắc cơ bản của lập trình hướng đối tượng?
A. Tính tuần tự (Sequentiality)
B. Đóng gói (Encapsulation)
C. Kế thừa (Inheritance)
D. Đa hình (Polymorphism)
13. Nguyên tắc `DRY` (Don`t Repeat Yourself) trong lập trình hướng đối tượng khuyến khích điều gì?
A. Viết code càng chi tiết càng tốt.
B. Sao chép và dán code để tiết kiệm thời gian.
C. Tránh lặp lại code bằng cách trừu tượng hóa và tái sử dụng code.
D. Viết code ngắn gọn nhất có thể, bỏ qua tính dễ đọc.
14. Khi nào nên sử dụng kế thừa thay vì thành phần hóa trong thiết kế OOP?
A. Khi muốn tái sử dụng mã nguồn một cách tối đa.
B. Khi có mối quan hệ `has-a` (có một) giữa các đối tượng.
C. Khi có mối quan hệ `is-a` (là một) giữa các lớp và muốn mở rộng hoặc chuyên biệt hóa hành vi của lớp cha.
D. Khi muốn ẩn dữ liệu.
15. Khái niệm `thành phần hóa` (composition) trong OOP là gì?
A. Một hình thức của kế thừa đa lớp.
B. Một cách để tạo ra các lớp trừu tượng.
C. Một cách để xây dựng các đối tượng phức tạp bằng cách kết hợp các đối tượng đơn giản hơn, thể hiện mối quan hệ `has-a` (có một).
D. Một cơ chế để ẩn dữ liệu.
16. Ví dụ nào sau đây thể hiện rõ nhất tính đa hình trong lập trình hướng đối tượng?
A. Một lớp `Động vật` có các lớp con `Chó`, `Mèo`, `Vịt` kế thừa từ nó.
B. Một phương thức `tính diện tích` có thể tính diện tích cho cả hình tròn, hình vuông và hình tam giác.
C. Một lớp `Nhân viên` có thuộc tính `tên` và `tuổi`.
D. Một lớp `Hình học` chứa các phương thức để vẽ các hình khác nhau.
17. Trong thiết kế OOP, nguyên tắc `Single Responsibility Principle` (SRP) khuyến nghị điều gì?
A. Mỗi lớp nên có nhiều trách nhiệm để tối ưu hóa code.
B. Mỗi lớp chỉ nên có một và chỉ một lý do để thay đổi, tức là một trách nhiệm duy nhất.
C. Các lớp nên phụ thuộc lẫn nhau càng nhiều càng tốt.
D. Code nên được viết càng phức tạp càng tốt để tăng tính bảo mật.
18. Trong ngữ cảnh của kế thừa, lớp `cha` còn được gọi là gì?
A. Lớp con
B. Lớp dẫn xuất
C. Lớp cơ sở (base class) hoặc lớp siêu (superclass)
D. Lớp thực thi
19. Mục đích chính của việc sử dụng `giao diện` (interface) trong lập trình hướng đối tượng là gì?
A. Để tạo ra các đối tượng phức tạ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. Để ẩn dữ liệu bên trong đối tượng.
D. Để tăng tốc độ thực thi chương trình.
20. Phương thức nào trong OOP được gọi tự động khi một đối tượng được tạo ra?
A. Phương thức hủy (destructor)
B. Phương thức tĩnh (static method)
C. Phương thức khởi tạo (constructor)
D. Phương thức truy cập (getter method)
21. Ưu điểm chính của việc sử dụng OOP trong phát triển phần mềm lớn là gì?
A. Giảm kích thước file chương trình.
B. Tăng tốc độ biên dịch chương trình.
C. Cải thiện khả năng quản lý độ phức tạp, tái sử dụng code, bảo trì và mở rộng hệ thống.
D. Giảm yêu cầu về bộ nhớ RAM khi chạy chương trình.
22. Thuật ngữ `đ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 đối tượng.
C. Một phương thức có thể hoạt động khác nhau trên các kiểu dữ liệu khác nhau hoặc các lớp khác nhau.
D. Một thuộc tính có thể được truy cập từ nhiều lớp khác nhau.
23. Chọn phát biểu SAI về lập trình hướng đối tượng.
A. OOP giúp quản lý mã nguồn phức tạp dễ dàng hơn.
B. OOP tập trung vào dữ liệu và đối tượng hơn là thủ tục.
C. OOP không hỗ trợ tính tái sử dụng mã nguồn.
D. OOP giúp tăng tính bảo trì và mở rộng của phần mềm.
24. Trong OOP, `tính trừu tượng dữ liệu` (data abstraction) đạt được thông qua cơ chế chính nào?
A. Kế thừa
B. Đa hình
C. Lớp (Class)
D. Đóng gói (Encapsulation)
25. Mối quan hệ `is-a` (là một) thường được thể hiện trong OOP bằng cơ chế nào?
A. Đóng gói
B. Kế thừa
C. Trừu tượng hóa
D. Đa hình
26. Lỗi nào sau đây KHÔNG phải là một lỗi phổ biến trong lập trình hướng đối tượng?
A. Lạm dụng kế thừa (quá nhiều lớp kế thừa sâu).
B. Thiếu đóng gói (truy cập trực tiếp vào thuộc tính).
C. Sử dụng quá nhiều vòng lặp for.
D. Không tuân thủ nguyên tắc Single Responsibility (một lớp làm quá nhiều việc).
27. Trong OOP, `phương thức ảo` (virtual method) được sử dụng để làm gì?
A. Để tăng tốc độ thực thi phương thức.
B. Để cho phép lớp con ghi đè (override) phương thức của lớp cha và thực hiện đa hình thời gian chạy.
C. Để tạo ra các phương thức tĩnh.
D. Để ẩn phương thức khỏi lớp con.
28. Phương pháp lập trình hướng đối tượng nào cho phép một lớp con kế thừa các thuộc tính và phương thức từ một lớp cha?
A. Đa hình
B. Đóng gói
C. Kế thừa
D. Trừu tượng hóa
29. Một `đối tượng` trong OOP có đặc điểm cơ bản nào?
A. Chỉ có thuộc tính (dữ liệu).
B. Chỉ có phương thức (hành vi).
C. Cả thuộc tính (dữ liệu) và phương thức (hành vi).
D. Không có thuộc tính và phương thức.
30. Trong OOP, `tính kế thừa đa lớp` (multi-level inheritance) là gì?
A. Một lớp kế thừa từ nhiều lớp cha cùng một lúc.
B. Một lớp kế thừa từ một lớp cha, lớp cha đó lại kế thừa từ một lớp ông, và cứ tiếp tục như vậy.
C. Một lớp có nhiều đối tượng con.
D. Một lớp có nhiều phương thức kế thừa.