[MÚSICA] [MÚSICA] Olá, bem vindo ao curso de Orientação a Objetos com Java, eu sou Clovis Fernandes. Vamos dar continuidade ao que vÃnhamos falando sobre responsabilidade pública e privada. Nesta parte 2 você vai poder ver caracterizado o conceito de responsabilidade privada e também vamos concluir falando de contrato. E o que vem a ser responsabilidade privada? Responsabilidade pública a gente já viu. Toda a responsabilidade que é colaboradora de uma classe servidora que é a colaboradora de outra classe ela é uma responsabilidade pública. Agora definir se uma responsabilidade que não seja pública é privada, nós precisamos tomar certo cuidado e é isso que nós vamos mostrar aqui. Eventualmente a responsabilidade que não seja, pode existir uma responsabilidade que não seja nem pública nem privada e aà ela deve ser retirada da nossa classe. Então respondendo à pergunta "O que é uma responsabilidade privada?" Responsabilidade privada faz parte do funcionamento interno da classe, ela não vai ser colaboradora de nenhuma classe externa. No diagrama UML a gente representa através do sinal de menos. Vocês lembram que na pública era mais, agora é menos. Na linguagem Java a gente usa a palavra reservada private, é dessa forma que ela vai ficar conhecida. Vamos avançar mais. Uma coisa que tem que ficar bem clara desde o inÃcio é que uma responsabilidade privada ela não pode ser colaboradora de outras classes, inclusive nem de instâncias da própria classe. Eu vou exemplificar: voltamos à nossa classe Livro, nós temos duas responsabilidades públicas, o anexaUsuario e o desanexaUsuario, eu estou acrescentando aà uma responsabilidade privada exemplo, que eu estou chamando de método privado, então ele está lá representado nesse diagrama, nessa representação de classe UML com o sinal menos. Eu estou exemplificando também, dentro da lógica do método anexaUsuario, eu estou fazendo uso do método privado, fazendo uso do método privado. Então vocês vejam que consta dentro da lógica do anexaUsuario, eu posso falar this.metodoPrivado. O this está representando o que é naquela instância de Livro, não de outra é daquela instância de livro. Vamos ampliar pouco mais o escopo agora, só para exemplificar. Então eu tenho a classe Biblioteca, vocês lembram que ela não estava associada à classe Livro, ela dependia de Livro. Então a classe Biblioteca eu posso mandar uma mensagem para, o objeto da classe Biblioteca pode mandar uma mensagem para objeto Livro01 que é da classe Livro, eu estou aqui aproveitando para exemplificar antes a gente falou do diagrama de classes aqui já é diagrama de objetos, a gente chama de diagrama de colaboração ou de comunicação, que eu exemplifico os objetos. Então eu tenho objeto Biblioteca, vai logo depois do nome, de dois pontos, eu estou querendo dizer que pouco me importa aà qual é o nome desse objeto Biblioteca, e tenho o objeto Livro01 e objeto Livro02. Então o objeto Biblioteca envia uma mensagem para o Livro01, o anexaUsuario, que ele passa qual é o usuário que o Livro01 tem que anexar. Nessa mensagem, Livro01 o método que vai tratar disso é o anexaUsuario e lá dentro dele ele vai poder usar o método privado, agora o objeto Biblioteca se quiser mandar, se quiser enviar a mensagem método privado direto por exemplo para o objeto Livro02, isso já não é possÃvel, por isso que tem X cortando essa tentativa de envio de mensagem, ele não pode se comunicar mandando uma mensagem para método privado. Inclusive o próprio objeto Livro01, que internamente ele pode usar o método privado, se ele quiser enviar método privado, uma mensagem com o método privado para o Livro02 que é objeto da classe Livro portanto ele é diferente do Livro01, ele tem vida própria, se ele quiser enviar ele também não pode enviar. Porquê? É método privado, só posso usar internamente dentro de cada objeto, então ele não pode fazer isso. Outra coisa importante de recordar é que o método privado não pode colaborar com instâncias de subclasse, ou seja, que significa isso? Significa que método privado não é herdado, ele não é visÃvel por subclasses, então ele não é herdado, isso é uma coisa que tem que ficar bem claro também. Então exemplificar essa situação: eu estou mostrando para vocês uma especialização da classe Livro, que é o LivroInfantil, que no método público, método Infantil para exemplificar, a lógica desse método está tentando usar o método privado da superclasse, da classe LivroInfantil que é a classe Livro. Isso não é possÃvel fazer, porquê? Porque o método privado da classe Livro, ele é privado com isso ele não é herdado pela classe LivroInfantil, você não pode fazer isso. Concluindo, o método privado ele é colaboração exclusiva de responsabilidade privada ou pública de instância da própria classe, nós vimos que não dá para fazer com instância de outra classe, da mesma classe, uma outra instância da mesma classe, essa restrição tem que ser seguida. Bom, a gente tem responsabilidade pública e a gente tem responsabilidade privada, de alguma maneira a responsabilidade privada, ela tem que ser colaboração direta ou indiretamente de responsabilidades públicas da classe. Se ela não for não faz sentido existir, ela tem que ser removida da nossa classe. No nosso exemplo aqui, vamos supor o método privado não seja mais necessário por uma mudança qualquer de lógica do anexaUsuario, então eu não estou usando mais anexaUsuario. Suponha também que nenhum outro método público, como no caso o desanexaUsuario, também não faça uso desse método privado. O que vai acontecer então? O método privado ele deve ser eliminado, removido da classe Livro. Porquê? Ele não é usado, ele não é colaboração interna da classe Livro nem para o anexaUsuario, nem para o desanexaUsuario e nem para nenhum outro método público. Então nem interessa se ele fosse usado como colaboração de algum outro método privado, não interessa. Não está colaborando com nenhum responsabilidade ou método público, então ele deve ser removido. Dado que nós já definimos o que é responsabilidade pública e o que é que é responsabilidade privada, nós podemos então definir o que é que é o contrato. O contrato é conjunto de serviços, de comportamentos, que uma classe oferece para colaborar com outras classes e com a própria classe inclusive. Com isso, esse contrato ele pode ser usado por outras classes para colaborar com responsabilidades dessas outras classes. O que é que vai fazer parte desse contrato? Todas as responsabilidades públicas, simplesmente isso, o contrato vai consistir de todas as responsabilidades públicas. Normalmente a gente chama o contrato também de protocolo, de interface padrão, de interface da classe, interface externa, então todos esses nomes correspondem a esse contrato, que no fundo está querendo dizer o seguinte: "Olha esse é o conjunto de métodos públicos que estão disponÃveis para uso por qualquer classe que esteja necessitando dessa colaboração." Com isso concluÃmos os aspectos relativos à colaboração responsabilidade pública, responsabilidade privada e contrato. Ou seja você agora é capaz de caracterizar e entender todos esses conceitos e saber quando usá-los de maneira adequada. Obrigado!