Bộ 11 - Trắc nghiệm Lập trình hướng đối tượng có đáp án
Thời gian còn lại: --:--
Kết quả của bạn:
Bạn đã đúng:
Bạn đã sai:
Tổng số câu:
Câu 1:Trong lập trình hướng đối tượng, một 'đối tượng' (object) được hiểu là gì?
💡 Lời giải chi tiết:
Theo định nghĩa cơ bản của OOP, một đối tượng là một thực thể cụ thể trong thời gian chạy bao gồm các thuộc tính (dữ liệu) và phương thức (hành vi) tương ứng. Kết luận Lý giải: Một thực thể cụ thể bao gồm trạng thái và các hành vi được định nghĩa bởi một lớp.
Câu 2:Đặc điểm nào sau đây mô tả đúng nhất về 'Tính đóng gói' (Encapsulation)?
💡 Lời giải chi tiết:
Tính đóng gói giúp bảo mật dữ liệu bằng cách sử dụng các sửa đổi truy cập (access modifiers) để hạn chế quyền can thiệp vào các thành phần nội bộ của đối tượng. Kết luận Lý giải: Việc che giấu các chi tiết cài đặt nội bộ và bảo vệ dữ liệu khỏi sự truy cập trực tiếp từ bên ngoài.
Câu 3:Trong mối quan hệ kế thừa, lớp kế thừa từ một lớp khác thường được gọi là gì?
💡 Lời giải chi tiết:
Trong hệ thống phân cấp kế thừa, lớp nhận các thuộc tính và phương thức từ lớp khác được gọi là lớp con, lớp dẫn xuất hoặc lớp trẻ. Kết luận Lý giải: Lớp con (Subclass) hoặc lớp dẫn xuất (Derived class).
Câu 4:Khái niệm 'Đa hình' (Polymorphism) tại thời điểm thực thi (Runtime Polymorphism) thường được thực hiện thông qua cơ chế nào?
💡 Lời giải chi tiết:
Đa hình lúc thực thi cho phép gọi các phương thức của lớp con thông qua tham chiếu của lớp cha, được thực hiện chủ yếu bằng cách ghi đè phương thức. Kết luận Lý giải: Ghi đè phương thức (Method Overriding).
Câu 5:Điểm khác biệt cơ bản giữa 'Lớp trừu tượng' (Abstract Class) và 'Giao diện' (Interface) là gì?
💡 Lời giải chi tiết:
Phân tích phổ biến cho thấy tính năng chính của giao diện là hỗ trợ đa kế thừa hành vi, trong khi lớp trừu tượng bị giới hạn bởi đơn kế thừa trong hầu hết các ngôn ngữ. Kết luận Lý giải: Một lớp có thể thực thi nhiều giao diện nhưng thường chỉ có thể kế thừa từ một lớp trừu tượng.
Câu 6:Mục đích chính của 'Hàm khởi tạo' (Constructor) trong một lớp là gì?
💡 Lời giải chi tiết:
Hàm khởi tạo là một phương thức đặc biệt được gọi tự động khi một đối tượng mới được tạo ra nhằm thiết lập trạng thái ban đầu cho đối tượng đó. Kết luận Lý giải: Để khởi tạo các giá trị ban đầu cho các thuộc tính của đối tượng khi nó được tạo ra.
Câu 7:Từ khóa 'static' được sử dụng cho một thành viên của lớp có ý nghĩa gì?
💡 Lời giải chi tiết:
Thành viên tĩnh (static member) được cấp phát bộ nhớ một lần duy nhất cho toàn bộ lớp thay vì cho mỗi đối tượng, giúp tiết kiệm bộ nhớ và chia sẻ dữ liệu chung. Kết luận Lý giải: Thành viên đó thuộc về lớp và được chia sẻ bởi tất cả các đối tượng của lớp đó.
Câu 8:Mối quan hệ 'Is-a' trong lập trình hướng đối tượng đại diện cho khái niệm nào?
💡 Lời giải chi tiết:
Mối quan hệ 'Is-a' (là một) xác định rằng một lớp con là một dạng chuyên biệt của lớp cha, đây là đặc trưng cốt lõi của kế thừa. Kết luận Lý giải: Tính kế thừa (Inheritance).
Câu 9:Khái niệm 'Nạp chồng phương thức' (Method Overloading) xảy ra khi nào?
💡 Lời giải chi tiết:
Nạp chồng phương thức cho phép các phương thức có cùng tên xử lý các kiểu dữ liệu hoặc số lượng tham số khác nhau trong phạm vi một lớp. Kết luận Lý giải: Hai hoặc nhiều phương thức trong cùng một lớp có cùng tên nhưng khác nhau về danh sách tham số.
Câu 10:Sửa đổi truy cập 'protected' (trong C++ hoặc Java) cho phép truy cập từ những đâu?
💡 Lời giải chi tiết:
Mức truy cập 'protected' được thiết kế để cho phép các lớp con truy cập vào thành viên của lớp cha trong khi vẫn giữ chúng ẩn đối với thế giới bên ngoài. Kết luận Lý giải: Bên trong lớp định nghĩa, các lớp con và các lớp trong cùng gói (package) tùy ngôn ngữ.
Câu 11:Lợi ích chính của 'Tính trừu tượng' (Abstraction) là gì?
💡 Lời giải chi tiết:
Tính trừu tượng giúp lập trình viên tập trung vào các hành động cốt lõi của đối tượng thay vì cách thức chi tiết mà hành động đó được thực thi. Kết luận Lý giải: Giảm bớt sự phức tạp bằng cách chỉ hiển thị những thông tin cần thiết và ẩn đi các chi tiết thực hiện.
Câu 12:Trong C++, một 'hàm ảo thuần túy' (pure virtual function) được khai báo như thế nào?
💡 Lời giải chi tiết:
Hàm ảo thuần túy bắt buộc các lớp con phải ghi đè nó và làm cho lớp chứa nó trở thành lớp trừu tượng, được ký hiệu bằng cú pháp '= 0'. Kết luận Lý giải: Sử dụng từ khóa 'virtual' và gán giá trị bằng 0 ở cuối khai báo.
Câu 13:Từ khóa 'this' trong hầu hết các ngôn ngữ lập trình OOP tham chiếu đến điều gì?
💡 Lời giải chi tiết:
Từ khóa 'this' là một tham chiếu ngầm định trỏ đến chính thực thể của đối tượng đang thực thi mã lệnh hiện hành. Kết luận Lý giải: Đối tượng hiện tại đang gọi phương thức hoặc hàm khởi tạo.
Câu 14:Mối quan hệ 'Has-a' đại diện cho khái niệm nào trong thiết kế hướng đối tượng?
💡 Lời giải chi tiết:
Mối quan hệ 'Has-a' (có một) chỉ ra rằng một đối tượng chứa hoặc được cấu thành từ một hoặc nhiều đối tượng khác như là thuộc tính của nó. Kết luận Lý giải: Bao hàm/Thành phần (Composition/Aggregation).
Câu 15:'Vấn đề kim cương' (Diamond Problem) phát sinh trong trường hợp nào sau đây?
💡 Lời giải chi tiết:
Vấn đề kim cương gây ra sự mơ hồ cho trình biên dịch khi lớp con không biết nên kế thừa phương thức từ lớp cha nào nếu cả hai đều ghi đè cùng một phương thức từ lớp gốc chung. Kết luận Lý giải: Khi một lớp con kế thừa từ hai lớp cha mà cả hai lớp cha đó lại cùng kế thừa từ một lớp gốc.
Câu 16:Nguyên tắc Liskov Substitution (LSP) trong SOLID phát biểu điều gì?
💡 Lời giải chi tiết:
Nguyên tắc LSP đảm bảo rằng các lớp dẫn xuất phải tuân thủ hợp đồng của lớp cơ sở để không phá vỡ logic khi thực hiện đa hình. Kết luận Lý giải: Các đối tượng của lớp con phải có thể thay thế cho các đối tượng của lớp cha mà không làm thay đổi tính đúng đắn của chương trình.
Câu 17:Trong OOP, 'Interface' khác với 'Abstract Class' ở điểm nào về việc chứa mã cài đặt?
💡 Lời giải chi tiết:
Theo quan điểm truyền thống, Interface chỉ định nghĩa bộ khung (hợp đồng) trong khi Abstract Class có thể cung cấp cả bộ khung và một phần cài đặt mặc định. Kết luận Lý giải: Interface không bao giờ được chứa mã cài đặt, còn Abstract Class thì có thể (trước các phiên bản ngôn ngữ mới hơn).
Câu 18:Mục đích của việc sử dụng 'Hàm hủy' (Destructor) trong C++ là gì?
💡 Lời giải chi tiết:
Hàm hủy được gọi tự động khi đối tượng kết thúc vòng đời nhằm trả lại tài nguyên mà đối tượng đã chiếm dụng cho hệ thống. Kết luận Lý giải: Để thực hiện dọn dẹp các tài nguyên (như giải phóng bộ nhớ, đóng tệp) trước khi đối tượng bị tiêu hủy.
Câu 19:Khái niệm 'Deep Copy' khác gì so với 'Shallow Copy' khi sao chép đối tượng?
💡 Lời giải chi tiết:
Deep Copy đảm bảo tính độc lập giữa bản gốc và bản sao bằng cách đệ quy sao chép tất cả các thành phần mà đối tượng đó trỏ tới. Kết luận Lý giải: Deep Copy tạo ra một bản sao mới hoàn toàn của các đối tượng được tham chiếu, thay vì chỉ sao chép tham chiếu.
Câu 20:Nguyên tắc 'Single Responsibility Principle' (SRP) yêu cầu điều gì?
💡 Lời giải chi tiết:
SRP giúp mã nguồn dễ bảo trì và mở rộng hơn bằng cách phân tách các chức năng khác nhau vào các lớp riêng biệt. Kết luận Lý giải: Mỗi lớp chỉ nên thực hiện một nhiệm vụ duy nhất và chỉ có một lý do duy nhất để thay đổi.
Câu 21:Đặc điểm nào là bắt buộc khi thực hiện ghi đè phương thức (Method Overriding)?
💡 Lời giải chi tiết:
Để trình biên dịch nhận diện là ghi đè, phương thức ở lớp con phải có chữ ký (signature) trùng khớp với phương thức trong lớp cha. Kết luận Lý giải: Phương thức ở lớp con phải có cùng tên và cùng danh sách tham số với phương thức ở lớp cha.
Câu 22:Từ khóa 'final' áp dụng cho một lớp trong Java có tác dụng gì?
💡 Lời giải chi tiết:
Từ khóa 'final' được sử dụng để bảo mật hoặc tối ưu hóa bằng cách kết thúc chuỗi kế thừa của một lớp cụ thể. Kết luận Lý giải: Ngăn chặn bất kỳ lớp nào khác kế thừa từ lớp đó.
Câu 23:Trong thiết kế hướng đối tượng, 'Liên kết động' (Dynamic Binding) đề cập đến việc gì?
💡 Lời giải chi tiết:
Liên kết động là cơ chế cho phép đa hình hoạt động, nơi quyết định gọi hàm được hoãn lại cho đến khi đối tượng thực tế được xác định lúc chạy. Kết luận Lý giải: Việc xác định phương thức nào được gọi tại thời điểm thực thi (runtime) dựa trên kiểu thực tế của đối tượng.
Câu 24:Mục đích của việc sử dụng 'Accessors' (Getters) và 'Mutators' (Setters) là gì?
💡 Lời giải chi tiết:
Getter và Setter cung cấp một lớp bảo vệ trung gian giúp kiểm tra tính hợp lệ của dữ liệu trước khi gán hoặc truy xuất từ đối tượng. Kết luận Lý giải: Để kiểm soát việc truy cập và sửa đổi các thuộc tính, đảm bảo tính đóng gói.
Câu 25:Trong quan hệ 'Aggregation' (Tập hợp), điều gì xảy ra nếu đối tượng cha bị hủy?
💡 Lời giải chi tiết:
Khác với Composition, Aggregation là một mối quan hệ yếu nơi các đối tượng con có vòng đời độc lập với đối tượng chứa chúng. Kết luận Lý giải: Các đối tượng con vẫn tiếp tục tồn tại độc lập.