[MÚSICA] [MÚSICA] Olá, bem vindo ao curso Orientação a Objetos com Java. Eu sou o Clovis Fernandes e hoje vamos falar de identificação de colaborações. Vamos falar de classes colaboradoras e colaborações de responsabilidades de uma dada classe. Anteriormente nós definimos e identificamos a lógica de responsabilidades de uma classe. Agora queremos identificar as classes colaboradoras e as colaborações das responsabilidades de uma dada classe. Vamos retomar as classes que nós estivemos trabalhando na aula anterior: a classe Conta Corrente e a classe Banco. A classe Conta Corrente nós vimos que tem 2 responsabilidades do tipo sabe: sabe o número da conta, sabe o valor do saldo atual. Estou reapresentado apenas 2 responsabilidade do tipo faz, para credita valor ao saldo atual, debita valor do saldo atual. Já a classe Banco tem duas responsabilidades do tipo sabe: ela sabe as contas que estão ativas e ela sabe as contas que estão inativas. A classe Banco tem 3 responsabilidades do tipo faz: registra uma conta nova, apresenta a lista dos números de conta e obtém o valor do saldo do Banco como todo. Estou reapresentando a lógica da responsabilidade apresenta os números da conta, das contas ativas porque eu quero enfatizar o papel das colaborações. Então nós temos aà que o objeto Banco ele tem uma lista de contas correntes, objetos contas correntes. Eu preciso para pegar os números dessas contas correntes examinar cada objeto conta corrente dessa lista. Para cada uma dessas contas eu envio uma mensagem e peço: conta corrente, como você sabe o número da conta? Passa para mim este número. Então eu preciso deste número e ele passa para mim. O que é que eu estou fazendo com isso tudo? Na lógica dessa responsabilidade eu estou pedido para objeto da classe Conta Corrente prestar serviço para mim, ou seja, eu estou pedindo uma colaboração. Então a classe Conta Corrente nesse caso, ela é classe Colaboradora, porquê? Eu peço para objeto Conta Corrente que é da classe Conta Corrente para ela me auxiliar, colaborar comigo, eu não consigo fazer tudo sozinho nessa responsabilidade para apresentar os números das contas corrente ativas sem a ajuda do objeto Conta Corrente. Para isso eu uso a responsabilidade da conta corrente que é sabe o número da conta, isso é uma colaboração, então uma colaboração é uma responsabilidade, a classe do objeto é a classe Colaboradora e a Colaboração é uma responsabilidade dessa classe Colaboradora. Eu havia deixado também para mostrar para vocês a lógica da responsabilidade obtém o saldo total do banco, eis aÃ, o objeto Banco tem esse atributo, lista de contas correntes ativas, eu crio uma variável que eu vou armazenar os saldos de todas as contas. Inicialmente ele é zerado, começo a examinar a lista então das contas correntes, o objeto da classe Conta Corrente. Como nós já vimos, esse objeto ele é de uma classe que a gente chama de classe Colaboradora. Nós usamos a responsabilidade do objeto Conta Corrente, sabe o valor do saldo atual, essa é uma Colaboração. Então uma Colaboração é uma responsabilidade de classe Colaboradora, sem a qual eu não conseguiria cumprir a responsabilidade obtém o saldo do total do banco. Então eu peço para esse objeto me devolver o valor do saldo atual, ele me devolve, eu consolido isso junto com o saldo anterior e tenho novo saldo, vou fazendo isso para todas as contas correntes, até que não tenha mais nenhuma conta corrente nesta lista. A lógica dessa responsabilidade é no final me devolver o saldo total e é o que eu faço isso ao final. Para realizar a lógica de uma responsabilidade eu tenho duas ações, ou eu faço tudo sozinho nesta responsabilidade ou caso eu não consiga fazer isso, eu vou precisar da colaboração de alguma outra classe, de alguma outra responsabilidade que pode estar outra classe, pode estar na mesma classe ou outra classe. Então, eu tenho essas duas coisas que eu preciso saber para fazer, definir a lógica da minha responsabilidade. Se eu consigo fazer tudo sozinho, ótimo, perfeito, se eu não consigo, é muito melhor eu deixar que uma classe mais apropriada faça isso por mim. Mais para a frente nós iremos ver alguns princÃpios que vão ajudar a definir quando eu passo na minha própria classe ou numa outra classe a definição da lógica da responsabilidade, nós veremos isso mais tarde. Mas neste momento é só para entender isso, ou eu faço tudo na lógica da minha classe ou eu, algumas dessas coisas eu transfiro. Nos exemplos anteriores, na classe Banco relação à classe Conta Corrente, eu precisava da colaboração da classe Conta Corrente, no primeiro momento para me devolver o número da conta e no segundo para me devolver o saldo. Resumindo, sobre a classe Conta Corrente, nós vamos usar essa estrutura que eu tenho a classe, cujo nome é Conta Corrente, eu tenho uma lista de responsabilidades e uma lista de colaboração. No caso da Conta Corrente, por simplicidade, eu estou colocando duas responsabilidades apenas e nenhuma colaboração. Então, eu tenho a responsabilidade: Credita valor ao saldo atual, Debita valor do saldo atual, por exemplo. Já a classe Banco eu estou definindo o nome da classe Banco, a lista de responsabilidades, então eu tenho: registra uma conta nova, apresenta os números das contas ativas, obtém o saldo total do Banco. As colaborações, como eu disse as colaborações são responsabilidade de outras classes e eu estou identificando aà de qual classe que é essa responsabilidade que eu estou usando e qual é a colaboração que é uma responsabilidade. No caso do primeiro, da primeira responsabilidade da classe Banco, registra uma conta nova, a colaboradora é a Conta Corrente e a colaboração é o construtor da própria classe Conta Corrente. Vocês se lembram que a lógica da registra uma conta corrente iniciava por eu criar objeto da Conta Corrente e a gente faz isso Java através do construtor, então aqui, isso é uma colaboração. A segunda, apresenta os números das contas ativas, a classe colaboradora novamente é a Conta Corrente, a colaboração é a responsabilidade, sabe o número da conta, que é do tipo saber da Conta Corrente. A outra responsabilidade de Banco é obtém o saldo total do banco, a classe colaboradora, novamente, nossos exemplos só envolvem as duas classes Banco e Conta Corrente, a classe colaboradora é a Conta Corrente, a colaboração agora é sabe o valor do saldo atual que é uma responsabilidade da classe Conta Corrente. Vamos fazer aqui uma diferenciação, classe colaboradora e colaboração. A colaboração é uma responsabilidade de uma classe colaboradora, quando alguma responsabilidade de alguma classe, pode ser outra classe, precisa da colaboração de uma responsabilidade da classe colaboradora, essa responsabilidade é chamada de colaboração. Normalmente nós chamamos a classe colaboradora de classe servidora porque ela é que vai oferecer a sua responsabilidade como se fosse serviço para as outras classes. Esse serviço é a colaboração. Já a classe que depende da classe colaboradora, ela precisa que a classe colaboradora colabore com ela com algum serviço, com alguma colaboração, nós chamamos essa classe de classe cliente. Podemos representar UML essa relação entre a classe cliente e a classe servidora. Então a classe cliente ela tem uma responsabilidade que depende, ela precisa da colaboração de uma responsabilidade da classe servidora. Então há relação de dependência entre a classe cliente com a classe servidora. A classe cliente depende da classe servidora, esse conceito de dependência, que é uma classe depender de outra, nesse caso ela depende por causa da colaboração, é conceito muito importante que nós vamos debater ao longo de todo o curso, a tentativa sempre é de diminuir essas dependências entre classes. Termo que abrange tudo isso e que nós usamos muito, é acoplamento, eu digo que a classe cliente está acoplada à classe servidora. Então, toda a vez que uma responsabilidade minha precisa de uma colaboração de uma classe colaboradora ou servidora, há acoplamento entre essas duas classes. Então a gente fala de dependência e de acoplamento, a mesma coisa, o objetivo sempre vai ser minimizar, eliminar, reduzir as dependências entre classes. Finalmente, essa representação que eu usei anteriormente, descrevendo a classe através do nome da classe, das suas responsabilidades e das suas colaborações ou classes colaboradoras, nós chamamos isso de Cartão CRC, é uma técnica muito antiga de orientação a objeto, mas que é muito útil até hoje para facilitar a definição de classes e identificar as suas responsabilidades e colaborações, por isso que estamos apresentando nesse curso e isso vai reforçar, consolidar os conceitos de classe, responsabilidade, colaboração, dependência, acoplamento, classes clientes, classes servidoras, tudo isso vai ser discutido ao longo do curso. Próxima aula iremos dar continuidade à questão dos cartões CRC, onde mostraremos a modelagem CRC. Nesta aula, o objetivo era caracterizar e identificar classes colaboradoras e colaborações, diferenciar classes colaboradoras de colaborações, uma classe colaboradora é uma classe que tem uma responsabilidade e vai ser útil para alguma outra classe. A essa responsabilidade a gente chama de colaboração. Até à próxima aula! [MÚSICA] [MÚSICA]