Câu hỏi phỏng vấn OOP
Câu hỏi

Nguyên tắc thay thế Liskov (LSP) là gì và một số ví dụ về việc sử dụng nó (tốt và xấu)?

Câu trả lời

Nguyên tắc thay thế Liskov (LSP) là một trong năm nguyên tắc SOLID của lập trình hướng đối tượng, được đề xuất bởi Barbara Liskov vào năm 1987. LSP nêu rằng, trong một chương trình máy tính, nếu class B là một lớp con của class A, thì các đối tượng của class A có thể được thay thế bằng các đối tượng của class B mà không làm thay đổi tính đúng đắn của chương trình (tức là, chương trình vẫn hoạt động như mong đợi) [2]. Điều này nhấn mạnh tới khả năng thay thế và sự đa hình trong lập trình hướng đối tượng, giúp tạo ra các hệ thống phần mềm linh hoạt và dễ bảo trì hơn.

Ví dụ về việc sử dụng LSP:

Ví dụ tốt:

  • Hệ thống phương tiện: Giả sử có một class Vehicle với phương thức startEngine(). Class CarMotorcycle kế thừa từ Vehicle và cả hai đều ghi đè phương thức startEngine() để phản ánh cách khởi động động cơ cụ thể của chúng. Theo LSP, đối tượng Vehicle có thể được thay thế bằng Car hoặc Motorcycle mà không ảnh hưởng đến việc khởi động động cơ[2].

Ví dụ xấu:

  • Hình chữ nhật và hình vuông: Một ví dụ điển hình về vi phạm LSP là mối quan hệ giữa hình chữ nhật và hình vuông. Nếu hình vuông kế thừa từ hình chữ nhật, và có phương thức để thiết lập chiều rộng và chiều cao, việc thiết lập chiều rộng hoặc chiều cao cho hình vuông sẽ làm thay đổi cả hai kích thước, điều này vi phạm LSP vì hành vi của hình vuông không thể thay thế hoàn toàn cho hình chữ nhật[4].

LSP giúp nhà phát triển phần mềm nhận thức được tầm quan trọng của việc thiết kế hệ thống sao cho các lớp con có thể thay thế cho lớp cha mà không làm thay đổi hành vi của chương trình. Việc tuân thủ LSP giúp tạo ra các hệ thống phần mềm dễ mở rộng, bảo trì và kiểm thử.

Citations:
[1] https://...

expert

expert

Gợi ý câu hỏi phỏng vấn

expert

Bạn có thể khai báo một lớp riêng tư trong một không gian tên không?

expert

Lập trình theo Interface có nghĩa là gì?

senior

Sự khác biệt cụ thể giữa Interface và abstract class là gì?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào