22. eXcentia
:
El
“cajón
de
sastre”
del
desarrollo
de
software
24/04/2013
S. O. L. I. D.
Single Responsibility Principle
“There should never be more than one
reason for a class to change”
public class SuperDashboard extends JFrame {
public Component getLastFocusedComponent()
{...}
public void setLastFocusedComponent(Component lastFocusedComponent)
{...}
public int getMajorVersionNumber ()
{...}
public int getMinorVersionNumber ()
{...}
public int getBuildNumber ()
{...}
}
24. eXcentia
:
El
“cajón
de
sastre”
del
desarrollo
de
software
24/04/2013
S. O. L. I. D.
Open-Closed Principle
class GraphicEditor {
...
public void drawShape(Shape shape) {
if (shape.type == RECTANGLE)
drawRectangle(shape);
else if (shape.type == CIRCLE)
drawCircle(shape);
}
public void drawCircle(Circle circle)
{....}
public void drawRectangle(Rectangle rectangle)
{....}
}
27. eXcentia
:
El
“cajón
de
sastre”
del
desarrollo
de
software
24/04/2013
S. O. L. I. D.
class Rectangle {
...
public void setWidth(int width){ this.width = width; }
public void setHeight(int height) {this.height = height;}
public int getWidth(){ return width; }
public int getHeight(){ return height; }
public int getArea(){ return width * height; }
}
class Square extends Rectangle {
public void setWidth(int width){
this.width = width;
this.height = width;
}
public void setHeight(int height){
this.width = height;
this.height = height;
}
}
Liskov Substitution Principle
32. eXcentia
:
El
“cajón
de
sastre”
del
desarrollo
de
software
24/04/2013
S. O. L. I. D.
Dependency Inversion Principle
interface IWorker {
public void work();
}
class Worker implements IWorker {
public void work() { ... }
}
class SuperWorker implements IWorker {
public void work() { ... }
}
class Manager {
Iworker worker;
public void setWorker(IWorker worker) {
this.worker = worker;
}
public void manage() {
worker.work();
}
}
34. eXcentia
:
El
“cajón
de
sastre”
del
desarrollo
de
software
24/04/2013
En el método m de una clase sólo deberían aparecen llamadas a:
• Un método de un miembro de dicha clase
• Otro método de dicha clase
• Un método de un objeto creado por m
• Un método de un objeto pasado como argumento a m
No se debe llamar a métodos de los
objetos devueltos por otros métodos.
Law of Demeter (LoD)