Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Java - programação orientada a objetos, Notas de estudo de Informática

Java - Programação Orientada a Objetos

Tipologia: Notas de estudo

2012

Compartilhado em 20/05/2012

paulo-carvalho-26
paulo-carvalho-26 🇧🇷

4.8

(4)

8 documentos

1 / 61

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Novatec
Programação Java
com Ênfase em Orientação a Objetos
Douglas Rocha Mendes
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d

Pré-visualização parcial do texto

Baixe Java - programação orientada a objetos e outras Notas de estudo em PDF para Informática, somente na Docsity!

Novatec

Programação Java

com Ênfase em Orientação a Objetos

Douglas Rocha Mendes

capítulo 1

Introdução à linguagem Java

O capítulo 1 inclui o histórico da linguagem Java, detalhes que formam a lingua- gem, a plataforma Java, uma breve descrição sobre orientação a objetos, operadores matemáticos, tipos de dados primitivos e, por fim, as estruturas de controle e repe- tição. No final do capítulo está disponível uma lista de exercícios e o laboratório 1, que exercita a teoria apresentada no capítulo. Esse laboratório será progressivo e se estenderá até o capítulo 9.

1.1 Histórico da linguagem

A tecnologia Java foi criada como uma ferramenta de programação de um projeto da Sun Microsystems, chamado The Green Project, iniciado por Patrick Naughton, Mike Sheridan e James Gosling, em 1991. Esse projeto tinha como principal objetivo criar uma nova plataforma para a computação interativa, ou seja, a linguagem de programação não era o principal objetivo do projeto. No verão de 1992 foi gerada a primeira demonstração do projeto, que representou um sistema executando em um handheld com capacidade de controle remoto que ainda oferecia uma interface sensível ao toque (touchscreen) interativa. Esse handheld foi chamado de *7 (star seven), por esta ser a forma de atender (ou puxar) chamadas telefônicas entre os telefones dos integrantes da equipe. A figura 1.1 apresenta um exemplo da aparência do *7.

O *7 foi capaz de controlar uma grande variedade de dispositivos de uso domés- tico, enquanto apresentava uma interface com animação. O sistema criado para o handheld foi executado em um novo processador independente de linguagem de programação. A linguagem utilizada nesse sistema foi chamada de Oak (“carvalho”, em inglês), com base na paisagem que James Gosling tinha de sua janela.

18 Programação Java com Ênfase em Orientação a Objetos

1.2.2 Orientada a objetos

A linguagem Java foi criada seguindo o paradigma da orientação a objetos e, por isso, traz de forma nativa a possibilidade de o programador usar os conceitos de herança, polimorfismo e encapsulamento. O paradigma da orientação a objetos existe desde a década de 70, mas somente após o sucesso da linguagem Java é que o paradigma ganhou credibilida de. O paradig ma de orientação a objetos traz um enfoque dife- rente da programação estruturada, no sentido de adotar formas mais próximas do mecanismo humano para gerenciar a complexidade de um sistema. Nesse paradigma, o mundo real é visto como sendo constituído de objetos autônomos, concorrentes, que interagem entre si, e cada objeto tem seu próprio estado (atributos) e compor- tamento (métodos), semelhante a seu correspondente no mundo real.

Quando desenvolvemos programas orientados a objetos e estruturados temos dois paradigmas totalmente diferentes. A forma de pensar e escrever o código são diferentes. É importante observar que muitos programadores usam a linguagem Java, mas continuam pensando no formato estruturado. Essa má prática de programação é muito freqüente em estudantes e profissionais que utilizam Java diariamente. Este livro objetiva minimizar esta má prática do uso da linguagem Java. A seguir é apresentada uma comparação entre o desenvolvimento de um sistema bancário usando o paradigma da programação estruturada e o paradigma da programação orientada a objetos.

1.2.2.1 Comparação entre o paradigma da programação estruturada e paradigma da orientação

a objetos

Considere o exemplo de um sistema bancário com os seguintes requisitos funcionais:

■ (^) Manter o cliente (envolvendo inserir cliente, remover cliente, selecionar cliente e atualizar cliente). ■ (^) Manter conta (envolvendo abrir conta, fechar conta, alterar conta, pesquisar conta e remover conta). ■ (^) Movimentar caixa (envolvendo sacar, depositar e transferir).

■ (^) Registrar movimento (envolvendo gerar histórico).

■ (^) Emitir relatórios contábeis.

