Você está na página 1de 56

Fundamentos da Linguagem de Programao

Java

Benedito C. A. Petroni Cludio L. V. Oliveira

Fundamentos da Linguagem de Programao

Java

Capa: Claudia Baptistella Oliveira http://www.artesclaudia.com.br

Fundamentos da Linguagem de Programao Java

Benedito C. A. Petroni / Cludio L. V. Oliveira

Sumrio
Principais Caractersticas da Linguagem de Programao Java ................................................................................................. 8 Tipos de Dados ....................................................................................................................................................................... 10 Orientao a Objetos Parte 1: Introduo ............................................................................................................................. 12 Estrutura Bsica de Aplicao em Java ................................................................................................................................... 18 Vetores e Matrizes .................................................................................................................................................................. 23 Instrues de Controle ............................................................................................................................................................ 24 Orientao a Objetos Parte 2: Herana ................................................................................................................................. 30 Orientao a Objetos Parte 3: Interfaces e Implementaes .................................................................................................. 34 List e ArrayList ....................................................................................................................................................................... 40 Apndice A: Utilizao do NetBeans .................................................................................................................................. 49 Apndice B: Utilizao do Eclipse .......................................................................................................................................... 52

Fundamentos da Linguagem de Programao Java

II

Benedito C. A. Petroni / Cludio L. V. Oliveira

Lista de Figuras

Figura 1: Interface da IDE Netbeans ...................................................................................................................................... 19 Figura 2: Construindo novo projeto na IDE NetBeans. ........................................................................................................... 49 Figura 3: Escolhendo o tipo de aplicao na IDE NetBeans.................................................................................................... 50 Figura 4: Interface da IDE NetBeans para programao em Java. ........................................................................................... 51 Figura 5: Resultado de compilao na IDE NetBeans. ............................................................................................................ 51 Figura 6: Interface da IDE Eclipse. ........................................................................................................................................ 52 Figura 7: Criao de um projeto na IDE Eclipse. .................................................................................................................... 53 Figura 8: Interface da IDE Eclipse para programao em Java. .............................................................................................. 54 Figura 9: Criando uma classe na IDE Eclipse .......................................................................................................................... 55 Figura 10: Console de ocorrncias de erros de compilao na IDE Eclipse. ............................................................................ 55 Figura 11: Resultado da compilao no console da IDE Eclipse. ............................................................................................. 56

Fundamentos da Linguagem de Programao Java

III

Benedito C. A. Petroni / Cludio L. V. Oliveira

Lista de Tabelas
Tabela 1. Principais tipos de dados na linguagem Java ........................................................................................................... 10 Tabela 2. Principais classes para tipos de dados ..................................................................................................................... 11

Fundamentos da Linguagem de Programao Java

IV

Benedito C. A. Petroni / Cludio L. V. Oliveira

Sobre os Autores
Benedito Cristiano Aparecido Petroni Mestre em Sistemas de Computao pela Pontifcia Universidade Catlica de Campinas (2006), Ps Graduado em Design e Aplicaes para Internet pela Universidade So Francisco Itatiba (2001), e Graduado em Anlise de Sistemas pela Universidade So Francisco - Itatiba (1998). Possui ampla experincia na rea de Cincia da Computao, com nfase em desenvolvimento de sistemas em Instituies de Ensino Superior, plataformas para Ensino Distncia (EAD). Pesquisa a rea de Sistemas Inteligentes atravs da tcnica de Inteligncia Artificial, Agentes Inteligentes (AI) e Interao Humano Computador (IHC). Atualmente desenvolve contedos para assessoramento e treinamentos de ferramentas para anlise e desenvolvimento de sistemas. Docente da Faculdade de Tecnologia de Jundia e Bragana Paulista (FATEC), Universidade Paulista (UNIP) e Scio-Diretor da TecnologiaEducacional.Com.

Cludio Lus Vieira Oliveira Mestre em Sistemas de Computao pela Pontifcia Universidade Catlica de Campinas (2005) e graduado em Anlise de Sistemas pela Universidade Metodista de Piracicaba (1990). Apresenta larga experincia na rea de Cincia da Computao, com nfase em Sistemas de Computao, atuando principalmente nos seguintes temas: sistemas de bancos de dados,linguagens de programao Java, C++, C#, programao para a web (HTML, XML, ASP, PHP, JSP e Servlets), plataforma .NET, desenvolvimento de aplicaes para dispositivos mveis, redes de computadores, sistemas distribudos, arquitetura orientada a servios, agentes inteligentes, redes neurais artificiais e sistemas tutores inteligentes. desenvolvedor Microsoft 3 Estrelas. Docente da Faculdade de Tecnologia de Jundia e Bragana Paulista (FATEC), Faculdade Anhanguera de Jundia (FAJ), Scio-Diretor da TecnologiaEducacional.Com.

Sobre a TecnologiaEducacional.Com
A TecnologiaEducacional.Com uma empresa voltada ao desenvolvimento de treinamentos especializados em tecnologia da informao. Com amplo conhecimento sobre as novas tecnologias utilizadas na educao e capacitao profissional, a empresa oferece solues diferenciadas para capacitao nas diversas modalidades e metodologias de ensino. Para saber mais sobre a TecnologiaEducacional.Com visite:
www.tecnologiaeducacional.com

Fundamentos da Linguagem de Programao Java

Benedito C. A. Petroni / Cludio L. V. Oliveira

Fundamentos da Linguagem de Programao

Java
Breve Histria
A linguagem de programao Java foi criada pela Sun Microsystems. O objetivo inicial do projeto era a criao de um software para produtos eletrnicos. Porm, as linguagens de programao existentes at ento no eram adequadas, pois os programas escritos nestas linguagens tm de ser recompilados para cada microprocessador utilizado. Quando um novo processador lanado grande parte dos programas devem ser recompilados para extrair o mximo de recursos deste novo processador. Durante o ano de 1993 a World Wide Web estava passando de uma interface totalmente baseada em textos para uma interface que buscava maior interao dos usurios de sistemas de computadores; uma interface mais grfica. A equipe de desenvolvimento Java observou que a existncia de uma linguagem independente de plataforma como a Java seria ideal para a programao de aplicativos para a web, uma vez que uma aplicao escrita em Java poderia rodar nas diferentes plataformas existentes nas Internet. O resultado foi a criao de um navegador inicialmente chamado de WebRunner e depois hoje HotJava, totalmente escrito em Java. Quando um programa em Java compilado gera-se byte-codes. Byte-codes so similares a cdigo de mquina, entretanto, no so especficos para um tipo particular de arquitetura de computador, de forma que programas em Java podem ser executados em arquiteturas distintas sem a necessidade de serem recompilados. No momento da execuo da aplicao os byte-codes so convertidos pela Java Virtual Machine (JVM) em cdigo de mquina. Estruturalmente Java considerada uma linguagem de alto nvel, orientada a objetos, sendo sua sintaxe muito similar ao C++, apresenta tipos de dados estticos, compilada, independente de arquitetura e multithreaded.

Fundamentos da Linguagem de Programao Java

Benedito C. A. Petroni / Cludio L. V. Oliveira

Principais Caractersticas da Linguagem de Programao Java


A linguagem de programao Java atualmente amplamente utilizada para o desenvolvimento dos mais diversos tipos de aplicaes e tambm para uma grande variedade de plataformas. A seguir citamos algumas de suas principais caractersticas: Orientao a Objetos: O cdigo Java organizado em classes. Cada classe define um conjunto de mtodos, e a partir destes mtodos pode-se formar o comportamento de um objeto. Uma classe pode herdar comportamentos de outra classe. Com exceo de tipos simples, como nmeros e variveis booleanas, a maior parte das coisas em Java so objetos. Tipos de Dados Estticos: Em um programa Java todo objeto dever ser definido antes de utilizado. Diversidade de Tipos de Aplicaes: A linguagem Java permite a criao de aplicaes console (modo texto), grficas (AWT e SWING), para a Internet (Applets, Servlets e JSP Java Server Pages) e para dispositivos portveis ou mveis (J2ME). Independncia de Arquitetura: Como j explicamos anteriormente os programas Java so compilados em byte codes, desta forma os programas podem rodar em qualquer plataforma que suporte Java, sem a necessidade de serem recompilados. A linguagem Java a mesma em qualquer computador. Por exemplo, tipos de dados simples no variam: um inteiro tem sempre 32 bits e um inteiro longo tem sempre 64 bits. Multithreaded: A maior parte dos sistemas operacionais modernos, como o Unix e o Windows, suportam multitarefa. Um programa Java pode utilizar mais de uma thread de execuo. Garbage Collector: Em Java no h a necessidade de se preocupar com o gerenciamento de memria. O sistema em Java tem um programa embutido chamado de garbage collector (coletor de lixo), que varre a memria e automaticamente libera qualquer poro de memria que no esteja sendo utilizada.

