k19-k11-orientacao-a-objetos-em-java
218 pág.

k19-k11-orientacao-a-objetos-em-java

Disciplina:Algoritmos8.070 materiais121.978 seguidores
Pré-visualização37 páginas
java.util.Date;
3
4 class ContaPoupanca extends Conta {
5 private int diaDoAniversario;
6
7 public void imprimeExtratoDetalhado () {
8 System.out.println("EXTRATO DETALHADO DE CONTA POUPANÇA");
9

102 www.k19.com.br

103 CLASSES ABSTRATAS

10 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
11 Date agora = new Date();
12
13 System.out.println("DATA: " + sdf.format(agora));
14 System.out.println("SALDO: " + this.getSaldo ());
15 System.out.println("ANIVERSÁRIO: " + this.diaDoAniversario);
16 }
17 }

Código Java 10.16: ContaPoupanca

10 Altere a classe TestaConta para chamar o método imprimeExtratoDetalhado().

1 class TestaConta {
2 public static void main(String [] args) {
3 Conta c = new ContaPoupanca ();
4
5 c.setSaldo (1000);
6
7 c.imprimeExtratoDetalhado ();
8 }
9 }

Código Java 10.17: TestaConta.java

Exercícios Complementares

1 Defina uma classe genérica para modelar os funcionários do banco.

2 Crie um objeto da classe que modela os funcionários do banco e utilize os métodos de acesso
com nomes padronizados para alterar os valores dos atributos.

3 Torne a classe que modela os funcionários do banco abstrata e verifique o que acontece na classe
de teste.

4 Defina uma classe para modelar os gerentes do nosso banco.

5 Altere a classe de teste e crie um objeto da classe que modela os gerentes.

6 Defina um método abstrato na classe que modela os funcionários para calcular a bonificação
dos colaboradores.

7 O que acontece com a classe que modela os gerentes?

8 Implemente o método que calcula a bonificação na classe que modela os gerentes.

9 Altere a classe de teste para que o método que calcula a bonificação seja chamada e o valor seja
impresso na tela.

www.k19.com.br 103

CLASSES ABSTRATAS 104

104 www.k19.com.br

INTERFACES

C
A

P
Í

T
U

L
O

11
Padronização

No dia a dia, estamos acostumados a utilizar aparelhos que dependem de energia elétrica. Esses
aparelhos possuem um plugue que deve ser conectado a uma tomada para obter a energia necessá-
ria.

Diversas empresas fabricam aparelhos elétricos com plugues. Analogamente, diversas empresas
fabricam tomadas elétricas. Suponha que cada empresa decida por conta própria o formato dos
plugues ou das tomadas que fabricará. Teríamos uma infinidade de tipos de plugues e tomadas que
tornaria a utilização dos aparelhos elétricos uma experiência extremamente desagradável.

Inclusive, essa falta de padrão pode gerar problemas de segurança aos usuários. Os formatos dos
plugues ou das tomadas pode aumentar o risco de uma pessoa tomar um choque elétrico.

Figura 11.1: Tomadas despadronizadas

Com o intuito de facilitar a utilização dos consumidores e aumentar a segurança dos mesmos,
o governo através dos órgãos responsáveis estabelece padrões para os plugues e tomadas. Esses
padrões estabelecem restrições que devem ser respeitadas pelos fabricantes dos aparelhos e das to-
madas.

Em diversos contextos, padronizar pode trazer grandes benefícios. Inclusive, no desenvolvi-
mento de aplicações. Mostraremos como a ideia de padronização pode ser contextualizada nos con-
ceitos de orientação a objetos.

Contratos

Num sistema orientado a objetos, os objetos interagem entre si através de chamadas de métodos

www.k19.com.br 105

INTERFACES 106

(troca de mensagens). Podemos dizer que os objetos se “encaixam” através dos métodos públicos
assim como um plugue se encaixa em uma tomada através dos pinos.

Para os objetos de uma aplicação “conversarem” entre si mais facilmente é importante padroni-
zar o conjunto de métodos oferecidos por eles. Assim como os plugues encaixam nas tomadas mais
facilmente graças aos padrões definidos pelo governo.

Um padrão é definido através de especificações ou contratos. Nas aplicações orientadas a obje-
tos, podemos criar um “contrato” para definir um determinado conjunto de métodos que deve ser
implementado pelas classes que “assinarem” este contrato. Em orientação a objetos, um contrato é
chamado de interface. Um interface é composta basicamente por métodos abstratos.

Exemplo

No sistema do banco, podemos definir uma interface (contrato) para padronizar as assinaturas
dos métodos oferecidos pelos objetos que representam as contas do banco.

