Bộ 8 - 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:Đâu là đặc điểm chính của tính đóng gói (Encapsulation) trong lập trình hướng đối tượng?
💡 Lời giải chi tiết:
Tính đóng gói bảo vệ tính toàn vẹn của dữ liệu bằng cách giới hạn quyền truy cập trực tiếp vào các thành phần bên trong đối tượng thông qua các phạm vi truy cập. Kết luận Lý giải Che giấu chi tiết triển khai 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 2:Trong lập trình hướng đối tượng, 'Lớp' (Class) được hiểu là gì?
💡 Lời giải chi tiết:
Theo định nghĩa cơ bản của OOP, lớp đóng vai trò là bản thiết kế định nghĩa các đặc điểm và hành vi chung cho các đối tượng cùng loại. Kết luận Lý giải Là một khuôn mẫu hoặc bản thiết kế để tạo ra các đối tượng.
Câu 3:Mối quan hệ 'is-a' thường được dùng để mô tả tính chất nào trong OOP?
💡 Lời giải chi tiết:
Mối quan hệ 'is-a' xác định rằng một lớp con là một dạng cụ thể của lớp cha, vốn là đặc trưng cốt lõi của tính kế thừa. Kết luận Lý giải Tính kế thừa (Inheritance).
Câu 4: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 sử dụng cùng một tên phương thức cho các mục đích khác nhau dựa trên số lượng hoặc kiểu tham số truyền vào trong cùng một phạm vi lớp. Kết luận Lý giải Hai phương thức cùng tên trong cùng một lớp nhưng khác nhau về tham số.
Câu 5:Phạm vi truy cập 'protected' cho phép các thành phần được truy cập từ đâu?
💡 Lời giải chi tiết:
Phạm vi 'protected' hạn chế sự truy cập từ bên ngoài nhưng vẫn cho phép các lớp con sử dụng lại các thành phần của lớp cha. Kết luận Lý giải Trong nội bộ lớp đó và các lớp kế thừa từ nó.
Câu 6:Đặc điểm nào sau đây là đúng đối với một lớp trừu tượng (Abstract Class)?
💡 Lời giải chi tiết:
Lớp trừu tượng đóng vai trò là một khái niệm chung, cung cấp nền tảng cho các lớp con kế thừa và không cho phép tạo thực thể trực tiếp từ chính nó. Kết luận Lý giải Chỉ được dùng làm lớp cha và không thể khởi tạo đối tượng trực tiếp.
Câu 7:Sự khác biệt chính giữa Giao diện (Interface) và Lớp trừu tượng (Abstract Class) là gì?
💡 Lời giải chi tiết:
Trong hầu hết các ngôn ngữ OOP phổ biến như Java hay C#, đa kế thừa lớp bị hạn chế nhưng việc thực thi nhiều interface được cho phép để tăng tính linh hoạt. Kết luận Lý giải Một lớp có thể thực thi nhiều Interface nhưng thường chỉ kế thừa từ một lớp cha.
Câu 8:Từ khóa 'static' dùng cho một thuộc tính trong lớp có ý nghĩa gì?
💡 Lời giải chi tiết:
Thành phần 'static' được cấp phát bộ nhớ một lần duy nhất cho lớp thay vì tạo bản sao riêng lẻ cho mỗi đối tượng. Kết luận Lý giải Thuộc tính đó thuộc về lớp và được dùng chung bởi tất cả các đối tượng của lớp đó.
Câu 9:Phương thức khởi tạo (Constructor) có đặc điểm nào sau đây?
💡 Lời giải chi tiết:
Constructor là phương thức đặc biệt tự động chạy khi đối tượng được tạo, có tên giống lớp và không định nghĩa kiểu dữ liệu trả về. Kết luận Lý giải Luôn có tên trùng với tên lớp và không có kiểu trả về.
Câu 10:Tính đa hình (Polymorphism) tại thời điểm thực thi (Runtime) được thể hiện chủ yếu qua cơ chế nào?
💡 Lời giải chi tiết:
Đa hình Runtime cho phép chương trình quyết định phương thức nào của lớp con được gọi dựa trên kiểu thực tế của đối tượng tại thời điểm chạy. Kết luận Lý giải Ghi đè phương thức (Method Overriding).
Câu 11:Từ khóa 'this' trong một phương thức của lớp đại diện cho điều gì?
💡 Lời giải chi tiết:
Từ khóa 'this' được dùng để tham chiếu đến chính thực thể đang gọi phương thức, giúp phân biệt giữa thuộc tính lớp và tham số phương thức. Kết luận Lý giải Đại diện cho đối tượng hiện tại đang thực thi phương thức đó.
Câu 12:Mối quan hệ 'has-a' mô tả khái niệm nào trong lập trình hướng đối tượng?
💡 Lời giải chi tiết:
Mối quan hệ 'has-a' chỉ ra rằng một đối tượng chứa một đối tượng khác như là một phần thuộc tính của nó. Kết luận Lý giải Thành phần/Hợp thành (Composition/Aggregation).
Câu 13:Vấn đề 'Diamond Problem' trong kế thừa xảy ra khi nào?
💡 Lời giải chi tiết:
Vấn đề này gây ra sự nhập nhằng về việc lớp con sẽ kế thừa phiên bản phương thức nào từ các lớp cha có chung nguồn gốc trong cấu trúc đa kế thừa. Kết luận Lý giải 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 ông nội.
Câu 14:Hàm hủy (Destructor) thường được sử dụng để làm gì?
💡 Lời giải chi tiết:
Hàm hủy được gọi khi đối tượng kết thúc vòng đời để đảm bảo các tài nguyên hệ thống (như tệp tin, kết nối mạng) được giải phóng sạch sẽ. Kết luận Lý giải Giải phóng tài nguyên hoặc bộ nhớ mà đối tượng đã chiếm dụng.
Câu 15:Trong OOP, khái niệm 'Tính trừu tượng' (Abstraction) tập trung vào điều gì?
💡 Lời giải chi tiết:
Tính trừu tượng giúp đơn giản hóa mô hình đối tượng bằng cách chỉ trích xuất các thông tin quan trọng nhất đối với ngữ cảnh bài toán. Kết luận Lý giải Tập trung vào những đặc điểm cốt lõi của đối tượng và bỏ qua các chi tiết không cần thiết.
Câu 16:Ưu điểm lớn nhất của việc sử dụng 'Interface' thay vì kế thừa lớp là gì?
💡 Lời giải chi tiết:
Interface định nghĩa một bản hợp đồng về hành vi, giúp các lớp khác nhau có thể chia sẻ chung tập lệnh mà không bị ràng buộc vào một cây phân cấp kế thừa duy nhất. Kết luận Lý giải Cho phép đa kế thừa hành vi mà không gặp xung đột cấu trúc lớp.
Câu 17:Phương thức thuần ảo (Pure Virtual Function) trong C++ là phương thức như thế nào?
💡 Lời giải chi tiết:
Phương thức thuần ảo ép buộc các lớp con phải cung cấp phần triển khai cụ thể, làm cho lớp chứa nó trở thành một lớp trừu tượng. Kết luận Lý giải Phương thức được gán bằng 0 và không có định nghĩa trong lớp cơ sở.
Câu 18:Khái niệm 'Liên kết muộn' (Late Binding) có liên quan mật thiết nhất đến đặc điểm nào?
💡 Lời giải chi tiết:
Liên kết muộn là cơ chế xác định địa chỉ của phương thức sẽ được thực thi tại thời điểm chương trình đang chạy thay vì lúc biên dịch. Kết luận Lý giải Đa hình tại thời điểm chạy.
Câu 19:Một lớp được đánh dấu là 'final' (trong Java) hoặc 'sealed' (trong C#) có ý nghĩa gì?
💡 Lời giải chi tiết:
Sử dụng 'final' hoặc 'sealed' giúp ngăn chặn việc mở rộng lớp, thường dùng để bảo mật hoặc cố định logic thiết kế. Kết luận Lý giải Lớp đó không thể bị kế thừa bởi bất kỳ lớp nào khác.
Câu 20:Tại sao nên hạn chế việc truy cập trực tiếp vào thuộc tính của một lớp từ bên ngoài?
💡 Lời giải chi tiết:
Việc sử dụng các phương thức getter/setter giúp kiểm soát tính hợp lệ của dữ liệu trước khi gán hoặc truy xuất. Kết luận Lý giải Để đảm bảo dữ liệu không bị thay đổi một cách không kiểm soát và duy trì tính đóng gói.
Câu 21:Mối quan hệ 'Hợp thành' (Composition) khác với 'Tụ họp' (Aggregation) ở điểm cơ bản nào?
💡 Lời giải chi tiết:
Trong quan hệ hợp thành, nếu đối tượng chính bị hủy thì các đối tượng thành phần bên trong cũng sẽ bị hủy theo. Kết luận Lý giải Composition có sự ràng buộc về vòng đời, đối tượng thành phần không thể tồn tại độc lập với đối tượng chứa nó.
Câu 22:Trong thiết kế hướng đối tượng, 'Độ kết dính' (Cohesion) nên như thế nào?
💡 Lời giải chi tiết:
Độ kết dính cao giúp mã nguồn dễ bảo trì, dễ hiểu và giảm thiểu các tác động ngoài ý muốn khi thay đổi logic của một lớp. Kết luận Lý giải Cao (High cohesion) để mỗi lớp/mô-đun chỉ tập trung thực hiện một nhiệm vụ cụ thể.
Câu 23:Trong thiết kế hướng đối tượng, 'Độ phụ thuộc' (Coupling) nên như thế nào?
💡 Lời giải chi tiết:
Độ phụ thuộc lỏng lẻo cho phép các thành phần của hệ thống hoạt động độc lập hơn, hỗ trợ tốt cho việc kiểm thử và mở rộng. Kết luận Lý giải Lỏng lẻo (Loose coupling) để giảm thiểu sự ảnh hưởng lẫn nhau giữa các lớp khi có thay đổi.
Câu 24:Cơ chế 'Upcasting' trong OOP nghĩa là gì?
💡 Lời giải chi tiết:
Upcasting là hành động tham chiếu một đối tượng lớp con bằng biến kiểu lớp cha, hành động này luôn an toàn và được thực hiện tự động. Kết luận Lý giải Chuyển kiểu một đối tượng từ lớp con sang lớp cha.
Câu 25:Việc thực hiện 'Downcasting' tiềm ẩn rủi ro gì?
💡 Lời giải chi tiết:
Downcasting yêu cầu ép kiểu tường minh và chương trình sẽ gặp lỗi nếu thực thể đó không thực sự là bản thể của lớp con mà chúng ta muốn chuyển đổi. Kết luận Lý giải Có thể gây ra lỗi ngoại lệ (như ClassCastException) nếu đối tượng thực tế không thuộc kiểu đích.