encapsulamento em orientação a objetos

23
Metodologia e Linguagem de Programação 1

Upload: daniel-brandao

Post on 18-Feb-2017

579 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Encapsulamento em Orientação a Objetos

Metodologia e Linguagem de Programação 1

Page 2: Encapsulamento em Orientação a Objetos

Encapsulamento

Page 3: Encapsulamento em Orientação a Objetos

Encapsulamento - Definição

• Encapsular seria o mesmo que esconder todos os membros de umaclasse, além de esconder como funcionam as rotinas (no caso métodos) do nosso sistema. Seria uma espécie de proteçã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.

Metodologia e Linguagem de Programação 4

Page 4: Encapsulamento em Orientação a Objetos

Encapsulamento - Definição

• Para protegermos os atributos e métodos, por tanto, podemos mudar seus modificadores. O principal deles é o modificador private que faz com que ninguém consiga modificar, nem mesmo ler, o atributo em questão.

• No exemplo a seguir, temos uma classe chamada Funcionário com um atributo do tipo Double chamado salário:

Metodologia e Linguagem de Programação 5

class Funcionario {

double salario ;}

Page 5: Encapsulamento em Orientação a Objetos

Encapsulamento - Definição

• No exemplo, o atributo salario pode ser acessado ou modificado por código escrito em qualquer classe queesteja no mesmo diretório que a classe Funcionario. Portanto, o controle desse atributo é descentralizado.

• Como fazer para proteger o acesso a este atributo para que ele não seja alterado por qualquer classe?

Metodologia e Linguagem de Programação 6

Page 6: Encapsulamento em Orientação a Objetos

Encapsulamento - Definição

• Podemos fazê-lo incluindo o modificador Private no atributo. Exemplo:

Metodologia e Linguagem de Programação 7

class Funcionario {

private double salario ;

void aumentaSalario ( double aumento ) {

// lógica para aumentar o salário

}}

Page 7: Encapsulamento em Orientação a Objetos

Encapsulamento - Definição

• Um atributo privado só pode ser acessado ou alterado por código escrito dentro da classe na qual ele foi definido. Se algum código fora da classe Funcionário tentar acessar ou alterar o valor do atributo privado salario, um erro de compilação será gerado.

• Por isso, apenas um método pertencente a própria classe podem alterar o valor deste atributo. O intuito é ter sempre um controle centralizado do dados dos objetos para facilitar a manutenção do sistema e a detecção de erros.

Metodologia e Linguagem de Programação 8

Page 8: Encapsulamento em Orientação a Objetos

Encapsulamento

Basicamente, usamos quatro tipos de encapsulamento que são divididos em dois níveis:

• Nível de classe ou topo: Quando determinamos o acesso de uma classe inteira que pode ser public ou package-private (padrão);

• Nível de membro: Quando determinamos o acesso de atributos ou métodos de uma classe que podem serpublic, private, protected ou package-private (padrão).

Metodologia e Linguagem de Programação 9

Page 9: Encapsulamento em Orientação a Objetos

Encapsulamento

• Public: O modificador public deixará visível a classe ou membro para todas as outras classes, subclasses e pacotes do projeto Java.

• Private: O modificador private deixará visível o atributo apenas para a classe em que este atributo se encontra.

• Protected: O modificador protected deixará visível o atributo para todas as outras classes e subclasses que pertencem ao mesmo pacote. A principal diferença é que apenas as classes do mesmo pacote tem acesso ao membro. O pacote da subclasse não tem acesso ao membro.

• Sem Modificador (Padrão ou Default): Por padrão, a linguagem Java permite acesso aos membros apenas ao pacote em que ele se encontra.

Metodologia e Linguagem de Programação 10

Page 10: Encapsulamento em Orientação a Objetos

Métodos Privados

• O papel de alguns métodos pode ser o de auxiliar outros métodos da mesma classe. E muitas vezes, não é correto chamar esses métodos auxiliares de fora da sua classe diretamente.

• No próximo exemplo, temos o método descontaTarifa() como um método auxiliar dos métodos deposita()e saca(). Além disso, ele não deve ser chamado diretamente, pois a tarifa só deve ser descontada quando ocorre um depósito ou um saque. Exemplo:

Metodologia e Linguagem de Programação 11

Page 11: Encapsulamento em Orientação a Objetos

Exemplo:

Metodologia e Linguagem de Programação 12

class Conta {

private double saldo ;

void deposita ( double valor ) {

this.saldo += valor ;

this.descontaTarifa ();

}

void saca ( double valor ) {

this.saldo -= valor ;

this.descontaTarifa ();

}

// Método privado para que não seja alterado fora da classe

private void descontaTarifa () {

this.saldo -= 0.1;

}

}