1 interface Conta {
2 void deposita(double valor);
3 void saca(double valor);
4 }

Código Java 11.1: Conta.java

Os métodos de uma interface não possuem corpo (implementação) pois serão implementados
nas classes vinculadas a essa interface. Todos os métodos de uma interface devem ser públicos e
abstratos. Os modificadores public e abstract são opcionais.

As classes que definem os diversos tipos de contas que existem no banco devem implementar
(assinar) a interface Conta.

1 class ContaPoupanca implements Conta {
2 public void deposita(double valor) {
3 // implementacao
4 }
5 public void saca(double valor) {
6 // implementacao
7 }
8 }

Código Java 11.2: ContaPoupanca.java

1 class ContaCorrente implements Conta {
2 public void deposita(double valor) {
3 // implementacao
4 }
5 public void saca(double valor) {
6 // implementacao
7 }
8 }

Código Java 11.3: ContaCorrente.java

As classes concretas que implementam uma interface são obrigadas a possuir uma implementa-
ção para cada método declarado na interface. Caso contrário, ocorrerá um erro de compilação.

106 www.k19.com.br

107 INTERFACES

1 // Esta classe não compila porque ela não implementou o método saca()
2 class ContaCorrente implements Conta {
3 public void deposita(double valor) {
4 // implementacao
5 }
6 }

Código Java 11.4: ContaCorrente.java

A primeira vantagem de utilizar uma interface é a padronização das assinaturas dos métodos ofe-
recidos por um determinado conjunto de classes. A segunda vantagem é garantir que determinadas
classes implementem certos métodos.

Polimorfismo

Se uma classe implementa uma interface, podemos aplicar a ideia do polimorfismo assim como
quando aplicamos herança. Dessa forma, outra vantagem da utilização de interfaces é o ganho do
polimorfismo.

Como exemplo, suponha que a classe ContaCorrente implemente a interface Conta. Podemos
guardar a referência de um objeto do tipo ContaCorrente em uma variável do tipo Conta.

1 Conta c = new ContaCorrente ();

Código Java 11.5: Polimorfismo

Além disso, podemos passar uma variável do tipo ContaCorrente para um método que o parâ-
metro seja do tipo Conta.

1 class GeradorDeExtrato {
2 public void geraExtrato(Conta c) {
3 // implementação
4 }
5 }

Código Java 11.6: GeradorDeExtrato.java

1 GeradorDeExtrato g = new GeradorDeExtrato ();
2 ContaCorrente c = new ContaCorrente ();
3 g.geraExtrato(c);

Código Java 11.7: Aproveitando o polimorfismo

O método geraExtrato() pode ser utilizado para objetos criados a partir de classes que imple-
mentam direta ou indiretamente a interface Conta.

Interface e Herança

As vantagens e desvantagens entre interface e herança, provavelmente, é um dos temas mais
discutido nos blogs, fóruns e revistas que abordam desenvolvimento de software orientado a objetos.

Muitas vezes, os debates sobre este assunto se estendem mais do que a própria importância desse

www.k19.com.br 107

INTERFACES 108

tópico. Muitas pessoas se posicionam de forma radical defendendo a utilização de interfaces ao invés
de herança em qualquer situação.

Normalmente, esses debates são direcionados na análise do que é melhor para manutenção das
aplicações: utilizar interfaces ou aplicar herança.

A grosso modo, priorizar a utilização de interfaces permite que alterações pontuais em determi-
nados trechos do código fonte sejam feitas mais facilmente pois diminui as ocorrências de efeitos
colaterais indesejados no resto da aplicação. Por outro lado, priorizar a utilização de herança pode
diminuir a quantidade de código escrito no início do desenvolvimento de um projeto.

Algumas
guilherme nogueira fez um comentário
  • 1 Defina uma classe genérica para modelar os funcionários do banco. 2 Crie um objeto da classe que modela os funcionários do banco e utilize os métodos de acesso com nomes padronizados para alterar os valores dos atributos. 3 Torne a classe que modela os funcionários do banco abstrata e verifique o que acontece na classe de teste. 4 Defina uma classe para modelar os gerentes do nosso banco. 5 Altere a classe de teste e crie um objeto da classe que modela os gerentes. 6 Defina um método abstrato na classe que modela os funcionários para calcular a bonificação dos colaboradores. 7 O que acontece com a classe que modela os gerentes? 8 Implemente o método que calcula a bonificação na classe que modela os gerentes. 9 Altere a classe de teste para que o método que calcula a bonificação seja chamada e o valor seja impresso na tela. ALGUEM TEM AS RESPOSTAS DESSAS QUESTÕES , OBRIGADO... Veja mais
    0 aprovações
    Carregar mais