No paradigma utilizado pelo modelo estruturado seria necessário criar um pro- grama para manter clientes, um programa para manter conta, um programa para movimentar caixa e um programa para emitir os relatórios. Cada programa deverá

Capítulo 1 ■^ Introdução à linguagem Java 19

ser executado por um programa principal, ou seja, um programa com o método main(). Cada programa e também o programa principal têm um conjunto de variáveis específicas para suas necessidades. Cada variável que precisar ser compartilhada com outros programas deve ser criada como global e, se estivermos usando a linguagem C, esta deveria ser externalizada (definir a variável como extern em outro programa) para outros programas. Um ambiente estruturado nos limita apenas a identificar os programas que serão envolvidos na implementação do sistema.

Neste modelo de programação, a reutilização é pequena, e a redundância é grande. No paradigma procedural, quando existe alguma modificação, muitas vezes pelo alto acoplamento entre os programas, é necessário alterar vários programas e novamente testar todo o sistema. No modelo estruturado ficamos limitados a identificar os programas necessários e, no máximo, a criar funções que possam ser reutilizadas em outros programas. No paradigma da orientação a objetos temos outras possibilidades, tais como o uso de encapsulamento para oferecer segurança à classe, herança que permite a reutilização de código, polimorfismo e padrões de projeto, todos explorados de forma detalhada neste livro.

No caso do paradigma da orientação a objetos, inicialmente precisamos iden- tificar nossas classes com seus atributos e métodos. Como técnica para identificar classes temos a análise dos substantivos e locuções substantivas (dois substantivos juntos), listados pelos requisitos funcionais (Use Cases). Assim, para o exemplo apresentado, teríamos as classes Conta, Pessoa, Cliente, Gerente de Relacionamen- to, Contabilidade, Movimentação e Histórico, entre outras. Percebam que nesta abordagem identificamos os substantivos e locuções substantivas descritos pelos requisitos funcionais.

É importante observar que no paradigma da programação orientada a objetos não nos preocupamos em definir quantos programas seriam necessários e sim quais seriam os substantivos utilizados pelo sistema. Cada substantivo representa um objeto no mundo real e uma classe em nosso sistema. Cada classe seria repre- sentada por um novo programa Java. Outra vantagem do paradigma da orientação a objetos é a possibilidade de usar uma ferramenta de modelagem para a geração de código.

1.2.3 Multithread

A plataforma Java permite a criação de programas que implementam o conceito multithread, incluindo sofisticados mecanismos de sincronização entre processos. O multithreading é uma técnica de programação concorrente, que permite projetar e implementar aplicações paralelas de forma eficiente.

Capítulo 1 ■^ Introdução à linguagem Java 21

Compilação

MeuPrograma.java MeuPrograma.class

Execução

Compilador

MeuPrograma.class (^) Meu Programa

0100101... Máquina Virtual Java

Figura 1.2 – Etapas para compilação e execução de um programa Java.

Devido à JVM estar disponível em inúmeras plataformas, o mesmo arquivo com extensão .class poderá ser executado em diferentes sistemas operacionais, como Windows, Solaris, Linux ou Mac OS. A figura 1.3 apresenta um ambiente onde o mesmo programa .class poderia estar em execução em múltiplos sistema operacionais.

Compilador

Windows UNIX MacOS

Programa Java class OlaMundo { public static void main(String[] args) { System.out.print1n("Hello World!"); } } OlaMundo.java

Máquina Virtual Java

Máquina Virtual Java

Máquina Virtual Java

Figura 1.3 – Etapas para compilação e execução de um programa Java.

1.2.7 Alto desempenho

O desempenho sempre foi um fator de comparação entre a linguagem Java, que é interpretada, e as linguagens compiladas. A plataforma Java oferece um bom desempenho, pois executa um código que foi previamente analisado e convertido para um formato intermediário. Outro elemento que auxilia no bom desempenho é o recurso de garbage collector (coletor de lixo), que é executado em segundo plano

22 Programação Java com Ênfase em Orientação a Objetos

como uma thread com baixa prioridade, procurando liberar memória que não está sendo mais utilizada. Isso faz com que a memória liberada seja reutilizada por outra parte do sistema, gerando um bom desempenho do sistema.

A linguagem Java também permite que um programa seja compilado em uma plataforma (Windows, Linux ou Unix) específica. Entretanto, nesse caso o programa não poderá ser portado em outra plataforma automaticamente, exigindo a necessi- dade de uma nova compilação.