Page 12: Encapsulamento em Orientação a Objetos

Métodos Públicos

• Para que um método seja visível em outras classes, é necessário que ele seja do tipo Public. Do contrário, seu modificador será o padrão (default), que permite que ele seja visível apenas dentro do próprio pacote de criação.

• Os pacotes em Java são os responsáveis pela organização do projeto e pela proteção de parte do código em restrições específicas. Exemplo:

Metodologia e Linguagem de Programação 13

Page 13: Encapsulamento em Orientação a Objetos

Exemplo:

Metodologia e Linguagem de Programação 14

class Conta {

private double saldo ;

// Método público

public void deposita ( double valor ) {

this.saldo += valor ;

this.descontaTarifa ();

}

// Método público

public void saca ( double valor ) {

this.saldo -= valor ;

this.descontaTarifa ();

}

// Método privado

private void descontaTarifa () {

this.saldo -= 0.1;

}

}

Page 14: Encapsulamento em Orientação a Objetos

MAS... Por quê encapsular?

Metodologia e Linguagem de Programação 15

Page 15: Encapsulamento em Orientação a Objetos

MAS... Por quê encapsular?

• Uma das ideias mais importantes da orientação a objetos é o encapsulamento. Encapsular significa esconder a Implementação dos objetos. O encapsulamento favorece principalmente dois aspectos de um sistema: a manutenção e o desenvolvimento.

Metodologia e Linguagem de Programação 16

Page 16: Encapsulamento em Orientação a Objetos

MAS... Por quê encapsular?

• A manutenção é favorecida pois, uma vez aplicado o encapsulamento, quando o funcionamento de um objeto deve ser alterado, em geral, basta modificar a classe do mesmo.

• O desenvolvimento é favorecido pois, uma vez aplicado o encapsulamento, conseguimos determinar precisamente as responsabilidades de cada classe da aplicação.

• O conceito de encapsulamento pode ser identificado em diversos exemplos do cotidiano.

Metodologia e Linguagem de Programação 17

Page 17: Encapsulamento em Orientação a Objetos

MAS... E se tudo for encapsulado?

• Se todos os atributos forem do tipo Private, teremos um acesso a esses atributos exclusivamente por Métodos. Exemplo:

Metodologia e Linguagem de Programação 18

class Cliente {

private String nome ;

public String consultaNome () {

return this . nome ;

}}

Page 18: Encapsulamento em Orientação a Objetos

MAS... E se tudo for encapsulado?

• Da mesma forma, eventualmente, é necessário modificar o valor de um atributo a partir de qualquer lugar do sistema. Nesse caso, também poderíamos criar um método para essa tarefa. Exemplo:

Metodologia e Linguagem de Programação 19

class Cliente {

private String nome ;

public void alteraNome (String nome) {

return this . nome = nome ;

}}

Page 19: Encapsulamento em Orientação a Objetos

Exercício 1

• Crie um projeto no Eclipse chamado Encapsulamento.

• Defina uma classe para representar os funcionários do banco com um atributo para guardar os salários e outro para os nomes.

• Crie uma classe Teste, testando a classe Funcionario, criando um objeto e manipulando diretamente os seus atributos.

Metodologia e Linguagem de Programação 20

Page 20: Encapsulamento em Orientação a Objetos

Exercício 2

• Modifique a classe anterior (Funcionario), utilizando osconceitos de encapsulamento (tornando os atributosprivados). Depois, tente compilar a classe teste e observe oresultado.

Metodologia e Linguagem de Programação 21

Page 21: Encapsulamento em Orientação a Objetos

Exercício 3

• Crie métodos de acesso com nomes padronizados para osatributos definidos na classe Funcionario (gets e sets).

• Altere a classe Teste também para que ela utilize os métodos de acesso ao invés de manipular os atributos do objeto da classe Funcionario diretamente.

Metodologia e Linguagem de Programação 22

Page 22: Encapsulamento em Orientação a Objetos

Exercício 4

• Crie um método chamado Aumenta Salário dentro da classeFuncionário, que deverá receber um valor e somar ao valordo salário. Teste o mesmo dentro da classe Teste.

Metodologia e Linguagem de Programação 23

Page 23: Encapsulamento em Orientação a Objetos

Exercício 5

• Crie um método chamado Descontos dentro da classeFuncionário, que deverá subtrair de salario os descontos(tipo INSS) do valor do salário. Teste o mesmo dentro daclasse Teste.

Metodologia e Linguagem de Programação 24