Fundamentos da Linguagem de Programao Java

Benedito C. A. Petroni / Cludio L. V. Oliveira

Requisitos de Software e Hardware


Para a implementao de todos os exemplos dessa obra, o leitor dever instalar a verso atual do Java Development Kit (JDK), disponvel em www.javasoft.com. Tambm dever realizar a instalao de uma Integrated Development Environment (IDE) podendo ser NetBeans (www.netbeans.org) ou Eclipse (www.eclipse.org). Ressalta-se que ambas as IDEs e o JDK possuem verses para plataforma Windows e Linux.

Convenes Adotadas nesta Obra


Visando facilitar a leitura e o entendimento dos conceitos apresentados, esta obra adotou as seguintes convenes para as diferentes fontes utilizadas no texto: Itlico: Enfatizar e destacar termos na lngua inglesa; Courier New: Realizar a indicao de palavras reservadas, referncia s classes da linguagem de programao Java ou desenvolvidas pelos prprios autores; Courier New : Exibio do cdigo-fonte dos programas.

Fundamentos da Linguagem de Programao Java

Benedito C. A. Petroni / Cludio L. V. Oliveira

Tipos de Dados
Uma varivel, atributo ou at mesmo o valor de retorno de um mtodo, deve ser previamente declarado devendo apresentar um tipo de dados. Abaixo, na Tabela 1, so apresentados os principais tipos de dados definidos pela linguagem Java: Tabela 1. Principais tipos de dados na linguagem Java Tipo de Dados Descrio boolean Um bit com contendo valor verdadeiro (true) ou falso (false) byte valor inteiro com sinal de 1 byte short valor inteiro com sinal de 2 bytes char caractere de 2 bytes int valor inteiro com sinal de 4 bytes float valor numrico com preciso decimal de 4 bytes double long Valores true ou false Padro false

-128 a 127 -32.768 a 32.767

0 0 '\u0000' 0 0,0f

0 a 65.535 -2.147.483.648 a 2.147.483.647 1.40129846432481707e-45 a 3.40282346638528860e+38 (positivo ou negativo) valor numrico com 4.94065645841246544e-324 a preciso decimal de 8 bytes 1.79769313486231570e+308 (positivo ou negativo) valor inteiro com sinal de 8 -9.223.372.036.854.775.808 a bytes +9.223.372.036.854.775.807

0,0d

0L

Desta forma, a declarao de uma varivel deve apresentar o seu tipo de dados, o nome que a varivel ter e, opcionalmente, o seu valor inicial. Por exemplo, para declararmos uma varivel inteira que possua o nome x teremos a seguinte sintaxe: int x; Caso seja necessrio atribuir um valor inicial, podemos realizar a declarao da seguinte maneira: int x = 10;

Fundamentos da Linguagem de Programao Java

Benedito C. A. Petroni / Cludio L. V. Oliveira

Classes para Tipos de Dados


Alm dos tipos de dados suportados pela linguagem, existem tambm classes que permitem a implementao de objetos que representam tipos de dados. A vantagem da utilizao dessas classes consiste na possibilidade de utilizar mtodos que permitiro converses, comparaes e verificaes aos valores armazenados nos objetos. Tabela 2. Principais classes para tipos de dados Classe String Integer Float Double Date Objetivo Cadeia de caracteres Definir um objeto para o tipo inteiro Definir um objeto para o tipo de dados float Definir um objeto para o tipo de dados double Definir um objeto que permite armazenar data e/ou hora

Por exemplo para declararmos um objeto que ir armazenar o nome de uma pessoa devemos declar-lo da seguinte maneira: String nome = "Maria"; Ou tambm poderia ser declarado assim: String nome = new String ("Maria");

Fundamentos da Linguagem de Programao Java

Benedito C. A. Petroni / Cludio L. V. Oliveira

Orientao a Objetos Parte 1: Introduo

Objeto uma bolha de inteligncia que sabe agir numa determinada situao Steve Jobs, fundador da Apple, Next e Pixar.

O paradigma de Orientao a Objeto trouxe uma nova forma de projetar e de desenvolver programas de computadores. Enquanto que o projeto e a programao estruturada focam a reduo dos problemas computacionais a apenas trs estruturas bsicas, que seqncia, deciso e interao, e na qual, procedimentos, funes e estruturas de dados apresentam ligaes e relacionamentos tnues. Por outro lado, a Orientao a Objeto estabelece um forte relacionamento entre os diversos componentes de um determinado problema computacional atravs da adoo de dois conceitos chave: classe e objeto. Na programao orientada a objetos implementa-se um conjunto de classes que permitem a definio dos objetos presentes no projeto do sistema. Cada classe tem por objetivo determinar o comportamento, que so definidos pelos mtodos, e estados possveis, descritos pelos atributos que compem e caracterizam os objetos, alm de permitir a definio do relacionamento com outros objetos. Conforme mencionado acima, a orientao a objeto, pode ser entendida atravs da definio de dois dos elementos chave:

O primeiro o conceito de classe, que pode ser entendido como a descrio de um ou mais objetos atravs de um conjunto uniforme de atributos e mtodos; O segundo conceito o do prprio objeto, que pode ser definido como uma abstrao de algo que existe dentro do domnio de um problema ou na sua implementao, sendo que todo objeto a instncia de uma classe. Ilustrando estes conceitos, considere uma determinada classe chamada pessoa, os objetos dessa classe so os indivduos que a compem, por exemplo, Jos e Maria entre outros.
6 Benedito C. A. Petroni / Cludio L. V. Oliveira

Fundamentos da Linguagem de Programao Java

