Saltar a contenido

ISP - Principio de Segregación de Interfaz

Principio de Segregación de Interfaz -- (Interface Segregation Principle) ISP :

  • El principio de segregación de interfaz establece que una clase no debe implementar interfaces que no utilice y que debe dividirse en interfaces más pequeñas y específicas.
  • El principio de segregación de interfaz se debe de mirar desde el lado de los clientes que implementan las interfaces que no tengan metodos y/o propiedades que no tengan sentido para ese cliente.

Ejemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
INTERFACE I_AveVoladora
// interfaz para las aves voladoras
    METHODS
        Volar : BOOL; // método para volar
END_INTERFACE

INTERFACE I_AveNadadora
// interfaz para las aves nadadoras
    METHODS
        Nadar : BOOL; // método para nadar
END_INTERFACE

INTERFACE I_AveCorredora
// interfaz para las aves corredoras
    METHODS
        Correr : BOOL; // método para correr
END_INTERFACE

FUNCTION_BLOCK Pato IMPLEMENTS I_AveVoladora, I_AveNadadora
// implementa las interfaces I_AveVoladora e I_AveNadadora
VAR_INPUT
    velocidad : REAL;
    alturaMaxima : REAL;
    tiempoBuceo : TIME;
END_VAR

// implementación para el pato
// métodos para volar y nadar

END_FUNCTION_BLOCK

FUNCTION_BLOCK Aguila IMPLEMENTS I_AveVoladora
// implementa la interfaz I_AveVoladora solamente
VAR_INPUT
    velocidad : REAL;
    alturaMaxima : REAL;
END_VAR

// implementación para el águila
// método para volar

END_FUNCTION_BLOCK

FUNCTION_BLOCK Avestruz IMPLEMENTS I_AveCorredora
// implementa la interfaz I_AveCorredora solamente
VAR_INPUT
    velocidad : REAL;
    tiempoCorriendo : TIME;
END_VAR

// implementación para el avestruz
// método para correr

END_FUNCTION_BLOCK
SOLID_ISP

  • De esta manera, cada clase tiene solo los métodos necesarios y se divide en interfaces más pequeñas y específicas. Además, se utilizan interfaces en lugar de function blocks para implementar el principio de segregación de interfaz.
  • Esto permite una mayor flexibilidad y evita la necesidad de implementar métodos innecesarios en una clase.