1. 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. Đa hình (Polymorphism)
C. Kế thừa (Inheritance)
D. Trừu tượng (Abstraction)
2. Phương pháp nào của lập trình hướng đối tượng giúp che giấu các chi tiết triển khai bên trong của một đối tượng và chỉ hiển thị giao diện cần thiết cho người dùng?
A. Đa hình (Polymorphism)
B. Kế thừa (Inheritance)
C. Đóng gói (Encapsulation)
D. Trừu tượng (Abstraction)
3. Trong lập trình hướng đối tượng, mục đích của việc sử dụng ‘access modifiers’ (bộ điều khiển truy cập) như ‘private’, ‘protected’, và ‘public’ là gì?
A. Tăng tốc độ thực thi chương trình.
B. Kiểm soát quyền truy cập vào các thành viên của lớp (thuộc tính và phương thức).
C. Giảm thiểu sử dụng bộ nhớ.
D. Đơn giản hóa việc gỡ lỗi.
4. Sự khác biệt chính giữa ‘overloading’ (quá tải) và ‘overriding’ (ghi đè) trong lập trình hướng đối tượng là gì?
A. Overloading xảy ra khi một lớp con định nghĩa một phương thức có cùng tên và kiểu trả về với một phương thức trong lớp cha, trong khi overriding xảy ra khi một lớp có nhiều phương thức cùng tên nhưng khác tham số.
B. Overloading xảy ra khi một lớp có nhiều phương thức cùng tên nhưng khác tham số, trong khi overriding xảy ra khi một lớp con định nghĩa một phương thức có cùng tên và kiểu trả về với một phương thức trong lớp cha.
C. Overloading cho phép thay đổi hành vi của phương thức, trong khi overriding thì không.
D. Overriding cho phép tái sử dụng mã nguồn, trong khi overloading thì không.
5. Trong lập trình hướng đối tượng, ‘association’ (kết hợp) thể hiện mối quan hệ nào?
A. Mối quan hệ giữa một lớp và một đối tượng.
B. Mối quan hệ giữa hai hoặc nhiều đối tượng độc lập.
C. Mối quan hệ giữa một lớp cha và một lớp con.
D. Mối quan hệ giữa một interface và một lớp implement nó.
6. Ưu điểm của việc sử dụng ‘dependency injection’ (tiêm phụ thuộc) trong lập trình hướng đối tượng là gì?
A. Giảm thiểu sử dụng bộ nhớ.
B. Tăng tốc độ thực thi chương trình.
C. Tăng tính linh hoạt, khả năng kiểm thử và tái sử dụng mã nguồn.
D. Đơn giản hóa việc gỡ lỗi.
7. Trong lập trình hướng đối tượng, ‘strategy pattern’ (mẫu thiết kế strategy) được sử dụng để làm gì?
A. Định nghĩa một thuật toán theo từng bước.
B. Cho phép lựa chọn thuật toán tại thời điểm chạy.
C. Tạo ra một đối tượng duy nhất.
D. Quản lý trạng thái của một đối tượng.
8. Trong lập trình hướng đối tượng, một ‘interface’ (giao diện) khác với một ‘abstract class’ (lớp trừu tượng) như thế nào?
A. Interface có thể chứa các phương thức đã được triển khai, còn abstract class thì không.
B. Một lớp chỉ có thể kế thừa từ một abstract class, nhưng có thể implement nhiều interface.
C. Abstract class không thể chứa các thuộc tính, còn interface thì có thể.
D. Interface có thể khởi tạo đối tượng, còn abstract class thì không.
9. Điều gì xảy ra khi một lớp con ghi đè (override) một phương thức của lớp cha?
A. Phương thức của lớp cha sẽ bị xóa bỏ.
B. Phương thức của lớp con sẽ được gọi thay vì phương thức của lớp cha khi đối tượng của lớp con gọi phương thức đó.
C. Phương thức của lớp cha và lớp con sẽ được gọi đồng thời.
D. Lỗi biên dịch sẽ xảy ra.
10. Khái niệm nào trong lập trình hướng đối tượng cho phép tạo ra các lớp trừu tượng, không thể khởi tạo trực tiếp, mà chỉ có thể được kế thừa để tạo ra các lớp cụ thể?
A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Lớp trừu tượng (Abstract class)
D. Đa hình (Polymorphism)
11. Trong lập trình hướng đối tượng, ‘proxy pattern’ (mẫu thiết kế proxy) được sử dụng để làm gì?
A. Định nghĩa một thuật toán theo từng bước.
B. Tạo ra một đối tượng duy nhất.
C. Cung cấp một đối tượng đại diện cho một đối tượng khác để kiểm soát truy cập.
D. Quản lý trạng thái của một đối tượng.
12. Trong lập trình hướng đối tượng, ‘Open/Closed Principle’ (Nguyên tắc đóng/mở) phát biểu điều gì?
A. Một lớp phải được mở để kế thừa và đóng để sửa đổi.
B. Một lớp phải được đóng để kế thừa và mở để sửa đổi.
C. Một lớp phải được mở rộng để thêm chức năng mới, nhưng phải được đóng để sửa đổi mã nguồn hiện có.
D. Một lớp phải được đóng để thêm chức năng mới, nhưng phải được mở rộng để sửa đổi mã nguồn hiện có.
13. Trong lập trình hướng đối tượng, ‘Law of Demeter’ (Luật Demeter) phát biểu điều gì?
A. Một đối tượng chỉ nên giao tiếp với các đối tượng gần gũi của nó.
B. Một đối tượng nên giao tiếp với tất cả các đối tượng khác trong hệ thống.
C. Một đối tượng không nên giao tiếp với bất kỳ đối tượng nào khác.
D. Một đối tượng chỉ nên giao tiếp với các đối tượng cùng loại.
14. Phương thức ‘constructor’ (khởi tạo) trong một lớp được sử dụng để làm gì?
A. Hủy bỏ một đối tượng.
B. Khởi tạo các thuộc tính của một đối tượng khi nó được tạo ra.
C. Gọi một phương thức khác trong lớp.
D. Trả về giá trị của một thuộc tính.
15. 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 độ thực thi chương trình.
B. Giảm thiểu sử dụng bộ nhớ.
C. Cải thiện khả năng tái sử dụng mã nguồn và quản lý độ phức tạp của dự án.
D. Đơn giản hóa việc gỡ lỗi.
16. Trong lập trình hướng đối tượng, ‘aggregation’ (tập hợp) khác với ‘composition’ (tổng hợp) như thế nào?
A. Aggregation thể hiện mối quan hệ sở hữu mạnh mẽ, trong khi composition thể hiện mối quan hệ sở hữu yếu hơn.
B. Aggregation thể hiện mối quan hệ sở hữu yếu hơn, trong khi composition thể hiện mối quan hệ sở hữu mạnh mẽ.
C. Aggregation cho phép đối tượng thành phần tồn tại độc lập, trong khi composition thì không.
D. Composition cho phép đối tượng thành phần tồn tại độc lập, trong khi aggregation thì không.
17. Trong lập trình hướng đối tượng, ‘Liskov Substitution Principle’ (Nguyên tắc thay thế Liskov) nói về điều gì?
A. Mọi lớp con phải có ít nhất một phương thức khác với lớp cha.
B. Mọi lớp cha phải có ít nhất một lớp con.
C. Các đối tượng của lớp con phải có khả năng thay thế các đố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.
D. Các đối tượng của lớp cha phải có khả năng thay thế các đối tượng của lớp con mà không làm thay đổi tính đúng đắn của chương trình.
18. Trong lập trình hướng đối tượng, khi nào nên sử dụng ‘abstract class’ thay vì ‘interface’?
A. Khi bạn muốn định nghĩa một contract mà các lớp implement nó phải thực hiện.
B. Khi bạn muốn cung cấp một số triển khai mặc định cho các phương thức.
C. Khi bạn muốn cho phép một lớp implement nhiều contract khác nhau.
D. Khi bạn muốn đảm bảo rằng không có đối tượng nào được tạo ra từ lớp đó.
19. Trong lập trình hướng đối tượng, ‘observer pattern’ (mẫu thiết kế observer) được sử dụng để làm gì?
A. Định nghĩa một thuật toán theo từng bước.
B. Cho phép một đối tượng thông báo thay đổi trạng thái của nó cho các đối tượng phụ thuộc.
C. Tạo ra một đối tượng duy nhất.
D. Quản lý trạng thái của một đối tượng.
20. Trong lập trình hướng đối tượng, ‘đa hình’ (polymorphism) đề cập đến khả năng nào?
A. Một đối tượng có thể có nhiều thuộc tính.
B. Một lớp có thể kế thừa từ nhiều lớp khác.
C. Một phương thức có thể hoạt động khác nhau trên các lớp khác nhau.
D. Một thuộc tính có thể có nhiều kiểu dữ liệu.
21. Trong lập trình hướng đối tượng, ‘composite pattern’ (mẫu thiết kế composite) được sử dụng để làm gì?
A. Định nghĩa một thuật toán theo từng bước.
B. Tạo ra một đối tượng duy nhất.
C. Cho phép client xử lý các đối tượng đơn lẻ và các thành phần phức tạp một cách thống nhất.
D. Quản lý trạng thái của một đối tượng.
22. Trong lập trình hướng đối tượng, ‘adapter pattern’ (mẫu thiết kế adapter) được sử dụng để làm gì?
A. Chuyển đổi interface của một lớp thành một interface khác mà client mong đợi.
B. Định nghĩa một thuật toán theo từng bước.
C. Tạo ra một đối tượng duy nhất.
D. Quản lý trạng thái của một đối tượng.
23. Trong lập trình hướng đối tượng, một ‘factory pattern’ (mẫu thiết kế factory) được sử dụng để làm gì?
A. Tạo ra một đối tượng duy nhất.
B. Định nghĩa một thuật toán theo từng bước.
C. Tạo ra các đối tượng mà không cần chỉ định lớp cụ thể để tạo ra chúng.
D. Quản lý trạng thái của một đối tượng.
24. Trong lập trình hướng đối tượng, ‘decorator pattern’ (mẫu thiết kế decorator) được sử dụng để làm gì?
A. Thêm trách nhiệm cho một đối tượng một cách động.
B. Định nghĩa một thuật toán theo từng bước.
C. Tạo ra một đối tượng duy nhất.
D. Quản lý trạng thái của một đối tượng.
25. Trong lập trình hướng đối tượng, ‘cohesion’ (tính gắn kết) và ‘coupling’ (tính liên kết) là gì và mối quan hệ giữa chúng?
A. Cohesion là mức độ các thành phần bên trong một lớp liên quan đến nhau, còn coupling là mức độ các lớp phụ thuộc lẫn nhau; nên cố gắng tăng coupling và giảm cohesion.
B. Cohesion là mức độ các lớp phụ thuộc lẫn nhau, còn coupling là mức độ các thành phần bên trong một lớp liên quan đến nhau; nên cố gắng tăng cohesion và giảm coupling.
C. Cohesion là mức độ các thành phần bên trong một lớp liên quan đến nhau, còn coupling là mức độ các lớp phụ thuộc lẫn nhau; nên cố gắng tăng cohesion và giảm coupling.
D. Cohesion và coupling đều là mức độ các lớp phụ thuộc lẫn nhau; nên cố gắng tăng cả hai.
26. Trong lập trình hướng đối tượng, ‘Interface Segregation Principle’ (Nguyên tắc phân tách giao diện) phát biểu điều gì?
A. Một lớp không nên implement nhiều interface.
B. Một interface không nên chứa nhiều phương thức.
C. Một lớp không nên bị buộc phải implement các phương thức mà nó không sử dụng.
D. Một interface nên kế thừa từ nhiều interface khác.
27. Trong lập trình hướng đối tượng, một ‘singleton’ là gì?
A. Một lớp chỉ có một phương thức.
B. Một lớp chỉ có một thuộc tính.
C. Một lớp chỉ có thể tạo ra một đối tượng duy nhất.
D. Một lớp không thể kế thừa từ bất kỳ lớp nào khác.
28. Trong lập trình hướng đối tượng, mục đích của việc sử dụng ‘static methods’ (phương thức tĩnh) là gì?
A. Để truy cập các thuộc tính của đối tượng.
B. Để tạo ra các đối tượng mới.
C. Để thực hiện các thao tác không phụ thuộc vào trạng thái của đối tượng.
D. Để ghi đè các phương thức của lớp cha.
29. Trong lập trình hướng đối tượng, ‘facade pattern’ (mẫu thiết kế facade) được sử dụng để làm gì?
A. Cung cấp một interface thống nhất cho một tập hợp các interface trong một hệ thống con.
B. Định nghĩa một thuật toán theo từng bước.
C. Tạo ra một đối tượng duy nhất.
D. Quản lý trạng thái của một đối tượng.
30. Trong lập trình hướng đối tượng, ‘composition’ (tổng 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’, trong khi inheritance tạo ra mối quan hệ ‘has-a’.
B. Composition tạo ra mối quan hệ ‘has-a’, trong khi inheritance tạo ra mối quan hệ ‘is-a’.
C. Composition cho phép tái sử dụng mã nguồn, trong khi inheritance thì không.
D. Inheritance cho phép thay đổi hành vi của lớp cha, trong khi composition thì không.
31. Trong lập trình hướng đối tượng, từ khóa ‘super’ thường được sử dụng để làm gì?
A. Để tạo ra một đối tượng mới.
B. Để truy cập các thuộc tính và phương thức của lớp cha (superclass).
C. Để khai báo một biến toàn cục.
D. Để định nghĩa một interface.
32. Trong lập trình hướng đối tượng, ‘lớp’ (class) được hiểu 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 chứa giá trị dữ liệu.
D. Một hàm thực hiện một tác vụ cụ thể.
33. Tính đa hình (polymorphism) trong lập trình hướng đối tượng cho phép điều gì?
A. Các đối tượng thuộc các lớp khác nhau có thể phản hồi một cách khác nhau đối với cùng một thông điệp.
B. Một lớp chỉ có thể có một phương thức duy nhất.
C. Các thuộc tính của một đối tượng phải được khai báo công khai.
D. Việc tạo ra các đối tượng phải tuân theo một khuôn mẫu cố định.
34. Đâu là một ví dụ về Behavioral Design Pattern (mẫu thiết kế hành vi)?
A. Abstract Factory.
B. Bridge.
C. Observer.
D. Adapter.
35. Phương thức hủy (destructor) trong lập trình hướng đối tượng được sử dụng để làm gì?
A. Để tạo ra một đối tượng mới.
B. Để giải phóng bộ nhớ và tài nguyên khi một đối tượng không còn được sử dụng.
C. Để truy cập các thuộc tính của đối tượng.
D. Để thực hiện các phép so sánh.
36. Đâu là lợi ích chính của việc sử dụng tính kế thừa (inheritance) trong lập trình hướng đối tượng?
A. Tăng tính phức tạp của mã nguồn.
B. Giảm khả năng tái sử dụng mã.
C. Cho phép tạo ra các lớp mới dựa trên các lớp đã có, tái sử dụng và mở rộng chức năng.
D. Hạn chế khả năng mở rộng của ứng dụng.
37. Trong lập trình hướng đối tượng, ‘aggregation’ (tập hợp) là gì?
A. Một mối quan hệ mạnh mẽ, trong đó một đối tượng sở hữu hoàn toàn đối tượng khác.
B. Một dạng đặc biệt của ‘association’, trong đó một đối tượng chứa các đối tượng khác, nhưng các đối tượng thành phần có thể tồn tại độc lập.
C. Một mối quan hệ kế thừa giữa các lớp.
D. Một mối quan hệ trong đó một đối tượng phụ thuộc hoàn toàn vào đối tượng khác.
38. Trong lập trình hướng đối tượng, tính đóng gói (encapsulation) đề cập đến điều gì?
A. Khả năng một đối tượng có nhiều kiểu dữ liệu khác nhau.
B. Cơ chế ẩn thông tin và bảo vệ dữ liệu của đối tượng, chỉ cho phép truy cập thông qua các phương thức.
C. Khả năng 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.
D. Cơ chế cho phép các đối tượng thuộc các lớp khác nhau có thể phản hồi một cách khác nhau đối với cùng một thông điệp.
39. Đâu là một ví dụ về Structural Design Pattern (mẫu thiết kế cấu trúc)?
A. Factory Method.
B. Decorator.
C. Command.
D. Iterator.
40. Đâu là điểm khác biệt chính giữa lớp trừu tượng (abstract class) và interface?
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 khai báo phương thức.
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 không thể kế thừa từ một lớp khác.
D. Interface có thể kế thừa từ nhiều interface khác, trong khi lớp trừu tượng chỉ có thể kế thừa từ một lớp.
41. Trong lập trình hướng đối tượng, phương pháp ‘Factory Method’ thường được sử dụng để làm gì?
A. Để tạo ra một đối tượng duy nhất.
B. Để tạo ra các đối tượng thuộc các lớp khác nhau dựa trên một giao diện chung.
C. Để thực hiện các phép toán số học.
D. Để khai báo các biến toàn cục.
42. SOLID là viết tắt của những nguyên tắc thiết kế hướng đối tượng nào?
A. Simple, Obvious, Logical, Intuitive, Documented
B. Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
C. Structured, Organized, লিঙ্কড, Incremental, Detailed
D. Safe, Optimal, লিঙ্কড, Independent, Durable
43. Nguyên tắc ‘Interface Segregation Principle’ trong lập trình hướng đối tượng đề xuất điều gì?
A. Một lớp nên thực hiện nhiều interface.
B. Một interface nên chứa nhiều phương thức.
C. Các interface nên được thiết kế sao cho một lớp không phải thực hiện các phương thức mà nó không sử dụng.
D. Các lớp nên kế thừa từ nhiều lớp cha.
44. Nguyên tắc ‘Liskov Substitution Principle’ trong lập trình hướng đối tượng phát biểu rằng:
A. Các lớp con phải kế thừa tất cả các phương thức của lớp cha.
B. Các lớp con phải có cùng tên với lớp cha.
C. Các đối tượng của lớp con có thể thay thế các đố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.
D. Các lớp cha phải được khai báo là trừu tượng.
45. Nguyên tắc ‘Dependency Inversion Principle’ trong lập trình hướng đối tượng khuyến khích điều gì?
A. Các lớp cấp cao nên phụ thuộc vào các lớp cấp thấp.
B. Các lớp cấp thấp nên phụ thuộc vào các lớp cấp cao.
C. Các lớp nên phụ thuộc vào các abstraction (interface hoặc lớp trừu tượng) thay vì các implementation cụ thể.
D. Các lớp không nên phụ thuộc vào bất kỳ lớp nào khác.
46. Thuộc tính (attribute) trong lập trình hướng đối tượng là gì?
A. Một hàm thực hiện một hành động.
B. Một đặc điểm hoặc tính chất của một đối tượng, được lưu trữ dưới dạng biến.
C. Một lớp cha.
D. Một giao diện (interface).
47. Đâu là một ví dụ về nguyên tắc ‘Single Responsibility Principle’ trong lập trình hướng đối tượng?
A. Một lớp nên có nhiều trách nhiệm để tăng tính hiệu quả.
B. Một lớp chỉ nên có một trách nhiệm duy nhất.
C. Các lớp nên phụ thuộc lẫn nhau để tăng tính liên kết.
D. Các lớp nên kế thừa từ nhiều lớp cha để tái sử dụng mã.
48. Design pattern (mẫu thiết kế) là gì trong lập trình hướng đối tượng?
A. Một thuật toán cụ thể để giải quyết một vấn đề.
B. Một giải pháp đã được chứng minh cho một vấn đề thiết kế thường gặp.
C. Một ngôn ngữ lập trình mới.
D. Một công cụ để gỡ lỗi mã nguồn.
49. Đối tượng (object) trong lập trình hướng đối tượng là gì?
A. Một bản thiết kế hoặc khuôn mẫu.
B. Một thể hiện cụ thể của một lớp, chứa dữ liệu và hành vi.
C. Một biến toàn cục.
D. Một hàm không trả về giá trị.
50. Phương thức khởi tạo (constructor) trong một lớp được sử dụng để làm gì?
A. Để hủy một đối tượng.
B. Để khởi tạo các thuộc tính của đối tượng khi nó được tạo ra.
C. Để thực hiện một phép toán số học.
D. Để khai báo một biến tĩnh.
51. Đâu là một ví dụ về Creational Design Pattern (mẫu thiết kế khởi tạo)?
A. Observer.
B. Strategy.
C. Singleton.
D. Template Method.
52. Trong lập trình hướng đối tượng, ‘association’ (kết hợp) là gì?
A. Một mối quan hệ mạnh mẽ, trong đó một đối tượng sở hữu hoàn toàn đối tượng khác.
B. Một mối quan hệ yếu, trong đó các đối tượng liên quan đến nhau nhưng không phụ thuộc vào nhau về mặt tồn tại.
C. Một mối quan hệ kế thừa giữa các lớp.
D. Một mối quan hệ trong đó một đối tượng là một phần của đối tượng khác.
53. 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’ tạo ra mối quan hệ ‘is-a’, trong khi ‘inheritance’ tạo ra mối quan hệ ‘has-a’.
B. ‘Composition’ tạo ra mối quan hệ ‘has-a’, trong khi ‘inheritance’ tạo ra mối quan hệ ‘is-a’.
C. ‘Composition’ cho phép tái sử dụng mã, trong khi ‘inheritance’ thì không.
D. ‘Inheritance’ cho phép thay đổi hành vi của lớp cha, trong khi ‘composition’ thì không.
54. Phương thức (method) trong lập trình hướng đối tượng là gì?
A. Một biến chứa dữ liệu.
B. Một thuộc tính của đối tượng.
C. Một hàm được định nghĩa bên trong một lớp, thực hiện một hành động cụ thể trên đối tượng.
D. Một kiểu dữ liệu đặc biệt.
55. Nguyên tắc ‘Open/Closed Principle’ trong lập trình hướng đối tượng có nghĩa là gì?
A. Một lớp nên được mở để kế thừa và đóng để sửa đổi.
B. Một lớp nên được đóng để kế thừa và mở để sửa đổi.
C. Một lớp nên được mở rộng để thêm chức năng mới mà không cần sửa đổi mã nguồn hiện có.
D. Một lớp nên được đóng hoàn toàn để ngăn chặn mọi thay đổi.
56. Mục đích chính của việc sử dụng Dependency Injection (DI) là gì?
A. Để tạo ra các đối tượng một cách nhanh chóng.
B. Để giảm sự phụ thuộc giữa các lớp và tăng tính testability.
C. Để tăng hiệu suất của chương trình.
D. Để giảm kích thước mã nguồn.
57. Đâu là ưu điểm của việc sử dụng ‘composition’ thay vì ‘inheritance’ trong một số trường hợp?
A. Giảm tính linh hoạt của hệ thống.
B. Tăng sự phụ thuộc giữa các lớp.
C. Tăng khả năng tái sử dụng mã và giảm sự phức tạp.
D. Giảm hiệu suất của chương trình.
58. Trong lập trình hướng đối tượng, ‘tính trừu tượng’ (abstraction) được hiểu như thế nào?
A. Việc che giấu các 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. Việc tạo ra các lớp con từ các lớp cha.
C. Việc cho phép các đối tượng phản hồi khác nhau với cùng một thông điệp.
D. Việc bảo vệ dữ liệu của đối tượng khỏi truy cập trực tiếp.
59. Trong lập trình hướng đối tượng, ‘composition’ (hợp thành) là gì?
A. Một mối quan hệ yếu giữa các đối tượng.
B. Một dạng đặc biệt của ‘aggregation’, trong đó một đối tượng sở hữu hoàn toàn các đối tượng thành phần và các đối tượng thành phần không thể tồn tại độc lập.
C. Một mối quan hệ kế thừa giữa các lớp.
D. Một mối quan hệ trong đó các đối tượng không liên quan đến nhau.
60. Interface trong lập trình hướng đối tượng được sử dụng để làm gì?
A. Để tạo ra các đối tượng cụ thể.
B. Để định nghĩa một tập hợp các phương thức mà một lớp phải thực hiện.
C. Để lưu trữ dữ liệu của đối tượng.
D. Để thực hiện các phép toán số học.
61. Trong lập trình hướng đối tượng, ‘Liskov Substitution Principle’ (Nguyên tắc thay thế Liskov) nói về điều gì?
A. Các lớp con phải có nhiều phương thức hơn lớp cha.
B. Các lớp cha phải có ít phương thức hơn lớp con.
C. Các đối tượng của lớp con phải có khả năng thay thế các đố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.
D. Các lớp con phải luôn ghi đè tất cả các phương thức của lớp cha.
62. Trong lập trình hướng đối tượng, mục đích của việc sử dụng ‘observer pattern’ (mẫu quan sát) là gì?
A. Để tạo ra các đối tượng một cách trực tiếp.
B. Để định nghĩa một sự phụ thuộc một-nhiều giữa các đối tượng, sao cho 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.
C. Để đảm bảo rằng chỉ có một thể hiện duy nhất của một lớp được tạo ra.
D. Để ẩn giấu thông tin bên trong một lớp.
63. Sự khác biệt chính giữa ‘public’, ‘private’, và ‘protected’ access modifiers (các công cụ sửa đổi truy cập) trong lập trình hướng đối tượng là gì?
A. ‘Public’ chỉ có thể được sử dụng trong cùng một lớp, ‘private’ chỉ có thể được sử dụng trong các lớp con, và ‘protected’ có thể được sử dụng ở bất cứ đâu.
B. ‘Public’ có thể được truy cập từ bất cứ đâu, ‘private’ chỉ có thể được truy cập từ bên trong lớp, và ‘protected’ có thể được truy cập từ bên trong lớp và các lớp con.
C. ‘Public’ chỉ có thể được sử dụng trong cùng một package, ‘private’ chỉ có thể được sử dụng trong các lớp con, và ‘protected’ có thể được sử dụng ở bất cứ đâu.
D. ‘Public’ có thể được truy cập từ bất cứ đâu, ‘private’ không thể được truy cập từ bất cứ đâu, và ‘protected’ chỉ có thể được truy cập từ bên trong lớp.
64. Sự khác biệt chính giữa ‘overloading’ và ‘overriding’ trong lập trình hướng đối tượng là gì?
A. ‘Overloading’ chỉ áp dụng cho các thuộc tính, còn ‘overriding’ chỉ áp dụng cho các phương thức.
B. ‘Overloading’ là định nghĩa nhiều phương thức cùng tên trong một lớp với các tham số khác nhau, trong khi ‘overriding’ là định nghĩa lại một phương thức của lớp cha trong lớp con.
C. ‘Overloading’ xảy ra khi hai lớp có cùng tên, còn ‘overriding’ xảy ra khi hai đối tượng có cùng tên.
D. ‘Overloading’ là một lỗi cú pháp, còn ‘overriding’ là một lỗi logic.
65. Trong lập trình hướng đối tượng, đặc điể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. Tính trừu tượng (Abstraction)
C. Tính đa hình (Polymorphism)
D. Tính kế thừa (Inheritance)
66. Trong lập trình hướng đối tượng, ‘Dependency Inversion Principle’ (Nguyên tắc đảo ngược phụ thuộc) nói về điều gì?
A. Các lớp cấp cao nên phụ thuộc vào các lớp cấp thấp.
B. Các lớp cấp thấp nên phụ thuộc vào các lớp cấp cao.
C. Cả lớp cấp cao và lớp cấp thấp nên phụ thuộc vào các trừu tượng.
D. Các lớp không nên phụ thuộc vào bất kỳ lớp nào khác.
67. Trong lập trình hướng đối tượng, một ‘singleton pattern’ được sử dụng để làm gì?
A. Để tạo ra một lớp không thể kế thừa.
B. Để đảm bảo rằng chỉ có một thể hiện duy nhất của một lớp được tạo ra.
C. Để tạo ra một lớp trừu tượng.
D. Để ẩn giấu thông tin bên trong một lớp.
68. Điều gì xảy ra khi một lớp con ghi đè (override) một phương thức của lớp cha?
A. Phương thức của lớp cha bị xóa.
B. Phương thức của lớp con được gọi thay vì phương thức của lớp cha.
C. Cả hai phương thức đều được gọi đồng thời.
D. Một lỗi biên dịch xảy ra.
69. Trong lập trình hướng đối tượng, ‘composition’ (kế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’, trong khi ‘inheritance’ tạo ra mối quan hệ ‘has-a’.
B. ‘Composition’ cho phép tái sử dụng mã, trong khi ‘inheritance’ thì không.
C. ‘Composition’ là một cách để đạt được tính đa hình, trong khi ‘inheritance’ thì không.
D. ‘Composition’ tạo ra mối quan hệ ‘has-a’, trong đó một lớp chứa các đối tượng của các lớp khác, trong khi ‘inheritance’ tạo ra mối quan hệ ‘is-a’, trong đó một lớp là một loại của lớp khác.
70. Trong ngữ cảnh của lập trình hướng đối tượng, ‘is-a’ relationship thường được thể hiện thông qua cơ chế nào?
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 kế thừa (Inheritance)
71. Trong lập trình hướng đối tượng, khi nào thì việc sử dụng ‘mixin’ (lớp trộn) là phù hợp?
A. Khi bạn muốn tạo ra một lớp không thể kế thừa.
B. Khi bạn muốn chia sẻ một số chức năng giữa nhiều lớp mà không cần tạo ra một hệ thống phân cấp kế thừa phức tạp.
C. Khi bạn muốn đảm bảo rằng chỉ có một thể hiện duy nhất của một lớp được tạo ra.
D. Khi bạn muốn ẩn giấu thông tin bên trong một lớp.
72. Trong lập trình hướng đối tượng, mục đích của việc sử dụng ‘factory pattern’ (mẫu nhà máy) là gì?
A. Để tạo ra các đối tượng một cách trực tiếp.
B. Để che giấu logic tạo đối tượng và cung cấp một giao diện thống nhất để tạo các đối tượng khác nhau.
C. Để đảm bảo rằng chỉ có một thể hiện duy nhất của một lớp được tạo ra.
D. Để giảm thiểu việc sử dụng bộ nhớ.
73. Trong lập trình hướng đối tượng, ‘dependency injection’ (tiêm phụ thuộc) là gì và tại sao nó lại hữu ích?
A. Một kỹ thuật để giảm thiểu việc sử dụng bộ nhớ.
B. Một kỹ thuật để tăng tốc độ thực thi của chương trình.
C. Một kỹ thuật để cung cấp các phụ thuộc của một đối tượng từ bên ngoài thay vì để đối tượng tự tạo ra chúng, giúp tăng tính linh hoạt và khả năng kiểm thử.
D. Một kỹ thuật để ẩn giấu thông tin bên trong một lớp.
74. Khi nào nên sử dụng một lớp trừu tượng (abstract class) thay vì một interface?
A. Khi bạn muốn định nghĩa một kiểu dữ liệu mới hoàn toàn.
B. Khi bạn muốn cung cấp một số phương thức đã được triển khai sẵn mà các lớp con có thể sử dụng hoặc ghi đè.
C. Khi bạn muốn đảm bảo rằng tất cả các lớp đều có cùng một tập hợp các phương thức.
D. Khi bạn không muốn bất kỳ lớp nào có thể kế thừa từ lớp đó.
75. Trong lập trình hướng đối tượng, ‘association’, ‘aggregation’, và ‘composition’ khác nhau như thế nào?
A. Chúng đều là các loại của tính kế thừa.
B. Chúng đều là các cách để tạo ra các đối tượng.
C. Chúng đều là các loại quan hệ giữa các lớp, nhưng khác nhau về mức độ phụ thuộc giữa các lớp.
D. Chúng đều là các cách để ẩn giấu thông tin.
76. Trong lập trình hướng đối tượng, ‘strategy pattern’ (mẫu chiến lược) được sử dụng để làm gì?
A. Để định nghĩa một họ các thuật toán, đóng gói mỗi thuật toán lại, và làm cho chúng có thể thay thế lẫn nhau.
B. Để tạo ra các đối tượng một cách trực tiếp.
C. Để đảm bảo rằng chỉ có một thể hiện duy nhất của một lớp được tạo ra.
D. Để ẩn giấu thông tin bên trong một lớp.
77. Phương pháp nào sau đây được sử dụng để che giấu thông tin bên trong một lớp và bảo vệ nó khỏi sự truy cập trực tiếp từ bên ngoài?
A. Tính đa hình (Polymorphism)
B. Tính kế thừa (Inheritance)
C. Tính đóng gói (Encapsulation)
D. Tính trừu tượng (Abstraction)
78. Mục đích của việc sử dụng ‘design patterns’ (mẫu thiết kế) trong lập trình hướng đối tượng là gì?
A. Để tăng tốc độ biên dịch của chương trình.
B. Để giải quyết các vấn đề thiết kế phần mềm thường gặp một cách hiệu quả và tái sử dụng.
C. Để giảm thiểu việc sử dụng bộ nhớ.
D. Để làm cho mã nguồn dễ đọc hơn.
79. Trong lập trình hướng đối tượng, ‘Interface Segregation Principle’ (Nguyên tắc phân tách giao diện) nói về điều gì?
A. Các giao diện nên được gộp lại thành một giao diện lớn.
B. Các lớp không nên phụ thuộc vào các phương thức mà chúng không sử dụng.
C. Các giao diện nên được phân tách thành nhiều giao diện nhỏ, chuyên biệt hơn.
D. Các lớp nên phụ thuộc vào các giao diện trừu tượng thay vì các triển khai cụ thể.
80. Trong lập trình hướng đối tượng, ‘Law of Demeter’ (Luật Demeter) hay còn gọi là ‘Principle of Least Knowledge’ (Nguyên tắc về kiến thức tối thiểu) nói về điều gì?
A. Một đối tượng nên biết càng nhiều về các đối tượng khác càng tốt.
B. Một đối tượng chỉ nên tương tác với các đối tượng lân cận trực tiếp của nó.
C. Một đối tượng nên tương tác với tất cả các đối tượng trong hệ thống.
D. Một đối tượng không nên tương tác với bất kỳ đối tượng nào khác.
81. Trong lập trình hướng đối tượng, khái niệm nào cho phép các đối tượng thuộc các lớp khác nhau phản hồi một cách khác nhau đối với cùng một phương thức?
A. Tính trừu tượng (Abstraction)
B. Tính kế thừa (Inheritance)
C. Tính đóng gói (Encapsulation)
D. Tính đa hình (Polymorphism)
82. Trong lập trình hướng đối tượng, ‘cohesion’ (tính gắn kết) và ‘coupling’ (tính liên kết) là gì và chúng nên được tối ưu hóa như thế nào?
A. ‘Cohesion’ là mức độ liên quan giữa các lớp, còn ‘coupling’ là mức độ liên quan giữa các phương thức; cả hai nên được tối đa hóa.
B. ‘Cohesion’ là mức độ liên quan giữa các phương thức trong một lớp, còn ‘coupling’ là mức độ phụ thuộc giữa các lớp; ‘cohesion’ nên được tối đa hóa và ‘coupling’ nên được giảm thiểu.
C. ‘Cohesion’ là mức độ phụ thuộc giữa các lớp, còn ‘coupling’ là mức độ liên quan giữa các phương thức; cả hai nên được giảm thiểu.
D. ‘Cohesion’ là mức độ dễ đọc của mã, còn ‘coupling’ là mức độ dễ bảo trì của mã; cả hai nên được tối đa hóa.
83. Trong lập trình hướng đối tượng, mục đích của một ‘constructor’ (hàm tạo) là gì?
A. Để giải phóng bộ nhớ được cấp phát cho đối tượng.
B. Để khởi tạo trạng thái ban đầu của một đối tượng khi nó được tạo ra.
C. Để hủy một đối tượng khi nó không còn được sử dụng.
D. Để thay đổi kiểu dữ liệu của một đối tượng.
84. Trong lập trình hướng đối tượng, ‘Open/Closed Principle’ (Nguyên tắc đóng/mở) nói về điều gì?
A. Một lớp phải được mở để kế thừa và đóng để sửa đổi.
B. Một lớp phải được đóng để kế thừa và mở để sửa đổi.
C. Một lớp phải được mở để mở rộng và đóng để sửa đổi.
D. Một lớp phải được đóng để mở rộng và mở để sửa đổi.
85. Trong lập trình hướng đối tượng, ‘SOLID’ là viết tắt của những nguyên tắc thiết kế nào?
A. Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.
B. Simple, Obvious, Logical, Intelligent, Detailed.
C. Structured, Object-oriented, লিঙ্কড, Inherited, Defined.
D. Scalable, Optimized, লিঙ্কড, Inherited, Defined.
86. Khái niệm nào trong lập trình hướng đối tượng tập trung vào việc biểu diễn các đối tượng phức tạp theo các đặc điểm thiết yếu của chúng, bỏ qua các chi tiết không cần thiết?
A. Tính kế thừa (Inheritance)
B. Tính đóng gói (Encapsulation)
C. Tính trừu tượng (Abstraction)
D. Tính đa hình (Polymorphism)
87. Khi nào nên sử dụng ‘inheritance’ (kế thừa) và khi nào nên sử dụng ‘interfaces’ (giao diện) trong thiết kế hướng đối tượng?
A. Luôn sử dụng ‘inheritance’ vì nó mạnh mẽ hơn.
B. Luôn sử dụng ‘interfaces’ vì nó linh hoạt hơn.
C. Sử dụng ‘inheritance’ khi có mối quan hệ ‘is-a’ rõ ràng và muốn tái sử dụng mã, sử dụng ‘interfaces’ khi muốn định nghĩa một hợp đồng mà các lớp phải tuân theo.
D. Sử dụng ‘inheritance’ khi muốn định nghĩa một hợp đồng, sử dụng ‘interfaces’ khi có mối quan hệ ‘is-a’.
88. Trong lập trình hướng đối tượng, vai trò của ‘abstract method’ (phương thức trừu tượng) là gì?
A. Để ngăn không cho một lớp được khởi tạo.
B. Để bắt buộc các lớp con phải cung cấp một triển khai cụ thể cho phương thức đó.
C. Để cung cấp một triển khai mặc định cho một phương thức.
D. Để ẩn giấu thông tin bên trong một lớp.
89. Đâu là một ví dụ về việc sử dụng tính đa hình (polymorphism) trong thực tế?
A. Một lớp ‘Animal’ có các lớp con như ‘Dog’ và ‘Cat’, mỗi lớp con có phương thức ‘makeSound()’ riêng.
B. Một lớp ‘Employee’ có các thuộc tính như ‘name’ và ‘salary’.
C. Một lớp ‘Math’ có các phương thức ‘add(int a, int b)’ và ‘add(double a, double b)’.
D. Một lớp ‘File’ có các phương thức ‘open()’ và ‘close()’.
90. Lợi ích chính của việc sử dụng tính đóng gói (encapsulation) trong lập trình hướng đối tượng là gì?
A. Giảm thiểu việc sử dụng bộ nhớ.
B. Tăng tốc độ thực thi của chương trình.
C. Ẩn giấu thông tin và bảo vệ dữ liệu khỏi truy cập trái phép, cũng như giảm sự phụ thuộc lẫn nhau giữa các thành phần.
D. Cho phép tạo ra các lớp không thể thay đổi (immutable).
91. Trong lập trình hướng đối tượng, design pattern nào sau đây thuộc nhóm behavioral patterns?
A. Abstract Factory.
B. Bridge.
C. Composite.
D. Observer.
92. Trong lập trình hướng đối tượng, ‘is-a’ relationship thường được thể hiện thông qua cơ chế nào?
A. Đóng gói (Encapsulation).
B. Kế thừa (Inheritance).
C. Đa hình (Polymorphism).
D. Trừu tượng (Abstraction).
93. Trong lập trình hướng đối tượng, mục đích chính của việc sử dụng ‘factory pattern’ là gì?
A. Giảm sự phụ thuộc giữa các lớp.
B. Đóng gói logic tạo đối tượng.
C. Tăng tốc độ thực thi.
D. Đơn giản hóa việc gỡ lỗi.
94. Phương thức nào sau đây được gọi tự động khi một đối tượng được tạo ra trong C++?
A. Destructor.
B. Constructor.
C. Getter.
D. Setter.
95. Trong lập trình hướng đối tượng, mục đích của việc sử dụng ‘access modifiers’ (public, private, protected) là gì?
A. Tăng tốc độ biên dịch.
B. Kiểm soát quyền truy cập vào các thành viên của lớp.
C. Giảm kích thước mã nguồn.
D. Tự động tạo tài liệu.
96. Trong lập trình hướng đối tượng, ‘cohesion’ (tính gắn kết) đề cập đến điều gì?
A. Mức độ phụ thuộc giữa các lớp.
B. Mức độ liên quan giữa các thành viên của một lớp.
C. Số lượng lớp trong một hệ thống.
D. Độ phức tạp của một thuật toán.
97. Ưu điểm chính của việc sử dụng interface so với lớp trừu tượng là gì?
A. Interface cho phép triển khai các phương thức.
B. Interface hỗ trợ đa kế thừa.
C. Interface có thể chứa các biến instance.
D. Interface nhanh hơn lớp trừu tượng về hiệu năng.
98. Trong Python, phương thức nào được sử dụng để biểu diễn một đối tượng dưới dạng chuỗi?
A. __init__
B. __str__
C. __repr__
D. __doc__
99. Đâu là sự khác biệt chính giữa lớp trừu tượng (abstract class) và interface trong Java?
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 biến instance, trong khi lớp trừu tượng thì không.
C. Lớp trừu tượng hỗ trợ đa kế thừa, trong khi interface thì không.
D. Không có sự khác biệt, cả hai đều có thể được sử dụng thay thế cho nhau.
100. Phương pháp nào sau đây không phải là một trong bốn nguyên tắc cơ bản của lập trình hướng đối tượng (OOP)?
A. Tính trừu tượng (Abstraction).
B. Tính đa hình (Polymorphism).
C. Tính đóng gói (Encapsulation).
D. Tính module hóa (Modularization).
101. Trong lập trình hướng đối tượng, ‘mixin’ là gì?
A. Một loại design pattern.
B. Một lớp cung cấp các phương thức có thể được sử dụng bởi các lớp khác mà không cần kế thừa.
C. Một cách để tạo ra các đối tượng singleton.
D. Một kỹ thuật để tối ưu hóa hiệu suất.
102. Đâu là sự khác biệt chính giữa ‘shallow copy’ và ‘deep copy’ trong lập trình hướng đối tượng?
A. Shallow copy tạo ra một bản sao của đối tượng, deep copy tạo ra một tham chiếu đến đối tượng.
B. Deep copy tạo ra một bản sao của đối tượng, shallow copy tạo ra một tham chiếu đến đối tượng.
C. Shallow copy chỉ sao chép các thuộc tính nguyên thủy, deep copy sao chép tất cả các thuộc tính, kể cả các đối tượng khác.
D. Deep copy chỉ sao chép các thuộc tính nguyên thủy, shallow copy sao chép tất cả các thuộc tính, kể cả các đối tượng khác.
103. Đâu là lợi ích chính của việc sử dụng tính đa hình (polymorphism) trong lập trình hướng đối tượng?
A. Giảm kích thước mã nguồn.
B. Cho phép các đối tượng thuộc các lớp khác nhau được xử lý thông qua một giao diện chung.
C. Tăng tốc độ biên dịch chương trình.
D. Đảm bảo tính bảo mật tuyệt đối cho dữ liệu.
104. Trong lập trình hướng đối tượng, kỹ thuật nào cho phép tạo ra các đối tượng mới bằng cách sao chép một đối tượng hiện có?
A. Kế thừa (Inheritance).
B. Đa hình (Polymorphism).
C. Prototype pattern.
D. Singleton pattern.
105. Trong C#, từ khóa ‘sealed’ được sử dụng để làm gì?
A. Khai báo một hằng số.
B. Ngăn chặn một lớp khỏi bị kế thừa.
C. Khai báo một biến cục bộ.
D. Tạo ra một đối tượng singleton.
106. Trong lập trình hướng đối tượng, design pattern nào sau đây thuộc nhóm creational patterns?
A. Observer.
B. Singleton.
C. Strategy.
D. Template Method.
107. Trong lập trình hướng đối tượng, design pattern nào sau đây thuộc nhóm structural patterns?
A. Factory Method.
B. Command.
C. Adapter.
D. Iterator.
108. Trong Java, từ khóa ‘final’ được sử dụng để ngăn chặn điều gì?
A. Việc tạo ra các đối tượng mới.
B. Việc kế thừa một lớp hoặc ghi đè một phương thức.
C. Việc truy cập vào các biến private.
D. Việc sử dụng đa luồng.
109. Trong lập trình hướng đối tượng, nguyên tắc ‘Liskov Substitution Principle’ (LSP) phát biểu điều gì?
A. Mọi lớp con phải kế thừa tất cả các phương thức của lớp cha.
B. Các lớp con phải có khả năng thay thế các 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. Mỗi lớp chỉ nên có một lý do để thay đổi.
D. Các đối tượng nên được mở để mở rộng, nhưng đóng để sửa đổi.
110. Sự khác biệt chính giữa ‘overloading’ (quá tải) và ‘overriding’ (ghi đè) phương thức trong OOP là gì?
A. Overloading xảy ra trong cùng một lớp, overriding xảy ra giữa lớp cha và lớp con.
B. Overriding xảy ra trong cùng một lớp, overloading xảy ra giữa lớp cha và lớp con.
C. Overloading liên quan đến việc thay đổi hành vi của một phương thức, overriding liên quan đến việc tạo ra một phương thức mới.
D. Không có sự khác biệt, cả hai đều là các khái niệm giống nhau.
111. Trong lập trình hướng đối tượng, mục đích chính của việc sử dụng ‘inversion of control’ (IoC) là gì?
A. Tăng hiệu suất của ứng dụng.
B. Chuyển giao quyền kiểm soát từ ứng dụng sang một framework hoặc container.
C. Đơn giản hóa việc gỡ lỗi.
D. Tự động tạo tài liệu cho mã nguồn.
112. Trong lập trình hướng đối tượng, ‘coupling’ (tính liên kết) đề cập đến điều gì?
A. Mức độ liên quan giữa các thành viên của một lớp.
B. Mức độ phụ thuộc giữa các lớp.
C. Số lượng lớp trong một hệ thống.
D. Độ phức tạp của một thuật toán.
113. Trong lập trình hướng đối tượng, tính đóng gói (encapsulation) nhằm mục đích chính là gì?
A. Giảm thiểu thời gian biên dịch chương trình.
B. Tăng hiệu suất thực thi của chương trình.
C. Ẩn 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 thuộc tính và phương thức giữa các lớp.
114. Trong lập trình hướng đối tượng, đâu là mục đích của việc sử dụng ‘fluent interface’?
A. Tăng tốc độ biên dịch.
B. Cho phép gọi nhiều phương thức liên tiếp trên một đối tượng.
C. Đơn giản hóa việc gỡ lỗi.
D. Tự động tạo tài liệu.
115. Trong lập trình hướng đối tượng, mục đích của việc sử dụng ‘anonymous class’ là gì?
A. Tăng tốc độ biên dịch.
B. Tạo ra một lớp không có tên để sử dụng một lần.
C. Đơn giản hóa việc gỡ lỗi.
D. Tự động tạo tài liệu.
116. Trong lập trình hướng đối tượng, Single Responsibility Principle (SRP) phát biểu điều gì?
A. Một lớp nên có nhiều trách nhiệm.
B. Một lớp chỉ nên có một trách nhiệm.
C. Một phương thức chỉ nên có một tham số.
D. Một biến chỉ nên được sử dụng trong một phương thức.
117. Đâu là mục đích của việc sử dụng Dependency Injection (DI) trong lập trình hướng đối tượng?
A. Tăng hiệu suất của ứng dụng.
B. Giảm sự phụ thuộc giữa các lớp và tăng tính module hóa.
C. Đơn giản hóa việc gỡ lỗi.
D. Tự động tạo tài liệu cho mã nguồn.
118. Trong lập trình hướng đối tượng, mục đích của việc sử dụng ‘Data Transfer Object’ (DTO) là gì?
A. Tăng tốc độ truy cập dữ liệu.
B. Chuyển dữ liệu giữa các lớp hoặc các tầng của ứng dụng.
C. Bảo vệ dữ liệu khỏi truy cập trái phép.
D. Tự động tạo tài liệu.
119. Trong ngữ cảnh của lập trình hướng đối tượng, ‘composition’ (tổng hợp) khác với ‘aggregation’ (kết hợp) như thế nào?
A. Không có sự khác biệt, cả hai đều là mối quan hệ ‘has-a’.
B. Trong composition, đối tượng chứa sở hữu và kiểm soát vòng đời của đối tượng được chứa, còn trong aggregation thì không.
C. Composition chỉ áp dụng cho các kiểu dữ liệu nguyên thủy, còn aggregation áp dụng cho các đối tượng.
D. Aggregation mạnh hơn composition về mặt ràng buộc giữa các đối tượng.
120. Trong lập trình hướng đối tượng, nguyên tắc ‘Open/Closed Principle’ phát biểu điều gì?
A. Các đối tượng nên được mở để sửa đổi, nhưng đóng để mở rộng.
B. Các đối tượng nên được đóng để sửa đổi, nhưng mở để mở rộng.
C. Các đối tượng nên được mở để mở rộng, nhưng đóng để sửa đổi.
D. Các đối tượng nên được đóng để mở rộng và sửa đổi.
121. Trong lập trình hướng đối tượng, ‘is-a’ relationship thường được thể hiện bằng cách nào?
A. Composition
B. Aggregation
C. Inheritance
D. Association
122. Trong lập trình hướng đối tượng, ‘association’ (kết hợp) là gì?
A. Một mối quan hệ mạnh mẽ giữa hai lớp, trong đó một lớp sở hữu lớp kia.
B. Một mối quan hệ yếu giữa hai lớp, trong đó không có lớp nào sở hữu lớp kia.
C. Một mối quan hệ trong đó một lớp kế thừa từ lớp kia.
D. Một mối quan hệ trong đó một lớp triển khai một giao diện được định nghĩa bởi lớp kia.
123. Đâu là mục đích chính của việc sử dụng ‘design patterns’ trong lập trình hướng đối tượng?
A. Tăng tốc độ thực thi của chương trình
B. Giải quyết các vấn đề thiết kế lặp đi lặp lại một cách hiệu quả
C. Giảm kích thước của mã nguồn
D. Tăng tính bảo mật của ứng dụng
124. Khái niệm nào sau đây mô tả khả năng một phương thức thực hiện các hành động khác nhau tùy thuộc vào kiểu dữ liệu của đối tượng mà nó được gọi?
A. Tính đóng gói
B. Tính kế thừa
C. Tính đa hình
D. Tính trừu tượng
125. Đâu là lợi ích chính của việc sử dụng ‘template method pattern’?
A. Cho phép các lớp con định nghĩa lại một số bước của một thuật toán, mà không thay đổi cấu trúc của thuật toán đó.
B. Cung cấp một giao diện thống nhất để truy cập các hệ thống con khác nhau.
C. Cho phép một đối tượng thay đổi hành vi của nó khi trạng thái bên trong của nó thay đổi.
D. Đảm bảo rằng một lớp chỉ có một instance duy nhất.
126. Trong ngữ cảnh của SOLID principles, chữ ‘O’ trong SOLID đại diện cho nguyên tắc nào?
A. Open-source
B. Object-oriented
C. Open/Closed Principle
D. Operation-oriented
127. Đâu là mục đích của việc sử dụng ‘observer pattern’ trong lập trình hướng đối tượng?
A. Định nghĩa một họ các thuật toán và làm cho chúng có thể thay thế lẫn nhau.
B. Xác định một sự phụ thuộc một-nhiều giữa các đối tượng, sao cho khi một đối tượng thay đổi trạng thái, tất cả các đối tượng phụ thuộc của nó được thông báo và cập nhật tự động.
C. Cung cấp một giao diện thống nhất để truy cập các hệ thống con khác nhau.
D. Đảm bảo rằng một lớp chỉ có một instance duy nhất.
128. Đâu là mục đích của việc sử dụng ‘factory pattern’ trong lập trình hướng đối tượng?
A. Định nghĩa một thuật toán trong một lớp, cho phép các lớp con ghi đè các bước của thuật toán mà không thay đổi cấu trúc của nó.
B. Cung cấp một giao diện để tạo ra các đối tượng mà không chỉ định lớp cụ thể của các đối tượng đó.
C. Cho phép một đối tượng thay đổi hành vi của nó khi trạng thái bên trong của nó thay đổi.
D. Đảm bảo rằng một lớp chỉ có một instance duy nhất và cung cấp một điểm truy cập toàn cục đến instance đó.
129. Đâu là một ví dụ về ‘creational design pattern’?
A. Observer
B. Strategy
C. Singleton
D. Template Method
130. Trong ngữ cảnh của lập trình hướng đối tượng, ‘immutability’ (tính bất biến) có nghĩa là gì?
A. Một đối tượng không thể thay đổi trạng thái của nó sau khi được tạo.
B. Một lớp không thể có các lớp con.
C. Một phương thức không thể bị ghi đè.
D. Một biến không thể được gán lại giá trị mới.
131. Trong lập trình hướng đối tượng, ‘coupling’ (tính liên kết) đề cập đến điều gì?
A. Mức độ mà các phương thức trong một lớp liên quan đến nhau.
B. Mức độ mà các lớp trong một hệ thống phụ thuộc lẫn nhau.
C. Số lượng các lớp con mà một lớp cha có.
D. Mức độ mà một lớp có thể được tái sử dụng trong các dự án khác nhau.
132. Trong lập trình hướng đối tượng, ‘composition’ (tính hợp thành) khác với ‘inheritance’ (tính kế thừa) như thế nào?
A. Composition tạo ra mối quan hệ ‘is-a’, trong khi inheritance tạo ra mối quan hệ ‘has-a’.
B. Composition cho phép tái sử dụng mã mà không vi phạm tính đóng gói, trong khi inheritance có thể vi phạm tính đóng gói.
C. Inheritance linh hoạt hơn composition trong việc thay đổi hành vi của đối tượng.
D. Composition chỉ áp dụng cho các lớp trừu tượng, trong khi inheritance áp dụng cho cả lớp trừu tượng và lớp cụ thể.
133. Đâu là ưu điểm của việc sử dụng Dependency Injection (DI) trong lập trình hướng đối tượng?
A. Giảm sự phụ thuộc giữa các lớp, tăng tính linh hoạt và khả năng kiểm thử.
B. Tăng tốc độ thực thi của chương trình.
C. Giảm kích thước mã nguồn.
D. Tăng tính bảo mật của ứng dụng.
134. Phương pháp nào sau đây giúp giảm sự phức tạp của một lớp bằng cách chia nó thành các lớp nhỏ hơn, chuyên biệt hơn?
A. Single Responsibility Principle
B. Open/Closed Principle
C. Liskov Substitution Principle
D. Interface Segregation Principle
135. Khi nào nên sử dụng ‘aggregation’ thay vì ‘composition’ trong lập trình hướng đối tượng?
A. Khi đối tượng chứa có quyền sở hữu độc quyền đối với đối tượng thành phần.
B. Khi đối tượng thành phần có thể tồn tại độc lập với đối tượng chứa.
C. Khi đối tượng chứa và đối tượng thành phần có vòng đời giống nhau.
D. Khi cần đảm bảo tính bất biến của đối tượng.
136. Trong lập trình hướng đối tượng, ‘delegation’ (ủy quyền) là gì?
A. Một kỹ thuật cho phép một đối tượng chuyển trách nhiệm thực hiện một tác vụ cho một đối tượng khác.
B. Một kỹ thuật cho phép một lớp kế thừa từ nhiều lớp khác nhau.
C. Một kỹ thuật cho phép một đối tượng thay đổi hành vi của nó khi trạng thái bên trong của nó thay đổi.
D. Một kỹ thuật cho phép một lớp ẩn thông tin bên trong của nó khỏi các lớp khác.
137. Điều gì xảy ra khi một phương thức ‘private’ của lớp cha được gọi từ một lớp con?
A. Phương thức được thực thi như bình thường.
B. Một lỗi biên dịch sẽ xảy ra.
C. Phương thức được coi như là một phương thức ‘protected’.
D. Phương thức được coi như là một phương thức ‘public’.
138. Phương pháp nào sau đây được sử dụng để che giấu thông tin bên trong một lớp và chỉ cho phép truy cập thông qua các phương thức công khai?
A. Tính kế thừa
B. Tính đóng gói
C. Tính đa hình
D. Tính trừu tượng
139. Trong lập trình hướng đối tượng, khái niệm nào cho phép một đối tượng thuộc lớp con có thể thay thế cho một đối tượng thuộc lớp cha?
A. Tính trừu tượng
B. Tính đa hình
C. Tính kế thừa
D. Nguyên tắc thay thế Liskov
140. Đâu là lợi ích của việc sử dụng phương thức ‘virtual’ trong C++ hoặc C#?
A. Ngăn chặn việc ghi đè phương thức trong các lớp con.
B. Cho phép phương thức được gọi thông qua con trỏ hoặc tham chiếu đến lớp cha, và thực thi phiên bản của lớp con (runtime polymorphism).
C. Tăng tốc độ thực thi của phương thức.
D. Giảm kích thước mã nguồn.
141. Trong lập trình hướng đối tượng, ‘has-a’ relationship thường được thể hiện bằng cách nào?
A. Inheritance
B. Polymorphism
C. Composition hoặc Aggregation
D. Abstraction
142. Đâu là mục đích của việc sử dụng ‘Facade pattern’ trong lập trình hướng đối tượng?
A. Định nghĩa một sự phụ thuộc một-nhiều giữa các đối tượng.
B. Cung cấp một giao diện thống nhất để truy cập một hệ thống con phức tạp.
C. Đảm bảo rằng một lớp chỉ có một instance duy nhất.
D. Cho phép các đối tượng thay đổi hành vi của chúng khi trạng thái bên trong của chúng thay đổi.
143. Trong lập trình hướng đối tượng, ‘Liskov Substitution Principle’ phát biểu điều gì?
A. Các lớp con phải có thể thay thế các lớp cha của chúng mà không làm thay đổi tính đúng đắn của chương trình.
B. Một lớp chỉ nên có một lý do để thay đổi.
C. Các lớp nên mở để mở rộng, nhưng đóng để sửa đổi.
D. Nhiều giao diện cụ thể tốt hơn là một giao diện chung.
144. Đâu là một lợi ích của việc sử dụng ‘unit testing’ trong quá trình phát triển phần mềm hướng đối tượng?
A. Tìm ra các lỗi trong mã nguồn một cách nhanh chóng và dễ dàng.
B. Tăng tốc độ thực thi của chương trình.
C. Giảm kích thước mã nguồn.
D. Tăng tính bảo mật của ứng dụng.
145. Lợi í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. Cho phép tạo ra các lớp trừu tượng mà không cần định nghĩa bất kỳ phương thức nào.
B. Đảm bảo rằng tất cả các lớp triển khai giao diện đều có cùng một tập hợp các phương thức.
C. Tăng hiệu suất của chương trình bằng cách giảm số lượng phương thức ảo.
D. Cho phép một lớp kế thừa từ nhiều lớp khác nhau.
146. Đâu là sự khác biệt chính giữa ‘abstract class’ và ‘interface’ trong Java?
A. Abstract class có thể chứa các phương thức có thân (implementation), trong khi interface chỉ chứa các phương thức trừu tượng (không có thân).
B. Interface có thể chứa các biến thành viên (member variables), trong khi abstract class thì không.
C. Một class có thể kế thừa từ nhiều abstract class, nhưng chỉ có thể implement một interface.
D. Abstract class hỗ trợ đa kế thừa, trong khi interface thì không.
147. Trong lập trình hướng đối tượng, ‘cohesion’ (tính gắn kết) đề cập đến điều gì?
A. Mức độ mà các lớp trong một hệ thống phụ thuộc lẫn nhau.
B. Mức độ mà các phương thức trong một lớp liên quan đến nhau và thực hiện một mục tiêu chung.
C. Số lượng các lớp con mà một lớp cha có.
D. Mức độ mà một lớp có thể được tái sử dụng trong các dự án khác nhau.
148. Đâu là mục đích của việc sử dụng ‘strategy pattern’ trong lập trình hướng đối tượng?
A. Định nghĩa một họ các thuật toán, đóng gói mỗi thuật toán lại, và làm cho chúng có thể thay thế lẫn nhau.
B. Cung cấp một giao diện thống nhất để truy cập các hệ thống con khác nhau.
C. Cho phép một đối tượng thay đổi hành vi của nó khi trạng thái bên trong của nó thay đổi.
D. Đảm bảo rằng một lớp chỉ có một instance duy nhất.
149. Đâu là một ví dụ về ‘structural design pattern’?
A. Singleton
B. Factory Method
C. Adapter
D. Observer
150. Trong lập trình hướng đối tượng, ‘covariance’ và ‘contravariance’ liên quan đến điều gì?
A. Cách các kiểu dữ liệu được chuyển đổi ngầm định.
B. Cách các kiểu trả về và tham số của phương thức có thể thay đổi trong kế thừa.
C. Cách các exception được xử lý trong các lớp khác nhau.
D. Cách các biến được khai báo và sử dụng trong các phương thức.