1. 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 không còn sử dụng
B. Thay đổi trạng thái của đối tượng sau khi tạo
C. Khởi tạo trạng thái ban đầu của đối tượng khi nó được tạo ra
D. Gọi một phương thức khác của đối tượng
2. Nguyên tắc thay thế Liskov (Liskov Substitution Principle - LSP) trong SOLID nhấn mạnh điều gì về mối quan hệ kế thừa?
A. Lớp con phải có ít phương thức hơn lớp cha
B. Đối tượng của lớp con có thể thay thế đối tượng của lớp cha mà không làm thay đổi tính đúng đắn của chương trình
C. Lớp cha phải là lớp trừu tượng
D. Lớp con phải luôn ghi đè tất cả các phương thức của lớp cha
3. Kiểu quan hệ nào thể hiện sự phụ thuộc mạnh mẽ nhất giữa hai lớp, trong đó vòng đời của một lớp phụ thuộc vào lớp kia?
A. Association (kết hợp)
B. Aggregation (tổng hợp)
C. Composition (hợp thành)
D. Inheritance (kế thừa)
4. Trong lập trình hướng đối tượng, 'message passing′ (truyền thông điệp) đề cập đến điều gì?
A. Việc gửi dữ liệu giữa các đối tượng khác nhau trên mạng
B. Việc một đối tượng gọi một phương thức của đối tượng khác
C. Việc mã nguồn được biên dịch thành mã máy
D. Việc dữ liệu được lưu trữ và truy xuất từ cơ sở dữ liệu
5. Khái niệm nào sau đây thể hiện khả năng một đối tượng có nhiều hình thức khác nhau, cho phép một giao diện có thể được sử dụng cho nhiều lớp khác nhau?
A. Tính đóng gói (Encapsulation)
B. Tính kế thừa (Inheritance)
C. Tính đa hình (Polymorphism)
D. Tính trừu tượng (Abstraction)
6. Nguyên tắc 'Open∕Closed′ trong SOLID phát biểu rằng phần mềm nên 'mở' cho điều gì và 'đóng′ cho điều gì?
A. Mở cho kế thừa, đóng cho sửa đổi
B. Mở cho sửa đổi, đóng cho kế thừa
C. Mở cho mở rộng, đóng cho sửa đổi
D. Mở cho sửa đổi, đóng cho mở rộng
7. Trong lập trình hướng đối tượng, 'tính đóng gói′ (encapsulation) mang lại lợi ích chính nào?
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à che giấu thông tin chi tiết cài đặt
D. Cho phép tái sử dụng mã nguồn dễ dàng hơn
8. Trong ngữ cảnh của lập trình hướng đối tượng, 'design pattern′ (mẫu thiết kế) là gì?
A. Một khuôn mẫu cố định cho cấu trúc dữ liệu
B. Một giải pháp đã được chứng minh cho một vấn đề thiết kế phần mềm thường gặp
C. Một ngôn ngữ lập trình đặc biệt cho thiết kế giao diện người dùng
D. Một công cụ tự động tạo mã nguồn từ sơ đồ UML
9. Khái niệm 'interface′ (giao diện) trong OOP khác biệt chính so với 'abstract class′ (lớp trừu tượng) là gì?
A. Interface có thể chứa thuộc tính, abstract class thì không
B. Một lớp có thể kế thừa từ nhiều abstract class, nhưng chỉ có thể implement một interface
C. Một lớp có thể implement nhiều interface, nhưng chỉ có thể kế thừa từ một abstract class
D. Interface có thể có phương thức đã được cài đặt, abstract class thì không
10. Trong ngữ cảnh OOP, 'association′, 'aggregation′ và 'composition′ là các loại quan hệ nào?
A. Quan hệ kế thừa
B. Quan hệ giữa các lớp
C. Quan hệ đa hình
D. Quan hệ đóng gói
11. Khái niệm 'garbage collection′ (thu gom rác) trong OOP liên quan đến vấn đề gì?
A. Quản lý lỗi trong quá trình biên dịch mã
B. Tối ưu hóa hiệu suất chương trình
C. Tự động giải phóng bộ nhớ đã cấp phát cho các đối tượng không còn được sử dụng
D. Bảo vệ bộ nhớ khỏi bị truy cập trái phép
12. Trong lập trình hướng đối tượng, 'composition′ (tổ hợp) khác với 'inheritance′ (kế thừa) như thế nào?
A. Composition thể hiện mối quan hệ 'là một loại′ (is-a), inheritance thể hiện mối quan hệ 'có một′ (has-a)
B. Inheritance thể hiện mối quan hệ 'là một loại′ (is-a), composition thể hiện mối quan hệ 'có một′ (has-a)
C. Composition tạo ra mối quan hệ mạnh mẽ hơn giữa các lớp so với inheritance
D. Inheritance linh hoạt hơn composition trong việc tái sử dụng mã
13. Mục tiêu của việc giảm 'coupling′ (kết nối) và tăng 'cohesion′ (liên kết) trong thiết kế OOP là gì?
A. Tăng tốc độ phát triển phần mềm
B. Làm cho mã nguồn dễ đọc hơn
C. Tạo ra mã nguồn dễ bảo trì, tái sử dụng và ít bị lỗi hơn
D. Giảm yêu cầu về phần cứng để chạy chương trình
14. Giải pháp nào thường được sử dụng để thay thế cho 'đa kế thừa′ (multiple inheritance) trong các ngôn ngữ OOP hiện đại?
A. Đơn kế thừa (single inheritance)
B. Tổ hợp (composition) và interface (giao diện)
C. Phương thức static
D. Lớp trừu tượng (abstract class)
15. Thuật ngữ 'coupling′ (kết nối) và 'cohesion′ (liên kết) trong thiết kế hướng đối tượng đề cập đến điều gì?
A. Coupling đo độ phức tạp của lớp, cohesion đo số lượng phương thức trong lớp
B. Coupling đo mức độ phụ thuộc giữa các lớp, cohesion đo mức độ liên quan của các thành phần bên trong một lớp
C. Coupling đo hiệu suất chương trình, cohesion đo khả năng tái sử dụng mã
D. Coupling đo kích thước mã nguồn, cohesion đo thời gian thực thi
16. Trong lập trình hướng đối tượng, 'đa kế thừa′ (multiple inheritance) là gì và nó có thể gây ra vấn đề gì?
A. Một lớp kế thừa từ nhiều lớp con; gây ra vấn đề về hiệu suất
B. Một lớp con kế thừa từ nhiều lớp cha; có thể gây ra vấn đề 'diamond problem′ (vấn đề kim cương)
C. Nhiều lớp cùng kế thừa từ một lớp cha; gây ra vấn đề về bảo mật
D. Một đối tượng thuộc nhiều lớp; gây ra vấn đề về quản lý bộ nhớ
17. Mẫu thiết kế 'Factory′ (Nhà máy) thuộc nhóm mẫu thiết kế nào?
A. Mẫu thiết kế cấu trúc (Structural)
B. Mẫu thiết kế hành vi (Behavioral)
C. Mẫu thiết kế khởi tạo (Creational)
D. Mẫu thiết kế đồng thời (Concurrent)
18. Trong UML (Unified Modeling Language), ký hiệu nào thường được sử dụng để biểu diễn quan hệ kế thừa (inheritance)?
A. Đường thẳng liền nét
B. Đường thẳng nét đứt
C. Mũi tên rỗng ruột
D. Mũi tên đặc ruột
19. Trong lập trình hướng đối tượng, 'lớp trừu tượng′ (abstract class) khác với 'lớp cụ thể' (concrete class) ở điểm nào?
A. Lớp trừu tượng có thể tạo ra đối tượng, lớp cụ thể thì không
B. Lớp cụ thể không thể có phương thức, lớp trừu tượng thì có thể
C. Lớp trừu tượng không thể được khởi tạo trực tiếp, lớp cụ thể thì có thể
D. Lớp cụ thể có thể kế thừa từ nhiều lớp, lớp trừu tượng thì không
20. Mẫu thiết kế 'Singleton′ được sử dụng để giải quyết vấn đề gì?
A. Tạo nhiều đối tượng của một lớp
B. Đảm bảo rằng một lớp chỉ có một thể hiện duy nhất và cung cấp một điểm truy cập toàn cục đến nó
C. Quản lý bộ nhớ hiệu quả hơn
D. Tăng cường tính bảo mật cho ứng dụng
21. Thuật ngữ 'method overloading′ (nạp chồng phương thức) trong OOP nghĩa là gì?
A. Thay đổi tên của một phương thức trong lớp con
B. Đị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ề tham số
C. Kết hợp nhiều phương thức thành một phương thức duy nhất
D. Xóa bỏ một phương thức không còn cần thiết
22. Nguyên tắc 'SOLID′ nào khuyến khích việc các lớp nên có một và chỉ một lý do để thay đổi?
A. Nguyên tắc duy nhất (Single Responsibility Principle)
B. Nguyên tắc mở đóng (Open∕Closed Principle)
C. Nguyên tắc thay thế Liskov (Liskov Substitution Principle)
D. Nguyên tắc phân tách giao diện (Interface Segregation Principle)
23. Mẫu thiết kế 'Observer′ (Người quan sát) giúp giải quyết vấn đề gì?
A. Phân tách việc xây dựng và biểu diễn của một đối tượng
B. Định nghĩa một họ các thuật toán, đóng gói mỗi thuật toán, và làm cho chúng có thể thay thế lẫn nhau
C. Xác định sự phụ thuộc một-nhiều giữa các đối tượng để khi một đối tượng thay đổi trạng thái, tất cả các đối tượng phụ thuộc vào nó đều được thông báo và cập nhật tự động
D. Cung cấp một giao diện thống nhất để truy cập một nhóm các giao diện trong hệ thống
24. Thuật ngữ 'method overriding′ (ghi đè phương thức) trong OOP được sử dụng khi nào?
A. Khi muốn tạo một phương thức mới trong lớp cha
B. Khi muốn thay đổi cách cài đặt của một phương thức đã được định nghĩa trong lớp cha ở lớp con
C. Khi muốn gọi một phương thức từ một lớp khác
D. Khi muốn ẩn một phương thức của lớp cha khỏi lớp con
25. Quan hệ 'aggregation′ (tổng hợp) khác với 'composition′ (hợp thành) ở điểm nào?
A. Aggregation là quan hệ 'is-a′, composition là quan hệ 'has-a′
B. Trong aggregation, lớp 'phần′ có thể tồn tại độc lập với lớp 'toàn thể'; trong composition, lớp 'phần′ phụ thuộc vào lớp 'toàn thể' và không thể tồn tại nếu không có lớp 'toàn thể'
C. Composition mạnh hơn aggregation về hiệu suất
D. Aggregation phức tạp hơn composition trong việc cài đặt
26. Nguyên tắc 'Dependency Inversion′ (DIP) trong SOLID khuyến nghị điều gì về sự phụ thuộc giữa các module?
A. Module cấp cao nên phụ thuộc vào module cấp thấp
B. Module cấp thấp nên phụ thuộc vào module cấp cao
C. Cả module cấp cao và cấp thấp nên phụ thuộc vào abstraction (trừu tượng)
D. Không có sự phụ thuộc giữa các module
27. Đặc điểm 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 kế thừa (Inheritance)
C. Tính trừu tượng (Abstraction)
D. Tính năng động (Dynamism)
28. Phương thức 'static′ (tĩnh) trong lập trình hướng đối tượng khác với phương thức 'instance′ (thể hiện) như thế nào?
A. Phương thức static có thể truy cập thuộc tính instance, phương thức instance thì không
B. Phương thức instance thuộc về lớp, phương thức static thuộc về đối tượng
C. Phương thức static thuộc về lớp và được gọi trực tiếp từ lớp, không cần đối tượng; phương thức instance cần được gọi thông qua một đối tượng cụ thể
D. Phương thức instance không thể trả về giá trị, phương thức static có thể
29. Mục đích chính của tính kế thừa (inheritance) trong lập trình hướng đối tượng là gì?
A. Tăng tính bảo mật của dữ liệu
B. Giảm sự phức tạp của chương trình
C. Tái sử dụng mã nguồn và thiết lập mối quan hệ 'là một′ (is-a)
D. Cải thiện hiệu suất chương trình
30. Trong UML, ký hiệu nào thường được sử dụng để biểu diễn quan hệ composition (hợp thành)?
A. Đường thẳng liền nét
B. Hình thoi rỗng
C. Hình thoi đặc
D. Mũi tên nét đứt