1. Trong lập trình hướng đối tượng, `tính kế thừa` (inheritance) hỗ trợ điều gì?
A. Việc che giấu dữ liệu bên trong của một đối tượng.
B. Việc tạo ra các đối tượng.
C. Việc tái sử dụng mã nguồn và xây dựng hệ thống phân cấp lớp.
D. Việc định nghĩa các giao diện mà các lớp khác phải thực hiện.
2. Trong OOP, `tính đóng gói` (encapsulation) giúp đạt được điều gì?
A. Cho phép các lớp kế thừa từ nhiều lớp khác nhau.
B. Che giấu dữ liệu bên trong của một đối tượng và bảo vệ nó khỏi sự truy cập trực tiếp từ bên ngoài.
C. Cho phép các đối tượng thuộc các lớp khác nhau phản ứng khác nhau với cùng một lệnh gọi phương thức.
D. Giảm thiểu sự phức tạp của hệ thống bằng cách chỉ tập trung vào các thông tin cần thiết.
3. Ý nghĩa của phạm vi truy cập `protected` là gì?
A. Các thành viên có phạm vi truy cập `protected` chỉ có thể được truy cập từ bên trong lớp mà chúng được định nghĩa.
B. Các thành viên có phạm vi truy cập `protected` có thể được truy cập từ bất kỳ đâu.
C. Các thành viên có phạm vi truy cập `protected` có thể được truy cập từ bên trong lớp mà chúng được định nghĩa và từ các lớp con của nó.
D. Các thành viên có phạm vi truy cập `protected` không thể được truy cập.
4. Khi một lớp kế thừa từ một lớp khác, lớp đó được gọi là gì?
A. Lớp cha (parent class)
B. Lớp con (child class)
C. Lớp trừu tượng (abstract class)
D. Interface
5. Ghi đè phương thức (method overriding) là gì?
A. Việc định nghĩa một phương thức mới trong một lớp con có cùng tên và kiểu dữ liệu trả về với một phương thức đã tồn tại trong lớp cha.
B. Việc định nghĩa một phương thức mới trong một lớp có cùng tên nhưng khác kiểu dữ liệu trả về với một phương thức đã tồn tại trong cùng lớp.
C. Việc che giấu dữ liệu bên trong của một đối tượng.
D. Việc tạo ra một đối tượng mới từ một lớp.
6. Khái niệm nào của OOP che giấu thông tin chi tiết bên trong của một đối tượng và chỉ cung cấp giao diện bên ngoài để tương tác?
A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Đa hình (Polymorphism)
D. Trừu tượng (Abstraction)
7. Khi nào nên sử dụng tính kế thừa trong thiết kế hướng đối tượng?
A. Khi có mối quan hệ `is-a` (là một) giữa các lớp.
B. Khi cần che giấu dữ liệu bên trong của một đối tượng.
C. Khi cần tạo ra các đối tượng.
D. Khi cần định nghĩa các giao diện mà các lớp khác phải thực hiện.
8. Sự khác biệt chính giữa `lớp trừu tượng` (abstract class) và `interface` 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 interface chỉ chứa các phương thức trừu tượng.
B. Interface 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 có thể kế thừa từ nhiều lớp khác nhau, trong khi interface thì không.
D. Không có sự khác biệt giữa lớp trừu tượng và interface.
9. Đặc điểm nào sau đây KHÔNG phải là một lợi ích chính của lập trình hướng đối tượng (OOP)?
A. Tính tái sử dụng mã nguồn thông qua kế thừa.
B. Tính đóng gói, giúp bảo vệ dữ liệu.
C. Tăng tốc độ thực thi chương trình một cách đáng kể so với lập trình hướng cấu trúc.
D. Tính dễ bảo trì và mở rộng.
10. Ý nghĩa của phạm vi truy cập `public` là gì?
A. Các thành viên có phạm vi truy cập `public` chỉ có thể được truy cập từ bên trong lớp mà chúng được định nghĩa.
B. Các thành viên có phạm vi truy cập `public` có thể được truy cập từ bất kỳ đâu.
C. Các thành viên có phạm vi truy cập `public` có thể được truy cập từ các lớp con.
D. Các thành viên có phạm vi truy cập `public` không thể được truy cập.
11. Trong lập trình hướng đối tượng, khái niệm nào cho phép một lớp kế thừa các thuộc tính và phương thức từ một lớp khác?
A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Đa hình (Polymorphism)
D. Trừu tượng (Abstraction)
12. Trong OOP, `phạm vi truy cập` (access modifier) dùng để làm gì?
A. Để định nghĩa các thuộc tính của một lớp.
B. Để kiểm soát mức độ truy cập vào các thành viên (thuộc tính và phương thức) của một lớp.
C. Để tạo ra các đối tượng.
D. Để định nghĩa các giao diện mà các lớp khác phải thực hiện.
13. Phương thức (method) của một đối tượng đại diện cho điều gì?
A. Trạng thái hoặc dữ liệu của đối tượng.
B. Hành động mà đối tượng có thể thực hiện.
C. Mối quan hệ giữa các đối tượng.
D. Cách đối tượng được tạo ra.
14. Trong thiết kế hướng đối tượng, nguyên tắc `Single Responsibility Principle` (SRP) nói về điều gì?
A. Một lớp chỉ nên có một lý do để thay đổi.
B. Các lớp con nên có thể thay thế 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. Các đối tượng nên mở cho việc mở rộng, nhưng đóng cho việc sửa đổi.
D. Nhiều interface đặc thù tốt hơn là một interface đa năng.
15. Lớp mà một lớp khác kế thừa được gọi là gì?
A. Lớp con (child class)
B. Lớp cha (parent class)
C. Lớp trừu tượng (abstract class)
D. Singleton
16. Nguyên tắc `Open/Closed Principle` (OCP) nói rằng:
A. Một lớp chỉ nên có một lý do để thay đổi.
B. Các lớp con nên có thể thay thế 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. Các đối tượng nên mở cho việc mở rộng, nhưng đóng cho việc sửa đổi.
D. Nhiều interface đặc thù tốt hơn là một interface đa năng.
17. Trong OOP, `tính đa hình` (polymorphism) được thể hiện thông qua những cơ chế nào?
A. Chỉ thông qua kế thừa (inheritance).
B. Chỉ thông qua đóng gói (encapsulation).
C. Thông qua ghi đè phương thức (method overriding) và nạp chồng phương thức (method overloading).
D. Chỉ thông qua trừu tượng hóa (abstraction).
18. Ý nghĩa của phạm vi truy cập `private` là gì?
A. Các thành viên có phạm vi truy cập `private` chỉ có thể được truy cập từ bên trong lớp mà chúng được định nghĩa.
B. Các thành viên có phạm vi truy cập `private` có thể được truy cập từ bất kỳ đâu.
C. Các thành viên có phạm vi truy cập `private` có thể được truy cập từ các lớp con.
D. Các thành viên có phạm vi truy cập `private` không thể được truy cập.
19. Nguyên tắc `Liskov Substitution Principle` (LSP) phát biểu rằng:
A. Một lớp chỉ nên có một lý do để thay đổi.
B. Các lớp con nên có thể thay thế 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. Các đối tượng nên mở cho việc mở rộng, nhưng đóng cho việc sửa đổi.
D. Nhiều interface đặc thù tốt hơn là một interface đa năng.
20. Trong OOP, `đa hình` (polymorphism) có nghĩa là gì?
A. Khả năng một đối tượng thuộc nhiều lớp khác nhau.
B. Khả năng một lớp có nhiều thuộc tính.
C. Khả năng một phương thức có nhiều hình thức khác nhau.
D. Khả năng một đối tượng có thể được tạo ra từ nhiều lớp.
21. Nguyên tắc `Interface Segregation Principle` (ISP) phát biểu rằng:
A. Một lớp chỉ nên có một lý do để thay đổi.
B. Các lớp con nên có thể thay thế 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. Các đối tượng nên mở cho việc mở rộng, nhưng đóng cho việc sửa đổi.
D. Nhiều interface đặc thù tốt hơn là một interface đa năng.
22. Dependency Inversion Principle (DIP) 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. Một lớp chỉ nên có một lý do để thay đổi.
C. Các lớp con nên có thể thay thế 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.
D. Các đối tượng nên mở cho việc mở rộng, nhưng đóng cho việc sửa đổi.
23. Trong ngữ cảnh của OOP, `lớp` (class) là gì?
A. Một thể hiện cụ thể của một đố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 biến lưu trữ dữ liệu.
D. Một hàm thực hiện một tác vụ cụ thể.
24. Mục đích chính của việc sử dụng `interface` trong OOP là gì?
A. Để định nghĩa các thuộc tính của một lớp.
B. Để định nghĩa một giao diện mà các lớp khác phải thực hiện.
C. Để tạo ra các đối tượng.
D. Để che giấu dữ liệu bên trong của một đối tượng.
25. Nạp chồng phương thức (method overloading) là gì?
A. Việc định nghĩa nhiều phương thức trong cùng một lớp có cùng tên nhưng khác nhau về số lượng hoặc kiểu dữ liệu của các tham số.
B. Việc định nghĩa một phương thức mới trong một lớp con có cùng tên và kiểu dữ liệu trả về với một phương thức đã tồn tại trong lớp cha.
C. Việc che giấu dữ liệu bên trong của một đối tượng.
D. Việc tạo ra một đối tượng mới từ một lớp.
26. Phương pháp trừu tượng hóa (abstraction) trong OOP giúp giải quyết vấn đề gì?
A. Giảm thiểu sự phức tạp của hệ thống bằng cách chỉ tập trung vào các thông tin cần thiết.
B. Tăng tốc độ thực thi chương trình.
C. Bảo vệ dữ liệu khỏi bị truy cập trái phép.
D. Cho phép kế thừa từ nhiều lớp cùng một lúc.
27. Đối tượng (object) trong OOP là gì?
A. Một bản thiết kế của một lớp.
B. Một thể hiện cụ thể của một lớp.
C. Một phương thức trong một lớp.
D. Một thuộc tính của một lớp.
28. Thuộc tính (attribute) của một đối tượng đại diện cho điều gì?
A. Hành động mà đối tượng có thể thực hiện.
B. Trạng thái hoặc dữ liệu của đối tượng.
C. Mối quan hệ giữa các đối tượng.
D. Cách đối tượng được tạo ra.
29. Phương thức nào được tự động gọi khi một đối tượng bị hủy?
A. Phương thức khởi tạo (constructor)
B. Phương thức hủy (destructor)
C. Phương thức getter
D. Phương thức setter
30. Trong OOP, phương thức nào được tự động gọi khi một đối tượng được tạo ra?
A. Phương thức hủy (destructor)
B. Phương thức khởi tạo (constructor)
C. Phương thức getter
D. Phương thức setter