1.2.8 Robusta

A linguagem Java foi projetada para gerar sistemas confiáveis, pois fornece já em tempo de compilação, por exemplo, uma checagem para identificar código não-alcan- çável. Entenda-se como código não-alcançável uma linha de código que por algum motivo na lógica de programação nunca será executada. Como exemplo podemos ter um comando return e logo abaixo a impressão de uma string. Nesse caso, a string nunca seria impressa, por isso o compilador java gera um erro. A linguagem java também oferece uma checagem para identificar variáveis que foram definidas, porém não foram inicializadas. O modelo de gerenciamento de memória é extremamente simples, sendo que após a alocação de memória por meio do operador new não é necessário que o programador libere esse espaço alocado, pois o garbage collector realiza essa atividade.

Outros fatores que contribuem para o rótulo de linguagem robusta são: ■ (^) Sistema de tipo rígido que, em tempo de compilação, verifica erros comuns, como if (cpf = 1). Nesse caso estamos atribuindo um valor, e não realizando a comparação. O correto seria apresentar o comando if (cpf == 1). ■ (^) Inicialização das variáveis e atributos inteiros com o valor 0 automatica- mente ou com vazio no caso de variáveis ou atributos do tipo string. ■ (^) Manipulação de exceções é parte integrante da linguagem.

1.2.9 Segura

A linguagem Java foi criada para operar em ambientes distribuídos, o que significa que segurança é de extrema importância. Com as características projetadas na linguagem Java, e principalmente na JVM, podemos garantir que em um ambiente de rede nenhum programa Java permitirá que outro programa escrito em qualquer outra linguagem possa se esconder em um código Java a fim de se instalar auto- maticamente.

24 Programação Java com Ênfase em Orientação a Objetos

que, para obter as vantagens da linguagem Java, precisamos conhecer muito bem o paradigma da orientação a objetos, caso contrário o programador continuará desenvolvendo programas com a linguagem Java em formato estruturado.

1.5 Meu primeiro programa Java

Antes de começar a escrever um programa Java é necessário garantir que esteja instalado no sistema operacional o Java SE Development Kit (J2SDK) na versão desejada. Caso não esteja, podemos realizar o download do site da Sun e realizar a instalação. Neste livro, utilizamos o J2SDK na versão 1.5 para a compilação e execu- ção de nossos exemplos. Como segundo ponto importante, é preciso definir se esse programa será desenvolvido em uma IDE (Integrated Development Environment) ou iremos usar um bloco de notas oferecido pelo sistema operacional. Essa segunda opção torna o desenvolvimento um pouco mais trabalhoso. Neste livro, usamos a IDE do Eclipse, por tratar-se de uma IDE gratuita e estar presente nas principais empresas de desenvolvimento de sistemas e instituições de ensino.

1.5.1 Dicas para o uso da IDE Eclipse

É importante observar que antes da execução do Eclipse precisamos garantir que a versão 1.5 do J2SE ou superior já tenha sido instalada no computador. Alguns métodos e classes usados nos exemplos deste livro fazem referência a essa versão. Caso o leitor use uma versão anterior ao J2SE 1.5, teremos alguns exemplos apre- sentando erro de compilação.

Quando executamos o ícone do Eclipse é necessário informar onde fica nossa área de trabalho (workspace). Essa área é um diretório no sistema operacional, que contém todos os nossos programas. Depois de definido onde ficará a workspace, é necessário criar um projeto na IDE, por meio do menu de opções File > New > Project > Java Project. Podemos dar o nome de livroJava ou qualquer outro nome para nosso projeto. Lembre-se de que esse nome de projeto também será represen- tado no sistema operacional como um diretório.

A partir desse momento devemos clicar em cima do nome do projeto e criar um pacote que será também representado no sistema operacional como um diretório. Em seguida será possível criar uma classe que será representada no sistema operacional por um arquivo com a extensão .java. O nome da classe escolhida deverá ser igual ao usado no programa 01.01. O nome da classe HelloWorld deve ser igual ao nome do arquivo .java criado dentro do diretório que representa o pacote, respeitando letras maiúsculas e minúsculas.

Capítulo 1 ■^ Introdução à linguagem Java 25

É importante observar que para executar o programa 01.01 sem erros precisamos passar dois parâmetros no momento da execução. Temos duas opções para a execução de um programa java, sendo a primeira a utilização do comando

java -cp. modulo01.HelloWorld 10 20

