Más Liskov

package com.trifulcas.liskov;

public class DocumentNoLiskov {
	public String Content;

	// Implementa los dos métodos sin tener en cuenta
	// Que clases derivadas pueden no necesitarlos
	public void Read() {
		System.out.println(Content);
	}

	public void Write(String content) {
		Content = content;
	}

}

package com.trifulcas.liskov;

public class ReadOnlyDocumentNoLiskov extends DocumentNoLiskov {
	// Al derivar de document pero no implementar write
	// Tenemos que lanzar un error
	public void Write(String content) {
		throw new IllegalArgumentException("Cannot write to a read-only document.");
	}
}

DocumentNoLiskov a = new DocumentNoLiskov();
		ReadOnlyDocumentNoLiskov b = new ReadOnlyDocumentNoLiskov();

		ArrayList<DocumentNoLiskov> lista = new ArrayList<>();
		lista.add(a);
		lista.add(b);
		// No podemos usar Liskov porque ReadOnly no implementa escritura
		for (DocumentNoLiskov doc : lista) {
			doc.Write("Hola"); // Lanza un error en el documento de solo lectura
		}
package com.trifulcas.liskov;

public interface Readable {
	public String read();
}

package com.trifulcas.liskov;

public interface Writable {
	void write(String content);
}

package com.trifulcas.liskov;

public class EditableDocument implements Readable, Writable {
	private String content;

	@Override
	public void write(String content) {
		this.content = content;
	}

	@Override
	public String read() {
		return content;
	}

}

package com.trifulcas.liskov;

public class ReadOnlyDocument implements Readable {
	private String content;

	@Override
	public String read() {
		// TODO Auto-generated method stub
		return content;
	}

}

EditableDocument e = new EditableDocument();
		EditableDocument f = new EditableDocument();

		ReadOnlyDocument g = new ReadOnlyDocument();
		ReadOnlyDocument h = new ReadOnlyDocument();

		ArrayList<Readable> leibles = new ArrayList<>();
		ArrayList<Writable> editables = new ArrayList<>();

		leibles.add(e);
		leibles.add(f);
		leibles.add(g);
		leibles.add(h);
		for (Readable doc : leibles) {
			doc.read();
		}
		editables.add(e);
		editables.add(f);
		// No podemos añadir un documento que no se puede escribir
		// editables.add(g);
		for (Writable doc : editables) {
			doc.write("ww");
		}

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos