1. Pattern ‘Strategy’ được sử dụng để làm gì?
A. Để tạo ra các đối tượng một cách trực tiếp
B. Để đị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
C. Để ẩn các thuộc tính của đối tượng
D. Để kế thừa từ nhiều lớp
2. Nguyên tắc Liskov Substitution (LSP) trong SOLID nói về điều gì?
A. 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
B. Một lớp chỉ nên có một lý do để thay đổi
C. Phụ thuộc vào các abstraction, không phụ thuộc vào các implementation
D. Nhiều interface đặc biệt tốt hơn là một interface chung
3. 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. Để ẩn các thuộc tính của đối tượng
D. Để kế thừa từ nhiều lớp
4. 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 là một phần của lớp kia
B. Một mối quan hệ lỏng lẻo giữa hai lớp, trong đó các đối tượng của hai lớp có thể liên kết với nhau
C. Một cách để kế thừa từ nhiều lớp
D. Một cách để ẩn các thuộc tính của đối tượng
5. Trong lập trình hướng đối tượng, ‘composition’ (tổ hợp) là gì?
A. Một cách để tạo ra các đối tượng phức tạp từ các đối tượng đơn giản hơn
B. Một cách để kế thừa từ nhiều lớp
C. Một cách để ẩn các thuộc tính của đối tượng
D. Một cách để định nghĩa các phương thức trừu tượng
6. Sự khác biệt chính giữa ‘aggregation’ (tập hợp) và ‘composition’ (tổ hợp) là gì?
A. Aggregation là một dạng của composition
B. Composition là một dạng của aggregation
C. Trong aggregation, các đối tượng thành phần có thể tồn tại độc lập với đối tượng chứa, trong khi trong composition, các đối tượng thành phần không thể tồn tại độc lập
D. Không có sự khác biệt giữa aggregation và composition
7. Trong lập trình hướng đối tượng, tính chất 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
B. Kế thừa
C. Đa hình
D. Trừu tượng
8. Trong UML, ký hiệu nào biểu diễn mối quan hệ tổng hợp (aggregation)?
A. Hình thoi rỗng gắn với một đường thẳng
B. Hình thoi đặc gắn với một đường thẳng
C. Đường thẳng liền nét
D. Đường thẳng đứt nét
9. 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 phụ thuộc vào nhau
B. Mức độ mà các phương thức trong một lớp liên quan đến nhau
C. Mức độ mà một lớp có thể tái sử dụng
D. Mức độ mà một lớp có thể mở rộng
10. Trong lập trình hướng đối tượng, ‘đa hình’ (polymorphism) có nghĩa là gì?
A. Một đối tượng có nhiều thuộc tính
B. Một lớp có nhiều phương thức
C. Một phương thức có thể hoạt động trên nhiều kiểu dữ liệu khác nhau
D. Một lớp chỉ có thể kế thừa từ một lớp khác
11. Nguyên tắc Open/Closed (OCP) trong SOLID 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 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ột lớp nên mở để mở rộng, nhưng đóng để sửa đổi
D. Nhiều interface đặc biệt tốt hơn là một interface chung
12. Pattern ‘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. Để tạo ra các đối tượng một cách trực tiếp
C. Để ẩn các thuộc tính của đối tượng
D. Để kế thừa từ nhiều lớp
13. Nguyên tắc Single Responsibility (SRP) trong SOLID 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 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. Phụ thuộc vào các abstraction, không phụ thuộc vào các implementation
D. Nhiều interface đặc biệt tốt hơn là một interface chung
14. Nhược điểm của việc sử dụng lập trình hướng đối tượng là gì?
A. Khó thiết kế và có thể dẫn đến các hệ thống phức tạp nếu không được quản lý tốt
B. Dễ bảo trì và mở rộng hệ thống
C. Giảm tính linh hoạt
D. Không hỗ trợ tính đóng gói
15. Phương pháp nào sau đây thể hiện tính đóng gói trong lập trình hướng đối tượng?
A. Sử dụng các biến toàn cục
B. Truy cập trực tiếp vào các thuộc tính của đối tượng từ bên ngoài lớp
C. Ẩn các thuộc tính và phương thức nội bộ của đối tượng và cung cấp các phương thức truy cập công khai
D. Không sử dụng lớp cha
16. Pattern ‘Factory’ được sử dụng để làm gì?
A. Để tạo ra các đối tượng một cách trực tiếp
B. Để tạo ra các đối tượng mà không cần chỉ định lớp cụ thể của đối tượng được tạo
C. Để ẩn các thuộc tính của đối tượng
D. Để kế thừa từ nhiều lớp
17. Ưu điểm của việc sử dụng lập trình hướng đối tượng là gì?
A. Giảm thiểu khả năng tái sử dụng code
B. Khó bảo trì và mở rộng hệ thống
C. Tăng tính linh hoạt, khả năng tái sử dụng code và dễ dàng bảo trì hệ thống
D. Không hỗ trợ tính đóng gói
18. Nguyên tắc Interface Segregation (ISP) trong SOLID 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 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. Phụ thuộc vào các abstraction, không phụ thuộc vào các implementation
D. Nhiều interface đặc biệt tốt hơn là một interface chung
19. Pattern ‘Observer’ được sử dụng để làm 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. Để ẩn các thuộc tính của đối tượng
D. Để kế thừa từ nhiều lớp
20. Trong UML, ký hiệu nào biểu diễn một lớp (class)?
A. Hình tròn
B. Hình chữ nhật
C. Hình thoi
D. Hình tam giác
21. Phương thức ‘constructor’ (hàm tạo) trong một lớp được sử dụng để làm gì?
A. Để xóa một đối tượng
B. Để khởi tạo một đối tượng
C. Để thay đổi giá trị của một thuộc tính
D. Để gọi một phương thức khác
22. Thuộc tính ‘static’ (tĩnh) trong một lớp có ý nghĩa gì?
A. Thuộc tính chỉ có thể được truy cập từ bên trong lớp
B. Thuộc tính chỉ có thể được truy cập từ bên ngoài lớp
C. Thuộc tính thuộc về lớp chứ không phải đối tượng cụ thể
D. Thuộc tính có thể thay đổi giá trị
23. Lớp trừu tượng (abstract class) khác với lớp thông thường như thế nào?
A. Lớp trừu tượng không thể có thuộc tính
B. Lớp trừu tượng không thể có phương thức
C. Lớp trừu tượng không thể được khởi tạo trực tiếp
D. Lớp trừu tượng có thể được khởi tạo trực tiếp
24. Phương thức ‘destructor’ (hàm hủy) trong một lớp được sử dụng để làm gì?
A. Để khởi tạo một đối tượng
B. Để giải phóng bộ nhớ khi một đối tượng bị hủy
C. Để thay đổi giá trị của một thuộc tính
D. Để gọi một phương thức khác
25. 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 lớp phụ thuộc vào nhau
B. Mức độ mà một lớp có thể tái sử dụng
C. Mức độ mà một lớp có thể mở rộng
D. Mức độ mà một lớp có thể hiểu được
26. Phương thức ‘virtual’ (ảo) trong một lớp được sử dụng để làm gì?
A. Để ẩn một phương thức
B. Để cho phép một phương thức được ghi đè (override) trong lớp con
C. Để ngăn chặn một phương thức được ghi đè
D. Để tạo ra một phương thức trừu tượng
27. Dependency Injection (DI) là gì và nó giúp ích gì trong lập trình hướng đối tượng?
A. Một kỹ thuật để tạo ra các đối tượng singleton
B. Một kỹ thuật để giảm tính liên kết giữa các lớp bằng cách cung cấp các phụ thuộc cho một lớp thay vì để lớp đó tự tạo ra chúng
C. Một kỹ thuật để tăng tính liên kết giữa các lớp
D. Một kỹ thuật để ẩn các thuộc tính của đối tượng
28. Trong UML, ký hiệu nào biểu diễn mối quan hệ kế thừa (inheritance)?
A. Đường thẳng liền nét
B. Đường thẳng đứt nét
C. Đường thẳng liền nét với mũi tên rỗng
D. Đường thẳng đứt nét với mũi tên rỗng
29. Pattern ‘Singleton’ được sử dụng để làm gì?
A. Để tạo ra nhiều đối tượng của một lớp
B. Để đảm bảo rằng chỉ có một đối tượng duy nhất của một lớp được tạo ra
C. Để ẩn các thuộc tính của đối tượng
D. Để kế thừa từ nhiều lớp
30. Nguyên tắc Dependency Inversion (DIP) trong SOLID 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 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. Phụ thuộc vào các abstraction, không phụ thuộc vào các implementation
D. Nhiều interface đặc biệt tốt hơn là một interface chung
31. Mô hình thiết kế nào đị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?
A. Observer
B. Strategy
C. Factory
D. Singleton
32. Phương pháp nào sau đây giúp che giấu thông tin bên trong của một đối tượng và chỉ cho phép truy cập thông qua các phương thức công khai?
A. Kế thừa (Inheritance)
B. Đa hình (Polymorphism)
C. Đóng gói (Encapsulation)
D. Trừu tượng (Abstraction)
33. Mô hình thiết kế (design pattern) nào sau đây tập trung vào việc tạo ra các đối tượng một cách linh hoạt và dễ dàng?
A. Singleton
B. Factory
C. Observer
D. Strategy
34. Phương thức nào được gọi tự động 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
35. Khi nào nên sử dụng ‘inheritance’ (kế thừa) thay vì ‘composition’ (kết hợp)?
A. Luôn luôn sử dụng composition.
B. Khi có mối quan hệ ‘is-a’ (là một) rõ ràng và muốn tái sử dụng code.
C. Khi muốn tạo ra các đối tượng phức tạp.
D. Khi không muốn tái sử dụng code.
36. 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 phương thức và thuộc tính trong một lớp.
B. Mức độ liên quan giữa các lớp.
C. Mức độ phụ thuộc giữa các module.
D. Mức độ độc lập giữa các đối tượng.
37. Đâu là nhược điểm tiềm ẩn của việc lạm dụng kế thừa (inheritance) trong lập trình hướng đối tượng?
A. Giảm khả năng tái sử dụng code.
B. Tăng tính linh hoạt của code.
C. Dẫn đến hệ thống phân cấp lớp phức tạp và khó bảo trì.
D. Làm cho code dễ hiểu hơn.
38. Mô hình thiết kế nào đả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?
A. Factory
B. Observer
C. Singleton
D. Strategy
39. Thuật ngữ nào sau đây mô tả khả năng một đối tượng thuộc nhiều kiểu dữ liệu khác nhau?
A. Đóng gói (Encapsulation)
B. Đa hình (Polymorphism)
C. Kế thừa (Inheritance)
D. Trừu tượng (Abstraction)
40. Trong ngữ cảnh của OOP, ‘interface’ (giao diện) là gì?
A. Một lớp cụ thể với các phương thức đã được triển khai.
B. Một lớp trừu tượng không có phương thức nào.
C. Một bản thiết kế chỉ định các phương thức mà một lớp phải triển khai.
D. Một biến toàn cục.
41. Phương thức nào được gọi tự động 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
42. Kỹ thuật 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)
43. Trong ngữ cảnh lập trình hướng đối tượng, thuật ngữ ‘SOLID’ đại diện cho điều gì?
A. Một ngôn ngữ lập trình mới.
B. Một tập hợp các nguyên tắc thiết kế hướng đối tượng.
C. Một công cụ để debug code.
D. Một phương pháp kiểm thử phần mềm.
44. Sự khác biệt chính giữa ‘interface’ và ‘abstract class’ (lớp trừu tượng) là gì?
A. Không có sự khác biệt, chúng là như nhau.
B. Interface có thể chứa các phương thức đã được triển khai, trong khi abstract class thì không.
C. Abstract class có thể chứa các phương thức đã được triển khai, trong khi interface thì không (trước Java 8).
D. Interface có thể có các thuộc tính, trong khi abstract class thì không.
45. 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. Không có sự khác biệt, chúng là như nhau.
B. Composition là một loại kế thừa.
C. Inheritance cho phép một lớp kế thừa hành vi từ một lớp khác, trong khi composition cho phép một lớp chứa các đối tượng của các lớp khác.
D. Inheritance cho phép một lớp chứa các đối tượng của các lớp khác, trong khi composition cho phép một lớp kế thừa hành vi từ một lớp khác.
46. Thuật ngữ nào mô tả việc một phương thức có cùng tên nhưng khác tham số trong cùng một lớp?
A. Ghi đè phương thức (Method Overriding)
B. Nạp chồng phương thức (Method Overloading)
C. Đóng gói (Encapsulation)
D. Kế thừa (Inheritance)
47. Trong thiết kế hướng đối tượng, nguyên tắc ‘Single Responsibility Principle’ (SRP) nghĩa là gì?
A. Mỗi lớp nên có nhiều trách nhiệm.
B. Mỗi 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.
D. Các lớp không nên có trách nhiệm.
48. Thuật ngữ nào mô tả việc một phương thức trong lớp con có cùng tên và tham số với phương thức trong lớp cha?
A. Nạp chồng phương thức (Method Overloading)
B. Ghi đè phương thức (Method Overriding)
C. Đóng gói (Encapsulation)
D. Kế thừa (Inheritance)
49. Mô hình thiết kế nào đị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 của nó được thông báo và cập nhật tự động?
A. Strategy
B. Singleton
C. Factory
D. Observer
50. Lợi ích chính của việc sử dụng tính trừu tượng (abstraction) trong OOP là gì?
A. Tăng tính phức tạp của code.
B. Giảm khả năng tái sử dụng code.
C. Ẩn 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.
D. Làm cho code khó bảo trì hơn.
51. Nguyên tắc ‘Open/Closed Principle’ (OCP) trong thiết kế hướng đối tượng nói rằng gì?
A. Các lớp nên được mở để sửa đổi và đóng để mở rộng.
B. Các lớp nên được đóng để sửa đổi và mở để mở rộng.
C. Các lớp nên được mở cho cả sửa đổi và mở rộng.
D. Các lớp nên được đóng cho cả sửa đổi và mở rộng.
52. 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 kiểu dữ liệu nguyên thủy.
C. Một bản thiết kế hoặc khuôn mẫu để tạo ra các đối tượng.
D. Một hàm hoặc thủ tục.
53. Lợi ích của việc sử dụng các công cụ UML (Unified Modeling Language) trong thiết kế hướng đối tượng là gì?
A. Tăng tốc độ thực thi của chương trình.
B. Giúp trực quan hóa và mô tả thiết kế hệ thống một cách rõ ràng.
C. Tự động sinh code từ thiết kế.
D. Loại bỏ hoàn toàn việc viết code.
54. 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 độ liên quan giữa các lớp.
B. Mức độ liên quan giữa các phương thức và thuộc tính trong một lớp.
C. Mức độ phụ thuộc giữa các module.
D. Mức độ độc lập giữa các đối tượng.
55. Nguyên tắc ‘Interface Segregation Principle’ (ISP) khuyến nghị điều gì?
A. Các interface nên lớn và chứa nhiều phương thức.
B. Các interface nên nhỏ và tập trung vào một nhóm hành vi liên quan.
C. Các interface nên được ẩn đi.
D. Không nên sử dụng interface.
56. Mục đích của việc sử dụng các phương thức ‘getter’ và ‘setter’ là gì?
A. Để tăng tốc độ thực thi của chương trình.
B. Để truy cập và sửa đổi các thuộc tính private của một đối tượng một cách kiểm soát.
C. Để tạo ra các đối tượng mới.
D. Để xóa các đối tượng.
57. Nguyên tắc ‘Dependency Inversion Principle’ (DIP) đề xuất điều gì?
A. Các module cấp cao nên phụ thuộc vào các module cấp thấp.
B. Các module cấp thấp nên phụ thuộc vào các module cấp cao.
C. Cả module cấp cao và cấp thấp nên phụ thuộc vào abstraction.
D. Không nên có sự phụ thuộc giữa các module.
58. Đặc điểm nào sau đây là quan trọng nhất của lập trình hướng đối tượng (OOP)?
A. Sử dụng các hàm và thủ tục để tổ chức code.
B. Chia chương trình thành các đối tượng, mỗi đối tượng có trạng thái và hành vi.
C. Sử dụng cấu trúc dữ liệu phức tạp để lưu trữ thông tin.
D. Tập trung vào việc tối ưu hóa hiệu suất của chương trình.
59. Khi nào nên sử dụng một lớp trừu tượng (abstract class) thay vì một lớp thông thường?
A. Khi muốn tạo ra các đối tượng cụ thể.
B. Khi muốn định nghĩa một khuôn mẫu chung cho các lớp con, nhưng không muốn tạo ra các đối tượng trực tiếp từ lớp này.
C. Khi muốn tăng tốc độ thực thi của chương trình.
D. Khi muốn giảm tính phức tạp của code.
60. Nguyên tắc ‘Liskov Substitution Principle’ (LSP) phát biểu điều gì?
A. Các lớp con phải thay thế được lớp cha mà không làm thay đổi tính đúng đắn của chương trình.
B. Các lớp cha phải thay thế được lớp con.
C. Các lớp con không được thay thế lớp cha.
D. Không có lớp nào được thay thế lớp nào.
61. Trong lập trình hướng đối tượng, mối quan hệ ‘has-a’ thường được thể hiện thông qua cơ chế nào?
A. Kế thừa (Inheritance)
B. Đóng gói (Encapsulation)
C. Tổng hợp (Aggregation) hoặc hợp thành (Composition)
D. Đa hình (Polymorphism)
62. Trong OOP, ‘đối tượng’ (object) là gì?
A. Một bản thiết kế hoặc khuôn mẫu để tạo ra các lớp.
B. Một thể hiện cụ thể của một lớp.
C. Một phương thức đặc biệt được sử dụng để tạo ra các lớp.
D. Một biến được sử dụng để lưu trữ thông tin của lớp.
63. Phương thức trừu tượng (abstract method) là gì?
A. Một phương thức có phần thân được định nghĩa trong lớp cha.
B. Một phương thức không có phần thân và phải được ghi đè (override) trong lớp con.
C. Một phương thức chỉ có thể được gọi từ bên trong lớp.
D. Một phương thức không thể được ghi đè trong lớp con.
64. Thuộc tính tĩnh (static attribute) là gì?
A. Một thuộc tính chỉ có thể được truy cập từ bên trong lớp.
B. Một thuộc tính được chia sẻ bởi tất cả các đối tượng của lớp.
C. Một thuộc tính không thể thay đổi giá trị.
D. Một thuộc tính chỉ có thể được khởi tạo một lần.
65. Phương thức tĩnh (static method) là gì?
A. Một phương thức có thể được gọi mà không cần tạo một đối tượng của lớp.
B. Một phương thức chỉ có thể được gọi từ bên trong lớp.
C. Một phương thức không thể được ghi đè trong lớp con.
D. Một phương thức luôn trả về một giá trị tĩnh.
66. SOLID là một tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ ‘L’ trong SOLID đại diện cho nguyên tắc nào?
A. Liskov Substitution Principle (Nguyên tắc thay thế Liskov).
B. Loose Coupling Principle (Nguyên tắc liên kết lỏng lẻo).
C. Law of Demeter (Luật Demeter).
D. Lazy Loading Principle (Nguyên tắc tải chậm).
67. Design Pattern Singleton được sử dụng để làm gì?
A. Tạo ra nhiều đối tượng thuộc cùng một lớp.
B. Đảm bảo rằng một lớp chỉ có một thể hiện (instance) duy nhất 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 có hành vi khác nhau tùy thuộc vào ngữ cảnh.
D. Ẩn các chi tiết triển khai phức tạp của một hệ thống.
68. Design Pattern Observer được sử dụng để làm gì?
A. Định nghĩa một giao diện cho việc tạo ra các họ đối tượng liên quan hoặc phụ thuộc lẫn nhau mà không cần chỉ định các lớp cụ thể của chúng.
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 đại diện placeholder cho một đối tượng khác để kiểm soát truy cập vào nó.
D. Cho phép một đối tượng hoạt động như một giao diện thống nhất cho một tập hợp các giao diện trong một hệ thống.
69. Khái niệm nào trong OOP cho phép một đối tượng thuộc lớp con kế thừa các thuộc tính và phương thức của lớp cha?
A. Đóng gói (Encapsulation).
B. Đa hình (Polymorphism).
C. Kế thừa (Inheritance).
D. Trừu tượng (Abstraction).
70. Lớp trừu tượng (abstract class) là gì?
A. Một lớp không thể được khởi tạo.
B. Một lớp có ít nhất một phương thức trừu tượng.
C. Một lớp được sử dụng để tạo ra các đối tượng.
D. Cả ba đáp án trên.
71. Mục đích của việc sử dụng ‘access modifiers’ (ví dụ: public, private, protected) trong OOP là gì?
A. Để tăng hiệu suất thực thi chương trình.
B. Để kiểm soát quyền truy cập vào các thuộc tính và phương thức của một lớp.
C. Để tạo ra các lớp trừu tượng.
D. Để định nghĩa các interface.
72. Phương thức nào cho phép lớp con ghi đè (override) một phương thức của lớp cha?
A. Phương thức trừu tượng (abstract method).
B. Phương thức tĩnh (static method).
C. Phương thức ảo (virtual method).
D. Phương thức ghi đè (override method).
73. Nguyên tắc DRY (Don’t Repeat Yourself) trong lập trình hướng đối tượng có nghĩa là gì?
A. Không viết code quá phức tạp.
B. Tránh lặp lại code; mỗi phần kiến thức nên có một và chỉ một đại diện duy nhất trong hệ thống.
C. Không sử dụng các thư viện bên ngoài.
D. Viết code dễ đọc và dễ hiểu.
74. Trong lập trình hướng đối tượng, mối quan hệ ‘is-a’ 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)
75. Interface trong OOP khác với lớp trừu tượng (abstract class) như thế nào?
A. Interface có thể chứa các phương thức đã được triển khai, còn lớp trừu tượng thì không.
B. Lớp trừu tượng có thể chứa các thuộc tính, còn interface thì không.
C. Một lớp có thể kế thừa từ nhiều lớp trừu tượng, còn interface thì không.
D. Một lớp có thể implement nhiều interface, nhưng chỉ có thể kế thừa từ một lớp trừu tượng.
76. SOLID là một tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ ‘O’ trong SOLID đại diện cho nguyên tắc nào?
A. Open/Closed Principle (Nguyên tắc đóng/mở).
B. Object-Oriented Principle (Nguyên tắc hướng đối tượng).
C. Ordering Principle (Nguyên tắc sắp xếp).
D. Optional Principle (Nguyên tắc tùy chọn).
77. Phương thức khởi tạo (constructor) trong một lớp có chức năng gì?
A. Xóa một đối tượng khỏi bộ nhớ.
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. 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.
78. Đặc điểm nào sau đây KHÔNG phải là một lợi ích của lập trình hướng đối tượng (OOP)?
A. Tăng tính tái sử dụng của code.
B. Giảm độ phức tạp của code.
C. Tăng hiệu suất thực thi chương trình một cách tuyệt đối.
D. Dễ dàng bảo trì và mở rộng code.
79. Trong 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 phương thức đặc biệt được sử dụng để khởi tạo đối tượng.
D. Một biến được sử dụng để lưu trữ dữ liệu của đối tượng.
80. Tính đóng gói (Encapsulation) trong OOP nhằm mục đích gì?
A. Che giấu thông tin và bảo vệ dữ liệu của đối tượng.
B. Cho phép các đối tượng thuộc các lớp khác nhau giao tiếp với nhau.
C. Tạo ra các đối tượng có nhiều hình dạng khác nhau.
D. Định nghĩa các lớp trừu tượng.
81. Design Pattern Strategy đượ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. Tránh sự liên kết chặt chẽ giữa người gửi yêu cầu và người nhận yêu cầu bằng cách đưa ra một đối tượng để xử lý yêu cầu.
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. Chuyển đổi giao diện của một lớp thành một giao diện khác mà client mong đợi.
82. Lợi ích chính của việc sử dụng Dependency Injection (DI) trong OOP là gì?
A. Tăng hiệu suất thực thi chương trình.
B. Giảm sự phụ thuộc giữa các lớp, giúp code dễ kiểm thử và bảo trì hơn.
C. Tự động tạo ra các đối tượng khi cần thiết.
D. Tăng cường tính bảo mật của ứng dụng.
83. Đa hình (Polymorphism) trong OOP có nghĩa là gì?
A. Một đối tượng có thể có nhiều hình dạng hoặc hành vi khác nhau.
B. Một lớp có thể có nhiều thuộc tính và phương thức.
C. Một phương thức có thể được gọi với nhiều tham số khác nhau.
D. Một đối tượng có thể kế thừa từ nhiều lớp khác nhau.
84. Design Pattern Factory đượ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 các đối tượng mà không cần chỉ định lớp cụ thể của đối tượng sẽ được tạo.
C. Chia sẻ trạng thái của các đối tượng để giảm thiểu việc sử dụng bộ nhớ.
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.
85. SOLID là một tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ ‘D’ trong SOLID đại diện cho nguyên tắc nào?
A. Dependency Inversion Principle (Nguyên tắc đảo ngược phụ thuộc).
B. Don’t Repeat Yourself Principle (Nguyên tắc không lặp lại chính mình).
C. Delegation Principle (Nguyên tắc ủy quyền).
D. Data Abstraction Principle (Nguyên tắc trừu tượng hóa dữ liệu).
86. SOLID là một tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ ‘I’ trong SOLID đại diện cho nguyên tắc nào?
A. Interface Segregation Principle (Nguyên tắc phân tách interface).
B. Inversion of Control Principle (Nguyên tắc đảo ngược điều khiển).
C. Information Hiding Principle (Nguyên tắc ẩn thông tin).
D. Incremental Development Principle (Nguyên tắc phát triển gia tăng).
87. Sự khác biệt chính giữa tổng hợp (Aggregation) và hợp thành (Composition) trong OOP là gì?
A. Tổng hợp là một dạng đặc biệt của hợp thành.
B. Hợp thành là một dạng đặc biệt của tổng hợp.
C. Trong hợp thành, đối tượng chứa không thể tồn tại nếu không có đối tượng được chứa, trong khi tổng hợp thì có thể.
D. Trong tổng hợp, đối tượng chứa không thể tồn tại nếu không có đối tượng được chứa, trong khi hợp thành thì có thể.
88. Từ khóa nào thường được sử dụng để chỉ đối tượng hiện tại trong một lớp?
A. parent
B. super
C. this
D. self
89. SOLID là một tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ ‘S’ trong SOLID đại diện cho nguyên tắc nào?
A. Single Responsibility Principle (Nguyên tắc đơn trách nhiệm).
B. Substitution Principle (Nguyên tắc thay thế).
C. Sequential Principle (Nguyên tắc tuần tự).
D. Standard Principle (Nguyên tắc tiêu chuẩn).
90. Khái niệm nào trong OOP cho phép ẩn 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 cho người dùng?
A. Kế thừa (Inheritance).
B. Đóng gói (Encapsulation).
C. Trừu tượng (Abstraction).
D. Đa hình (Polymorphism).
91. Mục đích của ‘constructor’ (hàm khởi tạo) trong một lớp là gì?
A. Khởi tạo các thuộc tính của đối tượng khi đối tượng được tạo ra.
B. Hủy bỏ đối tượng khi nó không còn được sử dụng.
C. Thực hiện các phép toán số học.
D. In thông tin ra màn hình.
92. Trong lập trình hướng đối tượng, ‘composition’ (hợp thành) là gì?
A. Một dạng đặc biệt của association, trong đó một lớp chứa các đối tượng của lớp khác, và các đối tượng này không thể tồn tại độc lập.
B. Một lớp kế thừa từ một lớp khác.
C. Một lớp sử dụng các dịch vụ của lớp khác.
D. Một lớp định nghĩa các phương thức trừu tượng.
93. Trong lập trình hướng đối tượng, ‘method overriding’ (ghi đè phương thức) là gì?
A. Việc một lớp con định nghĩa lại một phương thức đã được định nghĩa trong lớp cha.
B. Việc một phương thức gọi chính nó.
C. Việc một lớp ẩn các thuộc tính của nó.
D. Việc một đối tượng được sao chép.
94. Mục đích của design pattern ‘Singleton’ là gì?
A. Đả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 thể hiện đó.
B. Định nghĩa một interface để tạo ra các đối tượng.
C. Cho phép các lớp có interface không tương thích có thể làm việc cùng nhau.
D. Định nghĩa một sự phụ thuộc một-nhiều giữa các đối tượng.
95. Lợi ích của việc sử dụng các design pattern (mẫu thiết kế) trong lập trình hướng đối tượng là gì?
A. Cung cấp các giải pháp đã được kiểm chứng cho các vấn đề thiết kế thường gặp.
B. Tăng tốc độ thực thi chương trình.
C. Giảm dung lượng bộ nhớ sử dụng.
D. Làm cho code ngắn gọn hơn.
96. Trong lập trình hướng đối tượng, từ khóa ‘protected’ dùng để chỉ điều gì?
A. Các thành viên (thuộc tính, phương thức) chỉ có thể được truy cập từ bên trong lớp đó và các lớp con của nó.
B. Các thành viên chỉ có thể được truy cập từ bên trong lớp đó.
C. Các thành viên có thể được truy cập từ bất kỳ đâu.
D. Các thành viên chỉ có thể được truy cập từ bên trong cùng một package.
97. Trong lập trình hướng đối tượng, tính đóng gói (encapsulation) có nghĩa là gì?
A. Che giấu thông tin và hành vi bên trong đối tượng, chỉ cho phép truy cập thông qua các phương thức công khai.
B. 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.
C. Khả năng một đối tượng có thể có nhiều hình thức khác nhau.
D. Tạo ra các đối tượng từ các lớp.
98. Trong lập trình hướng đối tượng, ‘inheritance’ (tính kế thừa) dùng để chỉ điều gì?
A. Một lớp có thể kế thừa các thuộc tính và phương thức từ một lớp khác.
B. Một đối tượng có thể chứa các đối tượng khác.
C. Một phương thức có thể gọi chính nó.
D. Một biến có thể lưu trữ nhiều kiểu dữ liệu khác nhau.
99. Trong lập trình hướng đối tượng, từ khóa ‘private’ dùng để chỉ điều gì?
A. Các thành viên (thuộc tính, phương thức) chỉ có thể được truy cập từ bên trong lớp đó.
B. Các thành viên có thể được truy cập từ bên trong lớp đó và các lớp con của nó.
C. Các thành viên có thể được truy cập từ bất kỳ đâu.
D. Các thành viên chỉ có thể được truy cập từ bên trong cùng một package.
100. Tính trừu tượng (abstraction) trong OOP giúp ích gì cho việc thiết kế phần mềm?
A. Giúp đơn giản hóa hệ thống bằng cách ẩn các chi tiết phức tạp và chỉ tập trung vào những đặc điểm quan trọng.
B. Giúp tăng tốc độ thực thi của chương trình.
C. Giúp giảm dung lượng bộ nhớ sử dụng.
D. Giúp code ngắn gọn hơn.
101. Trong lập trình hướng đối tượng, ‘association’ (kết hợp) là gì?
A. Một mối quan hệ giữa hai lớp, trong đó một lớp sử dụng các dịch vụ của lớp kia.
B. Một lớp kế thừa từ một lớp khác.
C. Một lớp chứa các đối tượng của lớp khác.
D. Một lớp định nghĩa các phương thức trừu tượng.
102. Mục đích của design pattern ‘Observer’ là gì?
A. Đị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 của nó sẽ được thông báo và cập nhật tự động.
B. Đảm bảo rằng một lớp chỉ có một thể hiện duy nhất.
C. Cho phép các lớp có interface không tương thích có thể làm việc cùng nhau.
D. Định nghĩa một interface để tạo ra các đối tượng.
103. Khái niệm nào sau đây mô tả việc ẩn các chi tiết triển khai và chỉ hiển thị giao diện cần thiết cho người dùng?
A. Tính trừu tượng (Abstraction).
B. Tính đóng gói (Encapsulation).
C. Tính kế thừa (Inheritance).
D. Tính đa hình (Polymorphism).
104. Lợi ích chính của việc sử dụng lập trình hướng đối tượng (OOP) là gì?
A. Tăng tính tái sử dụng mã, giảm độ phức tạp và dễ bảo trì.
B. Tăng tốc độ thực thi chương trình.
C. Giảm dung lượng bộ nhớ sử dụng.
D. Làm cho code ngắn gọn hơn.
105. Trong lập trình hướng đối tượng, ‘method overloading’ (nạp chồng phương thức) là gì?
A. Việc một lớp có nhiều phương thức cùng tên nhưng khác nhau về số lượng hoặc kiểu dữ liệu của tham số.
B. Việc một phương thức gọi chính nó.
C. Việc một lớp ẩn các thuộc tính của nó.
D. Việc một đối tượng được sao chép.
106. Mục đích của design pattern ‘Factory Method’ là gì?
A. Định nghĩa một interface để tạo ra các đối tượng, nhưng để các lớp con quyết định lớp nào sẽ được khởi tạo.
B. Đảm bảo rằng một lớp chỉ có một thể hiện duy nhất.
C. Cho phép các lớp có interface không tương thích có thể làm việc cùng nhau.
D. Định nghĩa một sự phụ thuộc một-nhiều giữa các đối tượng.
107. Đâu là một ví dụ về design pattern thuộc nhóm behavioral (hành vi)?
A. Observer.
B. Abstract Factory.
C. Bridge.
D. Composite.
108. Trong lập trình hướng đối tượng, từ khóa ‘public’ dùng để chỉ điều gì?
A. Các thành viên (thuộc tính, phương thức) có thể được truy cập từ bất kỳ đâu.
B. Các thành viên chỉ có thể được truy cập từ bên trong lớp đó.
C. Các thành viên chỉ có thể được truy cập từ bên trong lớp đó và các lớp con của nó.
D. Các thành viên chỉ có thể được truy cập từ bên trong cùng một package.
109. Phương pháp nào sau đây được sử dụng để hiện thực tính đa hình trong lập trình hướng đối tượng?
A. Sử dụng các lớp trừu tượng và interface.
B. Sử dụng các vòng lặp for và while.
C. Sử dụng các biến toàn cục.
D. Sử dụng các câu lệnh điều kiện if-else.
110. Đặ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 (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 năng động (Dynamism).
111. Khi nào thì chúng ta nên sử dụng tính kế thừa (inheritance) trong thiết kế phần mềm 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ó mối quan hệ ‘has-a’ (có một) giữa các lớp.
C. Khi cần tăng tốc độ thực thi chương trình.
D. Khi cần giảm dung lượng bộ nhớ sử dụng.
112. Trong lập trình hướng đối tượng, ‘aggregation’ (tập hợp) là gì?
A. Một dạng đặc biệt của association, trong đó một lớp chứa các đối tượng của lớp khác, nhưng các đối tượng này có thể tồn tại độc lập.
B. Một lớp kế thừa từ một lớp khác.
C. Một lớp sử dụng các dịch vụ của lớp khác.
D. Một lớp định nghĩa các phương thức trừu tượng.
113. Đâ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 phương thức ‘tinh_dien_tich’ có thể tính diện tích của hình tròn, hình vuông hoặc hình tam giác.
B. Một lớp ‘NhanVien’ có thuộc tính ‘ten’ và ‘luong’.
C. Một lớp ‘DongVat’ có các lớp con ‘Cho’ và ‘Meo’.
D. Một interface ‘IDrawable’ có phương thức ‘draw’.
114. Sự khác biệt chính giữa ‘class’ và ‘object’ trong lập trình hướng đối tượng là gì?
A. Class là một bản thiết kế, object là một thể hiện cụ thể của bản thiết kế đó.
B. Object là một bản thiết kế, class là một thể hiện cụ thể của bản thiết kế đó.
C. Class chứa dữ liệu, object chứa các hàm.
D. Object chứa dữ liệu, class chứa các hàm.
115. Đâu là một ví dụ về design pattern thuộc nhóm creational (khởi tạo)?
A. Singleton.
B. Observer.
C. Strategy.
D. Template Method.
116. Đâu là một ví dụ về design pattern thuộc nhóm structural (cấu trúc)?
A. Adapter.
B. Factory Method.
C. Iterator.
D. Command.
117. Khi nào thì chúng ta nên sử dụng tính đóng gói (encapsulation) trong thiết kế phần mềm hướng đối tượng?
A. Để bảo vệ dữ liệu của đối tượng khỏi bị truy cập và sửa đổi trực tiếp từ bên ngoài.
B. Để tăng tốc độ thực thi chương trình.
C. Để giảm dung lượng bộ nhớ sử dụng.
D. Để làm cho code ngắn gọn hơn.
118. Đâ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 phương thức trừu tượng.
B. Interface có thể chứa các phương thức đã được triển khai, trong khi lớp trừu tượng chỉ chứa các phương thức trừu tượng.
C. Lớp trừu tượng hỗ trợ đa kế thừa, trong khi interface không hỗ trợ.
D. Interface hỗ trợ đa kế thừa, trong khi lớp trừu tượng không hỗ trợ.
119. Interface trong lập trình hướng đối tượng có vai trò gì?
A. Đị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.
B. Lưu trữ dữ liệu.
C. Tạo ra các đối tượng.
D. Thực hiện các phép toán số học.
120. Trong ngữ cảnh của lập trình hướng đối tượng, ‘class’ (lớp) là gì?
A. Một bản thiết kế hoặc khuôn mẫu để tạo ra các đối tượng.
B. Một thể hiện cụ thể của một đối tượng.
C. Một biến được sử dụng để lưu trữ dữ liệu.
D. Một hàm được sử dụng để thực hiện một tác vụ cụ thể.
121. Trong lập trình hướng đối tượng, ‘phương thức’ (method) là gì?
A. Một biến được định nghĩa bên trong một lớp.
B. Một hàm (function) được định nghĩa bên trong một lớp và hoạt động trên các đối tượng của lớp đó.
C. Một cách để tạo ra các đối tượng mới.
D. Một cách để kế thừa các thuộc tính từ một lớp khác.
122. Khi nào nên sử dụng ‘lớp trừu tượng’ (abstract class) thay vì ‘giao diện’ (interface)?
A. Khi bạn muốn định nghĩa một tập hợp các phương thức mà một lớp phải triển khai.
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 kế thừa từ nhiều lớp khác nhau.
D. Khi bạn muốn che giấu các thuộc tính và phương thức bên trong của một đối tượng.
123. Nguyên tắc nào trong SOLID phát biểu rằng một lớp chỉ nên có một lý do để thay đổi?
A. Single Responsibility Principle (SRP).
B. Open/Closed Principle (OCP).
C. Liskov Substitution Principle (LSP).
D. Interface Segregation Principle (ISP).
124. Nguyên tắc nào trong SOLID khuyến khích việc giảm sự phụ thuộc giữa các lớp bằng cách sử dụng các abstraction (lớp trừu tượng, giao diện) thay vì các concrete implementation (lớp cụ thể)?
A. Single Responsibility Principle (SRP).
B. Open/Closed Principle (OCP).
C. Dependency Inversion Principle (DIP).
D. Interface Segregation Principle (ISP).
125. Trong lập trình hướng đối tượng, ‘observer pattern’ (mẫu observer) được sử dụng để làm gì?
A. Để tạo ra các đối tượng mới.
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. Để quản lý bộ nhớ của các đối tượng.
D. Để che giấu các thuộc tính và phương thức bên trong của một đối tượng.
126. Lợi ích chính của việc sử dụng các ‘design pattern’ (mẫu thiết kế) trong lập trình hướng đối tượng là gì?
A. Để tăng tốc độ thực thi của chương trình.
B. Để giảm kích thước của mã nguồn.
C. Để 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.
D. Để cho phép một lớp kế thừa từ nhiều lớp khác nhau.
127. Mục đích chính của việc sử dụng ‘tính trừu tượng’ (abstraction) trong lập trình hướng đối tượng là gì?
A. Để tăng tính phức tạp của chương trình.
B. Để 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 cho người dùng.
C. Để cho phép một lớp kế thừa từ nhiều lớp khác nhau.
D. Để tạo ra các đối tượng có thể thay đổi trạng thái của chúng.
128. Trong lập trình hướng đối tượng, ‘dependency injection’ (tiêm phụ thuộc) là gì?
A. Một cách để tạo ra các đối tượng mới.
B. Một cách để quản lý bộ nhớ của các đối tượng.
C. Một kỹ thuật thiết kế trong đó các phụ thuộc của một đối tượng được cung cấp cho nó thay vì đối tượng tự tạo ra chúng.
D. Một cách để che giấu các thuộc tính và phương thức bên trong của một đối tượng.
129. Thuật ngữ nào sau đây mô tả một biến được định nghĩa bên trong một lớp?
A. Phương thức (method).
B. Thuộc tính (attribute) hoặc trường (field).
C. Đối tượng (object).
D. Lớp (class).
130. Trong lập trình hướng đối tượng, ‘singleton pattern’ (mẫu singleton) được sử dụng để làm gì?
A. Để đả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 thể hiện đó.
B. Để tạo ra các đối tượng mới.
C. Để quản lý bộ nhớ của các đối tượng.
D. Để che giấu các thuộc tính và phương thức bên trong của một đối tượng.
131. 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 phần tử bên trong một module (ví dụ: một lớp) liên quan đến nhau.
B. Mức độ mà các module khác nhau trong một hệ thống phụ thuộc vào nhau.
C. Mức độ mà một chương trình dễ dàng bảo trì và mở rộng.
D. Mức độ mà một chương trình dễ dàng kiểm thử.
132. Mục tiêu của việc thiết kế các hệ thống với ‘high cohesion’ (tính gắn kết cao) và ‘low coupling’ (tính liên kết thấp) là gì?
A. Để tăng tốc độ thực thi của chương trình.
B. Để giảm kích thước của mã nguồn.
C. Để tạo ra các hệ thống dễ bảo trì, mở rộng và kiểm thử hơn.
D. Để cho phép một lớp kế thừa từ nhiều lớp khác nhau.
133. Nguyên tắc nào trong SOLID phát biểu rằng các thực thể phần mềm (lớp, module, hàm, v.v.) nên mở để mở rộng, nhưng đóng để sửa đổi?
A. Single Responsibility Principle (SRP).
B. Open/Closed Principle (OCP).
C. Liskov Substitution Principle (LSP).
D. Interface Segregation Principle (ISP).
134. Đặc điểm nào sau đây là **quan trọng nhất** để phân biệt lập trình hướng đối tượng (OOP) với lập trình hướng cấu trúc?
A. Sử dụng hàm (function) để chia nhỏ chương trình.
B. Khả năng sử dụng các cấu trúc điều khiển như if, else, for, while.
C. Tính đóng gói, kế thừa và đa hình.
D. Việc sử dụng biến toàn cục.
135. Mục đích chính của việc sử dụng ‘SOLID principles’ trong lập trình hướng đối tượng là gì?
A. Để tăng tốc độ thực thi của chương trình.
B. Để giảm kích thước của mã nguồn.
C. Để tạo ra các phần mềm dễ bảo trì, mở rộng và kiểm thử hơn.
D. Để cho phép một lớp kế thừa từ nhiều lớp khác nhau.
136. Nguyên tắc nào trong SOLID khuyến khích việc tạo ra các giao diện nhỏ, cụ thể cho từng client thay vì một giao diện lớn, đa năng?
A. Single Responsibility Principle (SRP).
B. Open/Closed Principle (OCP).
C. Liskov Substitution Principle (LSP).
D. Interface Segregation Principle (ISP).
137. Phương pháp nào sau đây thể hiện ‘tính kế thừa’ (inheritance) trong lập trình hướng đối tượng?
A. Một lớp có thể triển khai nhiều giao diện (interface).
B. Một đối tượng có thể được tạo ra từ nhiều lớp khác nhau.
C. Một lớp có thể kế thừa các thuộc tính và phương thức từ một lớp cha (lớp cơ sở).
D. Một phương thức có thể 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 số.
138. 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ần tử bên trong một module (ví dụ: một lớp) liên quan đến nhau.
B. Mức độ mà các module khác nhau trong một hệ thống phụ thuộc vào nhau.
C. Mức độ mà một chương trình dễ dàng bảo trì và mở rộng.
D. Mức độ mà một chương trình dễ dàng kiểm thử.
139. Trong lập trình hướng đối tượng, ‘strategy pattern’ (mẫu strategy) được sử dụng để làm gì?
A. Để định nghĩa một tập hợp các thuật toán, đóng gói mỗi thuật toán thành một lớp riêng biệt và làm cho chúng có thể thay thế cho nhau.
B. Để tạo ra các đối tượng mới.
C. Để quản lý bộ nhớ của các đối tượng.
D. Để che giấu các thuộc tính và phương thức bên trong của một đối tượng.
140. Trong lập trình hướng đối tượng, ‘giao diện’ (interface) được sử dụng để làm gì?
A. Để tạo ra các đối tượng mới.
B. Để định nghĩa một tập hợp các phương thức mà một lớp phải triển khai.
C. Để kế thừa các thuộc tính từ một lớp khác.
D. Để che giấu các thuộc tính và phương thức bên trong của một đối tượng.
141. Thuật ngữ nào sau đây mô tả một bản thiết kế cho việc tạo ra các đối tượng?
A. Đối tượng (object).
B. Giao diện (interface).
C. Lớp (class).
D. Phương thức (method).
142. Trong lập trình hướng đối tượng, ‘tính đa hình’ (polymorphism) có nghĩa là gì?
A. Một đối tượng có thể thuộc nhiều lớp khác nhau.
B. Một lớp có thể có nhiều thuộc tính và phương thức.
C. Một phương thức có thể 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.
D. Một lớp có thể kế thừa từ nhiều lớp khác nhau.
143. Sự khác biệt chính giữa ‘composition’ (tổ hợp) và ‘inheritance’ (kế thừa) là gì?
A. Composition tạo ra mối quan hệ ‘is-a’ (là một), còn inheritance tạo ra mối quan hệ ‘has-a’ (có một).
B. Composition tạo ra mối quan hệ ‘has-a’ (có một), còn inheritance tạo ra mối quan hệ ‘is-a’ (là một).
C. Composition cho phép một lớp kế thừa từ nhiều lớp khác nhau, còn inheritance chỉ cho phép kế thừa từ một lớp duy nhất.
D. Không có sự khác biệt, chúng là các thuật ngữ có thể thay thế cho nhau.
144. Trong lập trình hướng đối tượng, ‘composition’ (tổ hợp) là gì?
A. Một cách để kế thừa các thuộc tính từ một lớp khác.
B. Một cách để tạo ra các đối tượng mới.
C. Một cách để xây dựng các đối tượng phức tạp bằng cách kết hợp các đối tượng đơn giản hơn.
D. Một cách để che giấu các thuộc tính và phương thức bên trong của một đối tượng.
145. Nguyên tắc nào trong SOLID phát biểu rằng các lớp con (lớp dẫn xuất) phải có khả năng thay thế cho các lớp cha (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?
A. Single Responsibility Principle (SRP).
B. Open/Closed Principle (OCP).
C. Liskov Substitution Principle (LSP).
D. Interface Segregation Principle (ISP).
146. Trong lập trình hướng đối tượng, ‘factory pattern’ (mẫu factory) được sử dụng để làm gì?
A. Để tạo ra các đối tượng mới.
B. Để quản lý bộ nhớ của các đối tượng.
C. Để che giấu các thuộc tính và phương thức bên trong của một đối tượng.
D. Để định nghĩa một tập hợp các phương thức mà một lớp phải triển khai.
147. Sự khác biệt chính giữa một ‘lớp’ (class) và một ‘đối tượng’ (object) là gì?
A. Lớp là một thể hiện của đối tượng.
B. Đối tượng là một bản thiết kế, còn lớp là một thể hiện thực tế.
C. Lớp là một bản thiết kế, còn đối tượng là một thể hiện (instance) của lớp đó.
D. Không có sự khác biệt, chúng là các thuật ngữ có thể thay thế cho nhau.
148. Trong ngữ cảnh của lập trình hướng đối tượng, ‘đa kế thừa’ (multiple inheritance) đề cập đến điều gì?
A. Một lớp có thể kế thừa từ nhiều lớp cha (lớp cơ sở).
B. Một đối tượng có thể thuộc nhiều lớp khác nhau.
C. Một phương thức có thể 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 số.
D. Một lớp có thể triển khai nhiều giao diện (interface).
149. 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ó thể chứa nhiều đối tượng khác.
B. Việc che giấu các thuộc tính và phương thức bên trong của một đối tượng và chỉ cho phép truy cập thông qua các phương thức công khai.
C. Khả năng một lớp có thể kế thừa các thuộc tính và phương thức từ một lớp khác.
D. Việc sử dụng các giao diện (interface) để định nghĩa các hành vi chung cho các lớp khác nhau.
150. Trong lập trình hướng đối tượng, ‘decorator pattern’ (mẫu decorator) được sử dụng để làm gì?
A. Để thêm các trách nhiệm mới vào một đối tượng một cách động.
B. Để tạo ra các đối tượng mới.
C. Để quản lý bộ nhớ của các đối tượng.
D. Để che giấu các thuộc tính và phương thức bên trong của một đối tượng.