ou por meio da IDE Eclipse em Run > Run > Arguments > Program Arguments. Visualize o espaço em branco e coloque os dois parâmetros no espaço vazio sepa- rados por espaço. A seguir apresentamos detalhadamente o que cada linha desse programa representa e como devemos proceder para sua execução.

 Programa 01.

package modulo01; 1 // Imprime na tela os argumentos recebidos e a frase Hello World 2 public class HelloWorld { 3 public static void main(String args[]) { 4 System.out.println("Parâmetro 01: " + args [0]); 5 System.out.println("Parâmetro 02: " + args [1]); 6 System.out.println("Hello World"); } }

A seguir, descreveremos o que cada parte do programa representa. A linha 1 re- presenta um comentário em Java. Os comentários são ignorados pelo compilador, mas podem ajudar outros programadores a entender o propósito de seu programa. Há dois tipos de comentários em Java. O primeiro é representado por /* e */. Esse tipo de comentário oferece a possibilidade de comentar um bloco de informações, que pode se estender por várias linhas. O segundo formato disponível é representado por // e tem como objetivo comentar apenas uma linha do programa.

A linha 2 representa a definição da classe, que deve ser sempre seguida por {. Em seguida, podemos criar métodos e atributos. Para cada método devemos ter um { e, no final de cada método, devemos ter um } que formaliza o final do méto- do. Também no final da classe precisamos de um }, para formalizar que a classe se encerra nesse ponto. Todo o código da classe deve ficar entre o { e o }. Qualquer código colocado fora desses limites apresentará erro na compilação. Existem algu- mas exceções que representam códigos que devem ser definidos fora desse limite. São citados a seguir:

■ (^) Código de inicialização estático ou não-estático.

■ (^) Comando import.

■ (^) Comando package.

Capítulo 1 ■^ Introdução à linguagem Java 27

Nas linhas 4, 5 e 6 estamos realizando a impressão dos valores dos parâmetros recebidos e também da frase “Hello World”, por meio do comando System.out.println. Em que System representa o nome da classe, out representa um atributo estático do tipo da classe PrintStream e println() representa um método do objeto out. O capítulo 8 apresenta detalhadamente a classe PrintStream.

O centro de qualquer aplicação Java é seu método main(), pois será a partir dele que todos os outros métodos requeridos para executar uma aplicação serão executados. Se o interpretador por meio da JVM não encontrar o método main(), o programa não será executado.

1.6 Introdução à orientação a objetos

Muitos alunos que começam a estudar a linguagem Java têm grande dificuldade para entender a diferença entre uma classe e um objeto, bem como qual o real significado de um atributo e de um método. Para esclarecer tais dúvidas vamos comparar os elementos contidos em uma classe com os elementos contidos no ambiente de um banco de dados. Não que uma classe e uma tabela sejam iguais, apenas usaremos essa comparação como um meio para que o leitor entenda o significado desses dois importantes conceitos.

Podemos dizer que toda tabela de banco de dados tem um nome, assim como uma classe também. No caso da classe, ela deve iniciar com letra maiúscula e ser um substantivo ou locução substantiva (dois substantivos juntos). A tabela 1.1 apresenta um exemplo de nomes para uma tabela e uma classe.

Tabela 1.1 – Relação entre nome de tabela e classe

CONTA_CORRENTE ContaCorrente APOLICE_SEGURO ApoliceSeguro VEICULO Veiculo

Uma tabela de banco de dados tem colunas, que representam a estrutura da tabela. Uma classe tem o mesmo conceito, mas o chamamos de atributos, logo, uma coluna de uma tabela representa um atributo de uma classe. É importante observar que o atributo de uma classe deve começar com letra minúscula e, se for composto, as próximas letras devem ser maiúsculas (recomendação que faz parte das práticas recomendadas de programação). A tabela 1.2 apresenta exemplos de nomes usados para colunas e atributos.

28 Programação Java com Ênfase em Orientação a Objetos

Tabela 1.2 – Exemplo de nomes de colunas e atributos

Tabela Classe nome_cliente nomeCliente saldo_conta saldoConta numero_conta numeroConta numero_agencia numeroAgencia

