Controlador: Atribuir a responsabilidade de tratar um evento do sistema
para uma classe “controladora” representando: o sistema como um todo
(facade controller); o negócio ou organização com um todo (facade
controller); uma coisa ou papel de uma pessoa do mundo real envolvida
diretamente com a tarefa (role controller); um “tratador” (handler) artificial
para todos os eventos de um caso de uso (use-case controller). Aumento
das possibilidades de reutilização e de interfaces plugáveis; garante que a
lógica da aplicação não seja tratada na camada de interface; conhecer o
estado do caso de uso; garantir que as operações do sistema ocorram em
uma sequência válida.
Acoplamento baixo/fraco: Atribui a responsabilidade de modo que o
acoplamento (dependência entre classes) permaneça baixo.
Responsabilidade de uma classe não é (ou é pouco) afetada por
mudanças em outros componentes; Responsabilidade de uma classe
é mais simples de entender isoladamente; Aumenta a chance de
reutilização de uma classe.
Alta coesão: Atribui a responsabilidade de modo que a coesão
(força do relacionamento entre as responsabilidades de uma
classe) permaneça alta. Aumento da clareza e compreensão do
projeto; Simplificação de manutenção; Baixo acoplamento;
Reuso facilitado.
Criador: Atribui à classe B a responsabilidade de criar uma instância da classe
A se uma das alternativas abaixo for verdadeira: B agrega ou contém
instâncias de A B registra instâncias de A B usa instâncias A de maneira muito
próxima B tem os dados de inicialização para criar instâncias de A B portanto
é um especialista na criação de A. Acoplamento fraco: não aumenta o
acoplamento pois provavelmente a classe criada já é visível à classe criadora
devido às associações. Não é indicado se a criação de um objeto for uma
tarefa complexa; Delegar a criação a uma classe auxiliar chamada Fábrica .
Especialista: Atribui responsabilidade para o especialista na
informação,a classe que tem a informação necessária para cumprir a
responsabilidade. Mantém encapsulamento (baixo acoplamento);
Comportamento é distribuído através das classes que tem a
informação necessária para cumprir a responsabilidade (alta
coesão);Viola a separação dos principais interesses.
Avançados
Variações protegidas: • Identificar pontos de variação ou instabilidade
previsível; atribuir responsabilidades para criar uma interface estável em
torno deles; Evite enviar mensagens a objetos muito distantes.
Indireção: Atribui a responsabilidade a um objeto intermediário que
faça a mediação entre componentes ou serviços de modo que eles não
sejam diretamente acoplados; Usar um objeto intermediário para ser o
mediador entre componentes para que eles não sejam diretamente
acoplados. Acoplamento mais fraco entre os componentes.
Invenção pura: Cria uma classe artificial que não representa nenhuma
entidade no domínio do problema. Uma classe fictícia que possibilite alta
coesão, baixo acoplamento e o reuso. Coesão alta é favorecida; potencial de
reutilização pode aumentar devido à presença de classes de Invenção Pura
refinadas. Contra-indicações : uso extremo – funções simples se tornam
objetos.
Polimorfismo: Quando alternativas ou comportamentos relacionados
variam segundo o tipo (classe), deve-se atribuir a responsabilidade pelo
comportamento (usando operações polimórficas) aos tipos para os quais o
comportamento varia. As extensões exigidas para as novas variações são
fáceis de adicionar; novas implementações podem ser introduzidas sem
afetar os clientes. Não usar polimorfismo para adicionar uma flexibilidade
para uma possível futura variação.
Tipos de Responsabilidade
Fazer: fazer algo; iniciar
ações em outros objetos;
controlar e coordenar
atividades em outros objetos
Conhecer: dados privados
encapsulados; objetos
relacionados; atributos que
podem ser calculados ou
derivados.