Ejemplos Liskov Substitution
public class BankAccount { protected double balance; public void Deposit(double amount) { balance += amount; } public void Withdraw(double amount) { if (balance >= amount) { balance -= amount; } else { throw new IllegalArgumentException("Insufficient funds"); } } public double GetBalance() { return balance; } } public class FixedTermDepositAccount extends BankAccount { public void Withdraw(double amount) { throw new IllegalArgumentException("Cannot withdraw from a fixed term deposit account until term ends"); } }
public abstract class BankAccount { protected double balance; public void Deposit(double amount) { balance += amount; System.out.printf("Deposit: %.2f, Total Amount: %.2f\n", amount, balance); } public abstract void Withdraw(double amount); public double GetBalance() { return balance; } } public class RegularAccount extends BankAccount { public void Withdraw(double amount) { if (balance >= amount) { balance -= amount; System.out.printf("Withdraw: %.2f, Balance: %.2f\n", amount, balance); } else { System.out.printf("Trying to Withdraw: %.2f, Insufficient Funds, Available Funds: %.2f\n", amount, balance); } } } public class FixedTermDepositAccount extends BankAccount { private boolean termEnded = false; // simplification for the example public void Withdraw(double amount) { if (!termEnded) { System.out.println("Cannot withdraw from a fixed term deposit account until term ends"); } else if (balance >= amount) { balance -= amount; System.out.printf("Withdraw: %.2f, Balance: %.2f\n", amount, balance); } else { System.out.printf("Trying to Withdraw: %.2f, Insufficient Funds, Available Funds: %.2f\n", amount, balance); } } } //Testing the Liskov Substitution Principle public class Program { public static void main(String[] args) { System.out.println("RegularAccount:"); RegularAccount RegularBankAccount = new RegularAccount(); RegularBankAccount.Deposit(1000); RegularBankAccount.Deposit(500); RegularBankAccount.Withdraw(900); } }
public class Document { public String Content; public void Read() { System.out.println(Content); } public void Write(String content) { Content = content; } } public class ReadOnlyDocument extends Document { public void Write(String content) { throw new IllegalArgumentException("Cannot write to a read-only document."); } } //Testing the Liskov Substitution Principle public class Program { public static void main(String[] args) { Document doc = new ReadOnlyDocument(); doc.Write("New Content"); // This will throw an exception! } }
public interface IReadable { String Content(); void Read(); } public interface IWritable { String Content(); void Write(String content); } public class EditableDocument implements IReadable, IWritable { private String content; public String Content() { return content; } public void Read() { System.out.println(content); } public void Write(String content) { this.content = content; } } public class ReadOnlyDocument implements IReadable { private final String content; public ReadOnlyDocument(String content) { this.content = content; } public String Content() { return content; } public void Read() { System.out.println(content); } } //Testing the Liskov Substitution Principle public class Program { public static void main(String[] args) { EditableDocument editableDoc = new EditableDocument(); editableDoc.Write("Editable Content"); editableDoc.Read(); ReadOnlyDocument readOnlyDoc = new ReadOnlyDocument("Read-Only Content"); readOnlyDoc.Read(); //readOnlyDoc.Write("Editable Content"); System.out.println("Press any key to exit..."); new java.util.Scanner(System.in).nextLine(); } }