Em sntese: Classe: determina o comportamento dos objetos, que so definidos pelos mtodos, e estados possveis, descritos pelos atributos que compem e caracterizam esses objetos; Objetos: pode ser entendido como uma abstrao de algo que existe dentro do domnio de um problema ou na sua implementao, sendo que todo objeto a instncia de uma classe. Para um perfeito entendimento da orientao a objeto torna-se necessrio definir os demais conceitos que a compem: Atributo: define um conjunto padro de caractersticas especficas para uma determinada classe. Os valores (estados) que estes atributos recebem, quando a classe instanciada, permitem caracterizar um objeto. Considerando uma determinada classe pessoa, os atributos poderiam ser nome, endereo e telefone entre outros. Mtodo: solicitao a um objeto invocando um de seus mtodos, mtodo este que ativa um determinado comportamento descrito pela classe que deu origem ao objeto em questo. Usando como exemplo a classe pessoa, poderamos definir mtodos para alterar o nome, o endereo ou o telefone de determinado indivduo. Mtodo Construtor: um mtodo especial, que deve apresentar o mesmo nome da classe, sendo executado somente no momento em que o objeto criado, ou seja, quando uma classe instanciada. A partir dos conceitos de classes, atributos e mtodos possvel realizar a definio de uma classe utilizando, para isso, a sintaxe da linguagem Java: public class Pessoa { private String nome; private String endereco; private String telefone; public Pessoa() { } public Pessoa(String _nome, String _endereco, String _telefone) { nome = _nome; endereco = _endereco; telefone = _telefone; }
Fundamentos da Linguagem de Programao Java 7 Benedito C. A. Petroni / Cludio L. V. Oliveira

public void DefinirNome(String _nome) { nome = _nome; } public String ObterNome() { return (nome); } // Demais mtodos ... } Palavra-reservada this: utilizada para referenciar um atributo ou mtodo da prpria classe evitando ambiguidade em relao aos parmetros ou variveis declaradas dentro de um mtodo da classe. Por exemplo, o construtor da classe Pessoa pode utilizar this para diferenciar os atributos dos parmetros: public Pessoa(String nome, String endereco, String telefone) { this.nome = nome; this.endereco = endereco; this.telefone = telefone; } Ou seja, this.nome faz a referncia ao atributo nome enquanto nome identifica o parmetro que foi passado no mtodo construtor. Polimorfismo: permite que um determinado mtodo declarado em uma classe funcione de maneira diferente de acordo com o contexto no qual o objeto est inserido. Abstrao a capacidade de permitir a concentrao apenas nos aspectos essenciais de um contexto, mascarando as caractersticas menos importantes. Na modelagem orientada a objetos, uma classe pode ser entendida como uma abstrao das entidades existentes no domnio da aplicao.

Fundamentos da Linguagem de Programao Java

Benedito C. A. Petroni / Cludio L. V. Oliveira

Encapsulamento: consiste na separao de caractersticas internas e externas de um determinado objeto. Este recurso comumente utilizado para evitar o acesso direto aos atributos desse objeto, permitindo desta forma que apenas os mtodos consigam alterar esses atributos. O conceito de encapsulamento implementado atravs da definio da visibilidade de atributos e mtodos atravs das palavras-reservadas public, private ou protected. Getters e Setters: dentro do conceito de encapsulamento comum definirmos os atributos como privados, desta forma, para os atributos que precisam receber valores provenientes de fora da classe necessrio implementar um mtodo de atribuio, normalmente conhecido como Setter. Por outro lado, atributos que precisam ter o seu contedo consultado por outras classes devero implementar um mtodo Getter. Adotando estes conceitos, e considerando que o contedo dos atributos nome, endereo e telefone precisam ser acessados por outras classes, a classe Pessoa poderia ser escrita da seguinte forma: public class Pessoa { private String nome; private String endereco; private String telefone; public Pessoa() { } public Pessoa(String nome, String endereco, String telefone) { this.nome = nome; this.endereco = endereco; this.telefone = telefone; } public void SetNome(String nome) { this.nome = nome; } public String GetNome() { return (nome); } // Demais mtodos ... }
Fundamentos da Linguagem de Programao Java 9 Benedito C. A. Petroni / Cludio L. V. Oliveira

Mtodo toString(): esse mtodo bastante utilizado em programao, sua principal funo o retorno de uma determinada String. Um detalhe que String uma classe e caso seja necessrio receber informaes desta classe, esse mtodo permite o retorno das informaes dela mesma. Seguindo o raciocnio deste mtodo, pode-se observar o exemplo a seguir considerando que o contedo da classe Veculo seja acessado o endereo de memria do objeto. public class Veiculo{ private String marca; private String modelo; public String toString(){ return marca+" "+modelo; } // Demais mtodos ... }

Associao: pode ser entendido como um recurso atravs do qual um objeto consegue utilizar componentes de um outro objeto. Por exemplo, um usurio de computador (objeto), ao realizar a digitao em um teclado (outro objeto), pressiona as teclas, que so uma parte do objeto teclado. Instncias: Como abordado anteriormente, uma classe define o comportamento de um objeto atravs dos mtodos e atributos. Porm, a mesma no realiza o armazenamento dos atributos e a execuo dos mtodos. Desta forma, torna-se necessrio a criao de objetos a partir da classe definida, ou seja, os objetos podem ser entendidos como instncias de uma determinada classe.

Fundamentos da Linguagem de Programao Java

10

Benedito C. A. Petroni / Cludio L. V. Oliveira

Pessoa pessoa = new Pessoa(); Ou Pessoa pessoa = new Pessoa(Jos, Rua das Flores, 100, 11-4524-7445); importante observar nos exemplos acima que os mtodos construtores definem o modo como o objeto ser instanciado, ou seja, como o objeto ser criado.

Exerccios 1) Considerando o funcionamento de uma lmpada, projetar uma classe que represente os estados possveis e respectivos mtodos. 2) Uma determinada loja precisa armazenar as seguintes caractersticas de seus produtos: cdigo, descrio e preo. Especificar uma classe, com atributos e mtodos, que permita realizar essa representao. 3) Uma empresa seguradora necessita descrever as seguintes informaes dos veculos segurados: nmero do chassi, nmero da placa, fabricante, modelo, ano de fabricao e cor. Especificar uma classe, com atributos e mtodos, que permita caracterizar essa necessidade. 4) Considerando um DVD especificar uma classe que permita represent-lo. 5) Representar uma classe chamada matemtica que permita realizar uma das quatro operaes bsicas sobre dois nmeros de ponto flutuante retornando, em seguida, o resultado.

Fundamentos da Linguagem de Programao Java

11

Benedito C. A. Petroni / Cludio L. V. Oliveira

Estrutura Bsica de Aplicao em Java


A primeira aplicao que criaremos ser do tipo console, que consiste no tipo de aplicao mais simples, pois no envolve a adoo de conceitos de aplicaes grficas ou para a Internet. Neste exemplo importante observar, inicialmente, a definio da classe OlaPessoal e do mtodo main. O mtodo println, disponvel no pacote padro System.out, dever ser utilizado para realizar a exibio de um contedo na sada padro do console. public class OlaPessoal { public static void main(String[] args) { System.out.println("Ol pessoal!"); } } importante observar que, devido a linguagem Java ser orientada a objetos, a mesma composta por classes que, por sua vez, so compostas por atributos e mtodos. Independente do nmero de classes que uma aplicao possa implementar, um programa em Java ter incio sempre a partir da classe que possui um mtodo especial chamado main. Aps a compilao ao executarmos a aplicao, a mensagem Ol pessoal! ser exibida na tela. A Figura 1 a seguir, mostra a execuo de um programa no NetBeans IDE, para obter maiores informaes sobre como compilar e executar aplicaes em Java consulte os Apndices A e B que iro abordar, respectivamente as IDE's NetBeans 1 e Eclipse2.

1 2

Disponvel em www.netbeans.org Disponvel em www.eclipse.org Fundamentos da Linguagem de Programao Java

12

Benedito C. A. Petroni / Cludio L. V. Oliveira

Figura 1: Interface da IDE Netbeans

Entrada de Dados
No exemplo a seguir ser mostrado como se efetua uma entrada de dados, ou seja, permitir que o usurio da aplicao realize a digitao dos dados atravs do teclado. import java.io.*; public class EntradaDados { public static void main(String[] args) throws IOException { String nome; BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Digite o seu nome:"); nome = teclado.readLine(); System.out.println("Ol, " + nome + "."); } } Inicialmente deve-se realizar a importao do pacote java.io, pois, ele contm as classes necessrias que permitiro a entrada de dados atravs do teclado. A utilizao dessas classes requer que o tratamento de excees seja habilitado, neste exemplo, isso ser realizado atravs da palavra reservada throws. Futuramente iremos abordar de forma mais detalhada as possibilidades de tratamento de erros que so oferecidos pela linguagem.
Fundamentos da Linguagem de Programao Java 13 Benedito C. A. Petroni / Cludio L. V. Oliveira

O prximo passo consiste em criar um objeto pertencente a classe BufferedReader, o qual permitir receber os dados da System.in que representa o acesso ao dispositivo de hardware teclado. Concluindo este exemplo, o mtodo readLine() obtm o contedo digitado at que o usurio pressione a tecla Enter. importante salientar que toda entrada de dados recebida pela linguagem como um objeto pertencente a classe String sendo que, quando necessrio, devemos realizar a converso para o tipo de dados desejado. Uma outra possibilidade, que permite simplificar o processo de entrada dos dados, a utilizao da classe Scanner, por exemplo: import java.io.*; public class CalculoIdade { public static void main(String[] args) { Scanner teclado = new Scanner(System.in); System.out.print("Digite o seu nome: "); String nome = teclado.nextLine(); System.out.print("Digite o seu ano de nascimento: "); int anoNascimento = teclado.nextInt(); int idade = 2010 anoNascimento; System.out.println("Ol, " + nome + " voc possui " + idade + " anos."); } }

Converses entre Tipos de Dados


Quando utilizamos mtodos para obter seqncias atravs da digitao do usurio tanto em modo console, quanto em interfaces grficas e aplicaes para a web, deparamos com a caracterstica de realizar o recebimento dessas seqncias apenas atravs de cadeias de caracteres (Classe String). Porm, em muitos casos, torna-se necessrio a utilizao desses valores de entrada como tipos de dados numricos. Neste cenrio de fundamental necessidade a realizao de converses entre os tipos de dados. O exemplo a seguir mostra como realizar a converso de um objeto pertencente a classe String para uma varivel inteira: String entrada = 12;
Fundamentos da Linguagem de Programao Java 14 Benedito C. A. Petroni / Cludio L. V. Oliveira

int saida = new Integer(entrada).intValue(); A converso realizada em dois passos:

Primeiro criado um objeto a partir da classe Integer recebendo, como parmetro, o objeto da classe String; Segundo, o mtodo intValue() usado para retornar um valor do tipo de dados inteiro para a varivel sada.

Neste prximo exemplo iremos utilizar os conceitos de entrada de dados e tambm de converses entre tipos de dados para criar uma pequena aplicao que receba, atravs de digitao, dois nmeros inteiros e, em seguida, faa a exibio a soma dos mesmos. import java.io.*; public class Soma { public static void main(String[] args) throws IOException { int num1, num2, soma; BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Digite um nmero:"); num1 = new Integer(teclado.readLine()).intValue(); System.out.println("Digite outro nmero:"); num2 = new Integer(teclado.readLine()).intValue(); soma = num1 + num2; System.out.println("Soma = " + soma); } }

Exerccios
1) Criar uma aplicao Java que receba por digitao o nome e o sobrenome e, em seguida, realize a exibio da seguinte maneira: sobrenome, nome. 2) Elaborar um programa que realize a multiplicao de dois valores numricos do tipo de dados float digitados pelo usurio e, depois, exiba o valor da multiplicao dos mesmos. 3) Escrever uma aplicao que receba quatro nmeros inteiros digitados pelo usurio e, em seguida, calcule e exiba a valor da soma desses nmeros.

Fundamentos da Linguagem de Programao Java

15

Benedito C. A. Petroni / Cludio L. V. Oliveira

4) Criar uma aplicao que receba trs nmeros double digitados pelo usurio e, em seguida, calcule e exiba a valor da mdia. 5) Uma determinada loja precisa calcular o preo de venda de um produto. O clculo dever ser efetuado atravs da multiplicao do preo unitrio pela quantidade vendida e, posteriormente, subtrair o valor do desconto. Considerar todos os campos do tipo de dados float e que os mesmos sero digitados pelo usurio. 6) Calcular a mdia final de um aluno considerando que o mesmo ir realizar duas provas (P1 e P2), sendo que a P1 dever ter peso 4 e a P2 peso 6. Adotar que as notas so do tipo de dados double e que elas sero fornecidas pelo usurio. 7) Uma loja precisa armazenar as seguintes caractersticas de seus produtos: cdigo, descrio e preo. Especificar uma classe, com atributos e mtodos, que permita realizar essa representao. Em seguida, criar um programa que instancie um objeto desta classe e permita que os valores dos atributos sejam digitados pelo usurio. 8) Considerando a classe produto desenvolvida no exerccio anterior criar um mtodo que retorne o preo a vista do produto, sendo que este preo dever ser calculado como 90% do valor do atributo preo.