Uma tabela de banco de dados pode conter operações que venham a manipular suas colunas a fim de gerar resultados que possam ser atualizados em outra tabela ou gravados em um arquivo texto no formato de um relatório. Essas operações que manipulam as colunas de uma tabela são conhecidas por stored procedures , e uma tabela de banco de dados pode conter nenhuma ou várias dessas operações. Os mé- todos em uma classe representam as operações que a classe contém. Tais operações usam os atributos da classe, seja para alteração ou apenas para leitura, e processam e geram resultados que podem ser usados para a geração de um relatório.

Como boa prática de programação Java, podemos definir o nome de um método Java começando com letra minúscula e sendo um verbo no infinitivo (terminado em ar , er , ir ) seguido de um substantivo. Como exemplo de nomes de métodos po- demos ter: calcularPedido(), arquivarDocumento(), imprimirFichaCadastral(), efetuarSaque(), efetuarDeposito(), entre outros. A tabela 1.3 apresenta exemplos de nomes usados para stored procedures e métodos.

Tabela 1.3 – Exemplo de nomes de stored procedures e métodos

Tabela Classe sp_recuperar_cliente_por_cpf(int cpf) recuperarClienteporCPF (int cpf) sp_recuperar_cliente_por_nome (varchar nome) recuperarClienteporNome (String nome) sp_atualizar_saldo (decimal valor) atualizarSaldo (double valor) sp_remover_tansacoes (int cpf) removerTansacoes (int cpf)

Não podemos esquecer que uma tabela contém linhas, e estas representam os regis- tros gravados na tabela. Podemos ter milhares de linhas gravadas em uma tabela sendo que o limite seria a capacidade do disco rígido do servidor de banco de dados.

Em um ambiente orientado a objetos essas linhas das tabelas representarão nossos objetos quando o programa estiver em execução, ou seja, quando iniciar sua execução, o programador poderá selecionar uma ou mais linhas da tabela e, para tratá-las em memória, o programa Java atribuirá a elas um objeto do tipo da classe correspondente. Esse objeto representa o modelo da classe no qual ele está

30 Programação Java com Ênfase em Orientação a Objetos

void efetuarSaque(double valor) { this.saldo = this.saldo - valor; } void efetuarDeposito(double valor) { this.saldo = this.saldo + valor; } void imprimirSaldo() { System.out.println(this.saldo); } public int getAgencia() { return this.agencia; } public void setAgencia(int agencia) { this.agencia = agencia; } public int getConta() { return this.conta; } public void setConta(int conta) { this.conta = conta; } public double getCpmf() { return cpmf; } public void setCpmf(double cpmf) { ContaCorrente.cpmf = cpmf; } public double getSaldo() { return this.saldo; } public void setSaldo(double saldo) { this.saldo = saldo; } } // Nenhuma linha de código poderá ser definida abaixo deste símbolo de fecha chaves

A classe do programa 01.02 representa uma conta corrente com seus atributos, métodos de acesso (getXXX()) e métodos modificadores (setXXX()). Os métodos de acesso e os modificadores de uma classe devem ser usados para que o programador acesse ou altere seus atributos, sem a necessidade de fazê-lo de forma direta. Apesar de ser possível realizar o acesso ou alteração de forma direta, segundo as boas práti- cas de programação e o conceito de encapsulamento, um atributo deve ser sempre acessado por meio de seus métodos de acesso ou métodos modificadores. Outro elemento que também fortalece esse modo de programação é o uso de frameworks como o Spring, que exige que um atributo tenha seus métodos de acesso e seus métodos modificadores.

A classe ContaCorrente apresentada no programa 01.02 representa exatamente uma tabela do banco de dados, onde definimos suas colunas (atributos) para receberem registros. Em uma classe Java, diferentemente do ambiente de banco de dados, que

Capítulo 1 ■^ Introdução à linguagem Java 31

usa comandos SQL (select, update, insert etc.) e stored precedures para acessar suas colunas, para acessar ou alterar os atributos de uma classe, podemos usar os mé- todos de acesso (getXXX()) ou os métodos modificadores (setXXX()). Em um método modificador podemos definir regras de validação para os atributos, evitando que um valor inválido seja atribuído a um atributo.

Como exemplo de validação de um atributo, podemos especificar que a agência não pode ser inicializada com um parâmetro (int agencia) com valor menor ou igual a 0. Esse teste poderia ocorrer dentro do método setAgencia (int agencia). Todos os programas que usarem a classe ContaCorrente automaticamente estarão se beneficiando dessa regra de validação. Caso o teste seja realizado em cada uma das classes Java que use este atributo, com certeza haverá redundância de código.

1.6.2 Objetos em Java

