1. Thuật ngữ `instance` (thể hiện) trong OOP dùng để chỉ điều gì?
A. Một class trừu tượng
B. Một đối tượng cụ thể được tạo ra từ một class
C. Một phương thức tĩnh trong class
D. Một mối quan hệ kế thừa giữa các class
2. Phương thức `getter` và `setter` thường được sử dụng để làm gì trong OOP?
A. Tăng tốc độ truy cập thuộc tính
B. Kiểm soát việc truy cập và sửa đổi thuộc tính của đối tượng
C. Giảm thiểu việc sử dụng bộ nhớ
D. Ẩn các phương thức của đối tượng
3. Điều gì KHÔNG phải là lợi ích của việc sử dụng OOP?
A. Tái sử dụng mã nguồn
B. Tăng tốc độ phát triển phần mềm
C. Cải thiện hiệu suất chương trình
D. Dễ bảo trì và mở rộng hệ thống
4. Phương pháp `Unit Testing` (kiểm thử đơn vị) trong OOP tập trung vào việc kiểm thử điều gì?
A. Toàn bộ hệ thống phần mềm
B. Các class và phương thức riêng lẻ
C. Giao diện người dùng
D. Hiệu suất của chương trình
5. Đặc điểm nào sau đây KHÔNG phải là trụ cột 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ự (Sequential)
6. Nguyên tắc `Open/Closed Principle` (OCP) trong SOLID khuyến khích điều gì?
A. Mỗi class nên có một và chỉ một lý do để thay đổi
B. Các class nên mở để mở rộng nhưng đóng để sửa đổi
C. Các class con có thể thay thế class cha mà không làm thay đổi tính đúng đắn của chương trình
D. Nhiều interface đặc thù tốt hơn là một interface đa năng
7. Trong OOP, `composition` (tổ hợp) khác với `inheritance` (kế thừa) như thế nào?
A. Composition tạo ra mối quan hệ `is-a`, còn inheritance tạo ra mối quan hệ `has-a`
B. Inheritance tạo ra mối quan hệ `is-a`, còn composition tạo ra mối quan hệ `has-a`
C. Composition chỉ áp dụng cho dữ liệu, còn inheritance chỉ áp dụng cho phương thức
D. Inheritance cho phép tái sử dụng mã, còn composition thì không
8. Interface trong OOP được sử dụng để làm gì?
A. Thay thế cho class trừu tượng
B. Định nghĩa một tập hợp các phương thức mà các class khác phải cài đặt
C. Tăng cường tính đóng gói
D. Cho phép đa kế thừa
9. Trong OOP, `association`, `aggregation`, và `composition` là các loại quan hệ nào giữa các class?
A. Quan hệ kế thừa
B. Quan hệ phụ thuộc
C. Quan hệ sử dụng
D. Quan hệ giữa các đối tượng
10. Nguyên tắc `Interface Segregation Principle` (ISP) trong SOLID đề xuất điều gì?
A. Mỗi class nên có một và chỉ một lý do để thay đổi
B. Các class nên mở để mở rộng nhưng đóng để sửa đổi
C. Các class con có thể thay thế class cha mà không làm thay đổi tính đúng đắn của chương trình
D. Nhiều interface đặc thù tốt hơn là một interface đa năng
11. Nguyên tắc `Liskov Substitution Principle` (LSP) trong SOLID liên quan đến vấn đề gì?
A. Tính đóng gói
B. Tính kế thừa
C. Tính trừu tượng
D. Tính đa hình
12. `Dependency Injection` (DI - Tiêm phụ thuộc) là một kỹ thuật thiết kế giúp đạt được mục tiêu chính nào trong OOP?
A. Tăng tốc độ thực thi chương trình
B. Giảm coupling (sự phụ thuộc) giữa các class
C. Tăng cohesion (sự liên kết) bên trong class
D. Giảm thiểu dung lượng mã nguồn
13. Mục đích chính của việc sử dụng `design patterns` (mẫu thiết kế) trong OOP là gì?
A. Tăng tốc độ thực thi 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. Giảm thiểu dung lượng mã nguồn
D. Tự động hóa quá trình kiểm thử phần mềm
14. Mẫu thiết kế `Factory` trong OOP được sử dụng để giải quyết vấn đề gì?
A. Quản lý vòng đời của đối tượng
B. Tạo đối tượng một cách linh hoạt mà không cần biết class cụ thể cần tạo
C. Đảm bảo tính duy nhất của đối tượng
D. Thực hiện các phép tính toán phức tạp trên đối tượng
15. Tính kế thừa (Inheritance) trong OOP cho phép điều gì?
A. Tạo ra các đối tượng độc lập hoàn toàn
B. Một class có thể kế thừa các thuộc tính và phương thức từ class khác
C. Giảm sự phụ thuộc giữa các class
D. Tăng tính phức tạp của mã nguồn
16. Phương thức trừu tượng (abstract method) là gì?
A. Phương thức được thực thi ngay khi đối tượng được tạo ra
B. Phương thức không có phần thân (body) và phải được cài đặt (implement) ở class con
C. Phương thức chỉ có thể được gọi từ bên trong class
D. Phương thức không thể bị ghi đè (override) ở class con
17. Lỗi `NullPointerException` thường xảy ra trong OOP 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. Truy cập vào một đối tượng tham chiếu null
C. Sử dụng toán tử gán (=) thay vì toán tử so sánh (==)
D. Gọi một phương thức trừu tượng mà không có cài đặt
18. Tính đóng gói (Encapsulation) trong OOP mang lại lợi ích nào sau đây?
A. Tăng tốc độ thực thi chương trình
B. Giảm thiểu việc sử dụng bộ nhớ
C. Che giấu thông tin và bảo vệ dữ liệu khỏi truy cập trái phép
D. Cho phép kế thừa đa class
19. Trong lập trình hướng đối tượng, `class` được hiểu là 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 cho các đối tượng
C. Một phương thức để ẩn dữ liệu
D. Một cách để thực hiện đa hình
20. Tính đ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 phương thức có thể được định nghĩa trong nhiều class
C. Các đối tượng thuộc các class khác nhau có thể được xử lý thông qua một interface chung
D. Một class có thể kế thừa từ nhiều class khác
21. Sự khác biệt chính giữa `abstract class` và `interface` trong OOP là gì?
A. Abstract class có thể chứa thuộc tính, còn interface thì không
B. Class có thể kế thừa từ nhiều abstract class, nhưng chỉ implement được một interface
C. Abstract class có thể chứa cài đặt phương thức (method implementation), còn interface thì không (trước Java 8)
D. Interface có thể có constructor, còn abstract class thì không
22. Nguyên tắc `Dependency Inversion Principle` (DIP) trong SOLID tập trung vào việc giảm sự phụ thuộc giữa các module như thế nào?
A. Bằng cách sử dụng kế thừa
B. Bằng cách sử dụng interface hoặc class trừu tượng để các module cấp cao không phụ thuộc vào module cấp thấp
C. Bằng cách tăng cường tính đóng gói
D. Bằng cách giảm thiểu số lượng class trong hệ thống
23. Mẫu thiết kế `Singleton` trong OOP đảm bảo điều gì?
A. Chỉ có một instance duy nhất của một class được tạo ra
B. Class có thể kế thừa từ nhiều class khác
C. Các đối tượng được tạo ra một cách tuần tự
D. Việc truy cập vào đối tượng được đồng bộ hóa
24. Trong lập trình hướng đối tượng, `coupling` (kết nối) và `cohesion` (liên kết) là gì và mối quan hệ giữa chúng?
A. Coupling là mức độ liên kết bên trong một module, cohesion là mức độ phụ thuộc giữa các module; nên tăng coupling và giảm cohesion
B. Coupling là mức độ phụ thuộc giữa các module, cohesion là mức độ liên kết bên trong một module; nên giảm coupling và tăng cohesion
C. Coupling và cohesion đều là mức độ liên kết bên trong module; nên tăng cả hai
D. Coupling và cohesion đều là mức độ phụ thuộc giữa các module; nên giảm cả hai
25. Khi nào nên sử dụng `composition` thay vì `inheritance` trong thiết kế OOP?
A. Khi muốn tái sử dụng mã nguồn nhiều nhất có thể
B. Khi muốn tạo ra mối quan hệ `is-a` giữa các class
C. Khi muốn tạo ra mối quan hệ `has-a` và tránh các vấn đề của kế thừa sâu
D. Khi muốn tăng tính đa hình
26. Nguyên tắc `SOLID` trong OOP là tập hợp các nguyên tắc thiết kế hướng đến mục tiêu nào?
A. Tăng tốc độ thực thi chương trình
B. Giảm thiểu dung lượng mã nguồn
C. Thiết kế phần mềm dễ bảo trì, mở rộng và linh hoạt
D. Tối ưu hóa việc sử dụng bộ nhớ
27. Phương thức khởi tạo (constructor) trong class có vai trò chính là gì?
A. Hủy bỏ đối tượng khi không còn sử dụng
B. Khởi tạo các thuộc tính của đối tượng khi đối tượng được tạo ra
C. Định nghĩa các phương thức của đối tượng
D. Thực hiện các phép tính toán trên đối tượng
28. Trong ngữ cảnh OOP, `method overriding` (ghi đè phương thức) được thực hiện khi nào?
A. Khi muốn tạo ra một phương thức mới trong class cha
B. Khi class con muốn cung cấp một cài đặt khác cho phương thức đã được định nghĩa ở class cha
C. Khi muốn ẩn một phương thức của class cha
D. Khi muốn gọi một phương thức của class cha từ class con
29. Nguyên tắc `Single Responsibility Principle` (SRP) trong SOLID nói về điều gì?
A. Mỗi class nên có một và chỉ một lý do để thay đổi
B. Các class nên mở để mở rộng nhưng đóng để sửa đổi
C. Các class con có thể thay thế class cha mà không làm thay đổi tính đúng đắn của chương trình
D. Nhiều interface đặc thù tốt hơn là một interface đa năng
30. Quan hệ `aggregation` (tổng hợp) khác với `composition` (tổ hợp) ở điểm nào?
A. Aggregation là quan hệ mạnh hơn composition
B. Trong aggregation, các đối tượng thành phần không thể tồn tại độc lập nếu đối tượng chứa bị hủy, còn trong composition thì có thể
C. Trong composition, các đối tượng thành phần không thể tồn tại độc lập nếu đối tượng chứa bị hủy, còn trong aggregation thì có thể
D. Aggregation và composition là hoàn toàn giống nhau