1. Trong lập trình hướng đối tượng, ‘method overriding’ (ghi đè phương thức) là gì?
A. Định nghĩa một phương thức mới trong một lớp.
B. Định nghĩa lại một phương thức đã có trong lớp cha ở lớp con để thay đổi hành vi của nó.
C. Gọi một phương thức từ một lớp khác.
D. Xóa một phương thức khỏi một lớp.
2. Trong lập trình hướng đối tượng, ‘inheritance’ (kế thừa) thể hiện mối quan hệ gì giữa các lớp?
A. ‘has-a’ (có một).
B. ‘is-a’ (là một).
C. ‘uses-a’ (sử dụng một).
D. ‘creates-a’ (tạo một).
3. Trong lập trình hướng đối tượng, ‘composition’ (hợp thành) giữa hai lớp có ý nghĩa gì?
A. Một lớp là một loại của lớp khác.
B. 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 nếu lớp chứa chúng bị hủy.
C. Hai lớp không có mối quan hệ với nhau.
D. Một lớp kế thừa từ lớp khác.
4. Lợi ích của việc sử dụng lập trình hướng đối tượng (OOP) là gì?
A. Tăng tốc độ thực thi chương trình.
B. Giúp code dễ bảo trì, tái sử dụng và mở rộng hơn.
C. Giảm thiểu sử dụng bộ nhớ.
D. Không cần sử dụng thư viện bên ngoài.
5. Phương thức hủy (destructor) trong một lớp có vai trò gì?
A. Khởi tạo một đối tượng.
B. Giải phóng bộ nhớ và thực hiện các công việc dọn dẹp khi một đối tượng bị hủy.
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.
6. Đặc điểm nào sau đây là quan trọng nhất của tính kế thừa trong lập trình hướng đối tượng?
A. Cho phép tạo ra các đối tượng độc lập.
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. Cho phép định nghĩa các hàm toàn cục.
D. Cho phép sử dụng lại code một cách tùy ý.
7. Trong lập trình hướng đối tượng, ‘association’ (kết hợp) giữa hai lớp có ý nghĩa gì?
A. Một lớp là một loại của lớp khác.
B. Một lớp chứa các đối tượng của lớp khác.
C. Hai lớp có mối quan hệ với nhau, nhưng không có sự sở hữu hoặc phụ thuộc mạnh mẽ.
D. Một lớp kế thừa từ lớp khác.
8. Đối tượng (object) trong lập trình hướng đối tượng là gì?
A. Một lớp (class) đã được định nghĩa.
B. Một thể hiện (instance) cụ thể của một lớp (class).
C. Một phương thức (method) trong một lớp.
D. Một thuộc tính (attribute) của một lớp.
9. Nhược điểm của việc sử dụng lập trình hướng đối tượng (OOP) là gì?
A. Code khó hiểu và khó bảo trì.
B. Có thể làm tăng độ phức tạp của chương trình và đòi hỏi nhiều thời gian thiết kế hơn.
C. Không thể tái sử dụng code.
D. Không hỗ trợ đa hình.
10. Trong lập trình hướng đối tượng, ‘abstract class’ (lớp trừu tượng) là gì?
A. Một lớp không thể được tạo đối tượng.
B. Một lớp chỉ chứa các thuộc tính.
C. Một lớp chỉ chứa các phương thức.
D. Một lớp có thể được tạo đối tượng.
11. Nguyên tắc ‘Dependency Inversion Principle’ (DIP) trong SOLID nói về điều gì?
A. Các lớp cấp cao không nên phụ thuộc vào các lớp cấp thấp, cả hai nên phụ thuộc vào các abstraction.
B. Các lớp cấp thấp không nên phụ thuộc vào các lớp cấp cao, cả hai nên phụ thuộc vào các abstraction.
C. Các lớp nên phụ thuộc trực tiếp vào nhau để tăng hiệu suất.
D. Các lớp không nên phụ thuộc vào bất kỳ abstraction nào.
12. Trong lập trình hướng đối tượng, ‘method overloading’ (nạp chồng phương thức) là gì?
A. Định nghĩa một phương thức mới trong một lớp.
B. Định nghĩa nhiều phương thức cùng tên trong một lớp, nhưng với các tham số khác nhau.
C. Gọi một phương thức từ một lớp khác.
D. Xóa một phương thức khỏi một lớp.
13. Phương thức khởi tạo (constructor) trong một lớp có vai trò gì?
A. Hủy bỏ một đối tượng.
B. Khởi tạo các thuộc tính của đối tượng khi đối tượng được tạo ra.
C. 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.
14. Trong lập trình hướng đối tượng, tính đóng gói (encapsulation) nhằm mục đích gì?
A. Giảm thiểu sự phụ thuộc giữa các đối tượng.
B. Che giấu thông tin và bảo vệ dữ liệu của đối tượng.
C. Tăng tốc độ thực thi chương trình.
D. Cho phép đối tượng thuộc các lớp khác nhau giao tiếp với nhau.
15. Đa kế thừa (multiple inheritance) là gì và nó có thể gây ra vấn đề gì?
A. Một lớp kế thừa từ nhiều lớp, có thể gây ra vấn đề ‘diamond problem’ (vấn đề kim cương).
B. Một lớp kế thừa từ một lớp duy nhất, có thể gây ra vấn đề trùng lặp code.
C. Một lớp không kế thừa từ lớp nào cả, có thể gây ra vấn đề thiếu tính tái sử dụng.
D. Một lớp tạo ra nhiều đối tượng, có thể gây ra vấn đề về hiệu suất.
16. Nguyên tắc ‘Open/Closed Principle’ (OCP) trong SOLID nói về điều gì?
A. Một lớp nên được mở để kế thừa nhưng đóng để sửa đổi.
B. Một lớp nên được mở để sửa đổi nhưng đóng để kế thừa.
C. Một lớp nên được mở rộng dễ dàng mà không cần sửa đổi code đã có.
D. Một lớp nên được đóng gói cẩn thận để bảo vệ dữ liệu.
17. Interface (giao diện) trong lập trình hướng đối tượng khác với abstract class (lớp trừu tượng) như thế nào?
A. Interface có thể chứa các thuộc tính, abstract class thì không.
B. Interface chỉ chứa các phương thức trừu tượng (abstract methods), abstract class có thể chứa cả phương thức trừu tượng và phương thức đã được hiện thực.
C. Abstract class có thể kế thừa từ nhiều interface, interface thì không.
D. Interface có thể được tạo đối tượng, abstract class thì không.
18. Nguyên tắc ‘Single Responsibility Principle’ (SRP) trong SOLID nói về điều gì?
A. Mỗi lớp chỉ nên có một trách nhiệm duy nhất.
B. Mỗi phương thức chỉ nên có một tham số duy nhất.
C. Mỗi đối tượng chỉ nên được tạo một lần.
D. Mỗi chương trình chỉ nên có một điểm vào duy nhất.
19. Sự khác biệt chính giữa ‘aggregation’ (tập hợp) và ‘composition’ (hợp thành) là gì?
A. Aggregation thể hiện mối quan hệ ‘is-a’, composition thể hiện mối quan hệ ‘has-a’.
B. Trong aggregation, các đối tượng thành phần có thể tồn tại độc lập, trong composition, các đối tượng thành phần không thể tồn tại độc lập.
C. Aggregation chỉ áp dụng cho các lớp trừu tượng, composition chỉ áp dụng cho các lớp cụ thể.
D. Không có sự khác biệt giữa aggregation và composition.
20. Mục đích chính của việc sử dụng ‘access modifiers’ (công cụ sửa đổi 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 thuộc tính và phương thức của một lớp.
C. Giảm thiểu sự phụ thuộc giữa các lớp.
D. Cho phép đa kế thừa.
21. Nguyên tắc ‘Liskov Substitution Principle’ (LSP) trong SOLID nói về điều gì?
A. Các lớp con nên có thể thay thế cá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 nên có thể thay thế các lớp con mà không làm thay đổi tính đúng đắn của chương trình.
C. Các lớp nên được thiết kế sao cho dễ dàng thay thế lẫn nhau.
D. Các đối tượng nên được thay thế định kỳ để đảm bảo hiệu suất.
22. Dependency injection (DI) là gì và nó giải quyết vấn đề gì trong lập trình hướng đối tượng?
A. Một kỹ thuật để tăng tốc độ thực thi chương trình.
B. Một kỹ thuật để 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. Một kỹ thuật để quản lý bộ nhớ hiệu quả hơn.
D. Một kỹ thuật để tạo ra các đối tượng một cách tự động.
23. SOLID là gì và nó đại diện cho những nguyên tắc nào trong thiết kế hướng đối tượng?
A. Một ngôn ngữ lập trình hướng đối tượng.
B. Một tập hợp các nguyên tắc thiết kế giúp code dễ bảo trì, mở rộng và kiểm thử hơn: Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, Dependency Inversion Principle.
C. Một công cụ để quản lý dự án phần mềm.
D. Một framework để phát triển ứng dụng web.
24. Trong lập trình hướng đối tượng, ‘class’ (lớp) đượ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 toàn cục.
D. Một hàm đặc biệt.
25. Thuộc tính (attribute) của một lớp đại diện cho điều gì?
A. Hành vi của đối tượng.
B. Trạng thái của đối tượng.
C. Mối quan hệ giữa các đối tượng.
D. Cách đối tượng tương tác với người dùng.
26. Design pattern (mẫu thiết kế) là gì?
A. Một ngôn ngữ lập trình mới.
B. Một giải pháp đã được chứng minh cho một vấn đề thiết kế thường gặp trong lập trình.
C. Một công cụ để quản lý dự án phần mềm.
D. Một framework để phát triển ứng dụng web.
27. Phương thức (method) của một lớp đại diện cho điều gì?
A. Dữ liệu của đối tượng.
B. Hành vi của đối tượng.
C. Mối quan hệ giữa các đối tượng.
D. Cách đối tượng được lưu trữ trong bộ nhớ.
28. Nguyên tắc ‘Interface Segregation Principle’ (ISP) trong SOLID nói về điều gì?
A. Các interface nên được thiết kế sao cho dễ dàng thay thế lẫn nhau.
B. Các lớp không nên bị buộc phải phụ thuộc vào các phương thức mà chúng không sử dụng.
C. Các interface nên được đóng gói cẩn thận để bảo vệ dữ liệu.
D. Các interface nên được mở rộng dễ dàng mà không cần sửa đổi code đã có.
29. Tính đa hình (polymorphism) trong lập trình hướng đối tượng cho phép điều gì?
A. Một đối tượng có thể có nhiều kiểu dữ liệu.
B. Một phương thức có thể được định nghĩa lại ở các lớp con khác nhau để thực hiện các hành vi khác nhau.
C. Một lớp có thể có nhiều thuộc tính.
D. Một chương trình có thể chạy trên nhiều hệ điều hành.
30. Trong lập trình hướng đối tượng, ‘aggregation’ (tập hợp) giữa hai lớp có ý nghĩa gì?
A. Một lớp là một loại của lớp khác.
B. 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 có thể tồn tại độc lập nếu lớp chứa chúng bị hủy.
C. Hai lớp không có mối quan hệ với nhau.
D. Một lớp kế thừa từ lớp khác.
31. Trong lập trình hướng đối tượng, ‘friend function’ (hàm bạn) là gì?
A. Một hàm chỉ có thể được gọi bởi các đối tượng của lớp.
B. Một hàm không phải là thành viên của một lớp, nhưng được phép truy cập vào các thành viên private và protected của lớp đó, phá vỡ tính đóng gói ở một mức độ nhất định.
C. Một hàm được định nghĩa bên trong một lớp.
D. Một hàm không thể truy cập các thành viên public của lớp.
32. Đối tượng (object) trong lập trình hướng đối tượng là gì?
A. Một bản thiết kế của một lớp.
B. Một thể hiện cụ thể của một lớp, có các thuộc tính và phương thức được định nghĩa trong lớp đó.
C. Một biến cục bộ.
D. Một kiểu dữ liệu trừu tượng.
33. Trong lập trình hướng đối tượng, SOLID là một tập hợp các nguyên tắc thiết kế nhằm mục đích gì?
A. Tăng tốc độ thực thi của chương trình.
B. Giảm kích thước bộ nhớ sử dụng.
C. Giúp tạo ra các hệ thống dễ bảo trì, dễ mở rộng, và có tính linh hoạt cao.
D. Làm cho chương trình khó hiểu hơn.
34. 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. Tăng hiệu suất thực thi của chương trình.
B. Giảm thiểu sử dụng bộ nhớ.
C. Che giấu thông tin và bảo vệ dữ liệu khỏi truy cập trái phép, đồng thời cho phép kiểm soát việc truy cập và sửa đổi dữ liệu.
D. Đơn giản hóa việc gỡ lỗi.
35. Interface (giao diện) trong lập trình hướng đối tượng là gì?
A. Một lớp trừu tượng không có phương thức.
B. Một bản thiết kế chỉ định các phương thức mà một lớp phải thực hiện, không chứa bất kỳ triển khai cụ thể nào, giúp đảm bảo tính nhất quán trong hành vi của các lớp khác nhau.
C. Một biến toàn cục.
D. Một hàm đặc biệt dùng để khởi tạo đối tượng.
36. Sự khác biệt chính giữa interface và abstract class là gì?
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 có thể kế thừa nhiều interface, nhưng chỉ có thể kế thừa một abstract class, đồng thời interface chỉ định nghĩa hành vi, còn abstract class có thể định nghĩa cả hành vi và trạng thái.
C. Abstract class có thể chứa các biến tĩnh, còn interface thì không.
D. Không có sự khác biệt nào, chúng là hai khái niệm tương đương.
37. 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 của chương trình.
B. Giảm kích thước bộ nhớ sử dụng.
C. Tái sử dụng mã, dễ bảo trì, dễ mở rộng, và mô hình hóa thế giới thực một cách tự nhiên hơn.
D. Làm cho chương trình khó hiểu hơn.
38. Khi nào nên sử dụng lập trình hướng đối tượng?
A. Khi chương trình rất nhỏ và đơn giản.
B. Khi cần xây dựng các hệ thống phức tạp, có nhiều thành phần tương tác với nhau, và cần khả năng tái sử dụng và mở rộng mã.
C. Khi cần tối ưu hóa hiệu suất đến mức tối đa.
D. Khi không có yêu cầu về bảo trì và mở rộng.
39. Trong UML, ký hiệu nào thường được sử dụng để biểu diễn mối quan hệ kế thừa?
A. Đường thẳng liền nét.
B. Đường thẳng đứt nét.
C. Đường thẳng có mũi tên rỗng ở đầu, chỉ từ lớp con đến lớp cha.
D. Đường thẳng có mũi tên đặc ở đầu.
40. Trong lập trình hướng đối tượng, ‘class’ (lớp) 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, định nghĩa các thuộc tính và phương thức mà các đối tượng sẽ có.
C. Một biến toàn cục.
D. Một hàm đặc biệt dùng để khởi tạo đối tượng.
41. 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 ghi đè một phương thức trong lớp con.
B. Việc định nghĩa nhiều phương thức trong cùng một lớp có cùng tên nhưng khác nhau về số lượng hoặc kiểu dữ liệu của các tham số, cho phép thực hiện các hành động tương tự với các dữ liệu khác nhau.
C. Việc ẩn một phương thức trong lớp cha.
D. Việc tạo ra một đối tượng mới từ một đối tượng đã tồn tại.
42. Trong lập trình hướng đối tượng, ‘method overriding’ (ghi đè phương thức) là gì?
A. Việc định nghĩa nhiều phương thức trong cùng một lớp có cùng tên.
B. Việc định nghĩa lại một phương thức trong lớp con có cùng tên, kiểu trả về và danh sách tham số với phương thức trong lớp cha, cho phép lớp con cung cấp một triển khai cụ thể hơn.
C. Việc ẩn một phương thức trong lớp cha.
D. Việc tạo ra một đối tượng mới từ một đối tượng đã tồn tại.
43. Đặc điểm nào sau đây là quan trọng nhất của tính kế thừa trong lập trình hướng đối tượng?
A. Cho phép tạo ra các đối tượng độc lập.
B. Cho phép một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác, giúp tái sử dụng mã và xây dựng hệ thống phân cấp lớp.
C. Tăng tính bảo mật của dữ liệu.
D. Giảm độ phức tạp của chương trình.
44. 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 chứa các đối tượng khác.
B. Một mối quan hệ giữa hai lớp, trong đó các đối tượng của một lớp có thể sử dụng các đối tượng của lớp khác, nhưng không có sự sở hữu hoặc phụ thuộc mạnh mẽ.
C. Một mối quan hệ trong đó một lớp kế thừa từ lớp khác.
D. Một mối quan hệ trong đó một đối tượng thuộc về một lớp duy nhất.
45. Destructor (hàm hủy) trong lập trình hướng đối tượng là gì?
A. Một hàm dùng để tạo một đối tượng.
B. Một hàm đặc biệt được gọi tự động khi một đối tượng không còn được sử dụng nữa, dùng để giải phóng bộ nhớ và tài nguyên mà đối tượng đã sử dụng.
C. Một hàm dùng để truy cập các thuộc tính của đối tượng.
D. Một hàm dùng để thay đổi kiểu dữ liệu của đối tượng.
46. Sự khác biệt chính giữa method overloading và method overriding là gì?
A. Method overloading xảy ra trong cùng một lớp, còn method overriding xảy ra giữa lớp cha và lớp con.
B. Method overriding xảy ra trong cùng một lớp, còn method overloading xảy ra giữa lớp cha và lớp con.
C. Method overloading liên quan đến việc thay đổi kiểu trả về của phương thức, còn method overriding thì không.
D. Không có sự khác biệt nào, chúng là hai khái niệm tương đương.
47. Sự khác biệt chính giữa aggregation và composition là gì?
A. Aggregation là một mối quan hệ yếu hơn composition, trong đó các đối tượng thành phần có thể tồn tại độc lập, còn trong composition, các đối tượng thành phần phụ thuộc vào đối tượng chứa và không thể tồn tại nếu đối tượng chứa bị hủy.
B. Composition là một mối quan hệ yếu hơn aggregation.
C. Aggregation chỉ áp dụng cho các kiểu dữ liệu nguyên thủy, còn composition áp dụng cho các đối tượng.
D. Không có sự khác biệt nào, chúng là hai khái niệm tương đương.
48. Nhược điểm tiềm ẩn của việc sử dụng lập trình hướng đối tượng là gì?
A. Khó tái sử dụng mã.
B. Khó bảo trì.
C. Độ phức tạp tăng lên, có thể dẫn đến hiệu suất kém hơn nếu không được thiết kế cẩn thận.
D. Không thể mô hình hóa thế giới thực.
49. Trong lập trình hướng đối tượng, ‘static member’ (thành viên tĩnh) là gì?
A. Một thành viên chỉ có thể được truy cập bởi các đối tượng của lớp.
B. Một thành viên thuộc về lớp chứ không phải là một đối tượng cụ thể của lớp, và có thể được truy cập trực tiếp thông qua tên lớp.
C. Một thành viên không thể thay đổi giá trị.
D. Một thành viên chỉ có thể được truy cập trong nội bộ lớp.
50. Nguyên tắc Single Responsibility Principle (SRP) trong SOLID nói về điều gì?
A. Một lớp chỉ nên có một lý do duy nhất để thay đổi.
B. Một lớp nên mở để mở rộng, nhưng đóng để sửa đổi.
C. Các lớp con 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.
D. Nhiều interface đặc thù tốt hơn là một interface đa năng.
51. Phương thức ảo (virtual method) trong lập trình hướng đối tượng được sử dụng để làm gì?
A. Ngăn chặn việc kế thừa một lớp.
B. Cho phép một phương thức trong lớp con ghi đè (override) phương thức cùng tên trong lớp cha, thể hiện tính đa hình.
C. Tăng tốc độ thực thi của chương trình.
D. Giảm kích thước bộ nhớ sử dụng.
52. Constructor (hàm tạo) trong lập trình hướng đối tượng là gì?
A. Một hàm dùng để xóa một đối tượng.
B. Một hàm đặc biệt được gọi tự động khi một đối tượng của lớp được tạo ra, dùng để khởi tạo các thuộc tính của đối tượng.
C. Một hàm dùng để truy cập các thuộc tính của đối tượng.
D. Một hàm dùng để thay đổi kiểu dữ liệu của đối tượng.
53. 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 chứa các đối tượng khác.
B. Một dạng đặc biệt của association, thể hiện mối quan hệ ‘has-a’ (có một), 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 thành phần có thể tồn tại độc lập nếu đối tượng chứa bị hủy.
C. Một mối quan hệ trong đó một lớp kế thừa từ lớp khác.
D. Một mối quan hệ trong đó một đối tượng thuộc về một lớp duy nhất.
54. Trong UML (Unified Modeling Language), ký hiệu nào thường được sử dụng để biểu diễn một lớp?
A. Hình tròn.
B. Hình thoi.
C. Hình chữ nhật, chia thành ba phần: tên lớp, thuộc tính và phương thức.
D. Đường thẳng.
55. Trong lập trình hướng đối tượng, ‘composition’ (hợp thành) là gì?
A. Một mối quan hệ lỏng lẻo giữa hai lớp.
B. Một dạng mạnh mẽ của aggregation, thể hiện mối quan hệ ‘part-of’ (là một phần của), trong đó một lớp chứa các đối tượng của lớp khác và các đối tượng thành phần không thể tồn tại nếu đối tượng chứa bị hủy.
C. Một mối quan hệ trong đó một lớp kế thừa từ lớp khác.
D. Một mối quan hệ trong đó một đối tượng thuộc về một lớp duy nhất.
56. Phương thức (method) trong lập trình hướng đối tượng là gì?
A. Một biến được định nghĩa trong một lớp.
B. Một hàm được định nghĩa trong một lớp và thực hiện các hành động trên đối tượng của lớp đó.
C. Một kiểu dữ liệu đặc biệt.
D. Một từ khóa dùng để khai báo biến.
57. Abstract class (lớp trừu tượng) trong lập trình hướng đối tượng là gì?
A. Một lớp không thể có thuộc tính.
B. Một lớp không thể được khởi tạo trực tiếp, thường chứa các phương thức trừu tượng (abstract method) mà các lớp con phải triển khai, dùng để định nghĩa một khuôn mẫu chung cho các lớp con.
C. Một lớp chỉ chứa các biến tĩnh.
D. Một lớp không thể kế thừa từ lớp khác.
58. Trong lập trình hướng đối tượng, ‘inheritance’ (tính kế thừa) giúp:
A. Giảm kích thước của chương trình.
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, từ đó tái sử dụng mã và xây dựng hệ thống phân cấp các lớp.
C. Tăng tốc độ thực thi của chương trình.
D. Làm cho chương trình khó hiểu hơn.
59. Thuộc tính (attribute) trong lập trình hướng đối tượng là gì?
A. Một hàm được định nghĩa trong một lớp.
B. Một biến được định nghĩa trong một lớp và lưu trữ dữ liệu về đối tượng của lớp đó.
C. Một kiểu dữ liệu đặc biệt.
D. Một từ khóa dùng để khai báo hàm.
60. Tính đa hình (polymorphism) trong lập trình hướng đối tượng cho phép điều gì?
A. Tạo ra các đối tượng có kích thước khác nhau.
B. Các đối tượng thuộc các lớp khác nhau có thể được xử lý thông qua một giao diện chung, cho phép thực hiện các hành động khác nhau tùy thuộc vào kiểu đối tượng thực tế.
C. Giới hạn số lượng đối tượng được tạo ra.
D. Tăng tốc độ biên dịch chương trình.
61. Trong C#, sự khác biệt giữa ‘struct’ và ‘class’ là gì?
A. Struct là kiểu tham chiếu (reference type), còn class là kiểu giá trị (value type).
B. Struct và class hoàn toàn giống nhau.
C. Struct là kiểu giá trị (value type), còn class là kiểu tham chiếu (reference type).
D. Class không thể có phương thức, còn struct thì có thể.
62. Trong lập trình hướng đối tượng, ‘coupling’ (tính liên kết) và ‘cohesion’ (tính gắn kết) là gì và chúng ảnh hưởng đến thiết kế như thế nào?
A. Coupling là mức độ các phần tử bên trong một lớp liên quan đến nhau, còn cohesion là mức độ phụ thuộc giữa các lớp.
B. Coupling là mức độ phụ thuộc giữa các lớp, còn cohesion là mức độ các phần tử bên trong một lớp liên quan đến nhau.
C. Coupling và cohesion là hai khái niệm hoàn toàn giống nhau.
D. Coupling và cohesion không ảnh hưởng đến thiết kế hướng đối tượng.
63. Trong lập trình hướng đối tượng, nguyên tắc ‘Dependency Inversion Principle’ (DIP) nói về điều gì?
A. Các lớp con phải có thể thay thế cho 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ỗi lớp chỉ nên có một trách nhiệm duy nhất.
C. Các module cấp cao không nên phụ thuộc vào các module cấp thấp, cả hai nên phụ thuộc vào abstraction.
D. Các interface cụ thể không nên ép buộc client phải phụ thuộc vào các phương thức mà chúng không sử dụng.
64. Trong OOP, ‘lớp’ (class) và ‘đối tượng’ (object) có mối quan hệ như thế nào?
A. Lớp là một thể hiện cụ thể 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 của bản thiết kế đó.
C. Lớp là một bản thiết kế, còn đối tượng là một thể hiện của bản thiết kế đó.
D. Lớp và đối tượng là hai khái niệm hoàn toàn độc lập và không liên quan đến nhau.
65. Phương pháp nào sau đây được sử dụng để ẩn các chi tiết triển khai bên trong một lớp và chỉ hiển thị giao diện cần thiết cho người dùng?
A. Kế thừa (Inheritance)
B. Đa hình (Polymorphism)
C. Đóng gói (Encapsulation)
D. Trừu tượng (Abstraction)
66. Phương thức trừu tượng (abstract method) là gì?
A. Một phương thức không có tham số.
B. Một phương thức chỉ được khai báo mà không có triển khai trong lớp cha, và phải được triển khai trong lớp con.
C. Một phương thức không thể được gọi từ bên ngoài lớp.
D. Một phương thức chỉ có thể được gọi một lần.
67. Trong ngữ cảnh của OOP, ‘overloading’ (nạp chồng) và ‘overriding’ (ghi đè) khác nhau như thế nào?
A. Overloading xảy ra khi một lớp con định nghĩa lại một phương thức đã có trong lớp cha, còn 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. Overriding xảy ra khi một lớp con định nghĩa lại một phương thức đã có trong lớp cha, còn 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ố.
C. Overloading và overriding là hai khái niệm hoàn toàn giống nhau.
D. Overloading và overriding không liên quan đến nhau.
68. Trong Java, phương thức nào được gọi tự động khi một đối tượng không còn được tham chiếu đến (garbage collected)?
A. finalize()
B. delete()
C. destroy()
D. collect()
69. 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 độ 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, đảm bảo tính đóng gói và bảo mật.
C. Để giảm kích thước của code.
D. Để loại bỏ hoàn toàn các lỗi trong chương trình.
70. Trong Python, phương thức nào được sử dụng để khởi tạo một đối tượng?
A. __init__()
B. __new__()
C. __create__()
D. __construct__()
71. Mục đích của ‘SOLID principles’ trong thiết kế hướng đối tượng là gì?
A. Tăng tốc độ thực thi chương trình.
B. Giảm kích thước của code.
C. Cải thiện tính dễ bảo trì, mở rộng và tái sử dụng của code.
D. Loại bỏ hoàn toàn các lỗi trong chương trình.
72. Trong lập trình hướng đối tượng, nguyên tắc ‘Single Responsibility Principle’ (SRP) nói về điều gì?
A. Các lớp con phải có thể thay thế cho 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ỗi lớp chỉ nên có một trách nhiệm duy nhất.
C. Các module cấp cao không nên phụ thuộc vào các module cấp thấp, cả hai nên phụ thuộc vào abstraction.
D. Các interface cụ thể không nên ép buộc client phải phụ thuộc vào các phương thức mà chúng không sử dụng.
73. Phương thức khởi tạo (constructor) trong một lớp có chức năng gì?
A. Hủy bỏ đối tượng khi nó không còn được sử dụng.
B. Khởi tạo các thuộc tính của đối tượng khi đối tượng được tạo ra.
C. Truy cập các thuộc tính riêng tư (private) của đối tượng.
D. Thực hiện các phép toán số học trên đối tượng.
74. Khi nào nên sử dụng ‘inheritance’ (kế thừa) thay vì ‘composition’ (tính hợp thành) trong thiết kế hướng đối tượng?
A. Khi muốn tái sử dụng code mà không tạo ra mối quan hệ ‘is-a’.
B. Khi muốn tạo ra mối quan hệ ‘has-a’ giữa các lớp.
C. Khi muốn tạo ra mối quan hệ ‘is-a’ giữa các lớp và lớp con cần truy cập các thành viên protected của lớp cha.
D. Khi muốn tránh sự phụ thuộc chặt chẽ giữa các lớp.
75. Trong C++, từ khóa nào được sử dụng để khai báo một lớp?
A. struct
B. object
C. class
D. instance
76. Trong ngữ cảnh của lập trình hướng đối tượng, thuật ngữ ‘interface’ (giao diện) thường được dùng để chỉ điều gì?
A. Một lớp trừu tượng chỉ định các phương thức mà các lớp khác phải thực hiện.
B. Một cách để kết nối với cơ sở dữ liệu.
C. Một thành phần giao diện người dùng đồ họa (GUI).
D. Một phương thức để bảo vệ dữ liệu khỏi bị truy cập trái phép.
77. Trong lập trình hướng đối tượng, nguyên tắc ‘Liskov Substitution Principle’ (LSP) nói về điều gì?
A. Các lớp con phải có thể thay thế cho 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ỗi lớp chỉ nên có một trách nhiệm duy nhất.
C. Các module cấp cao không nên phụ thuộc vào các module cấp thấp, cả hai nên phụ thuộc vào abstraction.
D. Các interface cụ thể không nên ép buộc client phải phụ thuộc vào các phương thức mà chúng không sử dụng.
78. Trong lập trình hướng đối tượng, ‘factory pattern’ (mẫu thiết kế 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. Để đóng gói các thuộc tính của đối tượng.
C. Để cung cấp một interface để tạo ra các đối tượng mà không cần chỉ định lớp cụ thể cần tạo.
D. Để quản lý vòng đời của đối tượng.
79. Điều gì xảy ra khi một lớp con (subclass) kế thừa từ một lớp cha (superclass)?
A. Lớp con không thể truy cập các thuộc tính và phương thức của lớp cha.
B. Lớp con tự động ghi đè tất cả các phương thức của lớp cha.
C. Lớp con kế thừa tất cả các thuộc tính và phương thức (trừ các thành phần private) của lớp cha.
D. Lớp con chỉ kế thừa các thuộc tính public của lớp cha.
80. Trong Java, từ khóa ‘final’ được sử dụng để làm gì?
A. Khai báo một biến không thể thay đổi giá trị sau khi khởi tạo, khai báo một phương thức không thể bị ghi đè bởi lớp con, hoặc khai báo một lớp không thể bị kế thừa.
B. Khai báo một biến có thể thay đổi giá trị bất cứ lúc nào.
C. Khai báo một phương thức có thể bị ghi đè bởi lớp con.
D. Khai báo một lớp có thể bị kế thừa.
81. Khi nào nên sử dụng tính trừu tượng (abstraction) trong lập trình hướng đối tượng?
A. Khi cần che giấu sự phức tạp của hệ thống và chỉ hiển thị các thông tin cần thiết.
B. Khi cần tăng hiệu suất của chương trình.
C. Khi cần tạo ra các đối tượng cụ thể và chi tiết.
D. Khi cần giảm kích thước của code.
82. Trong lập trình hướng đối tượng, ‘composition over inheritance’ là gì và tại sao nó được khuyến khích?
A. Một kỹ thuật để tăng tốc độ thực thi chương trình.
B. Một kỹ thuật để giảm kích thước của code.
C. Một nguyên tắc thiết kế khuyến khích sử dụng composition (tính hợp thành) thay vì inheritance (kế thừa) để tái sử dụng code, vì nó tạo ra các thiết kế linh hoạt hơn và ít phụ thuộc hơn.
D. Một nguyên tắc thiết kế khuyến khích sử dụng inheritance (kế thừa) thay vì composition (tính hợp thành) để tái sử dụng code, vì nó đơn giản hơn.
83. Trong lập trình hướng đối tượng, khi nào nên sử dụng ‘static method’ (phương thức tĩnh)?
A. Khi phương thức cần truy cập các thuộc tính của đối tượng.
B. Khi phương thức không cần truy cập bất kỳ thuộc tính nào của đối tượng và chỉ thực hiện một chức năng độc lập.
C. Khi phương thức cần được ghi đè bởi lớp con.
D. Khi phương thức cần được gọi từ bên ngoài lớp.
84. Khi một phương thức ‘protected’ được khai báo trong một lớp, nó có thể được truy cập từ đâu?
A. Chỉ từ bên trong lớp đó.
B. Từ bất kỳ đâu trong chương trình.
C. Từ bên trong lớp đó và từ các lớp con của nó.
D. Từ bên trong lớp đó, từ các lớp con của nó và từ các lớp khác trong cùng một package (trong Java).
85. 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 là một loại kế thừa đặc biệt.
B. Inheritance 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, trong khi composition tạo ra các đối tượng bằng cách kết hợp các đối tượng khác.
C. Composition 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, trong khi inheritance tạo ra các đối tượng bằng cách kết hợp các đối tượng khác.
D. Composition và inheritance là hoàn toàn giống nhau.
86. Trong lập trình hướng đối tượng, nguyên tắc ‘Interface Segregation Principle’ (ISP) nói về điều gì?
A. Các lớp con phải có thể thay thế cho 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ỗi lớp chỉ nên có một trách nhiệm duy nhất.
C. Các module cấp cao không nên phụ thuộc vào các module cấp thấp, cả hai nên phụ thuộc vào abstraction.
D. Các interface cụ thể không nên ép buộc client phải phụ thuộc vào các phương thức mà chúng không sử dụng.
87. Trong lập trình hướng đối tượng, tính chất nào cho phép một đối tượng thuộc lớp con có thể được sử dụng thay thế cho một đối tượng thuộc lớp cha?
A. Tính đóng gói (Encapsulation)
B. Tính kế thừa (Inheritance)
C. Tính đa hình (Polymorphism)
D. Tính trừu tượng (Abstraction)
88. Đặc điểm nào sau đây KHÔNG phải là một lợi ích của việc sử dụng lập trình hướng đối tượng (OOP)?
A. Giảm độ phức tạp của code bằng cách chia nhỏ vấn đề thành các đối tượng.
B. Tăng tính tái sử dụng code thông qua kế thừa và tính đa hình.
C. Cải thiện hiệu suất chương trình do OOP luôn tối ưu hóa việc sử dụng bộ nhớ.
D. Dễ dàng bảo trì và mở rộng code nhờ tính đóng gói và trừu tượng.
89. Lợi ích chính 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 độ thực thi chương trình.
B. Giải quyết các vấn đề thiết kế thường gặp một cách hiệu quả và đã được kiểm chứng.
C. Giảm kích thước của code.
D. Loại bỏ hoàn toàn các lỗi trong chương trình.
90. Lớp trừu tượng (abstract class) khác với interface (giao diện) như thế nào?
A. Lớp trừu tượng không thể chứa các phương thức trừu tượng.
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 có thể chứa cả các phương thức đã được triển khai và các phương thức trừu tượng, trong khi interface chỉ chứa các phương thức trừu tượng.
D. Lớp trừu tượng không thể được kế thừa.
91. Phương thức nào sau đây được tự động gọi khi một đối tượng được tạo ra từ một lớp?
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.
92. Phương pháp nào sau đây được sử dụng để che giấu dữ liệu 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 kế thừa (Inheritance).
B. Tính đóng gói (Encapsulation).
C. Tính đa hình (Polymorphism).
D. Tính trừu tượng (Abstraction).
93. Trong lập trình hướng đối tượng, nguyên tắc ‘Open/Closed Principle’ (OCP) nói về điều gì?
A. Các lớp nên được mở để mở rộng, nhưng đóng để sửa đổi.
B. Các lớp nên được đóng để mở rộng, nhưng mở để sửa đổi.
C. Các lớp nên được mở để cả mở rộng và sửa đổi.
D. Các lớp nên được đóng để cả mở rộng và sửa đổi.
94. Trong lập trình hướng đối tượng, sự khác biệt chính giữa ‘overloading’ (nạp chồng) và ‘overriding’ (ghi đè) 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, còn ‘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ố, còn ‘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’ là một hình thức của tính đa hình, còn ‘overriding’ là một hình thức của tính kế thừa.
D. ‘Overloading’ chỉ có thể xảy ra trong cùng một lớp, còn ‘overriding’ chỉ có thể xảy ra giữa lớp cha và lớp con.
95. Từ khóa nào sau đây thường được sử dụng để thể hiện tính kế thừa trong các ngôn ngữ lập trình hướng đối tượng?
A. implements
B. extends
C. new
D. class
96. Trong lập trình hướng đối tượng, nguyên tắc ‘Single Responsibility Principle’ (SRP) nói về điều gì?
A. Mỗi lớp chỉ nên có một trách nhiệm duy nhất.
B. Mỗi phương thức chỉ nên có một tham số duy nhất.
C. Mỗi đối tượng chỉ nên có một kiểu dữ liệu duy nhất.
D. Mỗi chương trình chỉ nên có một lớp duy nhất.
97. Trong lập trình hướng đối tượng, ‘cohesion’ (sự gắn kết) đề cập đến điều gì?
A. Mức độ liên kết giữa các lớp trong một hệ thống.
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. Số lượng các lớp trong một hệ thống.
D. Mức độ phức tạp của một lớp.
98. Ưu điểm chính 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. Giảm thiểu số lượng code cần viết.
B. 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.
C. Tăng tốc độ thực thi của chương trình.
D. Tự động tạo ra tài liệu cho code.
99. Khi nào nên sử dụng ‘abstract method’ (phương thức trừu tượng) trong một lớp?
A. Khi bạn muốn cung cấp một triển khai mặc định cho một phương thức.
B. Khi bạn muốn 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. Khi bạn muốn phương thức có thể được gọi mà không cần tạo ra một đối tượng của lớp.
D. Khi bạn muốn phương thức có thể được truy cập từ bên ngoài lớp.
100. Trong ngữ cảnh của lập trình hướng đối tượng, ‘composition’ (tập hợp) là gì?
A. Một cách để tạo ra các lớp mới từ các lớp đã có.
B. Một mối quan hệ ‘là một’ giữa các đối tượng, trong đó một đối tượng chứa các đối tượng khác.
C. Một cơ chế để thực hiện tính đa hình.
D. Một kỹ thuật để che giấu dữ liệu.
101. Khi thiết kế một hệ thống hướng đối tượng, điều gì quan trọng nhất cần xem xét để đảm bảo tính bảo trì và mở rộng của hệ thống?
A. Sử dụng càng nhiều lớp càng tốt.
B. Tuân thủ các nguyên tắc SOLID và sử dụng các mẫu thiết kế phù hợp.
C. Viết code càng ngắn gọn càng tốt.
D. Sử dụng càng nhiều thuộc tính ‘private’ (riêng tư) càng tốt.
102. Trong lập trình hướng đối tượng, ‘abstract class’ (lớp trừu tượng) là gì?
A. Một lớp không thể có bất kỳ thuộc tính nào.
B. Một lớp không thể tạo ra bất kỳ đối tượng nào.
C. Một lớp phải chứa ít nhất một phương thức trừu tượng (abstract method).
D. Một lớp không thể được kế thừa.
103. Trong lập trình hướng đối tượng, ‘aggregation’ (tổng hợp) là gì?
A. Một mối quan hệ mạnh mẽ, trong đó một đối tượng sở hữu các đối tượng khác và các đối tượng này không thể tồn tại nếu không có đối tượng chứa.
B. Một mối quan hệ yếu, trong đó một đối tượng chứa các đối tượng khác, nhưng các đối tượng này có thể tồn tại độc lập.
C. Một cách để tạo ra các lớp mới từ các lớp đã có.
D. Một cơ chế để thực hiện tính đa hình.
104. Trong lập trình hướng đối tượng, tính chất nào cho phép một đối tượng thuộc lớp con có thể thay thế cho đối tượng thuộc lớp cha?
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).
105. Khi một lớp con kế thừa từ một lớp cha, điều gì sẽ xảy ra với các thuộc tính và phương thức ‘private’ (riêng tư) của lớp cha?
A. Chúng sẽ được kế thừa và có thể được truy cập trực tiếp từ lớp con.
B. Chúng sẽ được kế thừa, nhưng chỉ có thể được truy cập thông qua các phương thức ‘public’ (công khai) của lớp cha.
C. Chúng sẽ không được kế thừa.
D. Chúng sẽ được tự động chuyển thành ‘protected’ (bảo vệ).
106. Đặ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ính tái sử dụng của code.
B. Tính dễ bảo trì và mở rộng.
C. Tăng tính phức tạp của code.
D. Tính đóng gói và che giấu thông tin.
107. Mục đích chính của việc sử dụng các phương thức ‘getter’ và ‘setter’ là gì?
A. Để tăng tốc độ truy cập vào các thuộc tính của đối tượng.
B. Để kiểm soát việc truy cập và sửa đổi các thuộc tính của đối tượng, đảm bảo tính đóng gói.
C. Để giảm thiểu số lượng code cần viết.
D. Để tự động tạo ra tài liệu cho code.
108. Trong lập trình hướng đối tượng, thuật ngữ ‘coupling’ (kết nối) đề cập đến điều gì?
A. Mức độ liên kết giữa các thuộc tính của một đối tượng.
B. Mức độ phụ thuộc giữa các lớp hoặc các module trong một hệ thống.
C. Số lượng các phương thức trong một lớp.
D. Mức độ che giấu thông tin trong một lớp.
109. Trong lập trình hướng đối tượng, nguyên tắc ‘Liskov Substitution Principle’ (LSP) nói về đ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. Các lớp cha phải có thể thay thế các lớp con của chúng mà không làm thay đổi tính đúng đắn của chương trình.
C. Các lớp phải có thể thay thế lẫn nhau mà không làm thay đổi tính đúng đắn của chương trình.
D. Các đối tượng phải có thể thay thế lẫn nhau mà không làm thay đổi tính đúng đắn của chương trình.
110. Khi nào nên sử dụng một phương thức ‘static’ (tĩnh) trong một lớp?
A. Khi bạn muốn phương thức có thể truy cập các thuộc tính ‘private’ (riêng tư) của lớp.
B. Khi bạn muốn phương thức có thể được gọi mà không cần tạo ra một đối tượng của lớp.
C. Khi bạn muốn phương thức có thể được ghi đè (override) bởi các lớp con.
D. Khi bạn muốn phương thức có thể được gọi từ bên ngoài lớp.
111. Trong lập trình hướng đối tượng, ‘delegation’ (ủy quyền) là gì?
A. Một cách để tạo ra các đối tượng mới từ các đối tượng đã có.
B. Một mẫu thiết kế trong đó 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.
C. Một cơ chế để thực hiện tính đa hình.
D. Một kỹ thuật để che giấu dữ liệu.
112. Trong lập trình hướng đối tượng, ‘interface’ (giao diện) được sử dụng để làm gì?
A. Định nghĩa các thuộc tính của một đối tượng.
B. Cung cấp một bản thiết kế cho các lớp thực hiện nó, chỉ định các phương thức mà lớp phải triển khai.
C. Tạo ra các đối tượng cụ thể từ một lớp.
D. Che giấu dữ liệu bên trong một lớp.
113. Trong lập trình hướng đối tượng, ‘mixin’ là gì?
A. Một lớp chỉ chứa các phương thức ‘static’ (tĩnh).
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 lớp không thể tạo ra bất kỳ đối tượng nào.
D. Một lớp chỉ chứa các thuộc tính ‘private’ (riêng tư).
114. 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 chứa các đố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 sở hữu nhau.
C. Một cách để tạo ra các lớp mới từ các lớp đã có.
D. Một cơ chế để thực hiện tính đa hình.
115. Điều gì xảy ra khi bạn gọi một phương thức ‘virtual’ (ảo) trong lớp cha trên một đối tượng của lớp con đã ghi đè (override) phương thức đó?
A. Phương thức trong lớp cha sẽ được thực thi.
B. Phương thức trong lớp con sẽ được thực thi.
C. Một lỗi sẽ xảy ra.
D. Phương thức nào được thực thi là ngẫu nhiên.
116. Trong lập trình hướng đối tượng, nguyên tắc ‘Dependency Inversion Principle’ (DIP) nói về điều gì?
A. Các module cấp cao không nên phụ thuộc vào các module cấp thấp, cả hai nên phụ thuộc vào abstraction.
B. Các module cấp thấp không nên phụ thuộc vào các module cấp cao, cả hai nên phụ thuộc vào abstraction.
C. Các module cấp cao nên phụ thuộc vào các module cấp thấp.
D. Các module cấp thấp nên phụ thuộc vào các module cấp cao.
117. Khi nào nên sử dụng tính kế thừa (inheritance) thay vì tính tập hợp (composition) trong thiết kế hướng đối tượng?
A. Khi bạn muốn tái sử dụng code từ một lớp khác mà không muốn tạo ra mối quan hệ ‘là một’.
B. Khi bạn muốn tạo ra một mối quan hệ ‘là một’ mạnh mẽ giữa các lớp.
C. Khi bạn muốn một lớp con có thể thay thế cho lớp cha của nó (đa hình).
D. Khi bạn muốn che giấu dữ liệu một cách hiệu quả.
118. Phương thức nào sau đây cho phép một lớp con ghi đè (override) một phương thức đã được định nghĩa trong lớp cha?
A. Phương thức nạp chồng (overload).
B. Phương thức ghi đè (override).
C. Phương thức trừu tượng (abstract).
D. Phương thức tĩnh (static).
119. Điều gì xảy ra khi bạn cố gắng truy cập một thuộc tính ‘private’ (riêng tư) của một lớp từ bên ngoài lớp đó?
A. Thuộc tính sẽ được trả về với giá trị mặc định.
B. Một lỗi biên dịch hoặc lỗi runtime sẽ xảy ra.
C. Thuộc tính sẽ được tự động chuyển thành ‘public’ (công khai).
D. Giá trị của thuộc tính sẽ được trả về, nhưng một cảnh báo sẽ được hiển thị.
120. Trong lập trình hướng đối tượng, nguyên tắc ‘Interface Segregation Principle’ (ISP) nói về điều gì?
A. Các lớp không nên bị ép buộc phải phụ thuộc vào các phương thức mà chúng không sử dụng.
B. Các lớp nên có nhiều interface hơn là một interface lớn.
C. Các interface nên được thiết kế sao cho dễ dàng mở rộng.
D. Các interface nên được thiết kế sao cho dễ dàng sửa đổi.
121. Phương pháp nào sau đây thường được sử dụng để che giấu thông tin chi tiết bên trong của một lớp và chỉ hiển thị giao diện cần thiết cho người dùng?
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
122. Trong lập trình hướng đối tượng, ‘association’ (kết hợp) là gì?
A. Một lớp kế thừa từ một lớp khác.
B. Một mối quan hệ giữa hai lớp, trong đó cả hai lớp có thể tồn tại độc lập.
C. Một lớp chứa các đối tượng của các lớp khác.
D. Một cách để che giấu dữ liệu bên trong một lớp.
123. Trong lập trình hướng đối tượng, ‘destructor’ (hàm hủy) là gì?
A. Một phương thức được sử dụng để tạo một đối tượng.
B. Một phương thức đặc biệt được gọi tự động khi một đối tượng bị hủy, thường được sử dụng để giải phóng tài nguyên mà đối tượng đang sử dụng.
C. Một phương thức được sử dụng để che giấu dữ liệu bên trong một lớp.
D. Một phương thức được sử dụng để kế thừa từ một lớp khác.
124. Trong lập trình hướng đối tượng, ‘factory pattern’ (mẫu thiết kế 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. Để che giấu dữ liệu bên trong một lớp.
C. Để 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.
D. Để kế thừa từ nhiều lớp khác nhau.
125. 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 đa hình
B. Tính đóng gói
C. Tính kế thừa
D. Tính trừu tượng
126. Trong lập trình hướng đối tượng, ‘composition’ (tính hợp thành) là gì?
A. Một lớp kế thừa từ nhiều lớp khác.
B. Một lớp chứa các đối tượng của các lớp khác như là các thành viên của nó.
C. Một phương thức có thể thực hiện nhiều hành động khác nhau.
D. Một cách để che giấu dữ liệu bên trong một lớp.
127. Trong lập trình hướng đối tượng, ‘singleton pattern’ (mẫu thiết kế singleton) được sử dụng để làm gì?
A. Để tạo ra nhiều đối tượng từ một lớp.
B. Để đảm bảo rằng một lớp chỉ có một đối tượng duy nhất được tạo ra.
C. Để che giấu dữ liệu bên trong một lớp.
D. Để kế thừa từ nhiều lớp khác nhau.
128. Phương pháp nào sau đây giúp giảm sự phức tạp của hệ thống bằng cách chia nhỏ nó thành các phần nhỏ hơn, độc lập hơn?
A. Tính kế thừa
B. Tính đóng gói
C. Tính trừu tượng
D. Tính module hóa
129. Khi nào nên sử dụng tính kế thừa (inheritance) trong lập trình hướng đối tượng?
A. Khi bạn muốn tạo ra một lớp hoàn toàn mới không liên quan đến các lớp hiện có.
B. Khi bạn muốn tạo ra một lớp có chung một số thuộc tính và phương thức với một lớp khác, nhưng cũng có thêm các thuộc tính và phương thức riêng.
C. Khi bạn muốn che giấu dữ liệu bên trong một lớp.
D. Khi bạn muốn tạo ra nhiều đối tượng từ một lớp.
130. Trong một hệ thống quản lý bán hàng, bạn cần tính toán tổng giá trị đơn hàng dựa trên các sản phẩm đã chọn. Phương pháp nào sau đây thể hiện tính đa hình tốt nhất?
A. Sử dụng một hàm tính toán duy nhất cho tất cả các loại sản phẩm.
B. Sử dụng câu lệnh switch để xác định loại sản phẩm và tính toán giá trị tương ứng.
C. Định nghĩa một phương thức ‘tinh_gia’ trong mỗi lớp sản phẩm, và gọi phương thức này trên đối tượng sản phẩm.
D. Sử dụng một biến toàn cục để lưu trữ giá trị của từng loại sản phẩm.
131. Nguyên tắc ‘Open/Closed Principle’ (OCP) trong SOLID nói về điều gì?
A. Phần mềm nên được mở để mở rộng, nhưng đóng để sửa đổi.
B. Phần mềm nên được đóng để mở rộng, nhưng mở để sửa đổi.
C. Phần mềm nên được mở cho cả mở rộng và sửa đổi.
D. Phần mềm nên được đóng cho cả mở rộng và sửa đổi.
132. Đặ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ính trừu tượng
B. Tính đóng gói
C. Tăng độ phức tạp của code
D. Tính kế thừa
133. Trong lập trình hướng đối tượng, ‘polymorphism’ (tính đa hình) 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ể thực hiện nhiều hành động khác nhau tùy thuộc vào đố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.
134. Ưu điểm chính của việc sử dụng ‘dependency injection’ (DI) là gì?
A. Tăng hiệu suất của chương trình.
B. Giảm kích thước code.
C. Giúp 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ử của code.
D. Che giấu dữ liệu bên trong các lớp.
135. Nguyên tắc ‘Single Responsibility Principle’ (SRP) trong SOLID nói về điều gì?
A. Mỗi lớp chỉ nên có một lý do duy nhất để thay đổi.
B. Một lớp nên có nhiều trách nhiệm để tối ưu hóa hiệu suất.
C. Tất cả các lớp nên kế thừa từ một lớp cha duy nhất.
D. Một phương thức chỉ nên có một tham số duy nhất.
136. Trong ngữ cảnh 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, Intuitive, Detailed.
C. Structured, Organized, লিঙ্কable, Integrated, Defined.
D. Safe, Operational, লিঙ্কed, Intelligent, Dynamic.
137. Nguyên tắc ‘Dependency Inversion Principle’ (DIP) trong SOLID nói về điều gì?
A. Các module cấp cao không nên phụ thuộc vào các module cấp thấp. Cả hai nên phụ thuộc vào các abstraction.
B. Các module cấp thấp không nên phụ thuộc vào các module cấp cao. Cả hai nên phụ thuộc vào các abstraction.
C. Các module cấp cao nên phụ thuộc trực tiếp vào các module cấp thấp.
D. Các module cấp thấp nên phụ thuộc trực tiếp vào các module cấp cao.
138. Trong lập trình hướng đối tượng, ‘constructor’ (hàm tạo) là gì?
A. Một phương thức được sử dụng để xóa một đối tượng.
B. Một phương thức đặc biệt được gọi tự động khi một đối tượng được tạo ra, thường được sử dụng để khởi tạo các thuộc tính của đối tượng.
C. Một phương thức được sử dụng để che giấu dữ liệu bên trong một lớp.
D. Một phương thức được sử dụng để kế thừa từ một lớp khác.
139. Nguyên tắc ‘Liskov Substitution Principle’ (LSP) trong SOLID nói về điều gì?
A. Các lớp con phải có thể thay thế cho 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. Các lớp cha phải có thể thay thế cho các lớp con của chúng mà không làm thay đổi tính đúng đắn của chương trình.
C. Các lớp con không được phép thay thế cho các lớp cha của chúng.
D. Các lớp cha không được phép thay thế cho các lớp con của chúng.
140. 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. Giảm kích thước code.
B. Tăng tốc độ thực thi của chương trình.
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, giúp tăng tính tái sử dụng, bảo trì và mở rộng của code.
D. Che giấu dữ liệu bên trong các lớp.
141. Trong lập trình hướng đối tượng, ‘abstract class’ (lớp trừu tượng) là gì?
A. Một lớp không có thuộc tính.
B. Một lớp không có phương thức.
C. Một lớp không thể tạo ra đối tượng (instance) trực tiếp, mà chỉ có thể được kế thừa.
D. Một lớp có thể tạo ra vô số đối tượng (instance).
142. Khi thiết kế một hệ thống quản lý thư viện, bạn nên sử dụng kỹ thuật nào để mô hình hóa mối quan hệ giữa ‘Sách’ và ‘Tác giả’?
A. Kế thừa (Inheritance)
B. Đa hình (Polymorphism)
C. Kết hợp (Association)
D. Đóng gói (Encapsulation)
143. Bạn cần tạo một hệ thống thông báo (notification) có thể gửi thông báo qua email, SMS và push notification. Mẫu thiết kế (design pattern) nào sau đây phù hợp nhất để xây dựng hệ thống này?
A. Singleton
B. Factory
C. Observer
D. Strategy
144. 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ương thức trong một lớp liên quan đến nhau và tập trung vào một mục đích duy nhất.
B. Mức độ mà một lớp phụ thuộc vào các lớp khác.
C. Mức độ mà một lớp có thể che giấu dữ liệu bên trong nó.
D. Mức độ mà một lớp có thể kế thừa từ các lớp khác.
145. Đ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 khi phương thức đó được gọi trên một đối tượng của lớp con.
C. Phương thức của lớp cha và lớp con được gọi đồng thời.
D. Một lỗi biên dịch xảy ra.
146. 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 khác nhau phụ thuộc vào nhau.
B. Mức độ mà một lớp có thể tái sử dụng trong các dự án khác nhau.
C. Mức độ mà một lớp có thể che giấu dữ liệu bên trong nó.
D. Mức độ mà một lớp có thể kế thừa từ các lớp khác.
147. Nguyên tắc ‘Interface Segregation Principle’ (ISP) trong SOLID nói về điều gì?
A. Một lớp không nên bị buộc phải triển khai các phương thức mà nó không sử dụng.
B. Một lớp nên triển khai tất cả các phương thức của một interface.
C. Tất cả các interface nên được gộp lại thành một interface lớn duy nhất.
D. Một lớp chỉ nên có một interface duy nhất.
148. Khi nào nên sử dụng ‘aggregation’ (tập hợp) thay vì ‘composition’ (hợp thành) trong lập trình hướng đối tượng?
A. Khi đối tượng chứa có vòng đời phụ thuộc vào đối tượng được chứa.
B. Khi đối tượng được chứa có thể tồn tại độc lập với đối tượng chứa.
C. Khi cần che giấu dữ liệu bên trong một lớp.
D. Khi cần tạo ra nhiều đối tượng từ một lớp.
149. Mục đích chính của việc sử dụng ‘interface’ (giao diện) trong lập trình hướng đối tượng là gì?
A. Để che giấu dữ liệu bên trong một lớp.
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, đảm bảo tính nhất quán giữa các lớp khác nhau.
C. Để tạo ra các đối tượng (instance) của một lớp.
D. Để kế thừa từ nhiều lớp khác nhau.
150. Trong lập trình hướng đối tượng, ‘instance’ có nghĩa là gì?
A. Một lớp (class) được định nghĩa.
B. Một đối tượng (object) cụ thể được tạo ra từ một lớp.
C. Một phương thức (method) của một lớp.
D. Một thuộc tính (attribute) của một lớp.