O termo objeto e instância são sinônimos, entretanto, este livro enfatiza o termo objeto. A criação de um objeto na linguagem Java envolve o operador new e pode ser feita por meio do comando

Classe variavel = new Classe();

O programa 01.03 apresenta a criação de objetos.

 Programa 01.

package modulo01; // Criação de objetos em Java public class Principal { public static void main(String args[]) { ContaCorrente objeto1 = new ContaCorrente(); // criando o objeto 1 ContaCorrente objeto2 = new ContaCorrente(); // criando o objeto 2 } }

Esse programa está representando apenas como devemos criar um objeto. Se for executado não será exibido nenhum resultado na tela, pois seu objetivo foi simplesmente apresentar a sintaxe usada na linguagem Java para realizar a criação de objetos.

1.6.3 Mensagens em Java

Para usar um objeto após sua criação, devemos enviar mensagens. Uma mensagem é a forma de comunicação entre objetos. Para isso é preciso criar um objeto, iden- tificar o nome do método a ser executado e, caso necessário, identificar também os

Capítulo 1 ■^ Introdução à linguagem Java 33

nenhum método específico, logo, podem ser acessados por qualquer um deles. O programa 01.05 apresenta uma classe Java com dois métodos, além da diferença entre variáveis e atributos.

 Programa 01.

package modulo01; // Exemplo de métodos, variáveis e atributos import java.util.Date; public class ExemploMetodo { private int meuAtributo = 0; // pode ser usado por qualquer método public static void main(String[] args) { Date today = new Date(); // today representa uma variável System.out.println(today); imprimir(); // executando o método imprimir } public static void imprimir() { // esta variável poderá ser usada somente no método imprimir() int minhaVariavel = 0; System.out.println("método imprimir"); } }

Esse programa cria um atributo chamado meuAtributo (private int meuAtributo = 0), além dos métodos main() e imprimir(). O método imprimir() cria uma variável chamada minhaVariavel. É importante observar que o método main() está executando o método imprimir(). Como já informado, uma variável poderá ser utilizada somente dentro de um método.

1.6.5 Assinatura de um método

Todo método definido tem uma assinatura que garante que não haja dois métodos iguais no programa. Quando enviamos mensagens para um método, a JVM (Java Virtual Machine) procura executar o método buscando identificá-lo pela sua as- sinatura. Em Java é perfeitamente possível codificar em uma classe dois ou mais métodos com o mesmo nome, mas com assinaturas diferentes.

Os elementos do método que fazem parte da sua assinatura são: ■ (^) nome do método; ■ (^) quantidade de parâmetros existentes; ■ (^) tipo de cada parâmetro; ■ (^) ordem desses parâmetros;

Obs.: o tipo de retorno de um método não faz parte de sua assinatura.

34 Programação Java com Ênfase em Orientação a Objetos

O programa 01.06 apresenta um problema na definição de métodos com assi- naturas iguais.

 Programa 01.

package modulo01; public class ContaCorrenteSobrecarga { int conta; int agencia; double saldo; void efetuarSaque(double valor) { this.saldo = this.saldo - valor; } void efetuarDeposito(double valor) { this.saldo = this.saldo + valor; } void imprimirSaldo() { System.out.println(this.saldo); } void imprimirAtributos() { System.out.println("Método imprimirAtributos()"); } void imprimirAtributos(int a) { System.out.println("Método imprimirAtributos (int a)"); } void imprimirAtributos(char a) { System.out.println("Método imprimirAtributos (char a)"); } void imprimirAtributos(int a, char b) { System.out.println("Método imprimirAtributos (int a, char b)"); } void imprimirAtributos(char b, int a) { System.out.println("Método imprimirAtributos (char b, int a)"); } // int imprimirAtributos(char a) {} /* a linha anterior irá gerar um erro por estar duplicando a definição do método: void imprimirAtributos(char a). */ }

Esse programa apresenta o método imprimirAtributos() diversas vezes, mas todas com assinaturas diferentes. Também apresenta um exemplo em que apenas alteramos o tipo do retorno do método (// int imprimirAtributos (char a) {}), mantendo os outros elementos intactos. É importante observar que o tipo de retorno do método não faz parte da sua assinatura e, por isso, a linha int imprimirAtributos (char a) {} precisou ser comentada. A definição desse método gera conflito com a definição do método presente na linha void imprimirAtributos(char a). Nesse caso, para o compilador Java os métodos são iguais, e um erro de compilação será indicado.