Implementação Orientada a Objetos – Aula 03 Atributos e Encapsulamento Prof. Danielle Martin/ Marcia Bissaco Universidade de Mogi das Cruzes
Pilares da Orientação a Objetos A orientação a objetos suporta quatro conceitos chave na criação de classes: –Abstração –Encapsulamento –Herança –Polimorfismo
Abstração Diz-se da possibilidade de abstrair entidades do mundo real como parte da solução de software Ex. –Criação de classes Aluno, Veiculo, Documento
Exemplo Em uma aplicação de software para um sistema acadêmico, pode- se criar a classe Aluno. A classe Aluno possui os atributos nome, rgm, nota1, nota2, notaFinal e o método calcularMedia.
Declaração de Classes Sintaxe: class { [ ] } Exemplo: public class Aluno { public int rgm; public void setRgm( int novoRgm ) { rgm = novoRgm; }
Declaração de Atributos Sintaxe: [ ] [= ]; Exemplo: public class Aluno { private int rgm; private String nome; private double nota1; private double nota2; private double notaFinal; private double notaDeAprovacao = 5.0; }
Declaração de métodos Sintaxe: [ ] ([ ]){ [ ] } Exemplo: public class Calculadora { public double somar (double x, double y) { double resultado; resultado = x + y; return resultado; }
Criação de objetos Um objeto é uma instância de uma classe Para criar um novo objeto, usa-se a instrução new Sintaxe para declaração de um objeto do tipo Aluno: [ ] = new [ ]([ ]); Ou: [ ] ; = new [ ]([ ]); Exemplo: Aluno objetoAluno = new Aluno() Ou: Aluno objetoAluno; objetoAluno = new Aluno();
Acessar membros de objetos Apos a instrução new, todos os métodos e atributos da classe serão membros do objetoAluno Para acessar os atributos e métodos do objeto, usa-se o “ponto” como separador. Sintaxe:. ; Exemplo: objetoAluno.nota1 = 10; //permitido somente se nota1 for publico objetoAluno.calcularMedia();
Encapsulamento Diz-se da possibilidade da classe de agregar toda a informação relevante para seu processamento, escondendo detalhes de implementaçãode classes externas Ex. –Toda a manipulação de dados de Alunos se encontra na classe Aluno –Atributos da classe Aluno nao devem ser acessados por classes externas, a menos que explicitamente permitido
Encapsulamento Toda a manipulação de dados de Alunos se encontra na classe Aluno Operações disponíveis para a classe Aluno Dados (atributos) da classe Aluno
Encapsulamento Atributos da classe Aluno não devem ser acessados por classes externas, a menos que explicitamente permitido Uma boa prática para garantir o encapsulamento dos dados é declarar os atributos sempre privados, e os métodos públicos.
Modificadores de acesso/visibilidade Existem três modificadores de visibilidade de atributos e métodos: public O atributo/método declarado como público podera ser acessado por qualquer objeto externo. O acesso externo neste caso é total. private O atributo/método declarado como private somente pode ser acessado pelo próprio objeto, sem nenhuma visibilidade externa. protected O atributo/método declarado como protected pode ser acessado pelo próprio objeto e/ou por objetos de classes derivadas através de uma herança (Herança será um tópico abordado nas próximas aulas).
Métodos de acesso getters e setters Se os atributos são privados, como ler/modificar o valor dos mesmos para diferentes objetos? SOLUÇÃO: criar métodos que encapsulem o acesso aos atributos. Esses métodos sao chamados GETTERS e SETTERS –Para LER o valor do atributo rgm, criar o método getRgm –Para ALTERAR o valor do atributo rgm, criar o método setRgm
Métodos de acesso getters e setters Isso é permitido, mas NÃO recomendado: Aluno objetoAluno; objetoAluno = new Aluno(); objetoAluno.nome = “João”; objetoAluno.nota1 = 2; objetoAluno.nota2 = 6; objetoAluno.notaFinal = 10; System.out.println(“Media final ” + objetoAluno.notaFinal); //irá imprimir 10 Isso é permitido E recomendado: Aluno objetoAluno; objetoAluno = new Aluno(); objetoAluno.setNome(“João”); objetoAluno.setNota1(2); objetoAluno.setNota2(6); objetoAluno.calcularMedia(); System.out.println(“Media final ” + objetoAluno.getNotaFinal()); //irá imprimir 4
Exemplo: Classe Aluno Exemplo public class Aluno { private int rgm; private String nome; private double nota1; private double nota2; private double notaFinal; public void setRgm(int r) { rgm = r; } public void setNome(String n) { nome = n; } public void setNota1(double n) { nota1 = n; } public void setNota2(double n) { nota2 = n; } public int getRgm() { return rgm; } public String getNome() { return nome; } public double getNota1() { return nota1; } public double getNota2() { return nota2; } public double getNotaFinal() { return notaFinal; } public void calcularMedia() { notaFinal = (nota1 + 2*nota2)/3; } Não existe o médoto setNotaFinal. O atributo notaFinal apenas poderá ser modificado através do método calcularMedia().
Exercicio: Criar objetos Aluno 1.Criar a classe Aluno conforme o slide anterior (nao esqueça de salvá-la em um arquivo Aluno.java) 2.Criar uma classe executável AplicacaoMedia que instancie um objeto aluno, atribua valores para nome, rgm, nota1 e nota2 e imprima a notaFinal. Nao esqueça de salvá-la em um arquivo chamado AplicacaoMedia.java public class AplicacaoMedia { public static void main(String[] args) { //Digite seu codigo aqui } 3.Compile ambas as classes e execute AplicacaoMedia
Classe de aplicação, exemplo 1 public class AplicacaoMedia { public static void main(String[] args) { Aluno objetoAluno; objetoAluno = new Aluno(); objetoAluno.setNome(“João”); objetoAluno.setNota1(2); objetoAluno.setNota2(6); objetoAluno.calcularMedia(); System.out.println(“Media final ” + objetoAluno.getNotaFinal()); }
Classe de aplicação, exemplo 2 public class AplicacaoMedia { public static void main(String[] args) { Aluno objetoAluno; objetoAluno = new Aluno(); objetoAluno.setNome(args[0]); objetoAluno.setNota1(2); objetoAluno.setNota2(6); objetoAluno.calcularMedia(); System.out.println(“Media final ” + objetoAluno.getNotaFinal()); } obs.: Em tempo de execução é passado um valor para args. Por exemplo: java AplacacaoMedia Jose
Classe de aplicação, exemplo 3 import java.util.Scanner; public class AplicacaoMedia2 { public static void main(String[] args) { Scanner Teclado = new Scanner (System.in); Aluno objetoAluno; objetoAluno = new Aluno(); System.out.println("Digite um nome"); objetoAluno.setNome(Teclado.next()); System.out.println("Digite a primeira nota"); objetoAluno.setNota1(Teclado.nextFloat()); System.out.println("Digite a segunda nota"); objetoAluno.setNota2(Teclado.nextFloat()); objetoAluno.calcularMedia(); System.out.println("Media final " + objetoAluno.getNotaFinal()); }