Top Banner
Linguagens e Técnicas de Programação - JAVA José Marcos Barbosa da Silveira [email protected]
22
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Java11

Linguagens e Técnicas de Programação - JAVA

José Marcos Barbosa da Silveira

[email protected]

Page 2: Java11

Tópicos Avançados• Objetivos deste capítulo• Demonstrar como utilizar mais de uma classe

dentro de um arquivo;• Apresentar os conceitos de classes: internas e

anônimas;• Apresentar e mostrar as diferenças entre classes

abstratas e interfaces;• Mostrar a diferença entre interface e classe adapter.

Page 3: Java11

Mais de uma Classe em um mesmo arquivo

public class ClassPrincipal

{

. . .

}

class ClassSecundaria

{

. . .

}

Page 4: Java11

class Data { private int dia, mes, ano; public void setDia(String dia) { this.dia = Integer.parseInt(dia); } public int getDia() { return dia; } public int amanha() { return dia + 1; }}

Mais de uma classe no mesmo arquivo – exemplo (1)

Page 5: Java11

public class TesteData{ public static void main(String args[ ]) { Data objData = new Data(); objData.setDia(args[0]); System.out.println("Hoje = " + objData.getDia()); System.out.println("Amanha = " + objData.amanha()); }}

Mais de uma classe no mesmo arquivo – exemplo (*2)

Page 6: Java11

Classes Aninhadas - internas

• Java permite que uma classe seja definida como membro de outra classe. Esta classe é chamada de classe aninhada:

public class EnclosingClass

