Programação Orientada à Objetos Aula 8 – Prática com Encapsulamento Ementa Encapsulamento Introdução O conceito de encapsulamento é decorrente do fato de se combinar os dados (atributos) e o código que manipula estes dados (métodos) em um único Objeto. Ele garante que a única forma de acesso aos dados é através dos métodos disponíveis ao usuário (chamados públicos). Os demais métodos e os atributos da classe ficam sendo privados, ou seja, apenas funções-membro da classe têm acesso direto aos mesmos. Introdução O conceito de encapsulamento não é exclusivo do paradigma de Orientação a Objetos. Ele já era utilizado na definição de Tipos Abstratos de Dados, para dizer que os dados só deveriam ser manipulados pelas funções que compunham o TAD. Trocando em miúdos, o encapsulamento diz respeito à definição de uma estrutura que contenha os dados, defina quais os métodos de acesso público a esses dados e possua meios de proteger os demais métodos e os dados contra acesso direto. Mas... por que impedir este acesso? Introdução Encapsular é fundamental para que seu sistema seja suscetível a mudanças: não precisaremos mudar uma regra de negócio em vários lugares, mas sim em apenas um único lugar, já que essa regra está encapsulada. O conjunto de métodos públicos de uma classe é também chamado de interface da classe, pois esta é a única maneira a qual você se comunica com objetos dessa classe. Métodos Getters e Setters O modificador private faz com que ninguém consiga modificar, nem mesmo ler, o atributo em questão. Com isso, temos um problema: como fazer para mostrar o saldo de uma Conta, já que nem mesmo podemos acessá-lo para leitura? Precisamos então arranjar uma maneira de fazer esse acesso. Sempre que precisamos arrumar uma maneira de fazer alguma coisa com um objeto, utilizamos métodos Get e Set! Vamos então criar um método, digamos pegaSaldo, para realizar essa simples tarefa: Métodos Getters e Setters Métodos Getters e Setters Para permitir o acesso aos atributos (já que eles são private) de uma maneira controlada, a prática mais comum é criar dois métodos, um que retorna o valor e outro que muda o valor. A convenção para esses métodos é de colocar a palavra get ou set antes do nome do atributo. Por exemplo, a nossa conta com saldo, limite e titular fica assim, no caso da gente desejar dar acesso a leitura e escrita a todos os atributos: Métodos Getters e Setters Exemplo 1 Alunos e Professor Exercício 1 Replique o exemplo 1 para a classe “Professor”, utilizando metodos GET´s e Set´s. Imprima no programa principal o nome do Professor e seu curso. Exercício 2 Na Classe “Professor” faça um método Para calcular o salário do professor. Detalhes: Faça um método private que realize o calculo encapsulado do salário do professor (// valor horas lecionadas * numero de aulas * 4), o valor da hora lecionada vale R$ 29,00, faça o usuário entrar com um valor em relação ao “numero de aulas”. Utilize o método private dentro de um método “SetSalarioProfessor”, este método será chamado no programa principal. Utilizando os conceitos apresentados em aula imprima o Salário do professor na tela, lembrando que o atributo Salário é private. Exercício 3 Tente incluir a idéia de encapsulamento no método de calcular o salário do professor. Para isso o usuário deve definir com um digito 1,2 ou 3, indicando se o professor respectivamente é especialista, mestre ou doutor, dependo da titulação o valor da hora aula é diferente: Especialista – R$ 22,00 Mestre – R$ 29,00 Doutor – R$ 31,00 Exercício 4 Utilizando os conceitos da aula de hoje, crie uma nova classe “Calculadora”. Esta classe devera calcula a média do aluno de modo encaplsulado No programa principal o usuário deve entrar com o nome do aluno, e as 4 (quatro) notas. Ao final o programa deve imprimir o nome do aluno, com a média final, e uma atribuição falando se o aluno foi “aprovado” ou “reprovado” Detalhe: Media > 70 = Aprovado