Fundamentos da Linguagem de Programao Java

16

Benedito C. A. Petroni / Cludio L. V. Oliveira

Vetores e Matrizes
Vetores e matrizes, devem ser compostos apenas por elementos de um mesmo tipo de dados e devem ser declarados da mesma maneira como se cria a maioria dos objetos: int i[] = new int[5]; Neste exemplo criamos um vetor de inteiros que poder receber cinco elementos. Em vetores e matrizes o primeiro elemento acessado com o ndice recebendo o valor 0 (zero). Para acessar um elemento dentro de um vetor devemos referenciar entre colchetes o ndice da posio desejada, por exemplo: i[0] = 45; Os elementos de um vetor podem ser inseridos no momento da criao do mesmo conforme mostrado abaixo: int i[] = {64, 87, 32, 07, 86}; Quando mostramos os tipos de dados bsicos voc de ter observado que existe o tipo char que pode conter um caractere. Desta forma poderamos definir um vetor de char para poder armazenar cadeias de caracter da seguinte forma: char linguagem[] = { 'J', 'a', 'v', 'a' }; Porm, para facilitar a vida dos programadores em Java, a linguagem nos oferece uma classe projetada especificamente para manusear as cadeias de caracteres: a classe String. Utilizando esta classe a definio da varivel nome poderia ser realizada assim: String linguagem = new String(Java); A vantagem de se utilizar a classe String est no fato de que a mesma j possui vrios mtodos para manipular os objetos criados. Abaixo esto descritos os mtodos de maior utilidade so:

charAt(int indice) - retorna o caracter que est na posio ndice; equals(Object objeto) - retorna true se o objeto String for igual a objeto; length() - retorna o tamanho do objeto; substring(int inicio, int fim) - retorna o objeto com os caracteres entre inicio e fim; toLowerCase() - retorna a cadeia de caracteres convertida para minsculas;
17 Benedito C. A. Petroni / Cludio L. V. Oliveira

Fundamentos da Linguagem de Programao Java

toUpperCase() - retorna a cadeia de caracteres convertida para maisculas.

Instrues de Controle
As estruturas de controle, presentes na quase totalidade das linguagens de programao, permitem determinar a execuo ou no de determinado bloco de cdigo, tambm so responsveis pela possibilidade de repetio de um bloco de cdigo. A estrutura if-else realiza a avaliao da expresso lgica fornecida em condicao, caso a mesma seja verdadeira o bloco de cdigo associado a instruo if executado, caso contrrio, o bloco associado instruo else, que opcional, ser executado. Tambm possvel realizar o encadeamento de instrues dando origem a uma estrutura do tipo if-elseif-else, conforme pode ser observado no quadro abaixo. if (condicao) { comando; ... } else if (condicao-1) { comando; ... } else { comando; ... } Essa estrutura if-else utilizada para realizar a execuo condicional de um determinado bloco de cdigo, no exemplo abaixo ser utilizada para determinar se um nmero maior que zero. Observe que a instruo else opcional e, para este caso, no foi utilizada. int n = 5; if (n > 0) { System.out.println(O nmero maior que zero); } A estrutura de controle switch pode ser usada como alternativa ao if-else em situaes onde em todas as expresses lgicas realizam sempre o teste de uma mesma varivel. A estrutura funciona atravs da verificao de uma variavel, caso ela seja igual a valor-1 ento o respectivo bloco de comando executado at que se encontre a instruo break, caso contrrio verifica-se variavel em relao a valor-2 e assim sucessivamente.
Fundamentos da Linguagem de Programao Java 18 Benedito C. A. Petroni / Cludio L. V. Oliveira

Se todas as condies forem falsas o bloco que contm a instruo default ser executado. switch (variavel) { case valor-1: comando; ... break; case valor-2: comando; ... break; default: comando; ... break; } Para ilustrar esse conceito, imagine uma situao hipottica em que voc precisa escrever uma aplicao que escreva o valor por extenso dos nmero inteiros 1, 2 e 3. Inicialmente, para fins de comparao, vamos realizar a implementao atravs do uso de if-else encadeados: int n = 2; if (n == 1) System.out.println(Um); else if (n == 2) System.out.println(Dois); else if (n == 3) System.out.println(Trs); else System.out.println(No sei!); Observe que, neste caso, adotando-se como referncia o valor 2 atribudo a varivel n, a primeira verificao (n == 1) ser falsa, provocando a execuo a clusula else que inicia-se com a instruo if testando se n == 2. Agora o resultado da avaliao da expresso ser verdadeiro e o comando System.out.println(Dois) ser executado. Sendo esta condio verdadeira os demais testes no so realizados pois esto associados ao else. A seguir iremos implementar este mesmo exemplo utilizando a estrutura switch. A estrutura recebe como parmetro a varivel n, ou seja, a varivel que deseja-se testar. Em seguida, cada clusula case indica o valor necessrio para que o respectivo bloco de comandos seja executado.
Fundamentos da Linguagem de Programao Java 19 Benedito C. A. Petroni / Cludio L. V. Oliveira

Um bloco de comando deve, obrigatoriamente, ser finalizado com a instruo break, a qual provoca o trmino da estrutura switch. Neste exemplo, a instruo case 1 ser falsa e o bloco no executado. Em seguida, case 2 resulta em verdadeiro, a mensagem ser exibida e ao encontrar o comando break a estrutura finalizada, ou seja, case 3 no ser verificado e o bloco default no ser executado. int n = 2; switch (n) { case 1: System.out.println(Um); break; case 2: System.out.println(Dois); break; case 3: System.out.println(Trs); break; default: System.out.println(No sei!); } A estrutura while possibilita realizar a repetio de um bloco de comandos at que a expresso lgica fornecida em condicao seja avaliada como falsa, neste momento o while encerrado e a execuo do programa prossegue na linha de cdigo imediatamente posterior ao comando. while (condicao) { comando; ... } Como exemplo de utilizao da estrutura while iremos mostrar um fragmento de programa que permite a exibio dos nmeros inteiros entre 1 e 10: int i = 1; while (i <= 10) { System.out.println(i); i++; } i = 1; Observe que o bloco de comandos ir se repetir enquanto a varivel i for menor ou igual a 10. Quando i atingir o valor 11 a condio torna-se falsa, ou seja, a repetio
Fundamentos da Linguagem de Programao Java 20 Benedito C. A. Petroni / Cludio L. V. Oliveira

