Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình Hướng Đối Tượng - Đề 02 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong lập trình hướng đối tượng, khái niệm nào sau đây thể hiện khả năng một đối tượng thuộc lớp con có thể hành xử khác biệt so với đối tượng thuộc lớp cha khi cùng nhận một thông điệp?
- A. Tính đóng gói (Encapsulation)
- B. Tính trừu tượng (Abstraction)
- C. Tính đa hình (Polymorphism)
- D. Tính kế thừa (Inheritance)
Câu 2: Xét đoạn mã giả sau:
```
Class Animal {
public method Speak() {
print
- 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)
Câu 3: Mục đích chính của tính đóng gói (Encapsulation) 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. Che giấu thông tin và bảo vệ dữ liệu của đối tượng, kiểm soát truy cập
- C. Giảm dung lượng bộ nhớ sử dụng
- D. Cho phép tái sử dụng mã nguồn dễ dàng hơn
Câu 4: Trong OOP, "tính trừu tượng hóa" (Abstraction) được thể hiện qua việc nào sau đây?
- A. Chỉ cung cấp giao diện tương tác đơn giản với đối tượng, ẩn giấu chi tiết phức tạp bên trong
- B. Sao chép thuộc tính và phương thức từ lớp cha sang lớp con
- C. Cho phép một đối tượng có nhiều hình thức khác nhau
- D. Gộp nhóm dữ liệu và phương thức liên quan vào trong một đơn vị duy nhất
Câu 5: Phương thức khởi tạo (constructor) trong một lớp đối tượng thường được sử dụng để làm gì?
- A. Hủy bỏ đối tượng khi nó không còn được sử dụng
- B. Thực hiện các thao tác tính toán phức tạp
- C. Khởi tạo giá trị ban đầu cho các thuộc tính của đối tượng
- D. Truy cập và thay đổi giá trị của các thuộc tính private
Câu 6: Khi một lớp "Con mèo" kế thừa từ lớp "Động vật", lớp "Động vật" được gọi là:
- A. Lớp cơ sở (Base class)
- B. Lớp dẫn xuất (Derived class)
- C. Lớp giao diện (Interface class)
- D. Lớp trừu tượng (Abstract class)
Câu 7: Trong các ngôn ngữ OOP, phạm vi truy cập "private" của một thuộc tính hoặc phương thức có nghĩa là:
- A. Có thể truy cập từ bất kỳ đâu trong chương trình
- B. Chỉ có thể truy cập từ lớp con và lớp hiện tại
- C. Chỉ có thể truy cập từ bên trong lớp hiện tại
- D. Chỉ có thể truy cập từ các lớp cùng gói (package)
Câu 8: Lợi ích chính của việc sử dụng tính kế thừa trong OOP là gì?
- A. Tăng tính bảo mật cho dữ liệu
- B. Tái sử dụng mã nguồn và giảm sự trùng lặp code
- C. Nâng cao hiệu suất chương trình
- D. Đơn giản hóa việc thiết kế giao diện người dùng
Câu 9: Khái niệm nào trong OOP cho phép bạn định nghĩa một lớp "trừu tượng" mà không cần cung cấp đầy đủ cài đặt cho tất cả các phương thức, và các lớp con phải cung cấp cài đặt cụ thể cho các phương thức này?
- A. Lớp tĩnh (Static class)
- B. Lớp kín (Sealed class)
- C. Lớp nội (Inner class)
- D. Lớp trừu tượng (Abstract class)
Câu 10: "Đối tượng" (Object) trong OOP là gì?
- A. Một bản thiết kế hoặc khuôn mẫu cho các thực thể
- B. Một thể hiện cụ thể của một lớp, có trạng thái và hành vi
- C. Một tập hợp các lớp có liên quan đến nhau
- D. Một phương pháp lập trình không sử dụng lớp
Câu 11: Trong OOP, mối quan hệ "is-a" (là một) thường được thể hiện thông qua cơ chế nào?
- A. Tính đóng gói (Encapsulation)
- B. Tính trừu tượng (Abstraction)
- C. Tính đa hình (Polymorphism)
- D. Tính kế thừa (Inheritance)
Câu 12: Phương thức hủy (destructor) trong OOP thường được sử dụng để làm gì?
- A. Giải phóng tài nguyên mà đối tượng đã chiếm giữ khi đối tượng bị hủy
- B. Khởi tạo giá trị ban đầu cho các thuộc tính của đối tượng
- C. Thực hiện các thao tác trước khi đối tượng được tạo ra
- D. Thay đổi kiểu dữ liệu của đối tượng
Câu 13: Chọn phát biểu đúng về "đa kế thừa" (multiple inheritance) trong OOP:
- A. Đa kế thừa luôn được khuyến khích vì tăng tính tái sử dụng mã nguồn
- B. Đa kế thừa cho phép một lớp kế thừa từ nhiều lớp cha, nhưng có thể gây phức tạp và xung đột
- C. Đa kế thừa là một hình thức của tính đa hình
- D. Đa kế thừa và kế thừa đơn (single inheritance) không có sự khác biệt về bản chất
Câu 14: Trong OOP, "thông điệp" (message) thường được hiểu là:
- A. Dữ liệu được truyền giữa các đối tượng
- B. Tên của một lớp đối tượng
- C. Lời gọi một phương thức của một đối tượng
- D. Một biến toàn cục trong chương trình
Câu 15: "Tính module hóa" (Modularity) trong OOP được hỗ trợ bởi khái niệm nào?
- A. Lớp và đối tượng
- B. Tính đa hình
- C. Tính kế thừa
- D. Tính trừu tượng
Câu 16: Phương thức "getter" và "setter" thường được sử dụng để làm gì trong OOP?
- A. Tăng tốc độ truy cập thuộc tính
- B. Kiểm soát việc truy cập và sửa đổi các thuộc tính của đối tượng
- C. Tự động tạo ra các đối tượng mới
- D. Ẩn hoàn toàn các thuộc tính của đối tượng
Câu 17: Trong UML (Unified Modeling Language), biểu đồ lớp (class diagram) được sử dụng để mô hình hóa khía cạnh nào của hệ thống hướng đối tượng?
- A. Hành vi động của các đối tượng
- B. Quy trình xử lý dữ liệu
- C. Giao diện người dùng
- D. Cấu trúc tĩnh của các lớp và mối quan hệ giữa chúng
Câu 18: Nguyên tắc "SOLID" trong thiết kế hướng đối tượng là tập hợp các nguyên tắc hướng dẫn nào?
- A. Nguyên tắc kiểm thử phần mềm
- B. Nguyên tắc quản lý dự án
- C. Nguyên tắc thiết kế lớp và mối quan hệ giữa các lớp
- D. Nguyên tắc tối ưu hóa hiệu suất
Câu 19: Nguyên tắc "Liskov Substitution" 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. Các lớp con phải có thể thay thế lớp cha mà không làm thay đổi tính đúng đắn của chương trình
- C. Nên ưu tiên sử dụng nhiều giao diện đặc biệt hơn là một giao diện lớn
- D. Phụ thuộc vào trừu tượng thay vì phụ thuộc vào lớp cụ thể
Câu 20: "Coupling" (tính liên kết) và "Cohesion" (tính gắn kết) là hai khái niệm quan trọng trong thiết kế OOP. Thiết kế tốt thường hướng tới:
- A. Coupling thấp (Low coupling) và Cohesion cao (High cohesion)
- B. Coupling cao (High coupling) và Cohesion thấp (Low cohesion)
- C. Cả Coupling và Cohesion đều cao
- D. Cả Coupling và Cohesion đều thấp
Câu 21: Trong ngôn ngữ lập trình hướng đối tượng, từ khóa nào thường được sử dụng để khai báo một lớp?
- A. struct
- B. object
- C. interface
- D. class
Câu 22: "Tính trừu tượng dữ liệu" (Data Abstraction) khác với "tính trừu tượng điều khiển" (Control Abstraction) như thế nào?
- A. Không có sự khác biệt, đây chỉ là hai tên gọi khác nhau
- B. Trừu tượng dữ liệu ẩn giấu cách dữ liệu được biểu diễn, trừu tượng điều khiển ẩn giấu cách thực hiện các thao tác
- C. Trừu tượng dữ liệu chỉ áp dụng cho dữ liệu nguyên thủy, trừu tượng điều khiển cho đối tượng
- D. Trừu tượng dữ liệu liên quan đến giao diện người dùng, trừu tượng điều khiển liên quan đến logic nghiệp vụ
Câu 23: "Composition" (tính hợp thành) và "Aggregation" (tính tập hợp) là hai loại quan hệ giữa các lớp trong OOP. Sự khác biệt chính giữa chúng là gì?
- A. Composition thể hiện quan hệ "is-a", Aggregation thể hiện quan hệ "has-a"
- B. Aggregation mạnh hơn Composition về mức độ phụ thuộc
- C. Trong Composition, đối tượng "thành phần" phụ thuộc vào đối tượng "chứa", còn trong Aggregation thì không
- D. Composition chỉ áp dụng cho dữ liệu tĩnh, Aggregation cho dữ liệu động
Câu 24: Ví dụ nào sau đây thể hiện rõ nhất quan hệ "Composition"?
- A. Giáo viên và Sinh viên trong một trường học
- B. Động cơ và Xe ô tô
- C. Sách và Thư viện
- D. Bài hát và Danh sách phát nhạc
Câu 25: "Interface" (giao diện) trong OOP có vai trò gì?
- A. Tăng hiệu suất thực thi của chương trình
- B. Thay thế hoàn toàn cho lớp trừu tượng
- C. Giảm tính đóng gói của đối tượng
- D. Định nghĩa một tập hợp các phương thức mà các lớp thực hiện interface phải cung cấp
Câu 26: Trong lập trình hướng đối tượng, "Dependency Injection" (DI - Tiêm phụ thuộc) là một mẫu thiết kế giúp đạt được mục tiêu nào?
- A. Tăng tính đóng gói
- B. Tăng tính kế thừa
- C. Giảm sự phụ thuộc giữa các lớp và tăng tính module hóa
- D. Tăng hiệu suất của ứng dụng
Câu 27: "Overloading" (nạp chồng) phương thức là gì?
- A. Định nghĩa nhiều phương thức cùng tên trong một lớp nhưng khác nhau về tham số
- B. Ghi đè phương thức của lớp cha trong lớp con
- C. Gọi một phương thức từ một lớp khác
- D. Tạo ra một bản sao của một đối tượng
Câu 28: "Overriding" (ghi đè) phương thức là gì?
- A. Định nghĩa nhiều phương thức cùng tên trong một lớp nhưng khác nhau về tham số
- B. Lớp con định nghĩa lại phương thức đã có ở lớp cha
- C. Ẩn giấu phương thức của lớp cha
- D. Đổi tên phương thức trong quá trình kế thừa
Câu 29: Kiểu dữ liệu "enum" (liệt kê) trong OOP thường được sử dụng để làm gì?
- A. Lưu trữ danh sách các đối tượng
- B. Định nghĩa cấu trúc dữ liệu phức tạp
- C. Định nghĩa một tập hợp hữu hạn các giá trị hằng số có tên
- D. Thay thế cho kiểu dữ liệu boolean
Câu 30: Trong ngữ cảnh kiểm thử đơn vị (unit testing) phần mềm OOP, "mock object" (đối tượng giả lập) thường được sử dụng để:
- A. Tăng hiệu suất kiểm thử
- B. Kiểm thử giao diện người dùng
- C. Kiểm thử tích hợp giữa các module
- D. Thay thế các phụ thuộc thực sự của đối tượng đang kiểm thử để cô lập và kiểm tra hành vi của đối tượng đó