Diagramas de Colaboração entre Objetos Motivação Exemplo de solução concentradora (pseudo-código) Classe VideoLocadora fitas : Conjunto; clienteCorrente : Cliente; Método emprestaFita(fCodigo: String) fita : Fita; emprestimoCorrente : Emprestimo; item : ItemDeEmprestimo; fita := fitas.get(fCodigo); emprestimoCorrente := clienteCorrente.getEmprestimoCorrente(); item := ItemDeEmprestimo.new(); item.associaFita(fita); emprestimoCorrente.associaItem(item); Fim Método; Fim Classe. Modelo Conceitual Lições do Modelo Conceitual Pelo Modelo Conceitual, objetos Emprestimo e ItemDeEmprestimo deviam ser invisíveis ao objeto VideoLocadora Desta forma, objetos VideoLocadora não ficam sobrecarregados Outra maneira de dizer • Objetos VideoLocadora, Cliente, Emprestimo e ItemDeEmprestimo devem cooperar para realizar a operação de sistema emprestafita() Um diagrama de colaboração entre objetos, baseado no Modelo Conceitual e em certos padrões de software, deve colocar as coisas desta forma Uma diagrama de colaboração para o mesmo problema Resulta em código mais elegante Classe VideoLocadora fitas : Conjunto ; clienteCorrente : Cliente; Metodo emprestaFita(fCodigo : String); fita : Fita; fita := fitas.get(fCodigo); clienteCorrente.empresta(fita) Fim Metodo; Fim Classe. Classe Cliente emprestimoCorrente : Emprestimo; Metodo empresta(fita : Fita); emprestimoCorrente.adiciona(fita); Fim Metodo; Fim Classe. Classe Emprestimo itens : Conjunto; Metodo adiciona(fita : Fita); item : ItemDeEmprestimo; item := ItemDeEmprestimo.new(); self.associaItem(item); item.associaFita(fita); Fim Metodo; Fim Classe. Classe ItemDeEmprestimo ... Metodo new(); Metodo associaFita(); ... Fim Classe. Orientação a Objeto Não É Apenas Diagrama de Classe Quando uma ou duas classes fazem tudo, e as outras são meras pacientes desse processo, não existe propriamente orientação a objeto, mas uma estrutura concentradora Seria preferível fazer um projeto estruturado bem feito do que um projeto orientado a objeto, desta forma OO Não É Simulação Muitos projetistas cometem o erro de acreditar que um sistema orientado a objeto é uma simulação do mundo real Mas isso não é normalmente verdade O sistema representa as informações do mundo real e não as coisas propriamente ditas Os métodos não correspondem a ações do mundo real, mas sim à realização interna de contratos de operações externas (ou operações de sistema) Por este motivo é que os métodos internos são citados apenas na fase de projeto e sequer aparecem na fase de análise