encerrada e o valor da varivel ser ajustado novamente para 1, pois, trata-se da instruo que est imediatamente aps o bloco de comandos relativo estrutura while. A estrutura de controle do-while tem funcionamento similar ao while, porm apresenta uma diferena fundamental: enquanto no while primeiro realiza-se a verificao da expresso lgica e depois a execuo do bloco de comandos; na estrutura do-while ocorre o contrrio, inicialmente realizada a execuo do bloco de comando e depois realizada a verificao da expresso lgica. Desta forma, o bloco de comando sempre executado pelo menos uma vez, independente de condicao ser verdadeira ou falsa. do { comando; ... } while (condicao); Observe que, neste caso, primeiro ser exibido o valor da varivel i, depois realizase o seu incremento. Em seguida, a condio verificada e, neste exemplo, ser considerada falsa, encerrando a estrutura do-while. int i = 11; do { System.out.println(i); i++; } while (i <= 10); A estrutura de repetio for apresenta como caractersticas particulares a possibilidade de realizar tarefas de inicializao e ps-execuo no prprio corpo da instruo, permitindo um cdigo mais conciso e com maior facilidade de entendimento. for (instrucao-1; condicao; instrucao-2) { comando; ... } O comando tem incio com execuo de instrucao-1, em seguida realiza-se a avaliao da expresso lgica condicao, caso a mesma seja verdadeira o bloco de comandos executado, caso contrrio a estrutura ser encerrada e a execuo do programa ir prosseguir na instruo imediatamente posterior a estrutura for. Aps a execuo do bloco de comandos executa-se instrucao-2 e, em seguida, a expresso lgica novamente verificada.
Fundamentos da Linguagem de Programao Java 21 Benedito C. A. Petroni / Cludio L. V. Oliveira

for (int i = 1; i <= 10; i++) { System.out.println(i); } No exemplo apresentado anteriormente, possvel verificar que o mesmo ir realizar a exibio dos nmeros inteiros entre 1 e 10. Note que, quando comparado com o mesmo exemplo que utilizou a estrutura de controle while, a implementao com for bem mais concisa.

Exerccios
1) Criar um programa que receba trs nmeros inteiros e exiba o maior deles. 2) Especificar uma aplicao que faa a leitura do nome e ano de nascimento de uma pessoa e exiba a idade da mesma. 3) Escreva um programa que realize a exibio dos nmeros inteiros pares entre 0 e 100. 4) Escreva um programa que realize a exibio, em ordem decrescente, dos nmeros inteiros entre 0 e 200 e que tambm sejam mltiplos de 5. 5) Criar um programa em Java que permita ao usurio digitar dois nmeros float e uma das quatro operaes matemticas bsicas e, em seguida, exiba o resultado do clculo efetuado. A aplicao tambm no poder permitir a tentativa de diviso de um nmero por zero. 6) Dada uma seqncia de 10 nmeros inteiros, realizar a exibio na ordem inversa da leitura. 7) Dado um vetor com 5 nmeros inteiros, exibir a mdia. 8) Um dado de jogo foi lanado 20 vezes. A partir dos resultados dos lanamentos, devidamente armazenados em um vetor, mostrar o nmero de ocorrncias de cada face. 9) Considerando uma moeda lanada 10 vezes, criar uma aplicao em Java para determinar o nmero de ocorrncias de cada um dos lados. 10) A partir de um determinado vetor v contendo 5 nmeros inteiros, escrever um programa em Java que imprima soma dos elementos do vetor. Por exemplo, para o vetor v = {5, 10, 5, 10, 5} o programa dever imprimir 35.

Fundamentos da Linguagem de Programao Java

22

Benedito C. A. Petroni / Cludio L. V. Oliveira

11) Considerando um vetor do tipo float com tamanho 5, escrever um programa que, aps percorrer todo o vetor, identifique a diferena entre o maior e o menor elemento. Por exemplo, para um determinado vetor v = {6.5, 4.2, 7.7, 4.1, 2.2}, o programa dever mostrar que 7.7 2.2 = 5.5. 12) Elabore um programa em Java que, dado um determinado vetor A contendo 10 nmeros inteiros, obtenha a maior diferena entre dois elementos consecutivos deste vetor. 13) Em uma sala de aula h 10 alunos, cada um dos quais realizou 3 provas com pesos distintos. Sendo que a primeira prova possui peso 3, a segunda possui peso 4 e a terceira peso 3. Criar uma aplicao em Java que permita o lanamento das notas das trs provas de cada aluno e, em seguida, calcule a mdia ponderada das provas, exibindo a mdia para cada um dos alunos. 14) Tomando como referncia uma aplicao em modo console, implementar uma classe chamada Teclado e que contenha os mtodos necessrios para realizar a leitura de valores do tipo de dados String, inteiro e float.

Fundamentos da Linguagem de Programao Java

23

Benedito C. A. Petroni / Cludio L. V. Oliveira

Orientao a Objetos Parte 2: Herana


O conceito de herana pode ser entendido como o recurso pelo qual uma determinada classe, denominada sub-classe ou classe filha, pode receber atributos e mtodos presentes em outra classe, neste caso chamada de super-classe ou classe pai. Uma das caractersticas fundamentais da orientao a objetos a capacidade de reaproveitamento de cdigo, a qual pode ser implementada atravs da adoo do conceito de herana. O exemplo discutido a seguir mostra uma possibilidade de aplicao do conceito de herana. Considerar como cenrio uma loja, que mantm um registro de todos os produtos que so vendidos. Estes produtos possuem alguns atributos em comum como, por exemplo, cdigo, descrio e preo. Porm, alguns produtos possuem algumas informaes especficas:

CD: durao e nmero de faixas; DVD: durao, regio, idioma e legenda; Eletrnicos: tenso de operao e garantia; Livros: autor, nmero de pginas e idioma.

A primeira etapa consiste na definio da classe Produto, sendo que importante observar que os atributos devero ser declarados como protected para que possam ser acessados pelas classes filhas: public class Produto { protected int codigo; protected String descricao; protected float preco; public Produto() { } public Produto(int _codigo, String _descricao, float _preco) { codigo = _codigo; descricao = _descricao; preco = _preco; } public void DefinirCodigo(int _codigo) { codigo = _codigo; }
Fundamentos da Linguagem de Programao Java 24 Benedito C. A. Petroni / Cludio L. V. Oliveira

public int ObterCodigo() { return (codigo); } // Demais mtodos ... } Agora, como exemplo, criaremos a classe Eletrnico a qual, a partir do mecanismo de herana, receber todos os atributos da classe Produto sendo necessrio, desta forma, apenas a definio dos atributos e mtodos especficos: public class Eletronico extends Produto { private int tensao; private String garantia; public Eletronico() { } public Eletronico(int _codigo, String _descricao, float _preco, int _tensao, String _garantia) { codigo = _codigo; descricao = _descricao; preco = _preco; tensao = _tensao; garantia = _garantia; } public void DefinirTensao(int _tensao) { tensao = _tensao; } public int ObterTensao() { return (tensao); } // Demais mtodos ... } Como pode-se observar no cdigo acima, no construtor da classe Eletrnico, iniciou os atributos da classe pai (Produto) juntamente com os da prpria classe filha.

Fundamentos da Linguagem de Programao Java

25

Benedito C. A. Petroni / Cludio L. V. Oliveira

A linguagem Java oferece a palavra reservada super que permite realizar diretamente a chamada a um mtodo da classe pai. Desta forma, o construtor da classe Eletrnico poderia ser escrito da seguinte maneira: public Eletronico(int _codigo, String _descricao, float _preco, int _tensao, String _garantia) { super(_codigo, _descricao, _preco); tensao = _tensao; garantia = _garantia; } Note que os parmetros _codigo, _descricao e _preco so passados diretamente para o mtodo construtor da classe Produto atravs da palavra reservada super. Tambm importante salientar que este procedimento pode ser adotado para executar qualquer mtodo da classe pai dentro da classe filha. O ltimo passo na elaborao deste exemplo consiste em criar uma nova classe que ir utilizar a classe Eletrnico. Neste caso, necessrio apenas a instanciao de um objeto da classe Eletrnico, observe que os mtodos da classe Produto estaro disponveis graas ao mecanismo de herana: public static void main(String[] args) { Eletronico eletronico = new Eletronico(); System.out.println(" Cdigo:"); eletronico.DefinirCodigo(Teclado.LerInteiro()); System.out.println("Descrio:"); eletronico.DefinirDescricao(Teclado.LerString()); System.out.println(" Preo:"); eletronico.DefinirPreco(Teclado.LerFloat()); System.out.println(" Tenso:"); eletronico.DefinirTensao(Teclado.LerInteiro()); System.out.println(" Garantia:"); eletronico.DefinirGarantia(Teclado.LerString()); System.out.println("O produto " + eletronico.ObterDescricao() + " custa " + eletronico.ObterPreco() + " e possui garantia de " + eletronico.ObterGarantia() + "."); }

Fundamentos da Linguagem de Programao Java

26

Benedito C. A. Petroni / Cludio L. V. Oliveira

Exerccios
1) Implementar as demais classes descritas no cenrio proposto: CD, DVD e Livro. 2) Uma empresa de aluguel de veculos mantm um banco de dados para todos os veculos de sua frota. Para todos os veculos, so armazenados o nmero do chassi, o nmero da placa, o fabricante, o modelo, o ano de fabricao e a cor. Algumas informaes so includas para determinados tipos de veculos: - caminhes: capacidade de carga, nmero de eixos; - carros esportes: potncia, capacidade de acelerao; nibus: quantidade de passageiros, nmero de eixos; - off road: altura em relao ao solo, tipo de trao. Realizar a definio e implementao das classes, com respectivos atributos e mtodos, com base no exposto acima. 3) Considerando os diversos tipos de pessoas que trabalham em uma empresa definir um conjunto de classes, utilizando o mecanismo de herana, que caracterize os seguintes tipos de funcionrios: a) Todos os funcionrios possuem atributos de nmero de registro, nome, funo, salrio e situao; b) Funcionrios efetivos possuem atributos de data de admisso e demisso; c) Os funcionrios temporrios possuem data de incio do contrato e a durao em meses do mesmo; d) Enquanto que os funcionrios terceirizados apresentam data de incio, durao do contrato e o nome da empresa prestadora de servios.

