Hallo anh em,
Có ai giỏi về Liskov Substitution Principle (Nguyên lý thay thế Liskov) cho mình hỏi 1 chút vì mình đọc mãi thông tin các trang mà vẫn không hiểu về vấn đề này kĩ lắm . Mình có 1 đoạn code Java như dưới đây, trong đó có 5 lỗi vi phạm về nguyên lý Liskov. Ai hiểu rõ về nguyên lý này có thể giúp mình tìm và giải thích tại sao nó lại vi phạm được ko ? Cám ơn mọi người trước
Có ai giỏi về Liskov Substitution Principle (Nguyên lý thay thế Liskov) cho mình hỏi 1 chút vì mình đọc mãi thông tin các trang mà vẫn không hiểu về vấn đề này kĩ lắm . Mình có 1 đoạn code Java như dưới đây, trong đó có 5 lỗi vi phạm về nguyên lý Liskov. Ai hiểu rõ về nguyên lý này có thể giúp mình tìm và giải thích tại sao nó lại vi phạm được ko ? Cám ơn mọi người trước
Mã:
public class Library {
class Book{
private int site;
private String _title;
private String _autor;
private int _currentSite = 0;
public Book(int sites, String title, String autor){
this.site = sites;
this._title = title;
this._autor = autor;
}
public void page(){
if(this._currentSite<this.site){
this._currentSite++;
}
}
public void toPage(int site){
if(site<this.site){
this._currentSite = site;
}
}
public String getAutor(){
return this._autor;
}
}
class TelefonBook extends Book{
public TelefonBook(int sites){
super(sites,"TelefonBook",null);
}
@Override
public String getAutor(){
return "No Autor";
}
}
class PreviewBook extends Book{
// Book dient nur zur Preview in ein Book
private int _maxErstesites;
public PreviewBook(int sites, String title, String autor){
this(sites,title,autor,1);
}
public PreviewBook(int sites, String title, String autor, int maxErstesite){
super(sites,title,autor);
this._maxErstesites = maxErstesite;
}
@Override
public void page(){
if(super._currentSite < this._maxErstesites){
super.page();
}
}
@Override
public void toPage(int site){
if(site <= this._maxErstesites){
super.toPage(site);
}
}
}
class EBook extends Book{
// prozentual gelesenen Anteil des Bookes
private float percent;
public EBook(int sites, String title, String autor){
super(sites,title,autor);
this.percent = 0;
}
@Override
public void page(){
super.page();
this.percent = ((float) super._currentSite)/((float) super.site);
}
@Override
public void toPage(int site){
super.toPage(site);
this.percent = ((float) site)/((float) super.site);
}
}
class ArabischesBook extends Book{
ArabischesBook(int sites, String title, String autor){
super(sites,title,autor);
super._currentSite = sites;
}
@Override
public void page(){
if(super._currentSite>0){
super._currentSite--;
}
}
}
}