1. Mục tiêu của nguyên tắc 'nguyên tắc mở đóng′ (Open∕Closed Principle - OCP) trong SOLID là gì?
A. Giảm sự phụ thuộc giữa các lớp.
B. Lớp phải mở cho việc mở rộng nhưng đóng cho việc sửa đổi.
C. Mỗi lớp chỉ nên có một trách nhiệm.
D. Các interface nên nhỏ gọn và tập trung.
2. Phương thức hủy (destructor) trong OOP có chức năng chính là gì?
A. Khởi tạo trạng thái ban đầu cho đối tượng.
B. Thực hiện các hành động dọn dẹp hoặc giải phóng tài nguyên khi đối tượng bị hủy.
C. Định nghĩa các thuộc tính của đối tượng.
D. Gọi các phương thức khác của đối tượng.
3. Trong ngữ cảnh của tính kế thừa, lớp cha 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) hoặc lớp cha (Parent class)
D. Lớp giao diện (Interface class)
4. Trong OOP, 'interface′ (giao diện) được sử dụng để làm gì?
A. Cung cấp một cách triển khai cụ thể cho các phương thức.
B. Định nghĩa một hợp đồng mà các lớp phải tuân theo, quy định các phương thức mà lớp phải thực hiện.
C. Tạo ra các đối tượng một cách trực tiếp.
D. Ẩn giấu hoàn toàn dữ liệu bên trong đối tượng.
5. Phương thức trừu tượng (abstract method) là phương thức như thế nào?
A. Phương thức đã được triển khai hoàn chỉnh trong lớp trừu tượng.
B. Phương thức không có phần thân (body) và được khai báo trong lớp trừu tượng hoặc interface, lớp con phải triển khai.
C. Phương thức chỉ có thể được gọi từ bên trong lớp chứa nó.
D. Phương thức được sử dụng để tạo ra các đối tượng trừu tượng.
6. Lợi ích chính của việc sử dụng 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 kích thước file thực thi.
C. Tăng khả năng tái sử dụng mã và quản lý độ phức tạp của phần mềm.
D. Giúp chương trình chạy trên nhiều hệ điều hành hơn.
7. 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 có thể được khởi tạo trực tiếp.
B. Lớp trừu tượng không thể chứa phương thức trừu tượng.
C. Lớp trừu tượng không thể được kế thừa.
D. Lớp trừu tượng không thể được khởi tạo trực tiếp và có thể chứa các phương thức trừu tượng (không có phần thân).
8. Mối quan hệ 'has-a′ (hoặc 'composition′) trong OOP thể hiện điều gì?
A. Một lớp kế thừa từ lớp khác.
B. Một đối tượng chứa các đối tượng khác như là thành phần của nó.
C. Các đối tượng có thể thay đổi lớp của chúng trong quá trình chạy.
D. Các lớp được tổ chức theo cấu trúc cây.
9. Đâu là nhược điểm tiềm ẩn của việc sử dụng kế thừa trong OOP nếu lạm dụng quá mức?
A. Tăng tốc độ phát triển phần mềm.
B. Giảm sự phụ thuộc giữa các lớp.
C. Có thể dẫn đến cấu trúc lớp phức tạp, khó bảo trì và 'vấn đề lớp cha dễ vỡ' (fragile base class problem).
D. Tăng tính linh hoạt của mã.
10. Tính đa hình 'đa xạ' (Overloading) trong OOP đề cập đến khả năng?
A. Một lớp có nhiều phương thức cùng tên nhưng khác nhau về tham số.
B. Một lớp con ghi đè phương thức của lớp cha.
C. Một đối tượng thuộc nhiều lớp khác nhau.
D. Một phương thức có thể thực hiện nhiều hành động khác nhau.
11. Phương thức khởi tạo (constructor) trong OOP có vai trò chính là gì?
A. Giải phóng bộ nhớ khi đối tượng không còn được sử dụng.
B. Định nghĩa hành vi của đối tượng.
C. Khởi tạo trạng thái ban đầu cho đối tượng khi nó được tạo ra.
D. Truy cập các thuộc tính của đối tượng.
12. Phương thức (method) trong OOP được hiểu là?
A. Một thuộc tính của đối tượng.
B. Một hành động mà đối tượng có thể thực hiện.
C. Một cách để tạo ra các đối tượng mới.
D. Một loại dữ liệu mà đối tượng lưu trữ.
13. Thuộc tính (attribute) của một đối tượng trong OOP đại diện cho điều gì?
A. Hành vi của đối tượng.
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 tương tác với môi trường bên ngoài.
14. Lớp con (subclass) trong kế thừa còn được gọi là?
A. Lớp cơ sở (Base class)
B. Lớp cha (Parent class)
C. Lớp dẫn xuất (Derived class) hoặc lớp con (Child class)
D. Lớp trừu tượng (Abstract class)
15. Đối tượng (object) trong lập trình hướng đối tượng là gì?
A. Một bản thiết kế cho các lớp.
B. Một thể hiện cụ thể của một lớp.
C. Một tập hợp các lớp có liên quan.
D. Một phương pháp để định nghĩa hành vi của lớp.
16. Khi nào nên sử dụng 'interface′ thay vì 'abstract class′?
A. Khi cần chia sẻ trạng thái (thuộc tính) giữa các lớp.
B. Khi muốn ép buộc các lớp phải thực hiện một số phương thức nhất định, nhưng không muốn cung cấp bất kỳ triển khai mặc định nào và hỗ trợ đa kế thừa kiểu interface.
C. Khi cần tạo ra các đối tượng trực tiếp.
D. Khi muốn ẩn giấu hoàn toàn chi tiết triển khai.
17. Tính chất nào của lập trình hướng đối tượng cho phép các đối tượng thuộc các lớp khác nhau phản ứng khác nhau đối với cùng một thông điệp hoặc hành động?
A. Tính trừu tượng
B. Tính đóng gói
C. Tính kế thừa
D. Tính đa hình
18. Từ khóa nào thường được sử dụng để thể hiện tính kế thừa trong nhiều ngôn ngữ lập trình hướng đối tượng?
A. `private`
B. `static`
C. `extends` hoặc `:`
D. `void`
19. Trong lập trình hướng đối tượng, 'tính trừu tượng hóa dữ liệu′ (data abstraction) có nghĩa là gì?
A. Ẩn giấu cách dữ liệu được lưu trữ và chỉ hiển thị các thao tác trên dữ liệu.
B. Tạo ra các bản sao của dữ liệu để tăng tốc độ truy cập.
C. Mã hóa dữ liệu để bảo vệ khỏi truy cập trái phép.
D. Sắp xếp dữ liệu theo thứ tự cụ thể để dễ dàng tìm kiếm.
20. Trong lập trình hướng đối tượng, 'composition′ (tổ hợp) thường được ưu tiên hơn 'inheritance′ (kế thừa) trong trường hợp nào?
A. Khi muốn tái sử dụng mã nguồn một cách tối đa.
B. Khi muốn tạo ra mối quan hệ 'is-a′.
C. Khi muốn tạo ra mối quan hệ 'has-a′ và ưu tiên tính linh hoạt, giảm sự phụ thuộc chặt chẽ giữa các lớp.
D. Khi cần triển khai đa hình tại thời gian biên dịch.
21. Trong lập trình hướng đối tượng, phương pháp nào cho phép một lớp con (subclass) kế thừa các thuộc tính và phương thức từ lớp cha (superclass)?
A. Đóng gói
B. Trừu tượng
C. Kế thừa
D. Đa hình
22. 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 một đối tượng che giấu trạng thái bên trong và chỉ tương tác với thế giới bên ngoài thông qua một giao diện công khai?
A. Tính đa hình (Polymorphism)
B. Tính đóng gói (Encapsulation)
C. Tính kế thừa (Inheritance)
D. Tính trừu tượng (Abstraction)
23. Tính đóng gói (Encapsulation) giúp đạt được mục tiêu nào sau đây trong thiết kế phần mềm?
A. Tăng tốc độ thực thi chương trình.
B. Giảm mức sử dụng bộ nhớ.
C. Tăng tính bảo mật và khả năng bảo trì của mã.
D. Cho phép đa kế thừa.
24. Design pattern 'Factory′ (Nhà máy) trong OOP giúp giải quyết vấn đề gì?
A. Quản lý vòng đời của đối tượng.
B. Đóng gói thuật toán.
C. Che giấu logic tạo đối tượng phức tạp và cung cấp một interface để tạo đối tượng mà không cần chỉ định lớp cụ thể.
D. Đảm bảo tính duy nhất của đối tượng.
25. Design pattern 'Singleton′ (Đơn thể) trong OOP được sử dụng để làm gì?
A. Tạo ra nhiều thể hiện của một lớp.
B. Đảm bảo rằng một lớp chỉ có duy nhất một thể hiện và cung cấp một điểm truy cập toàn cục đến thể hiện đó.
C. Tạo ra các đối tượng một cách linh hoạt dựa trên kiểu dữ liệu đầu vào.
D. Đơn giản hóa việc quản lý bộ nhớ.
26. Tính đa hình 'ghi đè' (Overriding) trong OOP liên quan đến?
A. Việc tạo ra nhiều đối tượng từ một lớp.
B. Việc lớp con định nghĩa lại một phương thức đã có ở lớp cha.
C. Việc một phương thức có thể được gọi từ nhiều lớp khác nhau.
D. Việc ẩn giấu thông tin bên trong đối tượng.
27. Nguyên tắc 'thay thế Liskov′ (Liskov Substitution Principle - LSP) trong SOLID nói về điều gì?
A. Mỗi lớp chỉ nên có một lý do duy nhất để thay đổi.
B. Các lớp dẫn xuất phải có khả năng thay thế hoàn toàn cho lớp cơ sở của chúng mà không làm thay đổi tính đúng đắn của chương trình.
C. 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 trừu tượng.
D. Các interface cụ thể nên được ưu tiên hơn là interface tổng quát.
28. Mối quan hệ 'is-a′ trong OOP thường được thể hiện thông qua cơ chế nào?
A. Đóng gói (Encapsulation)
B. Trừu tượng (Abstraction)
C. Kế thừa (Inheritance)
D. Đa hình (Polymorphism)
29. Trong OOP, 'lớp′ (class) đóng vai trò gì?
A. Một thể hiện cụ thể của dữ liệu.
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 để thực hiện các hành động.
D. Một biến toàn cục để lưu trữ dữ liệu.
30. Mục đích chính của tính trừu tượng (Abstraction) trong lập trình hướng đối tượng là gì?
A. Che giấu chi tiết triển khai phức tạp và chỉ hiển thị các thông tin cần thiết.
B. Kết hợp dữ liệu và phương thức thao tác dữ liệu vào trong một đơn vị.
C. Cho phép một lớp kế thừa các thuộc tính và phương thức từ lớp khác.
D. 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 thông điệp.