Coesão de Classe, Suporte de Estados e de Comportamentos
Suporte de Estados em uma Interface de Classe Estados ilegais Estados incompletos Estados inapropriados Estados ideais Coesão de Classe
Estados ilegais Uma interface de classe que permita estados ilegais, habilita a um objeto o alcance de estados que violam a invariante de classe desse objeto. Por ex: operação moverPonto definida sobre Retângulo >> se permitir que um único vértice se mova independentemente dos outros Coesão de Classe
Estados incompletos Uma interface de classe com estados incompletos, permite estados válidos que um objeto não consegue alcançar Por ex: na hipótese que, devido ao desenho pobre da classe Retângulo, todos os retângulos deverão apresentar larguras maiores do que as alturas Coesão de Classe
Estados inapropriados Classe com estados inapropriados propicia ao usuário do lado de fora de um objeto alguns estados que não são partes da abstração de classe do objeto Por ex: uma classe Pilha em que os elementos individuais sejam visíveis (quando o topo deveria ser visível) Coesão de Classe
Estados ideais Classe com estados ideais é a que tem o melhor desenho: um objeto pode atingir qualquer estado válido, mas somente os estados válidos. O conhecimento de quais estados são válidos, e quais são ilegais, depende do entendimento da finalidade da classe e da definição de sua invariante de classe. Coesão de Classe
Suporte de comportamentos em Interface de Classes Comportamento ilegal Comportamento perigoso Comportamento irrelevante Comportamento incompleto Comportamento inábil Comportamento replicado Comportamento ideal Coesão de Classe
Comportamento ilegal O comportamento ilegal permite a um objeto fazer transições ilegais de um estado para outro Por ex: PedidoDeCliente puder ir do estado de nãoAprovado para cumprido (sem passar por aprovado!) Coesão de Classe
Comportamento perigoso Quando várias mensagens são necessárias para efetivar uma única etapa de comportamento de um objeto, e pelo menos uma mensagem leva a um estado ilegal Por ex: enviar 4 mensagens para deslocar cada vértice de um Retângulo Coesão de Classe
Comportamento irrelevante O comportamento irrelevante em uma interface de classe é o comportamento que simplesmente não pertence a essa classe e a seus objetos Por ex: operação CalcularRestituição DeEmpréstimo em PedidoDeCliente Coesão de Classe
Comportamento incompleto Classe com comportamento incompleto não permite todo o comportamento que deveria ser posto em prática por objetos dessa classe Por ex: estado aprovado em PedidoDeCliente não pode voltar a nãoAprovado (num caso de falência do cliente!) Coesão de Classe
Comportamento inábil O comportamento inábil pode requerer duas ou mais mensagens para uma única etapa de comportamento válido. Mas nenhuma delas conduz a um estado ilegal Por ex: mudar a dataDeRemessa em um pedido cumprido exige voltar a aprovado e depois a cumprido de novo Coesão de Classe
Comportamento replicado Uma interface que permite a mesma etapa de comportamento por mais de um modo Ex 1: classe Hominóide: - virarÀDireita - virarNoSentidoHorário(90o) Ex2: classe ContaDeAções: - venderPosição (ações, qtde, out vendaOK) - venderTodasPosiçõesDeAções (out vendaOK) Coesão de Classe
Comportamento ideal Um objeto em um estado válido pode mover-se somente para outro estado válido Pode mover-se para outro estado somente por meio de um modo válido Há apenas um modo de utilização da interface a fim de efetivar uma etapa de comportamento Coesão de Classe
Exemplo: PilhaAparelho Topo: Aparelho; Extrair; Empilhar (novoElemento: Aparelho); estáVazia: booleano; estáCheia: booleano; Coesão de Classe
Exemplo: PilhaAparelho Topo: Aparelho; (*) Extrair; (*) Empilhar (novoElemento: Aparelho); estáVazia: booleano; estáCheia: booleano; Coesão de Classe
Coesão de Operações em Interface de Classes Coesão alternada Coesão múltipla Coesão funcional Coesão de Classe
Coesão alternada Aparece quando o desenhista combina deversas etapas de comportamento em uma única operação, que, no recebimento de uma mensagem, aplica somente uma etapa de comportamento do objeto Ex: na classe Retângulo: reduzirOuGirar (fatorDeEscala: Real, ânguloDeRotação: Ângulo, oQueFazer: Booleano) Coesão de Classe
Coesão múltipla Semelhante à coesão alternada, só que aplica todas as etapas de comportamento! Ex1: Pessoa.alterarEndereçoETelefone Ex2: - área - áreaMaiorQue (algumaÁrea: área) (*)>> if retângulo.área > algumaÁrea then … Coesão de Classe
Coesão funcional Tanque.encher Retângulo.área ItemDeProduto.peso PedidoDeCliente.despachar Aeroplano.virar Conta.fazerDepósito Coesão de Classe