Fundamentos da Linguagem de Programao Java

27

Benedito C. A. Petroni / Cludio L. V. Oliveira

Orientao a Objetos Parte 3: Interfaces e Implementaes


Em sistemas de computao, o conceito de interface pode ser aplicado de vrias formas. Por exemplo, uma interface com o usurio a camada de um sistema que tem como finalidade permitir e facilitar a interao entre o usurio e os diversos processos da aplicao. O conceito de interface de programao ou API (Applications Programming Interface) refere-se a um conjunto de funes que podem ser evocadas por programas aplicativos para utilizar os servios oferecidos pelo Sistema Operacional. A utilizao de interfaces bem definidas permite um alto grau de interoperabilidade entre os diversos componentes de um sistema. O conceito de interfaces na orientao a objetos utilizada para definir um tipo abstrato de dados que descreve o comportamento que visvel externamente de uma classe, objeto ou qualquer outra entidade. No caso de uma classe ou objeto, a interface inclui um conjunto de operaes e suas respectivas assinaturas de mtodos. Deste modo, possvel conceituar interface como a especificao de um tipo, que formado por um nome e um conjunto de mtodos, os quais no podem conter nenhuma implementao. Normalmente, os nomes de interfaces so criados da mesma maneira que os nomes de classes, ou seja, utilizando-se substantivos simples ou adjetivados, no singular, com cada palavra que compe o nome da interface iniciando com letra maiscula. Uma caracterstica essencial da utilizao das interfaces em Java a ausncia de implementao, tanto em relao aos mtodos quanto as estruturas de dados, sendo que a nica exceo admitida a definio de constantes. Todas as operaes de uma interface so pblicas, no sendo exigido o modificador public nas assinaturas dos mtodos. A seguir mostrado um exemplo de interface: public interface iPessoa { public void atribuirNome(String nome); public String obterNome(); public void atribuirEndereco(String endereco); public String obterEndereco(); public void atribuirTelefone(String telefone); public String obterTelefone(); }

Fundamentos da Linguagem de Programao Java

28

Benedito C. A. Petroni / Cludio L. V. Oliveira

A implementao de um tipo especificado por uma interface deve sempre ser realizada atravs da definio de uma classe. Sendo que uma classe pode implementar um nmero qualquer de interfaces, possvel afirmar que a linguagem Java possui suporte para o conceito de herana mltipla de interfaces. Por outro lado, diferentes classes podem realizar a implementao de maneiras diferentes de uma mesma interface atravs de construes distintas para os mtodos definidos na interface. A funo principal de uma interface possibilitar a separao, de forma explcita, das definies dos tipos abstratos de dados ocorridos dentro das suas possveis implementaes. No exemplo a seguir mostrado como realizar uma das possveis implementaes para a interface Pessoa definida anteriormente, sendo importante observar que, neste momento, o funcionamento de cada mtodo explicitado. public class Pessoa implements iPessoa { private String nome; private String endereco; private String telefone; public Pessoa() { nome = new String(""); endereco = new String(""); telefone = new String(""); } public String obterNome() { return (nome); } public void atribuirNome(String _nome) { nome = _nome; } public String obterEndereco() { return (endereco); } public void atribuirEndereco(String _endereco) { endereco = _endereco; } public String obterTelefone() { return (telefone); } public void atribuirTelefone(String _telefone) { telefone = _telefone; } }
Fundamentos da Linguagem de Programao Java 29 Benedito C. A. Petroni / Cludio L. V. Oliveira

Desta forma, a implementao consiste na definio das operaes especificadas pelas interfaces, atravs de mtodos que devem obrigatoriamente apresentar as mesmas assinaturas definidas pela respectiva interface. Quando uma classe no implementa alguma das operaes definidas pela sua interface, o mtodo correspondente fica implicitamente definido como abstrato e, conseqentemente, a classe tambm se torna abstrata, mesmo que o modificador abstract no esteja presente na definio da classe.

Fundamentos da Linguagem de Programao Java

30

Benedito C. A. Petroni / Cludio L. V. Oliveira

Colees de Objetos
No mundo real, freqentemente torna-se necessrio representar e agrupar vrios objetos. Por exemplo, os clientes de uma determinada loja so muitos e no apenas um. Neste contexto, uma coleo pode ser entendida como um conjunto composto por vrios objetos do tipo cliente, que compartilham o mesmo conjunto de atributos, porm, estes atributos apresentam estados diferentes. Alm do conceito de vetores e matrizes, na linguagem Java existem vrias interfaces e classes que implementam o conceito de colees, como as classes Vector, List, HashSet, HashMap e Hashtable entre outras. Da mesma maneira que possvel realizar a criao de vetores a partir dos tipos de dados suportados pela linguagem Java, tambm pode-se criar vetores a partir de classes. Neste exemplo ser utilizada a classe Pessoa que apresenta nome, endereo e telefone como atributos, observe que a instanciao da classe ir ocorrer sobre um objeto do tipo vetor, sendo que cada elemento do vetor dever ser instanciado antes de ser utilizado: public static void main(String[] args) { Pessoa pessoa[] = new Pessoa[3]; System.out.println("Digite o nome de trs pessoas:"); for (int i = 0; i < 3; i++) { pessoa[i] = new Pessoa(); System.out.println("Nome N " + (i + 1) + ":"); pessoa[i].DefinirNome(Teclado.LerString()); } System.out.println("Nome das pessoas cadastradas:"); for (int i = 0; i < 3; i++) { System.out.println(pessoa[i].ObterNome()); } } Toda coleo apresenta o atributo length que mostra a quantidade de itens existentes na coleo, desta forma, as estruturas de repetio utilizadas no exemplo poderiam ser escritas do seguinte modo: for (int i = 0; i < pessoa.length; i++) A utilizao do atributo length para determinar o tamanho da coleo favorece a manuteno do programa pois, no primeiro exemplo, se fosse necessrio alterar o tamanho da coleo, trs linhas deveriam ser alteradas: a declarao do vetor e a condio nas duas instrues for. Com a adoo do atributo length torna-se necessrio a alterao apenas da declarao do tamanho do vetor, ou seja, uma nica linha.
Fundamentos da Linguagem de Programao Java 31 Benedito C. A. Petroni / Cludio L. V. Oliveira

Exerccios
1) Alterar o exemplo mostrado acima acrescentando a leitura e exibio do endereo e telefone das pessoas. 2) Criar uma coleo para representar 5 objetos do tipo veculo e que possuem como atributos privados: chassis, placa, modelo, cor e ano de fabricao. 3) Desenvolver uma aplicao que permita representar 10 objetos do tipo produto e que tem os seguintes atributos privados: cdigo, descrio e preo.

Fundamentos da Linguagem de Programao Java

32

Benedito C. A. Petroni / Cludio L. V. Oliveira

List e ArrayList
Os vetores e matrizes so estruturas de alocao esttica, ou seja, no momento de sua declarao necessrio realizarmos a especificao do seu tamanho. Porm, quando construmos aplicaes, em vrias situaes no possvel precisar previamente o nmero de elementos, desta forma, a linguagem Java implementa classes que permitem a alocao dinmica de dados. Nas estruturas com alocao dinmica, como o prprio nome diz, possvel realizar o dimensionamento de forma automtica, a qualquer momento, durante a execuo do programa, atravs da insero ou remoo dos itens da estrutura. A interface List, disponvel no pacote java.util, uma das classes da linguagem Java que implementa esse conceito, podendo armazenar tanto tipos de primitivos como objetos. A seguir mostrado um pequeno exemplo abordando os conceitos bsicos de utilizao de listas: import java.util.*; public class Listas { public static void main(String[] args) { List lista = new ArrayList(); lista.add("Joo"); lista.add("Maria"); lista.add("Jos"); System.out.println("Tamanho atual da lista: " + lista.size()); lista.remove("Maria"); System.out.println("Novo tamanho da lista: " + lista.size()); System.out.println("Elementos da lista:"); Iterator item = lista.iterator(); while (item.hasNext()) { System.out.println(item.next()); } } } O primeiro passo para o desenvolvimento do exemplo consiste em criar o objeto lista que ir conter um conjunto de valores, neste exemplo, alguns nomes de pessoas.