{

class NestedClass

{

}

{

• Classes aninhadas são usadas para reforçar o relacionamento entre as duas classes.

Page 7: Java11

Classes Aninhadas - internas

• A classe aninhada tem acesso ilimitado aos membros da classe a qual foi definida, mesmo que o membro tenha sido declarado private.

• Uma classe aninhada pode ter a declaração static. As classes aninhadas não estáticas são chamadas de classes internas (inner classes).

• As classes internas são classe declaradas e implementadas dentro de uma dada classe como podemos observar a seguir:

Page 8: Java11

Classes Aninhadas - internas• public class Outter {• // Declaração de campos e métodos

• // Declaração de classes internas• class Inner1 {• :• }• class Inner2 {• : • }• // Assim como campos e métodos• // as classes internas podem ser• // declaradas em qualquer ponto• // da classe externa• }

Page 9: Java11

Classes Aninhadas - internas• Cada classe interna se comporta como um campo privado

da classe externa, ou seja, a classe interna pode ser livremente utilizada dentro da implementação da classe externa embora seja inacessível externamente, tal como um campo private.

• Ao ser compilado são produzidos um arquivo .class para cada classe, incluindo-se aí as inner classes que recebem a seguinte denominação especial: NomeOutterClass$NomeInnerClass.class, assim para o exemplo acima teríamos os arquivos Outter.class, Outter$Inner1.class e Outter$Inner2.class.

Page 10: Java11

Classes Aninhadas - internas• As inner classes são particularmente úteis nos seguintes casos:

na definição de classes de serviço, isto é, classe utilizadas com propósito específico dentro de outras classes, tal como armazenar informações num formato especial.

na construção de event handlers, ou seja, dos listeners a partir das interfaces ou classes adaptadoras.

• A única desvantagem do uso das inner classes é que seu código fica restrito a outer class na qual está contida. Isto indica que seu uso é adequado para implementação de código específico de uma certa classe ou aplicação, não sendo apropriado para criação de classes de propósito geral.

Page 11: Java11

Classes Aninhadas - anônimas• Uma classe aninhada pode ser declarada sem nome. Estas classes são chamadas de

“anonymous classes”.• Classes anônimas tornam o código difícil de ser lido. O seu uso deveria ficar

restrito ao tratamento de eventos com classes listener e adapter.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class WindowListenerDemo { public static void main (String args[]) { JFrame j = new JFrame("Evento de Janela"); j.setSize(200,200);

j.addWindowListener (new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //classe anônima interna de tratamento do evento

j.setVisible(true); }} // este assunto será detalhado no próximo capítulo

Page 12: Java11

Classes Abstratas• Quando a palavra-chave “abstract” aparece

no início de uma declaração de classe, significa que um ou mais métodos são abstratos.

• Um método abstrato não tem corpo; o seu propósito é forçar uma subclasse a sobrepô-lo e fornecer uma implementação concreta do método.

• Não pode ter instâncias (objetos).

Page 13: Java11

Classes Abstratas: Exemplo

public abstract class VeiculoAquatico {

abstract void definirRumo (int n);abstract void definirVelocidade (int n);

}class Canoa extends VeiculoAquatico {

void definirRumo (int n) { .... }

void definirVelocidade (int n) { ... }}

Page 14: Java11

Interface

Visão do mundo real:• Na nossa vida, estamos acostumados a lidar com objetos através de sua interface, ignorando sua complexidade.

Page 15: Java11

Interface Mecanismo que objetos não relacionados entre si usam para

interagir entre si; Protocolo de comunicação aonde existe um comportamento

concordado; Ao invés de forçar relacionamento que não existem

naturalmente entre as classes que fazem parte do sistema, cria-se um protocolo de comunicação;

Uma interface define um conjunto de métodos que uma classe deve implementar mas não define como esses métodos devem ser implementados;

Quando uma classe implementa uma interface, ela concorda em implementar todos os métodos declarados pela interface;

Não confundir com classes abstratas: as interfaces não servem para criar novas classes, mas sim para implementar funcionalidades diversas!

Page 16: Java11

Interfaces em Java

• Criadas com a palavra reservada interface.• são sempre públicas.• implementadas pelas classes com a palavra

reservada implements.

Page 17: Java11

Interfaces

• Interfaces são (sintaticamente) semelhantes classe abstratas

• Diferenças:

Classe Abstrata Interface

Pode implementar métodos Não pode implementar nenhum método É parte da hierarquia de classes Não faz parte da hierarquia de classes. Classes que

não são relacionadas entre si podem implementar a mesma interface.

Uma classe não pode ser derivada de mais de uma classe.

Uma classe pode implementar mais de uma interface.

Page 18: Java11

Interface - exemplo

public interface ControleRemoto

{

public void ligaTV();

public void desligaTV();

public void mudaCanalTV(int canalNovo);

}

public class TV implements ControleRemoto

{

public void ligaTV() {...}

public void desligaTV() {...}

public void mudaCanalTV(int canalNovo) {...}

}

Page 19: Java11

Adapter É muito comum querer uma classe que

implemente uma interface fazendo nada para a maioria dos métodos e fazendo algo útil apenas para alguns poucos métodos;

Para ajudar o programador, é comum, em Java, criar uma classe "adapter" que implemente todos os métodos de uma interface com métodos que nada fazem;

As classes que devem implementar a interface podem herdar do adapter e fazer override de alguns poucos métodos;

Page 20: Java11

Exercícios

• 1 - Considerando a hierarquia de contas anterior, fazer um programa

• que faça a simulação de 1000 transações de débito e crédito nas

• diversas contas. Utilize a função Math.randon() (consulte a

• documentação para esta função). Eis as funcionalidades:

• a) a classe conta possui o atributo saldo e os métodos abstratos: void

• debito(float valor), void crédito (float valor) e float

• saldo();

• b) a classe poupança possui os atributos: int diasJuro, final float

• PERCENTUALJURO=0.007 e o método: void calculaJuros().

• c) a classe pessoa física possui o atributo: float limite.

• d) a classe pessoa jurídica somente os membros definidos na

• superclasse.

Conta

PessoaFisica PessoaJuridica Poupanca

Page 21: Java11

Exercícios - cont.• Lógica dos métodos:• a) fazer o débito em uma conta e o crédito em outra. O débito só deve ser• feito se houver saldo. O valor a ser debitado e as contas envolvidas na• transação calculados de forma randômica.• b) o saldo total da conta física é: saldo + limite.• c) a cada lançamento de crédito na conta poupança, adicionar 1 nos• diasJuro e calcular os juros.• d) o cálculo do juros da conta poupança é o saldo mais o acréscimo dos• juros no período de 30 dias. Da seguinte forma:• se diasJuro > 30 então• juros = saldo * 0.007;• diasJuro = diasJuro - 30;• senao• juros = 0;• saldo = saldo + juros;• e) Implemente uma classe Principal que cria 3 contas: poupança, física e• jurídica e faça os 1000 lançamentos nas diversas contas. No final• informar o saldo de cada conta. Os atributos definidos como private• e criar os métodos get e set apropriados.

Page 22: Java11

Bibliografia

- FURGERI, Sérgio. Java 2: Ensino didático: Desenvolvendo e Implementando Aplicações –

- São Paulo: Érica, 372p. 2002. - TAMASSIA, R.; GOODRICH, M.T. Estrutura

de Dados e Algoritmos em Java. Bookman, 2002.

- DEITEL,H.M.; DEITEL, P.J. Java: Como Programar, Bookman, 2002.