Buscar

Encapsulamento e Associações de Classes


Continue navegando


Prévia do material em texto

Linguagem de Programação
Aula 06
ENCAPSULAMENTO E ASSOCIAÇÕES DE CLASSES
Nesta aula, você irá: 
1. Apresentar os conceitos de encapsulamento e associações de classes;
2. Criar e manipular classes e objetos, com seus atributos encapsulados, e que se relacionem através de associações;
3. Utilizar interfaces gráficas interagindo com objetos e classes previamente definidos;
4. Explorar o conceito de encapsulamento e associações de classes, em exemplos e exercícios;
Encapsulamento
Mecanismo utilizado na Programação Orientada a Objetos, que visa obter segurança, modularidade e autonomia para os objetos;
Conseguido, através da definição de visibilidade privada dos atributos, ganhando-se, assim, autonomia, para definir o que o mundo externo a classe poderá visualizar e acessar, normalmente através de métodos públicos.
Conclusão:
Sempre defina os atributos de uma classe como privados, a não ser que tenha uma boa justificativa para isso.
O Encapsulamento protege os atributos de acesso direto e permite apenas acesso através de métodos públicos
Modificadores de Visibilidade
Um modificador de acesso determina como será a visibilidade de uma classe, método ou atributo a partir de outras classes.
Modificadores de Acesso
Exemplos:
Sem encapsulamento
class NaoEncapsulado {
//implicitamentamente há modificador de acesso, mas não é o mais restritivo
            int semProteção;
}
 
public class TesteNaoEncapsulado {
           public static void main(String[] args) {
                   NãoEncapsulado ne = new NãoEncapsulado(); 
                   //ne é uma instância de NãoEncapsulado
                   ne.semProtecao = 10; //acesso direto ao atributo
                   System.out.println("Valor sem proteção: " + ne.semProteção); //acesso direto aos atributos
           }
}
Com encapsulamento
class Encapsulado {
          //private é um modificador de acesso de restrição máxima
          private int comProteção;
          public void setComProteção(int comProteção) {
                       this.comProteção= comProteção;
          }
          public int getComProteção () {
                       return this.comProteção;
          }
}
 
public class TesteEncapsulado {
           public static void main(String[] args) {
                  Encapsulado e = new Encapsulado(); 
                  // O Objeto "e" é uma instância de Encapsulado
 
                  e.comProteção = 10;
                 //deve-se acessar o atributos de forma indireta, encapsulada
                 e.setComProteção (10);
                 System.out.println("Valor com proteção: " + e.getComProteção ());
           }
}
Métodos Get’s e Set’s
Como vimos, é preciso criar um mecanismo para acessar os campos private de uma classe. Para isso, é comum fornecer métodos públicos para acessar as informações encapsuladas. Estes métodos são chamados de set e get. O método set atribui valores ao atributo, enquanto que o método get obtém seus valores.
A composição do nome destes métodos é sempre com o nome set + <nome atributo> ou get + <nome atributo>.
Abaixo vemos um exemplo de atributo que não permite alteração, logo seus atributos são privados e só foi disponibilizado os métodos get’s.
Exercício
1- A partir da classe Automovel.java apresentada abaixo, encapsule seus métodos e crie mecanismos públicos para acessar estas características.
2- Crie mais um atributo na classe do tipo boolean – estadoMotor
3- Crie métodos ligarMotor() e desligarMotor(), atualizando o valor de estadoMotor.
Automóvel.java
 
public class Automóvel {
           String modelo, cor;
           int ano;
}
Associação de Classes
É um vínculo que permite que objetos de uma ou mais classes se relacionem. Através destes vínculos, é possível que um objeto troque mensagens ou chame os métodos de outros objetos.
Na UML, quando estamos modelando o diagrama de classes, temos a Associação, a Composição e a Agregação, como tipos de Associações.
As Associações têm acoplamento fraco.
As Composições têm acoplamento forte.
A Agregação faz parte de.
Na implementação, não há diferença entre as abordagens, o que as distingue são os controles adicionados pelo desenvolvedor.
Unified Modeling Language – Linguagem de modelagem unificada.
Saiba mais – leia o documento 1 em pdf.
Composição
Tipo de associação onde uma nova classe usa classes existentes como atributos; 
Relacionamento “tem um”.
Ex.: uma conta tem um dono (cliente), 
um cliente tem um nome (string);
class Aleatorio { 
           int numero; 
           Aleatorio(int max) { 
           numero = new Random().nextInt(max); 
           } 
} 
public class NumeroAleatorio { 
            private String nome; 
            private Aleatorio valor; 
 
            NumeroAleatorio(String nome, int valor) { 
                   this.nome = nome; 
                   this.valor = new Aleatorio(valor); 
            } 
 
            public static void main(String[] args) { 
                     NumeroAleatorio n; 
                     n = new NumeroAleatorio("Número secreto", 50); 
            } 
}
Podemos ter as seguintes multiplicidades de associações:
1 para 1
1 para *
* para *
Onde * equivale a muitos.
Exercício de fixação
Faça um programa em Java, para adivinhar um número entre 1 e 100. O programa deverá sortear um número aleatório entre 1 e 100 e armazenar em na classe Jogo. Construa uma classe Jogar que instancia o objeto jogo do tipo Jogo. Este objeto jogar fará a interface entre o usuário e o objeto jogo. Toda vez que o jogador envia um número para ser avaliado, o jogo avalia se:
A- o jogador acertou – é enviada uma mensagem de congratulações e é informado o número de tentativas gastas.
B- o número informado é maior que o sorteado – o sistema envia mensagem para o usuário que o número é maior, incrementa o número de tentativas e solicita um novo número.
C- o número informado é menor que o sorteado – o sistema envia mensagem para o usuário que o número é menor, incrementa o número de tentativas e solicita um novo número.
O jogo termina quando o jogador acerta. Neste momento o sistema irá perguntar se deseja jogar novamente.
Para saber mais sobre os tópicos estudados nesta aula, pesquise na internet sites, vídeos e artigos relacionados ao conteúdo visto. Se ainda tiver alguma dúvida, fale com seu professor online utilizando os recursos disponíveis no ambiente de aprendizagem. 
Para esta aula, sugiro as seguintes tarefas: 
Leitura do capítulo 3: Programação orientada a objetos: herança, do livro- Java Como Programar 8ª edição.
Resolução dos exercícios de 3.5 até 3.17, do capítulo 3, do livro- Java Como Programar.
Nesta aula, você: 
Identificou o conceito de encapsulamento em orientação a objetos;
Criou e manipulou classes e objetos com atributos encapsulados;
Associou classes e manipulou objetos associados;
Exercitou exemplos;
Desenvolveu e executou pequenos programas com orientação a objetos.
 
Tema: Interfaces
Apresentar o pacote de Interfaces Swing.
Criar e manipular pequenos programas com a biblioteca.
Criar e manipular classes e objetos que se relacionem com as Interfaces.
Respostas: 2 – 3