Fundamentos da Linguagem de Programao Java

33

Benedito C. A. Petroni / Cludio L. V. Oliveira

importante observar que o objeto instanciado atravs de um ArrayList que a implementao com alocao dinmica da interface List. O mtodo add permite adicionar um novo elemento a lista, enquanto o mtodo remove realiza a excluso. possvel a qualquer momento consultar o nmero de itens que compem a lista atravs da utilizao do mtodo size. Para percorrer os elementos existentes na lista devemos utilizar a interface Iterator, que consiste em uma forma de acessar seqencialmente os elementos de uma coleo sem, com isso, expor a forma de sua representao interna. Ao utilizarmos um Iterator devemos empregar o mtodo hasNext() para verificar se existem elementos a serem recuperados, enquanto o mtodo next() ir obter o elemento.

HashMap
Neste exemplo sero abordadas as classes HashMap, pois a mesma permite uma recuperao mais rpida dos dados atravs da utilizao do conceito de chave de pesquisa e, posteriormente, a classe HashSet. Uma tabela hash pode ser definida como uma estrutura de dados que permite associar uma chave a um valor e, posteriormente, ter acesso ao valor a partir da chave que foi associada. Seu principal objetivo consiste, a partir da utilizao de uma chave, realizar uma busca e recuperar o valor desejado. Em Java, essa estrutura de dados encontra-se implementada atravs das classes HashMap e Hashtable. Essas classes so bastante teis quando a ordem dos objetos no interessa muito e necessrio adicionar, recuperar ou excluir os valores. De modo geral, essas classes so equivalentes, exceto que a HashMap possui uma especificao mais recente apresentando, como vantagens, a no sincronizao e a possibilidade de utilizao de valores nulos. A seguir mostrado um exemplo da sua utilizao: import java.util.*; public class ExemploHashMap { public static void main(String[] args) { HashMap<String, String> agenda; TreeMap agendaOrdenada; agenda = new HashMap<String, String>();
Fundamentos da Linguagem de Programao Java 34 Benedito C. A. Petroni / Cludio L. V. Oliveira

agenda.put("Jos da Silva","11-4845-4555"); agenda.put("Maria Pereira","11-4464-1232"); agenda.put("Ana dos Santos","19-3254-4529"); agenda.put("Pedro Rodrigues","11-4522-0023"); agendaOrdenada = new TreeMap(agenda); System.out.println("HashMap: " + agenda.toString()); System.out.println("TreeMap: " + agendaOrdenada.toString()); } } Neste exemplo tambm importante observar o uso da classe TreeMap que normalmente adotada em conjunto com a classe HashMap e permite a ordenao dos dados a partir da chave definida. Aps a execuo do programa tem-se o seguinte resultado: HashMap: {Ana dos Santos=19-3254-4529, Pedro Rodrigues=114522-0023, Jos da Silva=11-4845-4555, Maria Pereira=114464-1232} TreeMap: {Ana dos Santos=19-3254-4529, Jos da Silva=114845-4555, Maria Pereira=11-4464-1232, Pedro Rodrigues=114522-0023} Os principais mtodos da classe HashMap so:

put - realiza a insero do um item coleo: agenda.put("Jos da Silva","11-4845-4555"); get - atravs da chave obtm o objeto armazenado, por exemplo: String telefone = (String) agenda.get("Jos Silva"); remove - permite atravs da chave, apagar o objeto: Agenda.remove("Jos da Silva"); values obtm todos os objetos armazenados na coleo: for (String telefone: agenda.values()) { System.out.println("Telefone: " + telefone); }

da

Fundamentos da Linguagem de Programao Java

35

Benedito C. A. Petroni / Cludio L. V. Oliveira

HashSet
A classe HashSet permite armazenar um nico valor ou objeto ao conjunto e o seu acesso dever ocorrer de modo seqencial, atravs de um Iterator, pois a mesma no apresenta o conceito de chave de pesquisa, por exemplo: import java.util.*; public class ExemploSet { public static void main(String[] args) { HashSet nomes = new HashSet(); nomes.add("Joo"); nomes.add("Ana"); nomes.add("Pedro"); Iterator item = nomes.iterator(); while (item.hasNext()) { System.out.println(item.next()); } } } Os mtodos mais utilizados da classe HashSet so:

add - realiza a insero do um item coleo: nomes.add("Joo"); remove - permite atravs da chave, apagar o objeto: nomes.remove("Joo"); size obtm a quantidade de itens armazenados, por exemplo: int tamanho = nomes.size(); iterator obtm todos os objetos armazenados na coleo: Iterator item = nomes.iterator(); while (item.hasNext()) { System.out.println(item.next()); }

Fundamentos da Linguagem de Programao Java

36

Benedito C. A. Petroni / Cludio L. V. Oliveira

Tratamento de Exceo
Uma exceo provoca o trmino abrupto da aplicao, sendo que todos os dados, no armazenados no disco rgido, so perdidos quando isso ocorre. Desta forma, uma aplicao bem projetada e implementada dever realizar o tratamento das excees que podem ocorrer evitando, desta forma, o encerramento repentino do programa. A linguagem Java implementa o tratamento de exceo atravs da classe Exception, das palavras reservadas throw e throws e da estrutura de controle trycatch. A classe Exception consiste na classe pai de qualquer outra classe que implemente excees, tanto as definidas pela prpria linguagem como as definidas pelo desenvolvedor da aplicao. Com o intuito de ilustrar esses conceitos vamos criar um exemplo onde, em uma hipottica classe chamada Matemtica, teremos um mtodo Dividir que dever gerar uma exceo sempre que ocorrer uma diviso por zero. public class Matematica { public double Dividir(double x, double y) throws Exception { Exception DivisaoPorZero = new Exception("No possvel a diviso por zero."); if (y==0) throw DivisaoPorZero; return (x/y); } } Na declarao do mtodo devemos usar throws para indicar que o mtodo ir retornar uma exceo no caso de uma falha ocorrer durante a sua execuo. Em seguida, ser criado um objeto da classe Exception indicando que ocorreu uma tentativa de diviso por zero dentro do mtodo. Dentro da instruo if teremos a condio (y igual a zero) que quando verdadeira ir gerar a exceo e, desta forma, o cdigo return (x/y) que provocaria o trmino inesperado da aplicao no executado.

Fundamentos da Linguagem de Programao Java

37

Benedito C. A. Petroni / Cludio L. V. Oliveira

Quando for necessrio utilizar o mtodo Dividir, ser obrigatrio que mesmo seja executado dentro de uma estrutura de controle try-catch para, em caso de erro, poder realizar o devido tratamento da exceo, por exemplo: public class Principal { public static void main(String[] args) { Matematica m = new Matematica(); try { System.out.println("Resultado: " + m.Dividir(10, 0)); } catch(Exception e) { System.out.println("ERRO: " + e.getMessage()); } System.out.println("Fim do programa."); } } No try-catch o cdigo que poder gerar a exceo dever ficar dentro do bloco try, em caso de uma execuo bem sucedida o bloco catch no ser executado, caso contrrio, o mesmo executado. Tambm importante salientar que, em qualquer uma das situaes, a execuo da aplicao ir prosseguir. Desta forma, no nosso exemplo, a mensagem Fim do programa. ser sempre exibida independente da ocorrncia ou no de excees durante a execuo da aplicao.

Fundamentos da Linguagem de Programao Java

38

Benedito C. A. Petroni / Cludio L. V. Oliveira

JUnit Testes Unitrios


O JUnit3 um framework que permite a criao de testes unitrios em Java, tambm denominados testes pontuais. O conceito de testes unitrios est relacionado verificao isolada de pequenos blocos de cdigo, ou seja, em uma linguagem orientada a objetos, podemos nos referir a testes das classes que iro compor um programa, e assim pode-se realizar testes em pequenos blocos ao invs de testar toda a aplicao. Desta forma, torna-se possvel a realizao dos testes mesmo durante as fases iniciais do desenvolvimento e com esse framework no necessariamente necessita-se da utilizao de IDEs como NetBeans e Eclipse. O motivo? O JUnit j possui todo o suporte necessrio para o seu funcionamento. Considerando a classe Matematica, mostrada abaixo, e que tem como objetivo implementar as quatro operaes aritmticas bsicas sobre nmeros do tipo de dados double, iremos desenvolver um conjunto de testes unitrios sobre a mesma. public class Matematica { public double somar (double n1, double n2) { return (n1 + n2); } public double subtrair (double n1, double n2) { return (n1 - n2); } public double multiplicar (double n1, double n2) { return (n1 * n2); } public double dividir (double n1, double n2) { return (n1 / n2); } } No JUnit necessrio criar uma nova classe que iremos chamar, neste exemplo, de MatematicaTest e que ir implementar um conjunto de testes unitrios sobre os mtodos implementados na classe Matemtica: import static org.junit.Assert.*; import org.junit.Test;
3

