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();
}
}