forked from reprograma/on21-imersao-js-S10-SOLID
-
Notifications
You must be signed in to change notification settings - Fork 0
/
I.js
84 lines (60 loc) · 2.75 KB
/
I.js
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
I — Interface Segregation Principle (Princípio da Segregação de Interface)
Um cliente nunca deve ser forçado a implementar uma interface que não usa, ou os clientes não devem ser forçados a depender de métodos que não usam.
Esse princípio mostra que devemos criar interfaces mais específicas para nossos objetos, ao invés de uma classe mais genérica para todos do mesmo tipo.
Dessa forma, conseguiremos dar mais segurança às classes criadas em nossos programas. Isso porque, com interfaces mais específicas, colocamos apenas os atributos e as funções que aquela classe que a implementação utilizará.
Perguntas que devem ser respondidas durante essa aula:
Qual o conceito e objetivos desse princípio?
Qual a motivação?
Quais os benefícios?
Como e quando aplicar?
Conceito: Um cliente nunca deve ser forçado a implementar uma interface que ele não usa, ou os clientes não devem ser forçados a depender de métodos que não usam.
Objetivo: Este princípio visa dividir um conjunto de ações em conjuntos menores para que uma classe execute APENAS o conjunto de ações que necessita.
Exemplos:
Os códigos abaixo estão em Typescript, é o mais próximo de JS possível, mas permite entender melhor certas coisas que em JS passariam batidas como classe abstrata e/ou interface.
Não utilizando o Princípio da Segregação de Interface:
public interface ITelefone{
void Tocar();
void Discar();
void TirarFoto();
}
public class TelefoneCelular : ITelefone{
public void Tocar() { ... }
public void Discar() { ... }
public void TiraFoto() { ... }
}
public class TelefoneComum : ITelefone{
public void Tocar() { ... }
public void Discar() { ... }
public void TiraFoto() {
throw new NotImplementedException();
}
}
Perceba que a classe TelefoneCelular implementou a interface corretamente e todos os métodos eram usuais a classe.
Já para a classe TelefoneComum tivemos um método que lançou uma Exception, pois aquele metódo não tinha utilidade para a classe.
Percebemos que criarmos uma Interface genérica e nada específica às nossas classes isso pode gerar complexidade e difícil manutenção posterior ao código.
Utilizando o Princípio da Segregação de Interface:
public interface ITelefoneCelular
{
void Tocar();
void Discar();
void TirarFoto();
void Conectar3G();
}
public interface ITelefoneComum
{
void Tocar();
void Discar();
}
public class TelefoneCelular : ITelefoneCelular{
public void Tocar() { ... }
public void Discar() { ... }
public void TiraFoto() { ... }
public void Conectar3G() { ... }
}
public class TelefoneComum : ITelefoneComum{
public void Tocar() { ... }
public void Discar() { ... }
}
Atividade 4
*/