Disponvel em http://www.junit.org Fundamentos da Linguagem de Programao Java

39

Benedito C. A. Petroni / Cludio L. V. Oliveira

public class MatematicaTest { @Test public void testSomar() { System.out.println("somar"); double n1 = 10.0; double n2 = 20.0; Matematica instance = new Matematica(); double expResult = 30.0; double result = instance.somar(n1, n2); assertEquals(expResult, result, 0.0); } @Test public void testSubtrair() { System.out.println("subtrair"); double n1 = 0.0; double n2 = 0.0; Matematica instance = new Matematica(); double expResult = 0.0; double result = instance.subtrair(n1, n2); assertEquals(expResult, result, 0.0); } @Test public void testMultiplicar() { System.out.println("multiplicar"); double n1 = 0.0; double n2 = 0.0; Matematica instance = new Matematica(); double expResult = 0.0; double result = instance.multiplicar(n1, n2); assertEquals(expResult, result, 0.0); } @Test public void testDividir() { System.out.println("dividir"); double n1 = 10.0; double n2 = 2.0; Matematica instance = new Matematica(); double expResult = 5.0; double result = instance.dividir(n1, n2); assertEquals(expResult, result, 0.0); }
Fundamentos da Linguagem de Programao Java 40 Benedito C. A. Petroni / Cludio L. V. Oliveira

} Na classe MatematicaTest os mtodos responsveis pelo teste unitrio recebero a anotao @Test e iro fornecer um conjunto de valores a um determinado mtodo da classe Matematica e, em seguida, comparar o resultado obtido com o resultado esperado atravs do mtodo assertEquals. Todos os mtodos de teste devem possuir esta assinatura, ou seja, devem ser pblicos, retornar void e no podem receber valores como argumento. Com a utilizao do JUnit, possvel que os programadores possam testar suas classes individualmente, durante o desenvolvimento da aplicao, garantindo uma maior qualidade do produto no processo de desenvolvimento.

Fundamentos da Linguagem de Programao Java

41

Benedito C. A. Petroni / Cludio L. V. Oliveira

Apndice A: Utilizao do NetBeans

O NetBeans uma opo de IDE para desenvolvimento de aplicaes em Java com distribuio gratuita. Est disponvel para download no endereo http://www.netbeans.org. O NetBeans necessita da instalao do Java Development Kit (JDK). Um IDE, do ingls Integrated Development Environment ou Ambiente Integrado de Desenvolvimento, pode ser entendido como um programa de computador que rene caractersticas e ferramentas de apoio ao desenvolvimento de programas como, por exemplo, editor de texto, compilador, debugger e ambiente de execuo entre outras. Aps iniciar o programa deve-se criar um projeto. Para isso, necessrio escolher a opo do menu File e depois New Project, conforme Figura 2 a seguir.

Figura 2: Construindo novo projeto na IDE NetBeans.

Fundamentos da Linguagem de Programao Java

42

Benedito C. A. Petroni / Cludio L. V. Oliveira

A seguir, conforme Figura 3, o primeiro passo consiste em escolher o tipo de aplicao que ser gerada, neste exemplo ser criada um Aplicativo Java, em seguida o boto Prximo dever ser pressionado.

Figura 3: Escolhendo o tipo de aplicao na IDE NetBeans. Esta prxima janela ir permitir a definio do nome do projeto, a localizao dos arquivos e a definio da classe principal, ou seja, aquela que ir conter o mtodo Main e que ser executada quando o programa for iniciado.

Fundamentos da Linguagem de Programao Java

43

Benedito C. A. Petroni / Cludio L. V. Oliveira

Aps preencher esses campos deve-se pressionar o boto Finalizar. Agora ser exibido um gabarito, conforme Figura 4 a seguir, com a estrutura bsica de um programa Java, a qual dever ser completada com os comandos desejados:

Figura 4: Interface da IDE NetBeans para programao em Java. A compilao da aplicao deve ser realizada utilizando-se a opo do menu Depurar e depois Depurar Projeto Principal (F11). Para executar a aplicao a opo do menu Executar e Executar Projeto Principal dever ser usada, sendo que o resultado da aplicao (F6), quando em modo console, ser exibida na janela posicionada na parte inferior do NetBeans, conforme ilustrado pela Figura 5 a seguir.

Figura 5: Resultado de compilao na IDE NetBeans.

Fundamentos da Linguagem de Programao Java

44

Benedito C. A. Petroni / Cludio L. V. Oliveira

Apndice B: Utilizao do Eclipse

O Eclipse uma outra opo de IDE para o desenvolvimento de aplicaes na linguagem Java, de distribuio gratuita e pode ser baixado a partir do endereo http://www.eclipse.org. Do mesmo modo que o NetBeans, o Eclipse tambm necessita da instalao do JDK. Aps iniciar o Eclipse a seguinte janela de boas vindas ser exibida, conforme Figura 6, a seguir:

Figura 6: Interface da IDE Eclipse.

Fundamentos da Linguagem de Programao Java

45

Benedito C. A. Petroni / Cludio L. V. Oliveira

O primeiro passo consiste na criao de um projeto, para isso utilizar a opo do menu File, New e depois Java Project. Neste momento a seguinte janela, conforme Figura 7 a seguir ser exibida:

Figura 7: Criao de um projeto na IDE Eclipse. Deve-se preencher o nome do projeto que, neste exemplo, ser OlaMundo e pressionar o boto Next.

Fundamentos da Linguagem de Programao Java

46

Benedito C. A. Petroni / Cludio L. V. Oliveira

Na prxima janela sero utilizados os valores padro, neste caso, deve-se pressionar apenas o boto Finish. A pgina de boas vindas dever ser fechada e a IDE para desenvolvimento da programao em Java ser exibida, conforme Figura 8 a seguir:

Figura 8: Interface da IDE Eclipse para programao em Java. A etapa seguinte consiste em criar os arquivos que iro conter o cdigo-fonte do programa, na linguagem Java isso realizado atravs da adio de classes ao projeto. Para adicionar uma classe devemos selecionar a opo do menu File e depois New, em seguida, a opo Classe dever ser escolhida, conforme Figura 9 a seguir:

Fundamentos da Linguagem de Programao Java

47

Benedito C. A. Petroni / Cludio L. V. Oliveira

Figura 9: Criando uma classe na IDE Eclipse A janela para definio da classe mostrada, para o desenvolvimento deste exemplo preencha o campo Name com o nome da classe que dever ser criada, ou seja, OlaMundo e pressione o boto Finish. Em seguida dever ser criado um mtodo chamado main e poder ser observado o cdigo fonte da classe OlaMundo, conforme mostrado a seguir. public class OlaMundo { public static void main (String[] args) { System.out.println("Ol Mundo!"); } } Aps a digitao do cdigo-fonte da aplicao o projeto dever ser salvo, para fazer isso, escolher a opo do menu File e depois Save All. O projeto neste momento est pronto para ser executado, porm antes disso, verifique na aba Problems se no existem erros, conforme a Figura 10.

Figura 10: Console de ocorrncias de erros de compilao na IDE Eclipse. A execuo do projeto ser realizada atravs da opo Run disponvel no menu, sendo que o resultado poder ser observado na aba Console, observando a ilustrao da Figura 11.

Fundamentos da Linguagem de Programao Java

48

Benedito C. A. Petroni / Cludio L. V. Oliveira

Figura 11: Resultado da compilao no console da IDE Eclipse.

Fundamentos da Linguagem de Programao Java

49

Benedito C. A. Petroni / Cludio L. V. Oliveira

Fundamentos da Linguagem de Programao

Java
A linguagem de programao Java amplamente utilizada para o desenvolvimento dos mais diversos tipos de aplicaes e tambm para uma grande variedade de plataformas. Esta obra o resultado da experincia adquirida ao longo dos anos dedicados ao ensino nos cursos de graduao em informtica e, tem como objetivo, realizar uma introduo aos conceitos fundamentais da linguagem de programao Java e tambm sobre o paradigma de orientao a objetos.

Benedito Cristiano Aparecido Petroni Cludio Lus Vieira Oliveira