solución ejercicio 3

SOLID en programación orientada a objetos

El término SOLID es el acrónimo de Single responsibility, Open-closed, Liskov substitution, Interface segregation y Dependency inversión.

El término lo inventó Robert Martin y representa 5 conceptos básicos del diseño y la programación orientada a objetos:

  • Single responsibility. Hay que diseñar las clases para que los objetos tenga solamente una única responsabilidad.
  • Open-closed. Cualquier entidad de software tiene que estar abierta para su extensión pero cerrada para su modificación.
  • Liskov substitution. Si en un programa OO sustituimos un objeto por alguna subclase suya el funcionamiento del programa debería ser idéntico.
  • Interface segregation. Este principio dice que es mejor crear muchas interfaces específicas separadas que una interfaz general ámplia.
  • Dependency inversión. Se supone que la dependencia es de abstracciones. No se debería depender de implementaciones.

Veamos un ejemplo de violación del principio de Liskov:


class rectangulo
{
protected int _ancho;
protected int _alto;

public void setAncho(int ancho){
_ancho = ancho;
}

public void setAlto(int alto){
_alto = alto;
}

public int getAncho(){
return _ancho;
}

public int getAlto(){
return _alto;
}

public int getArea(){
return _ancho * _alto;
}
}

class cuadrado extends rectangulo
{
public void setAncho(int ancho){
_ancho = ancho;
_alto = ancho;
}

public void setAlto(int alto){
_ancho = alto;
_alto = alto;
}

}

public class principal
{

public static void main (String args[])
{
rectangulo r = new cuadrado();
// rectangulo r = new rectangulo();
// no funciona igual si r es un rectangulo o si es un cuadrado

r.setAncho(5);
r.setAlto(10);

System.out.println(r.getArea());
// en un caso el area da 100 y en otro 50.
// viola el principio de Liskov
}

}

En el ejemplo anterior, si compilo y ejecuto con la línea rectangulo r = new cuadrado(); obtengo un resultado de 100 en vez de 50 con lo cual el diseño anterior no cumple el principio de Liskov.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>