P. 1
programaoorientadaaobjetos-121201121137-phpapp02.pdf

programaoorientadaaobjetos-121201121137-phpapp02.pdf

|Views: 108|Likes:
Published by Cesar Glez Yañez

More info:

Published by: Cesar Glez Yañez on May 07, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

12/20/2013

pdf

text

original

Sections

  • 1. Introdução
  • A Linguagem Java
  • Plataforma Java
  • Visão geral do Java Standard Edition
  • Java Virtual Machine
  • Compilando um código em linha de comando
  • 2. A linguagem Java
  • Palavras Chave
  • Variáveis
  • Tipos Primitivos
  • Tipos Inteiros (byte, short, int ou long)
  • Tipos Ponto Flutuante (float ou double)
  • Tipo Caractere (char)
  • Tipo Booleano (boolean)
  • Casting
  • java.util.Scanner
  • Operadores
  • Operadores aritméticos
  • Operadores de atribuição
  • Operadores unários
  • Operadores lógicos
  • Operadores relacionais
  • Operador condicional
  • Operadores bit a bit
  • Exercícios
  • 3. Estruturas de controle e repetição
  • if / else
  • switch
  • while
  • do / while
  • Enhanced for ou “for-each”
  • A instrução break
  • A instrução continue
  • 4. Classe e Objeto
  • Objetos
  • Utilizando os atributos da classe
  • Métodos com retorno de valor
  • Métodos com recebimento de parâmetro
  • Métodos construtores
  • 5. A Classe java.lang.String
  • Conversão para String (texto)
  • Conversão de String para tipos Primitivos
  • Recebendo Strings como parâmetro diretamente no método main
  • 6. Identidade e Igualdade
  • 7. Assinatura de Métodos
  • Troca de Mensagens
  • Varargs
  • 8. Plain Old Java Object – POJO
  • 9. Pacotes
  • Modificador de acesso: private
  • Modificador de acesso: default (ou package)
  • Modificador de acesso: protected
  • Modificador de acesso: public
  • 11. Encapsulamento
  • 12. Interfaces
  • 14. Classes Abstratas
  • 15. Exceções em Java
  • Bloco try / catch
  • Palavra chave throw
  • Bloco finnaly
  • Palavra chave throws
  • Hierarquia das Exceptions
  • Checked Exceptions
  • Unchecked Exceptions
  • Errors
  • Tratando múltiplas Exceções
  • Criando sua exceção
  • Casting (conversão) de objetos
  • 17. Conexão com bancos de dados - J.D.B.C
  • Consulta de dados
  • Manipulação de dados
  • Relação de algumas bases de dados
  • Exemplo de aplicação C.R.U.D. (Create, Read, Update, Delete)
  • 18. Interfaces gráficas - SWING
  • Utilizando o JFrame
  • Utilizando JTextField
  • Utilizando JButton
  • Utilizando o JLabel
  • 19.Utilizando o JComboBox
  • Imagens no Swing
  • Exemplo de aplicação desktop
  • JFileChooser
  • Utilizando o JMenuBar, JMenu e JMenuItem
  • Exemplos de aplicações Swing
  • Exemplo de tratamento de exceção usando Swing
  • Exemplo de aplicação C.R.U.D. com exibição em tela
  • 19. Leitura de arquivos
  • Exemplo de leitura de arquivo
  • Streams de caracteres
  • java.io.Reader
  • java.io.Writer
  • java.io.InputStream
  • java.io.OutputStream
  • Serialização de objetos
  • 20. Recursos da Linguagem Java
  • Arrays ou Vetores em Java
  • Declaração do vetor
  • Inicialização de dados do vetor
  • Acesso aos elementos do vetor
  • Um pouco sobre a classe Arrays
  • Trabalhando com constantes
  • Enums
  • Justificativas do uso de Enums a constantes
  • Como criar uma Enum
  • Um pouco sobre Generics
  • Apêndice A – Boas práticas
  • Apêndice B – Javadoc
  • Apêndice C – Instalando e Configurando o Java
  • Apêndice D – Primeira aplicação no NetBeans

Programação Orientada a Objetos em Java

Prof. Cristiano Camilo dos Santos de Almeida Prof. Rafael Guimarães Sakurai 2012

Programação Orientada a Objetos – Universidade Metodista de São Paulo

Índice
Introdução ..................................................................................................................................5 A Linguagem Java .................................................................................................................5 Plataforma Java .....................................................................................................................6 Visão geral do Java Standard Edition ....................................................................................7 Java Virtual Machine ..............................................................................................................8 Compilando um código em linha de comando .......................................................................8 Linhas de comentário em Java ..............................................................................................9 A linguagem Java ....................................................................................................................11 Palavras Chave ....................................................................................................................11 Variáveis ..............................................................................................................................11 Tipos Primitivos ....................................................................................................................12 Tipos Inteiros (byte, short, int ou long) .................................................................................13 Tipos Ponto Flutuante (float ou double) ...............................................................................15 Tipo Caractere (char) ...........................................................................................................16 Tipo Booleano (boolean) ......................................................................................................17 Casting .................................................................................................................................17 java.util.Scanner ..................................................................................................................19 Operadores ..........................................................................................................................21 Operadores aritméticos ....................................................................................................22 Operadores de atribuição .................................................................................................26 Operadores unários .........................................................................................................32 Operadores lógicos ..........................................................................................................34 Operadores relacionais ....................................................................................................37 Operador condicional .......................................................................................................41 Operadores bit a bit ..........................................................................................................42 Exercícios ............................................................................................................................47 Estruturas de controle e repetição ...........................................................................................50 if / else ..................................................................................................................................50 switch ...................................................................................................................................52 while .....................................................................................................................................54 do / while ..............................................................................................................................55 for .........................................................................................................................................56 Enhanced for ou “for-each” ..................................................................................................58 A instrução break .................................................................................................................59 A instrução continue .............................................................................................................60 Exercícios ............................................................................................................................61 Classe e Objeto .......................................................................................................................65 Objetos ................................................................................................................................67 Utilizando os atributos da classe .........................................................................................68 Métodos com retorno de valor .............................................................................................70 Métodos com recebimento de parâmetro ............................................................................72 Métodos construtores ..........................................................................................................75 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai -2-

Programação Orientada a Objetos – Universidade Metodista de São Paulo Exercícios ............................................................................................................................78 A Classe java.lang.String ........................................................................................................81 Conversão para String (texto) ..............................................................................................83 Conversão de String para tipos Primitivos ..........................................................................83 Recebendo Strings como parâmetro diretamente no método main ....................................84 Exercícios ............................................................................................................................86 Identidade e Igualdade ............................................................................................................87 Assinatura de Métodos ...........................................................................................................92 Troca de Mensagens ...........................................................................................................94 Varargs ................................................................................................................................96 Exercícios ..........................................................................................................................100 Plain Old Java Object – POJO ..............................................................................................103 Pacotes .................................................................................................................................106 Exercícios ..........................................................................................................................109 Visibilidade ............................................................................................................................111 Modificador de acesso: private ..........................................................................................111 Modificador de acesso: default (ou package) ....................................................................113 Modificador de acesso: protected ......................................................................................115 Modificador de acesso: public............................................................................................117 Exercícios ..........................................................................................................................117 Encapsulamento ....................................................................................................................119 Exercícios ..........................................................................................................................126 Interfaces ..............................................................................................................................129 Exercícios ..........................................................................................................................138 Herança .................................................................................................................................143 Exercícios ..........................................................................................................................149 Classes Abstratas .................................................................................................................152 Exercícios ..........................................................................................................................156 Exceções em Java ................................................................................................................161 Bloco try / catch .................................................................................................................162 Palavra chave throw ..........................................................................................................164 Bloco finnaly.......................................................................................................................165 Palavra chave throws ........................................................................................................167 Hierarquia das Exceptions .................................................................................................168 Checked Exceptions ..........................................................................................................169 Unchecked Exceptions ......................................................................................................169 Errors .................................................................................................................................171 Tratando múltiplas Exceções ............................................................................................172 Criando sua exceção .........................................................................................................172 Exercícios ..........................................................................................................................174 Polimorfismo ..........................................................................................................................178 Casting (conversão) de objetos .........................................................................................185 Exercícios ..........................................................................................................................186 Conexão com bancos de dados - J.D.B.C. ...........................................................................190 Consulta de dados .............................................................................................................194 Manipulação de dados ......................................................................................................196 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai -3-

Programação Orientada a Objetos – Universidade Metodista de São Paulo Relação de algumas bases de dados ................................................................................197 Exemplo de aplicação C.R.U.D. (Create, Read, Update, Delete)......................................198 Exercícios ..........................................................................................................................208 Interfaces gráficas - SWING ..................................................................................................210 Utilizando o JFrame ...........................................................................................................223 Utilizando JTextField ..........................................................................................................224 Utilizando JButton ..............................................................................................................226 Utilizando o JLabel ............................................................................................................229 Utilizando o JComboBox....................................................................................................230 Imagens no Swing .............................................................................................................232 Exemplo de aplicação desktop. .........................................................................................235 JFileChooser ......................................................................................................................241 Utilizando o JMenuBar, JMenu e JMenuItem ....................................................................245 Exercícios ..........................................................................................................................260 Exemplos de aplicações Swing .........................................................................................263 Exemplo de tratamento de exceção usando Swing .......................................................263 Exemplo de aplicação C.R.U.D. com exibição em tela ..................................................266 Leitura de arquivos ................................................................................................................283 Exemplo de leitura de arquivo ...........................................................................................283 Streams de caracteres ......................................................................................................286 java.io.Reader ................................................................................................................287 java.io.Writer ..................................................................................................................288 Streams de bytes ...............................................................................................................290 java.io.InputStream ........................................................................................................291 java.io.OutputStream .....................................................................................................291 Serialização de objetos .....................................................................................................292 Exercícios ..........................................................................................................................296 Recursos da Linguagem Java ...............................................................................................299 Arrays ou Vetores em Java ................................................................................................299 Declaração do vetor .......................................................................................................299 Inicialização de dados do vetor ......................................................................................300 Acesso aos elementos do vetor .....................................................................................301 Um pouco sobre a classe Arrays ...................................................................................301 Trabalhando com constantes ............................................................................................302 Enums ................................................................................................................................303 Justificativas do uso de Enums a constantes ................................................................303 Como criar uma Enum ...................................................................................................305 Collection ...............................................................................................................................308 Um pouco sobre Generics .................................................................................................311 Exercícios ..........................................................................................................................312 Apêndice A – Boas práticas ..................................................................................................314 Apêndice B – Javadoc ...........................................................................................................318 Apêndice C – Instalando e Configurando o Java ..................................................................323 Apêndice D – Primeira aplicação no NetBeans ....................................................................336 Bibliografia .............................................................................................................................344

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

-4-

Programação Orientada a Objetos – Universidade Metodista de São Paulo

1. Introdução

A Linguagem Java
A Linguagem Java surgiu a partir de uma pesquisa financiada pela Sun Microsystems em 1991, iniciada sob o codinome de projeto Green. Com o intuito de se tornar uma linguagem para dispositivos inteligentes destinados ao usuário final e com a premissa de ser uma linguagem próxima às linguagens C e C++ e que pudesse ser executado em diversos hardwares. A princípio, o projeto não teve bons resultados devido à lentidão do crescimento da área de dispositivos eletrônicos inteligentes, porém com a grande revolução da World Wide Web em 1993, logo se notou o potencial da linguagem para geração de conteúdo dinâmico, o que deu nova força ao projeto.

Protótipo Star 7 [PROJECT GREEN]

Inicialmente, Java foi batizada de Oak por seu criador (James Gosling). Tempos mais tarde, descobriu-se que já existia uma linguagem de programação chamada Oak. Com isso, em uma visita da equipe de desenvolvimento a uma cafeteria local, o nome Java surgiu (nome do café) e logo foi denominada a linguagem. Em março de 1995, foi anunciado no evento SunWorld a tecnologia Java 1.0. Inicialmente, o foco principal da tecnologia, utilizado para divulgação foram os Applets, pequenas aplicações que poderiam ser executadas via web através de um browser. Em 1998, foi lançada a versão 1.2 (codinome “Playground”) da linguagem Java. Esta nova versão trouxe uma quantidade muito grande de novas funcionalidades. Tal alteração foi tão grande que a pessoa do marketing começou a chamá-la de Java 2.

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

-5-

Programação Orientada a Objetos – Universidade Metodista de São Paulo As versões 1.3 (codinome “Kestrel”), lançada em 2000, e 1.4 (codinome “Merlin”), lançada em 2002 continuaram sendo chamadas de Java 2, pois houveram alterações e melhorias na linguagem, mas não tão grandes como na versão 1.2. Na versão 1.5, lançada em 2004, o pessoal resolveu mudar novamente chamando de Java 5 (codinome “Tiger”), a partir desta versão foi padronizado as novas atualizações. Em 2006, foi lançado o Java 6 (codinome “Mustang”). No ano de 2009 a empresa Oracle comprou a Sun Microsystems, como a nova versão do Java estava demorando para sair e iria demorar mais algum tempo, foi dividido a especificação do Java 7 atual, para duas versões Java 7 e Java 8, e em 2011 foi lançado a versão 7 que tem o codinome “Dolphin”. Atualmente o Java está na versão 7 update 2 e seu kit de desenvolvimento pode ser baixado através do site da Oracle no seguinte endereço: http://www.oracle.com/technetwork/java/ javase/downloads/jdk-7u2-download-1377129.html. Java também é uma linguagem Open Source e não possui um único dono. Todas as novas atualizações da linguagem são feitas através da JCP (Java Community Process), formada por um conjunto de empresas.

Plataforma Java
Atualmente, a linguagem Java pode ser utiliza para desenvolvimento dos mais diferentes segmentos como: aplicações console, desktop, aplicações Web e dispositivos portáteis, tais como celulares e pagers.

Plataforma Java [DEVMEDIA].

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

-6-

a partir deste pacote podemos criar aplicações console e desktop. podemos criar componentes distribuídos. utilização de filas de mensageria. Java Enterprise Edition (Java EE) Este pacote possui tudo que o Java SE tem e adiciona as APIs principais para desenvolvimento de aplicações web. possui uma quantidade mais limitada de funcionalidades. criação de paginas web dinâmicas. utilizar conexão com banco de dados. leitura e escrita de arquivos.Programação Orientada a Objetos – Universidade Metodista de São Paulo • Java Standard Edition (Java SE) Este pacote é responsável pelas APIs principais da linguagem Java. etc. comunicação através de rede de computadores. Java Micro Edition (Java ME) Este é um pacote mais compacto utilizado para desenvolvimento de aplicações moveis como celulares e pagers. etc. • • Visão geral do Java Standard Edition APIs utilizadas dentro da plataforma Java SE [JAVA SE] Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai -7- . como normalmente é utilizado em hardwares de pequeno porte.

precisamos escrever os códigos fonte em arquivos com a extensão . bibliotecas e outros componentes para executar aplicações escritas em Java. */ public class PrimeiraClasse { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai -8- . No exemplo a seguir. . Java Virtual Machine A Java Virtual Machine é uma máquina imaginária que é implementada através da emulação em software.Programação Orientada a Objetos – Universidade Metodista de São Paulo Há dois principais produtos dentro da plataforma Java SE: Java Runtime Environment (JRE) e Java Development Kit (JDK). o mesmo precisa ser compilado para .O JDK contém tudo o que tem na JRE. Existe uma JVM diferente para cada Sistema Operacional (SO) e uma vez que sua aplicação é criada. Fases da programação Java: Compilando um código em linha de comando Durante o desenvolvimento de aplicações utilizando a linguagem Java.O JRE fornece a Java Virtual Machine. Essa compilação converte os códigos Java para bytecodes e a JVM se encarrega de executar os bytecodes e fazer a integração com o SO. O código que é executado pela JVM são os bytecodes. a mesma pode ser executada em diversos SO através da JVM sem ter que ser recompilado.java. .java. possui um código Java para apresentar na tela console a mensagem “Hello World!!!”: PrimeiraClasse. Quando um arquivo .java 01 02 03 04 /** * Exemplo de uma classe simples em Java.class. o arquivo chamado PrimeiraClasse.java é criado. mais ferramentas adicionais para desenvolver (compilar e debugar) aplicações feitas em Java.

java C:\> java PrimeiraClasse Hello world!!! Quando executamos java PrimeiraClasse o Java começa a executar os códigos do nosso programa. Nesse caso. Linhas de comentário em Java Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai -9- .class. “Public” com ‘P’ maiúsculo ou “string” com o ‘s’ minúsculo. para executarmos nosso novo arquivo compilado Java. por exemplo. O método main é o início de tudo. ou seja. A aplicação java (utilizada na linha de comando).class.out.java gerando o arquivo . o arquivo submetido foi o arquivo . através do seguinte comando: C:\java PrimeiraClasse Note que. Caso escrevamos o código Java. Um ponto importante da linguagem é que ele é case sensitive. etc. outros métodos.println("Hello world !!!"). a partir da main você pode iniciar seu programa. com o seguinte nome: PrimeiraClasse. C:\> javac PrimeiraClasse.java: C:\>javac PrimeiraClasse.Programação Orientada a Objetos – Universidade Metodista de São Paulo 05 06 07 08 public static void main(String[] args) { System. Após a execução deste comando. o método public static void main(String[] args) é chamado. compõe tanto o pacote da JDK como da JRE. teremos um erro de compilação. } } Depois de criado este arquivo.class de bytecode. se preciso pode chamar outras classes. acessando a linha de comando. basta submetê-lo a máquina virtual Java. um arquivo com bytecode Java será criado em disco.java A aplicação javac é responsável por compilar o arquivo . Para os iniciantes na linguagem este é um dos maiores problemas encontrados durante a compilação. Agora. executaremos o seguinte comando para compilar a classe PrimeiraClasse. como. a letra ‘a’ em minúsculo é diferente da letra ‘A’ em maiúsculo. apesar de não estarmos utilizando a extensão ao executar a classe.

class.println("Demonstrando o uso dos comentários.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 /** * Classe utilizada para demonstrar o uso de comentários. pois facilita tanto o desenvolvimento do código como sua manutenção. */ public class ExemploComentario { public static void main(String[] args) { //Imprime uma mensagem para o usuario. */ } } Na primeira linha estamos criando um comentário do tipo javadoc. temos um exemplo de um comentário simples de uma linha. usamos o comentário longo que pode ser utilizado por várias linhas. A linguagem Java fornece três formas diferentes de escrever comentários: // -> Comentário de uma única linha /* Comentário longo com mais de uma linha */ /** * Javadoc * Mais informações sobre o Javadoc no apêndice B.Programação Orientada a Objetos – Universidade Metodista de São Paulo Durante o desenvolvimento de um software é muito importante escrever comentários explicando o funcionamento / lógica dos códigos fontes. Este tipo de linha de comentário inicia-se por uma barra e dois asteriscos e se estende por sete linhas. dessa forma os comentários * não interferem no tamanho final do projeto.out. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . /* Podemos utilizar esta forma quando queremos escrever um comentário mais longo para exemplicar o código. Ao final do código da classe. * * Depois que uma classe Java é compilada. os comentários não vão * para os códigos compilados . */ Exemplo: ExemploComentario.").10 - . System. Já na décima linha.

As variáveis em Java podem ser do tipo primitivo ou objeto: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Quando declaramos uma variável estamos associando seu nome (identificador) ao local da memória onde está armazenada sua informação.Programação Orientada a Objetos – Universidade Metodista de São Paulo 2. métodos e classes. Variáveis Uma variável é um objeto normalmente localizado na memória. por exemplo: nome de variáveis. utilizado para representar valores. abstract case continue enum for instanceof new return switch transient assert catch default extends goto int package short synchronized try boolean char do final if interface private static this void break class double finally implements long protected strictfp throw volatile byte const else float import native public super throws while OBS: Note que todas as palavras chaves são escritas em minúsculo. A linguagem Java Palavras Chave Java possui algumas palavras chaves (ou palavras reservadas) que são da linguagem e não podem ser usados para outros fins.11 - . As palavras chave const e goto foram criadas. como. mas não possuem nenhuma funcionalidade.

Variáveis primitivas ficam em um local chamado stack e as variáveis de referência ficam em um local chamado heap. float ex5 = 5.372. mas sim valores básicos.20.854. short ex2 = (short)1.94E-307 Menor -128 -32768 -2. ou double ex6 = 10. Tipos Primitivos A linguagem Java não é totalmente Orientada a Objetos. int. pois são tipos de dados que não representam classes.aresta associação é para algum lugar vazio (null) ou para algum espaço da memória que guarda os dados de um objeto.770.Variáveis primitivas: podem ser do tipo byte. e isto se deve principalmente aos atributos do tipo primitivo.223. Uma variável de referência é usada para definir qual o tipo do objeto ou um sub tipo do objeto (veremos isso mais a frente).4024E-37 3. assim como em várias outras linguagens tais como o C. int ex3 = 1.147. Os tipos primitivos. existem para representar os tipos mais simples de dados.770. double. No caso da variável de referência. short. As variáveis primitivas e de referência são guardadas em locais diferentes da memória. é associando-a a um espaço na memória que vai guardar o seu valor. -9. Na declaração de uma variável primitiva.00 0 0 -1. sendo eles dados numérico. long. long ex4 = 1l. Os tipos primitivos da linguagem Java são: Valores Possíveis Tipos Primiti vo byte short Inteiro int long float Ponto Flutuante double -4.372. .79769313486231570E + 308 0 64 bits Caractere char 0 65535 \0 16 bits Booleano boolean false true false 1 bit Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .147.483.036. char ex7 = 194. booleano e caractere.40282347E + 38 1. boolean ex9 = true.Variáveis de referência: usada para referenciar um objeto.20d.00 9.854.648 Maior 127 32767 2. double ex6 = 10.483.036. ou char ex8 = 'a'.Programação Orientada a Objetos – Universidade Metodista de São Paulo .12 - . float.647 Valor Padrão Tamanho 0 0 0 0 0 8 bits 16 bits 32 bits 64 bits 32 bits Exemplo byte ex1 = (byte)1.223. char ou boolean.50f.

// Equivale ao valor 8 em decimal. por exemplo: int i = 9. por exemplo: long a = 0Xcafel. int i = 025.java 01 02 /** * Exemplo de utilização dos tipos primitivos byte. int b = 0X14a3. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Tipos Inteiros (byte.13 - . int ou long) Tipos inteiros trabalham apenas com números inteiros. positivos ou negativos. long b = 0752L. short. os Arrays e Strings são Classes (veremos isso mais adiante). Inteiro em decimal Qualquer valor escrito utilizando números de 0 a 9 é um valor decimal. decimal e hexadecimal. começando com 0x ou 0X é um valor hexadecimal. // Equivale ao valor 9 em decimal. // Equivale ao valor 21 em decimal.Programação Orientada a Objetos – Universidade Metodista de São Paulo É importante lembrar que na linguagem Java. long b = 9871342132. Inteiro em octal Qualquer valor escrito utilizando números de 0 a 7 começando com 0 é um valor na base octal. Este é o tipo de representação mais comum uma vez que é utilizada no dia a dia. Inteiro em hexadecimal Qualquer valor escrito utilizando números de 0 a 9 e A a F. Exemplo: ExemploTipoPrimitivo. long c = 987654321L. por exemplo: long a = 0xCAFE. short s = 010. por exemplo: byte a = 011. // Equivale ao valor 51966 em decimal // Equivale ao valor 5283 em decimal Quando um precisa ser especificado como um long ele pode vir acompanhado por l ou L depois do seu valor. Os valores podem ser representados nas bases octal.

out. // Imprime 63 System.println(g). int d = 9. // Imprime 9871342132 //Inicializando atributos primitivos com valores na base hexadecimal.println(f).println(c). short b = 010.out.println(h). System. System.out.println(d). int e long. // Imprime 21 //Inicializando atributos primitivos com valores na base decimal.println(i).Programação Orientada a Objetos – Universidade Metodista de São Paulo 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 * short.out. System. int c = 025.println(e).println(a). // Imprime 8 System. } } // // // // // Imprime Imprime Imprime Imprime Imprime 51966 51966 5283 490 987654321 Quando executamos a classe ExemploTipoPrimitivo.out. long g = 0Xcafel. // Imprime 9 System. temos a seguinte saída no console: C:\>javac ExemploTipoPrimitivo. byte a = 077.out. System.println(b).out. System. System. long i = 0752L. int h = 0X14a3.out. long j = 987654321L.out.println(j). */ public class ExemploTipoPrimitivo { public static void main(String[] args) { //Inicializando atributos primitivos com valores na base octal.java C:\>java ExemploTipoPrimitivo 63 8 21 9 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .14 - . long e = 9871342132L. long f = 0XCAFE.out. System.

double b = 10.15 - . */ double d = 7.println(b). por exemplo: float a = 10. por padrão todos números com casas decimais são do tipo double. pode especificar para double usando d ou D. pois o padrão do valor é double.println(a). Para float utilize f ou F e.out. { args) { o valor é float.out.3D.2. double b = 10. // Imprime 10.3D. mas é possível especificar o tipo do valor durante a criação.Programação Orientada a Objetos – Universidade Metodista de São Paulo 9871342132 51966 51966 490 987654321 Tipos Ponto Flutuante (float ou double) Tipos de ponto flutuante servem para representar números com casas decimais. tanto negativos quanto positivos. double c = 5. //Atribuindo o valor inteiro para um tipo double.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 /** * Exemplo de utilização dos tipos */ public class ExemploTipoPrimitivo2 public static void main(String[] //Definindo explicitamente que float a = 10. System. */ floaf c = 1.99.3 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . //Definindo explicitamente que o valor é double. /* Erro de compilação. primitivos float e double.99f. /* Atribuindo um valor double.99 System.99f. // Imprime 10. Todos os números com ponto flutuante são por padrão do tipo double. Exemplo: ExemploTipoPrimitivo2. se quiser.

*/ public class ExemploTipoPrimitivo3 { public static void main(String[] args) { //Definindo explicitamente um valor caracter.java C:\>java ExemploTipoPrimitivo2 10.println(c). temos a seguinte saída no console: C:\>javac ExemploTipoPrimitivo2. //Equivale a letra 'a' Os caracteres podem ser representados por números e possuem o mesmo tamanho que um atributo do tipo short. Sua inicialização permite 2 modelos: char a = 'a'.0 System. // Imprime 5.99 10.out. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . char b = 97. //Equivale ao caracter '%' OBS: O Unicode é no formato hexadecimal. portanto o exemplo anterior ‘0025’ equivale a 37 na base decimal.Programação Orientada a Objetos – Universidade Metodista de São Paulo 21 22 23 24 System. dessa forma. char b = 97.java 01 02 03 04 05 06 07 08 09 /** * Exemplo de utilização do tipo primitivo char.out. Exemplo: ExemploTipoPrimitivo3. //Definindo explicitamente um valor numerico. // Imprime 7.2 Tipo Caractere (char) O tipo caractere. podemos representar a tabela Unicode.0 7. serve para representar um valor deste tipo. char a = 'a'.2 } } Quando executamos a classe ExemploTipoPrimitivo2.16 - .3 5.println(d). por exemplo: char u = '\u0025'. como o próprio nome já diz.

temos a seguinte saída no console: C:\>javac ExemploTipoPrimitivo3. // Imprime a System. por exemplo: boolean a = true. é necessário que esta operação seja apontada ao compilador.out. é possível atribuir o valor de um tipo de variável a outro tipo de variável. // Imprime % } } Quando executamos a classe ExemploTipoPrimitivo3.println(a). ! As palavras true. É possível fazer conversões de tipos de ponto flutuante para inteiros. uma tabela com todos os tipos de casting possíveis: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .java C:\>java ExemploTipoPrimitivo3 a a % Tipo Booleano (boolean) Tipo que representa valores lógicos true (verdadeiro) ou false (falso). abaixo. Segue.out. O tipo de dado boolean é o único tipo primitivo que não suporta casting. // Imprime a System. métodos ou classes. para tal. System. boolean b = false. char c = '\u0025'. porém. como um double dentro de um int.Programação Orientada a Objetos – Universidade Metodista de São Paulo 10 11 12 13 14 15 16 17 //Definindo explicitamente um valor Unicode. A este apontamento damos o nome de casting.println(b). porém estas conversões podem ocasionar a perda de valores. Casting Na linguagem Java.out. e inclusive entre o tipo caractere.17 - . quando se molda um tipo de maior tamanho. false e null representam valores básicos e não podem ser utilizados na declaração de atributos.println(c).

pois o valor possui um tamanho menor que o tipo da variavel que irá recebe-lo. float c = 100.1987. // Imprime a Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . da seguinte forma: Conversão do double 5. */ char a = 'a'. basta sinalizar o tipo para o qual se deseja converter entre parênteses.18 - . não precisa de casting. int b = (int) 5.println(a).0 para float. float c = 100.out. float a = (float) 5.Programação Orientada a Objetos – Universidade Metodista de São Paulo DE \ PARA byte short char int long float double byte byte byte byte byte byte byte short Implícito short short short short short char char char char char char char int Implícito Implícito Implícito int int int long Implícito Implícito Implícito Implícito long long float Implícito Implícito Implícito Implícito Implícito float double Implícito Implícito Implícito Implícito Implícito Implícito Para fazer um casting. Conversão de int para float é implícito. int d = ‘d’.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Exemplo de conversão de tipos primitivos utilizando casting. System. */ public class ExemploCasting { public static void main(String[] args) { /* Casting feito implicitamente. int b = 'b'. não precisa de casting. O casting ocorre implicitamente quando adiciona uma variável de um tipo menor que o tipo que receberá esse valor. Exemplo: ExemploCasting. Conversão de double para int. Conversão de char para int é implícito.0.

util. System.println(b). temos uma classe chamada java.Programação Orientada a Objetos – Universidade Metodista de São Paulo 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 System. // Imprime 100. No exemplo a seguir.println(d).0 5 5.5. utilizaremos para receber as entradas do usuário via console. neste momento.println(f).out. utilizaremos a classe Scanner para pedir que o usuário digite sua idade.Scanner que.Scanner. pois o valor possui um tamanho maior que o tipo da variavel que irá recebe-lo. int f = (char) (a + 5).out. por exemplo.19 - .out.out. float e = (float) 5.java 01 02 import java.println(e). temos a seguinte saída no console: C:\>javac ExemploCasting. mas esta classe também pode ser utilizada para outros fins.0 102 n java. depois imprimiremos qual foi o número lido: ExemploScanner.println(g).println(c). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . } } // // // // Imprime Imprime Imprime Imprime 5 5.util. */ int d = (int) 5.util.0 102 n Quando executamos a classe ExemploCasting.java C:\>java ExemploCasting a 98 100. char g = (char) 110. // Imprime 98 System.0. tais como leitura de arquivo.1987. System. System.Scanner Em Java. System.0 /* Casting feito explicitamente.out.out.

nextInt().println("Digite sua idade: "). System. int idade = s.in). } } Quando executamos a classe ExemploScanner.Programação Orientada a Objetos – Universidade Metodista de São Paulo 03 04 05 06 07 08 09 10 11 12 13 14 15 /** * Neste exemplo pedimos para o usuário digitar a idade dele.java 01 02 03 04 05 06 07 08 09 10 import java. /** * Neste exemplo vamos pedir para o usuário digitar o nome e a altura dele.java C:\>java ExemploScanner Digite sua idade: Na linha 12 o programa fica esperando o usuário digitar um número inteiro e em seguida apertar a tecla ENTER.out. * depois imprimimos uma frase com a idade lida. por exemplo: ExemploScanner2. na linha 11 imprimimos no console a seguinte mensagem: C:\>javac ExemploScanner. para continuar a execução: C:\>javac ExemploScanner. * depois vamos imprimir os dados lidos.20 - .").Scanner.in).out.util.java C:\>java ExemploScanner Digite sua idade: 28 Vc tem 28 anos. System. */ public class ExemploScanner2 { public static void main(String[] args) { Scanner s = new Scanner(System. */ public class ExemploScanner { public static void main(String[] args) { Scanner s = new Scanner(System. Com o Scanner podemos ler diversos tipos de atributos.println("Vc tem " + idade + " anos. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

50. Observação: quando queremos ler um número com casa decimal via console. String nome = s. os métodos da classe Scanner nextInt() (lê um número inteiro). precisamos utilizar o ponto ( . e estes operadores podem enquadrados nos seguintes tipos: Unário Binário Ternário (Utiliza um operando) (Utilizam dois operandos) (Utilizam três operandos) Os operadores são utilizados a todo o momento. por exemplo. Operadores No Java.Programação Orientada a Objetos – Universidade Metodista de São Paulo 11 12 13 14 15 16 17 18 19 System.78 de altura. quando queremos fazer algum cálculo.java C:\>java ExemploScanner2 Digite seu nome: Rafael Digite sua altura: 1. } } Quando executamos a classe ExemploScanner2. nextLine() (lê um texto “String”).out.out. por exemplo: 10. Quando criamos uma variável dentro do programa e definimos seu valor com casa decimal. e o método System.nextDouble(). temos a seguinte saída no console: C:\>javac ExemploScanner2. double altura = s. existem diversos tipos de operadores além dos que conhecemos da matemática.println(nome + " tem " + altura + " de altura. etc. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .78 Rafael tem 1. podem ser comparados a função cin.println("Digite seu nome: "). nextDouble() (lê um número com casa decimal do tipo double). precisamos digitar o número utilizando vírgula ( . atribuir um valor a uma variável.50.out. ) como separador. System."). ). por exemplo: 10. System.println("\nDigite sua altura: ").out.println() pode ser comparado a função cout. etc.nextLine(). Fazendo uma comparação com a linguagem C++.21 - . verificar alguma situação valores.

*/ public class OperadorAdicao { public static void main(String[] args) { System.Programação Orientada a Objetos – Universidade Metodista de São Paulo OBS: O operando pode ser representado por um valor ou por uma variável. <operando1> .java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Classe utilizada para demonstrar o uso do operador de adição ( + ). C:\>javac OperadorAdicao. ou da soma da variável a + variável b.22 - . } } Neste caso. será impresso o valor 10 que é o resultado da soma de 3 + 7. utilizado para somar o valor de dois operandos. <operando1> + <operando2> Exemplo: OperadorAdicao.java Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . //ou int a = 3. Operadores aritméticos Símbolo + é chamado de adição.println(a + b).out. utilizado para subtrair o valor de dois operandos.out.<operando2> Exemplo: OperadorSubtracao.java C:\>java OperacaoAdicao 10 10 Símbolo . int b = 7.println(3 + 7).é chamado de subtração. System.

out.b). int b = 2. <operando1> * <operando2> Exemplo: OperadorMultiplicacao.println(3 * 2).out.23 - .out. C:\>javac OperadorSubtracao. */ public class OperadorSubtracao { public static void main(String[] args) { System. ou da subtração da variável a – variável b. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . System. int b = 2.out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Classe utilizada para demonstrar o uso do operador de subtração ( . } } Neste caso.println(a * b).println(a . //ou int a = 5. //ou int a = 3. System.).2). será impresso o valor 3 que é o resultado da subtração de 5 – 2.java C:\>java OperadorSubtracao 3 3 Símbolo * é chamado de multiplicação. */ public class OperadorMultiplicacao { public static void main(String[] args) { System.println(5 . utilizado para multiplicar o valor de dois operandos.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador de multiplicação ( * ).

0 / 2).0 / 2. note que neste caso ambos são inteiros então o resultado da divisão é um valor inteiro.java C:\>java OperadorMultiplicacao 6 6 Símbolo / é chamado de divisão. ou da multiplicação da variável a * variável b.24 - .println(a / b). */ public class OperadorDivisao { public static void main(String[] args) { System. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . utilizado para dividir o valor de dois operandos.out.5 que é o resultado da divisão de 3.println(3. Depois será impresso o valor 1 que é o resultado da divisão da variável a / variável b. } } Neste caso. <operando1> / <operando2> O resultado da divisão de dois operandos inteiros retorna um valor inteiro. pois o operando 3.out. Exemplo: OperadorDivisao. e a divisão que tem pelo menos um operando com casas decimais retorna um valor com casas decimais.0 é do tipo double. será impresso o valor 6 que é o resultado da multiplicação de 3 * 2. int b = 2. C:\>javac OperadorMultiplicacao.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Classe utilizada para demonstrar o uso do operador de divisão ( / ). //ou int a = 3. System. será impresso o valor 1.Programação Orientada a Objetos – Universidade Metodista de São Paulo 13 14 } } Neste caso.

} } Neste caso.Programação Orientada a Objetos – Universidade Metodista de São Paulo C:\>javac OperadorDivisao.java C:\>java OperadorDivisao 1.java C:\>java OperadorModulo 0.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Classe utilizada para demonstrar o uso do operador de modulo ( % ).println(4.5 2 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . note que neste caso ambos são inteiros então o resultado da divisão é um valor inteiro.out.5 1 Símbolo % é chamado de módulo. e o resto da divisão que tem pelo menos um operando com casas decimais retorna um valor com casas decimais. */ public class OperadorModulo { public static void main(String[] args) { System. //ou int a = 5.5 % 2).5 / 2.println(a % b). C:\>javac OperadorModulo.5 que é o resto da divisão de 4. Depois será impresso o valor 2 que é o resto da divisão da variável a / variável b.out.25 - . note que neste caso um operando possui casa decimal. Exemplo: OperadorModulo. <operando1> % <operando2> O resto da divisão de dois operandos inteiros retorna um valor inteiro. int b = 3. System. utilizado para saber qual o resto da divisão de dois operandos. será impresso o valor 0.

utilizado para atribuir o valor de um operando a uma variável: <variável> = <operando> Exemplo: OperadorAtribuicao. */ public class OperadorAtribuicao2 { public static void main(String[] args) { int x. a variável x possui agora o valor 25. x = 4 % 2.Programação Orientada a Objetos – Universidade Metodista de São Paulo Operadores de atribuição Símbolo = é chamado de atribuição. */ public class OperadorAtribuicao { public static void main(String[] args) { int x.java C:\>java OperadorAtribuicao 25 A operação de atribuição também pode receber como operando o resultado de outra operação.out.println(x). C:\>javac OperadorAtribuicao.java 01 02 03 04 05 06 07 08 09 /** * Classe utilizada para demonstrar o uso do operador de atribuição ( = ). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .println(x). x = 25. } } Neste caso. System. System.26 - .java 01 02 03 04 05 06 07 08 09 10 11 /** * Classe utilizada para demonstrar o uso do operador de atribuição ( = ).out. por exemplo: OperadorAtribuicao2.

out. depois a variável x recebe o valor dela somado ao valor 2. a variável x começa com o valor 4.27 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo 10 11 } } Neste caso. x += 2. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . C:\>javac OperadorAtribuicaoAdicao. C:\>javac OperadorAtribuicao2.java C:\>java OperadorAtribuicaoAdicao 6 Símbolo -= é utilizado para atribuir a uma variável o valor desta variável subtraindo o valor de um operando. } } Neste caso. */ public class OperadorAtribuicaoAdicao { public static void main(String[] args) { int x = 4. portanto a variável x fica com o valor 6.java C:\>java OperadorAtribuicao 0 Juntando atribuição + operação Símbolo += é utilizado para atribuir a uma variável o valor desta variável somada ao valor de um operando. System.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de adição ( += ). <variável> += <operando> Exemplo: OperadorAtribuicaoAdicao.println(x). a variável x possui o valor 0 que é o resto da divisão de 4 por 2.

x *= 5. System.java C:\>java OperadorAtribuicaoSubtracao 2 Símbolo *= é utilizado para atribuir a uma variável o valor desta variável multiplicado o valor de um operando. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . */ public class OperadorAtribuicaoMultiplicacao { public static void main(String[] args) { int x = 3. */ public class OperadorAtribuicaoSubtracao { public static void main(String[] args) { int x = 4. portanto a variável x fica com o valor 2.28 - .java 01 02 03 04 05 06 07 08 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de multiplicação ( *= ).= <operando> Exemplo: OperadorAtribuicaoSubtracao. C:\>javac OperadorAtribuicaoSubtracao.println(x). } } Neste caso. depois a variável x recebe o valor dela subtraído pelo valor 2.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de subtração ( -= ).Programação Orientada a Objetos – Universidade Metodista de São Paulo <variável> . <variável> *= <operando> Exemplo: OperadorAtribuicaoMultiplicacao. a variável x começa com o valor 4. x -= 2.out.

depois a variável x recebe o valor dela dividido pelo valor 3. } } Neste caso.out.java C:\>java OperadorAtribuicaoDivisao 1 Quando usamos o operador /= utilizando uma variável inteira e um operando de casa decimal. a variável x começa com o valor 3. System. } } Neste caso. a variável x começa com o valor 4. portanto a variável x fica com o valor 1.Programação Orientada a Objetos – Universidade Metodista de São Paulo 09 10 11 12 System. C:\>javac OperadorAtribuicaoMultiplicacao. */ public class OperadorAtribuicaoDivisao { public static void main(String[] args) { int x = 4. C:\>javac OperadorAtribuicaoDivisao.out. portanto a variável x fica com o valor 15. x /= 3.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de divisão ( /= ). depois a variável x recebe o valor dela multiplicado pelo valor 5.println(x).29 - . <variável> /= <operando> Exemplo: OperadorAtribuicaoDivisao. então a divisão retorna um valor inteiro. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .println(x).java C:\>java OperadorAtribuicaoMultiplicacao 15 Símbolo /= é utilizado para atribuir a uma variável o valor desta variável dividido pelo valor de um operando.

float y = 4. então a divisão retorna um valor com casa decimal.out. <variável> %= <operando> Exemplo: OperadorAtribuicaoModulo. y /= 3. a variável x terá o valor 1 impresso e a variável y terá o valor 1.out.println(y). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .3333334 Símbolo %= é utilizado para atribuir a uma variável. por exemplo: OperadorAtribuicaoDivisao2. */ public class OperadorAtribuicaoDivisao2 { public static void main(String[] args) { int x = 4.0.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de divisão ( /= ).Programação Orientada a Objetos – Universidade Metodista de São Paulo Caso utilize uma variável de ponto flutuante. System.3333334 impresso. x /= 3.println(x).java C:\>java OperadorAtribuicaoDivisao2 1 1.java 01 02 03 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de modulo ( %= ). o valor do resto da divisão desta variável por um operando. System. C:\>javac OperadorAtribuicaoDivisao2.0. } } Neste caso.30 - .

out.31 - .java C:\>java OperadorAtribuicaoModulo 1 Quando usamos o operador %= utilizando uma variável inteira e um operando de casa decimal.println(x). então o resto da divisão retorna um valor com casa decimal.out. float y = 4.println(y).Programação Orientada a Objetos – Universidade Metodista de São Paulo 04 05 06 07 08 09 10 11 12 */ public class OperadorAtribuicaoModulo { public static void main(String[] args) { int x = 4.println(x). depois a variável x recebe o resto da divisão dela pelo valor 3.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de modulo ( %= ). */ public class OperadorAtribuicaoModulo2 { public static void main(String[] args) { int x = 4. Caso utilize uma variável de ponto flutuante. a variável x começa com o valor 4. C:\>javac OperadorAtribuicaoModulo. x %= 3. System. System.0.out.33. y %= 3. x %= 3. por exemplo: OperadorAtribuicaoDivisao2. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . System. } } Neste caso. portanto a variável x fica com o valor 1. então o resto da divisão retorna um valor inteiro.

32 - .67 Operadores unários Símbolo ++ é utilizado para incrementar em 1 o valor de uma variável. int b = 1. C:\>javac OperadorAtribuicaoModulo2.67 impresso. System.println(a).java C:\>java OperadorAtribuicaoModulo2 1 0.println(b++). a variável x terá o valor 1 impresso e a variável y terá o valor 0. <variável> ++ Exemplo: OperadorIncremento. */ public class OperadorIncremento { public static void main(String[] args) { int a = 1. ! ++ <variável> Primeiro devolve o valor da variável depois incrementa seu valor.out. e na segunda vez que é impresso ambas variáveis a e b possuem o valor 2. mas quando é impresso o valor da variável a imprime 2 enquanto que o valor da variável b imprime 1. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . System. podendo ser feita das seguintes formas: Primeiro incrementa a variável depois devolve seu valor.println(b).Programação Orientada a Objetos – Universidade Metodista de São Paulo Neste caso. System.out.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 /** * Classe utilizada para demonstrar o uso do operador de * incremento ( ++ ). } } Neste caso a variável a e variável b são inicializadas com 1.out.println(++a).out. System.

e na segunda vez que é impresso ambas variáveis a e b possuem o valor 0.é utilizado para decrementar em 1 o valor de uma variável.out. System.). C:\>javac OperadorDecremento.java C:\>java OperadorIncremento 2 1 2 2 Símbolo -.33 - .out.println(b--). int b = 1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 /** * Classe utilizada para demonstrar o uso do operador de * decremento ( -.println(a).<variável> Primeiro devolve o valor da variável. depois ela é decrementada.out.Programação Orientada a Objetos – Universidade Metodista de São Paulo C:\>javac OperadorIncremento.println(--a). System. <variável> -Exemplo: OperadorDecremento.java Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . -.out. */ public class OperadorDecremento { public static void main(String[] args) { int a = 1. } } Neste caso a variável a e variável b são inicializadas com 1. depois devolve seu valor. System. podendo ser feita das seguintes formas: Primeiro decrementa o valor da variável.println(b). mas quando é impresso o valor da variável a imprime 0 enquanto que o valor da variável b imprime 1. System.

System.println(a && b). Este operador retorna true somente se os dois operandos forem true.Programação Orientada a Objetos – Universidade Metodista de São Paulo C:\>java OperadorDecremento 0 1 0 0 Operadores lógicos Os operadores lógicos aceitam apenas operando do tipo boolean. Símbolo && é chamado de E. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .34 - .println(a && c). Tabela verdade: Operando 1 true true false false Operando 2 true false true false Resultado true false false false Exemplo: OperadorLogicoE.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador logico E ( && ).out. boolean b = false. então o operador && não verifica o valor do operador2. */ public class OperadorLogicoE { public static void main(String[] args) { boolean a = true. boolean c = true.out. System. pois sabe que o resultado já é false. <operando1> && <operando2> Se o valor do operando1 for false.

depois será impresso true. System.35 - . pois a variável a é true e a variável b é false.Programação Orientada a Objetos – Universidade Metodista de São Paulo 13 } Neste caso será impresso false. Tabela verdade: Operando 1 true true false false Operando 2 true false true false Resultado true true true false Exemplo: OperadorLogicoOU. pois ambas variáveis a e c são true.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador logico OU ( || ). <operando1> || <operando2> Se o valor do operando1 for true. */ public class OperadorLogicoOU { public static void main(String[] args) { boolean a = true. pois já sabe que o resultado é true.println(b || c).out. System. então o operador || não verifica o valor do operando2. boolean c = false. Este operando retorna true caso tenha pelo menos um operando com o valor true.out.java C:\>java OperadorLogicoE false true Símbolo || é chamado de OU.println(a || b). boolean b = false. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . C:\>javac OperadorLogicoE.

depois será impresso true. Este operador retorna true se o operando tem o valor false. pois as variáveis b e c são false. System.java 01 02 03 04 05 06 07 08 09 10 11 12 13 /** * Classe utilizada para demonstrar o uso do operador logico negação ( ! ). boolean b = false.36 - . boolean c = false.out.java C:\>java OperadorLogicoOU true false Símbolo ! é chamado de negação.out. ! <operando> Tabela verdade: Operando false true Resultado true false Exemplo: OperadorLogicoNegacao. depois será impresso false. e retorna false se o operando o valor true.println(!a). primeiro será impresso false. pois a variável a tem o valor true.Programação Orientada a Objetos – Universidade Metodista de São Paulo 13 } Neste caso. que é a negação de true. System.println(!(b || c)). } } Neste caso. C:\>javac OperadorLogicoOU. será impresso primeiro true. */ public class OperadorLogicoNegacao { public static void main(String[] args) { boolean a = true. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . que é a negação do resultado de b || c que é false.

37 - . <operando1> > <operando2> Retorna true se o valor do operando1 for maior que o valor do operando2. pois o valor da variável a é maior que o valor da variável b.java C:\>java OperadorMaiorQue true Símbolo < é chamado de menor que. int b = 3.println(a > b). System.java 01 02 03 04 05 06 07 08 09 10 11 /** * Classe utilizada para demonstrar o uso do operador * relacional maior que ( > ). Símbolo > é chamado de maior que.Programação Orientada a Objetos – Universidade Metodista de São Paulo C:\>javac OperadorLogicoNegacao. caso contrário retorna false.java C:\>javac OperadorLogicoNegacao false true Operadores relacionais Os resultados dos operadores relacionais são do tipo boolean. será impresso true. Exemplo: OperadorMaiorQue. C:\>javac OperadorMaiorQue. } } Neste caso. */ public class OperadorMaiorQue { public static void main(String[] args) { int a = 5.out. <operando1> < <operando2> Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

*/ public class OperadorIgualdade { public static void main(String[] args) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . System.38 - . pois o valor da variável a não é menor que o valor da variável b. caso contrário retorna false. } } Neste caso. C:\>javac OperadorMenorQue. será impresso false.java 01 02 03 04 05 06 07 08 09 10 11 /** * Classe utilizada para demonstrar o uso do operador * relacional menor que ( < ). int b = 3. Exemplo: OperadorMenorQue. <operando1> == <operando2> Retorna true se o valor do operando1 for igual ao valor do operando2. */ public class OperadorMenorQue { public static void main(String[] args) { int a = 5.java C:\>java OperadorMenorQue false Símbolo == é chamado de igualdade. Exemplo: OperadorIgualdade.java 01 02 03 04 05 06 /** * Classe utilizada para demonstrar o uso do operador * relacional de igualdade ( == ).out.Programação Orientada a Objetos – Universidade Metodista de São Paulo Retorna true se o valor do operando1 for menor que o valor do operando2.println(a < b). caso contrário retorna false.

pois o valor da variável a é igual ao valor da variável c. será impresso true.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Classe utilizada para demonstrar o uso do operador * relacional maior ou igual que ( >= ). caso contrário retorna false. C:\>javac OperadorIgualdade. */ public class OperadorMaiorIgualQue { public static void main(String[] args) { int a = 5. será impresso true.println(a == b). System. } } Neste caso. int b = 3. Exemplo: OperadorMaiorIgualQue. pois o valor da variável a é maior que valor da variável b e depois será impresso true novamente. C:\>javac OperadorMaiorIgualQue. System.39 - . int b = 3.java Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out. pois o valor da variável a é igual ao valor da variável b.java C:\>java OperadorIgualdade true Símbolo >= é chamado de maior ou igual que.out.out. <operando1> >= <operando2> Retorna true se o valor do operando1 for maior ou igual que o valor do operando2. int c = 5.println(a >= b).Programação Orientada a Objetos – Universidade Metodista de São Paulo 07 08 09 10 11 int a = 3. } } Neste caso. System.println(a >= c).

Exemplo: OperadorMenorIgualQue. int b = 5. <operando1> != <operando2> Retorna true se o valor do operando1 for diferente do valor do operando2. System. <operando1> <= <operando2> Retorna true se o valor do operando1 for menor ou igual que o valor do operando2. será impresso true.Programação Orientada a Objetos – Universidade Metodista de São Paulo C:\>java OperadorMaiorIgualQue true true Símbolo <= é chamado de menor ou igual que.40 - .println(a <= b). caso contrário retorna false. C:\>javac OperadorMenorIgualQue. pois o valor da variável a é menor ou igual ao valor da variável b. Exemplo: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . */ public class OperadorMenorIgualQue { public static void main(String[] args) { int a = 5. caso contrário retorna false. } } Neste caso.java 01 02 03 04 05 06 07 08 09 10 11 /** * Classe utilizada para demonstrar o uso do operador * relacional menor ou igual que ( <= ).out.java C:\>java OperadorMenorIgualQue true Símbolo != é chamado de diferente.

java C:\>java OperadorDiferente true false Operador condicional O operador condicional é do tipo ternário.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Classe utilizada para demonstrar o uso do operador * relacional diferente ( != ). } } Neste caso. int b = 3. Exemplo: OperadorCondicional.Programação Orientada a Objetos – Universidade Metodista de São Paulo OperadorDiferente.out. será impresso true. C:\>javac OperadorDiferente. <operando1> ? <operando2> : <operando3> Se o valor do operando1 for true. System.41 - . então o resultado da condicional é o operando2. int c = 3. pois o valor da variável b é igual ao valor da variável c. então o resultado da condicional é o operando3.java 01 02 03 04 /** * Classe utilizada para demonstrar o uso do operador * condicional ( condicao ? verdade : falso ). se o valor do operando1 for false. Símbolo ? : é utilizado para fazer uma condição if / else de forma simplificada. */ public class OperadorDiferente { public static void main(String[] args) { int a = 5.println(b != c). pois o valor da variável a é diferente do valor da variável b e depois será impresso false. pois envolve três operandos.println(a != b).out. */ Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . System.

boolean c = true.java C:\>java OperadorCondicional diferente Operadores bit a bit Estes operadores são chamados de bit a bit. */ public class OperadorBitBitE { public static void main(String[] args) { boolean a = true. C:\>javac OperadorCondicional.println(a & b & c & d). System. } } Neste caso.println(a != b ? "diferente" : "igual"). porque os operando são comparados no nível dos seus bits. boolean d = true. <operando1> & <operando2> Para este operador não importa se algum dos operando tem o valor false. Símbolo & é chamado de E bit a bit. Exemplo: OperadorBitBitE. a condição a != b retorna true. System.42 - .out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 05 06 07 08 09 10 11 public class OperadorCondicional { public static void main(String[] args) { int a = 5. então é impresso o valor “diferente”. então seria impresso o valor “igual”. int b = 3. se o resultado fosse false. ele vai verificar todos os operandos que houver na expressão.out.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador * bit a bit E ( & ). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . boolean b = false.

System. e o operador & ira comparar o valor de todas variáveis.java C:\>java OperadorBitBitE2 6 • Lembrando que um short tem 16bits.43 - . ele irá comparar cada bit. C:\>javac OperadorBitBitE. Variável a tem o valor 30. por exemplo: OperadorBitBitE2. } } Neste caso. 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 Variável b tem o valor 7. porque o operador & vai comparar cada bit na base binária e depois a mesma é convertida para a base decimal. C:\>javac OperadorBitBitE2.java C:\>java OperadorBitBitE false Se usarmos valores inteiros.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador * bit a bit E ( & ).println(a & b). short b = 7. */ public class OperadorBitBitE2 { public static void main(String[] args) { short a = 30. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out. será impresso o valor 6. será impresso o valor false.Programação Orientada a Objetos – Universidade Metodista de São Paulo 13 14 } } Neste caso.

println(a | b | c | d). ele vai verificar todos os operando que tiver na expressão. boolean d = false. boolean b = false. System. boolean c = false. <operando1> | <operando2> Para este operador não importa se algum dos operando tem o valor true. 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 Tabela verdade: Operando1 1 1 0 0 Operando2 1 0 1 0 Resultado 1 0 0 0 Símbolo | é chamado de OU bit a bit.out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 Resultado tem o valor 6. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . */ public class OperadorBitBitOU { public static void main(String[] args) { boolean a = true.44 - . Exemplo: OperadorBitBitOU.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Classe utilizada para demonstrar o uso do operador * bit a bit OU ( | ).

*/ public class OperadorBitBitOU2 { public static void main(String[] args) { short a = 30. C:\>javac OperadorBitBitOU2. ele irá comparar cada bit. será impresso o valor 31.45 - . por exemplo: OperadorBitBitOU2. e o operador | ira comparar o valor de todas variáveis. 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 Variável b tem o valor 7.println(a | b). o valor impresso será true.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador * bit a bit OU ( | ).java C:\>java OperadorBitBitOU true Se usarmos valores inteiros. short b = 7. C:\>javac OperadorBitBitOU.out. System. Variável a tem o valor 30. porque o operador | vai comparar cada bit na base binária e depois a mesma é convertida para a base decimal. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . } } Neste caso.java C:\>java OperadorBitBitOU2 31 • Lembrando que um short tem 16bits. 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 Resultado tem o valor 31.Programação Orientada a Objetos – Universidade Metodista de São Paulo Neste caso.

short b = 7.Programação Orientada a Objetos – Universidade Metodista de São Paulo 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 Tabela verdade: Operando1 1 1 0 0 Operando2 1 0 1 0 Resultado 1 1 1 0 Símbolo ^ é chamado de OU EXCLUSIVO bit a bit.out. por exemplo ele ira comparar cada bit.java C:\>java OperadorBitBitOUExclusive 25 • Lembrando que um short tem 16bits. por exemplo: OperadorBitBitOUExclusivo. C:\>javac OperadorBitBitOUExclusive. System. } } Neste caso.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar o uso do operador * bit a bit OU EXCLUSIVO ( ^ ). <operando1> ^ <operando2> Se usarmos valores inteiros. será impresso o valor 25. porque o operador ^ vai comparar cada bit na base binária e depois a mesma é convertida para a base decimal.println(a ^ b).46 - . */ public class OperadorBitBitOUExclusivo { public static void main(String[] args) { short a = 30. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

int c = 7. 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 Resultado tem o valor 25. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 Variável b tem o valor 7. int b = 4.47 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Variável a tem o valor 30.println((a+b) / c). 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 Tabela verdade: Operando1 1 1 0 0 Operando2 1 0 1 0 Resultado 0 1 1 0 Exercícios 1) Qual resultado será impresso: a) public class Main { public static void main(String[] args) { int a = 3. } System.out.

int b = 4.48 - . } 2) O que acontece se tentarmos compilar e executar o seguinte código? 1 class Teste { 2 public static void main(String args) { 3 System. } c) public class Main { public static void main(String[] args) { int a = 3.println(--c).println(a % 2 == 0 ? ++a : a++).out. else System.out. if(a++ >= b) System. int c = 7.out.println(!((a > b) && (a < c))).println(c++). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . } System.println(a & b | c).Programação Orientada a Objetos – Universidade Metodista de São Paulo b) public class Main { public static void main(String[] args) { int a = 3.println(args). } System. int b = 4.out. } e) public class Main { public static void main(String[] args) { int a = 178. int c = 7.out. } } d) public class Main { public static void main(String[] args) { int a = 3.out. int c = 33. int b = 131. } System.

NoSuchMethodError: main e) Erro em tempo de execução.49 - .out.out. 3 public static void main (String[] args) { 4 System. 3) O que acontece se tentarmos compilar e executar o seguinte código? 1 class Soma{ 2 int x. // 'b' = 98 5 6 System. b) Erro de compilação na linha 2 c) Imprime o valor de args d) Exceção na thread "main" java.println(x + y + z).lang.Programação Orientada a Objetos – Universidade Metodista de São Paulo 4 5 } } a) Não imprime nada. z. // 'a' = 97 4 char b = 'b'. 5 } 6 } a) Não imprime nada b) Imprime: null c) Imprime: 0 d) Erro de compilação e) Erro em tempo de execução 4) O que acontece se tentarmos compilar e executar o seguinte código? 1 class Teste { 2 public static void main(String[] args) { 3 char a = 'a'. 7 } 8 } a) abba b) 97989897 c) 195ba d) ab195 e) 390 f) Erro de Compilação g) Erro em tempo de execução Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .println(a + b + "" + b + a). y.

e é utilizado para executar alguns comandos caso a condição do if for false (falso).Com múltiplas condições: if(condição 1) { // Comandos executados caso a condição 1 verdadeira.Programação Orientada a Objetos – Universidade Metodista de São Paulo 3.Com execução de um bloco de instruções.50 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Na linguagem Java. conforme listadas abaixo.Com execução de um bloco de instruções. e com um fluxo alternativo para os casos de condição não atendida: if(condição) { // Comandos executados caso a condição verdadeira. é utilizada para executar alguns comandos apenas se a sua condição for true (verdadeira). } else if(condição 2) { // Comandos executados caso a condição 2 verdadeira. O else (senão) pode ou não acompanhar o if. apenas caso a condição seja atendida: if(condição) { // Comandos executados caso a condição verdadeira } . Estruturas de controle e repetição Estruturas de Controle if / else A estrutura de controle if (se). . mas o else não pode ser usado sozinho. } . } else { // Comandos executados caso a condição falsa. esta estrutura pode ser utilizada de diversas maneiras. caso a condição seja atendida.

Programação Orientada a Objetos – Universidade Metodista de São Paulo } else if(condição 3) { // Comandos executados caso a condição 3 verdadeira.out. Dentro de um bloco { } do if / else pode ser utilizado outras variáveis declaradas no método ou declarados dentro do bloco. } No exemplo a seguir. */ public class ExemploIf { public static void main(String[] args) { int idade = 15. } else { // Comandos executados caso nenhuma das condições for verdadeira. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out.java 01 02 03 04 05 06 /** * Exemplo de estrutura de controle IF. mas estas variáveis podem apenas ser utilizadas dentro deste próprio bloco. } } } Quando executarmos a classe ExemploIf. temos a seguinte saída no console: C:\>javac ExemploIf.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Exemplo de estrutura de controle IF."). verificamos se o valor da variável idade é maior ou igual que 18.java C:\>java ExemploIf Idade minima para dirigir eh 18 anos. */ public class ExemploIf2 { public static void main(String[] args) { int valor = 10. } else { System.println("Permissão para dirigir"). caso contrário entra no bloco do else. ExemploIf. if(idade >= 18) { System. por exemplo: ExemploIf2. caso a condição seja verdadeira então entra no bloco do if.51 - .println("Idade minima para dirigir eh 18 anos.

java:14: cannot find symbol symbol : variable xpto location: class ExemploIf2 xpto = 12. // Erro de compilação. Observação: este conceito de variáveis criadas dentro de blocos { }.Programação Orientada a Objetos – Universidade Metodista de São Paulo 07 08 09 10 11 12 13 14 15 16 if(valor > 9) { int xpto = 10. // Erro de compilação. } else { xpto = 11. short. porem trabalha apenas com valores constantes dos tipos primários byte. funciona para todos os blocos. não pode ser usada no else e nem fora do bloco. É possível ainda se enumerar n possíveis blocos de instrução. teremos os seguintes erros: C:\>javac ExemploIf2. int e char.java ExemploIf2. Sua utilização deve ser feita da seguinte maneira: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . ^ 2 errors Neste caso é criado uma variável chamada xpto dentro do bloco do if. switch O switch é uma estrutura de seleção semelhante ao if com múltiplas seleções. É uma estrutura muito fácil de utilizar e apresenta uma ótima legibilidade. } xpto = 12. ^ ExemploIf2. } } Se tentarmos compilar a classe ExemploIf2. então esta variável pode ser utilizada somente dentro do if.52 - . Também pode ser utilizado com enumerations (veremos mais adiante).java:11: cannot find symbol symbol : variable xpto location: class ExemploIf2 xpto = 11.

O bloco de comandos default representa uma condição geral de execução caso nenhuma das anteriores tenha sido atendida.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 /** * Exemplo de estrutura de seleção SWITCH */ public class ExemploSwitch { public static void main(String[] args) { char nota = 'D'. Conceito bom!").out. Conceito excelente!"). case 'C': System. Cada case é um caso no qual os comandos dentro dele são executados se o valor dele for o mesmo que a variável recebida no switch. break. switch(nota) { case 'A': System.println("Aluno aprovado. default: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Segue um exemplo de utilização do comando switch: ExemploSwitch.out. sendo a sua utilização também opcional.out. case 'B': System.53 - . É importante lembrar que a utilização do comando break é facultativa. Conceito medio!"). break. " " " " " " } case <possível valor da constante> : " < instruções> " break.println("Aluno aprovado. break.Programação Orientada a Objetos – Universidade Metodista de São Paulo switch( variável ) { " case <possível valor da constante> : " " < instruções> " " break. porem indispensável caso se queira que apenas aquele bloco seja executado e não todos os demais abaixo dele.println("Aluno aprovado. default: < instruções> " break.

while A estrutura while executa um bloco de instruções enquanto uma determinada condição for verdadeira (true). então a estrutura default foi executada.java C:\>java ExemploSwitch Aluno reprovado! Estruturas de repetição As estruturas de repetição permitem especificar um bloco de instruções que será executado tantas vezes. quantas especificadas pelo desenvolvedor. pois nenhum dos cases foi atendido.54 - .out. C:\>javac ExemploSwitch.java 01 02 03 04 05 06 07 08 09 10 11 /** * Exemplo de estrutura de repetição WHILE. } } } Neste caso. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo 19 20 21 22 23 System. while(condição) { " " < instruções > } Exemplo: ExemploWhile.out.println(++i). */ public class ExemploWhile { public static void main(String[] args) { int i = 0.println("Aluno reprovado!"). while(i < 10) { System. break. será impressa a mensagem “Aluno reprovado !”.

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . então se a condição ao final das instruções for true.Scanner. do { < instruções > } while(condição).java C:\>java ExemploWhile 1 2 3 4 5 6 7 8 9 10 do / while A estrutura do / while tem seu bloco de instruções executados pelo menos uma vez. /** * Exemplo de estrutura de repetição DO / WHILE.in). e depois quando a variável i possuir o valor 11 a condição do while será falso (false) e sua estrutura não é mais executada.Programação Orientada a Objetos – Universidade Metodista de São Paulo 12 } Neste caso. */ public class ExemploDoWhile { public static void main(String[] args) { Scanner entrada = new Scanner(System. Exemplo: ExemploDoWhile.55 - . o bloco de instruções é executado novamente.java 01 02 03 04 05 06 07 08 09 10 11 import java. serão impressos os valores de 1 a 10. int opcao = 0. C:\>javac ExemploWhile.util.

println("2 . O for mostra-se muito mais eficiente neste ponto. A estrutura de repetição for.println("Escolha uma opcao:").Sair"). } while (opcao != 3).Iniciar jogo 2 .out.java C:\>java ExemploDoWhile Escolha uma opcao: 1 . System.Iniciar jogo").56 - . System. C:\>javac ExemploDoWhile. pois em uma única linha de instrução é possível se declarar o contador. opcao = entrada.Ajuda 3 . e enquanto o número digitado for diferente de 3. o bloco será executado novamente. será pedido ao usuário digitar um número.nextInt().println("3 .Ajuda").Iniciar jogo 2 . System. } } Neste caso. a condição de execução e a forma de incrementar o contador. trabalha da mesma forma da condição while.out. System.Ajuda 3 .Sair OPCAO: 3 for As estruturas de repetição permitem especificar um bloco de instruções que será executado tantas vezes quanto forem especificadas pelo desenvolvedor.println("1 .println("OPCAO: "). A estrutura for funciona da seguinte maneira: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out. porém de maneira muito mais prática quando falamos de uma estrutura de repetição gerenciada por contador.Programação Orientada a Objetos – Universidade Metodista de São Paulo 12 13 14 15 16 17 18 19 20 21 do { System.Sair OPCAO: 1 Escolha uma opcao: 1 .out.out.

out. será impresso o valor da variável i e informando se este valor é par ou impar."). 6 e um numero par.57 - . 9 e um numero impar.println(i + " e um numero impar. 1 e um numero impar. 3 e um numero impar. 8 e um numero par. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . 2 e um numero par. Utilizamos a área condição de execução para definir a lógica de parada da estrutura de repetição for.java C:\>java ExemploFor 0 e um numero par. 5 e um numero impar. } } } } Neste caso. C:\>javac ExemploFor. <condição de execução>.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Exemplo de estrutura de repetição FOR.Programação Orientada a Objetos – Universidade Metodista de São Paulo for(<inicialização>. <pós-instruções>) { " " << instruções >> } Utilizamos a área inicialização para criar variáveis ou atribuir valores para variáveis já declaradas. Esta área é executada antes de começar a estrutura de repetição do for.out."). por exemplo: ExemploFor. Utilizamos a área pós-instruções para executar alguma ação que deve ocorrer cada vez que as instruções dentro do for forem executadas. */ public class ExemploFor { public static void main(String[] args) { for(int i = 0. 7 e um numero impar. i++ ) { if(i % 2 == 0) { System.println(i + " e um numero par. 4 e um numero par. mas todas as variáveis precisam ser do mesmo tipo. i <= 10. } else { System.

para facilitar seu uso foi adicionado na versão 5 do Java o enhanced for.java 01 02 03 04 import java. teremos a seguinte saída no console: C:\>javac ExemploFor2. na área de pós-instrução. vamos incrementar a variável i e decrementar a variável j. i <= 10.List.ArrayList.println("i " + i + " eh igual a j " + j). j = 10. vamos criar duas variáveis i e j na área de inicialização e. No exemplo a seguir.util. i++.58 - . */ public class ExemploFor2 { public static void main(String[] args) { for(int i = 0.Programação Orientada a Objetos – Universidade Metodista de São Paulo 10 e um numero par. ExemploFor2. } } } } Quando executarmos a classe ExemploFor2. for(<Tipo> <identificador> : <expressão>) { <instruções> } Exemplo: ExemploFor.out. import java.java C:\>java ExemploFor2 i 5 eh igual a j 5 Enhanced for ou “for-each” Muitas vezes o for é utilizado para percorrer um array ou uma coleção de objetos. j--) { if(i == j) { System.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Exemplo de estrutura de repetição FOR. /** Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .util.

o primeiro enhanced for vai percorrer um array de Strings e imprimir os valores “Altrano”.java C:\>java ExemploForEach Altrano Beltrano Ciclano Deltrano 100 322 57 A instrução break O comando break é uma instrução de interrupção imediata de qualquer laço. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .add(100). } List<Integer> valores = new ArrayList<Integer>(). } } } Neste caso. seja ele qual for. //Percorre um array. for(Integer numero : valores) { System.out. */ public class ExemploForEach { public static void main(String[] args) { String[] nomes = {"Altrano". “Celtrano” e “Deltrano”.println(numero). valores.59 - . independente de sua condição de parada ter sido atendida.add(322). "Beltrano".println(nome).out. for(String nome : nomes) { System. C:\>javac ExemploForEach. "Ciclano". 322 e 57. valores. valores. //Percorre uma coleção. "Deltrano"}.add(57).Programação Orientada a Objetos – Universidade Metodista de São Paulo 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 * Exemplo de estrutura de repetição For Each. Depois ira percorrer uma lista de inteiros imprimindo os valores 100. “Beltrano”.

java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 import java.println("Contando de 1 ate o numero que voce digitou…"). break. porém não interrompe completamente a execução do laço.println("Um numero proibido foi digitado!"). for(int cont = 0. System. segundo o condicional da linha 13..out. Uma vez executado o código acima.Scanner. por exemplo: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Vamos ao exemplo: ExemploBreak.println("Digite um numero de 1 a 9 exceto o 5: "). Este comando pode ser utilizado com qualquer laço. a seguinte saída será projetada caso o usuário digite o número 5: C:\>javac ExemploBreak. cont <= numero. int numero = entrada.out. cont++) { if(numero == 5 || numero < 1 || numero > 9) { System. porém ao invés de interromper a execução completa do laço.in). Um numero proibido foi digitado! A instrução continue O comando continue tem um comportamento semelhante ao break.util.nextInt(). ele faz com que o laço salte para sua próxima iteração. } } } Observe que. caso um número inválido seja digitado o laço FOR iniciado na linha 12 será abortado imediatamente devido a instrução break existente na linha 15.. */ public class ExemploBreak { public static void main(String[] args) { Scanner entrada = new Scanner(System.java C:\>java ExemploBreak Digite um numero de 1 a 9 exceto o 5 : 5 Contando de 1 ate o numero que voce digitou.print(cont + " "). } System. System.out.out. /** * Exemplo de uso da palavra-chave break.60 - .

conforme o condicional da linha 13.java C:\>java ExemploContinue Digite um numero de 1 a 9: (desta vez saltaremos o 5) 8 Contando de 1 ate o numero que voce digitou. por exemplo: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . ele irá imprimir em tela a mensagem da linha 14 e saltará o restante do código e retornará ao início do laço na linha 12. } } } Note que o código acima é bem semelhante ao anterior.println("Contando de 1 ate o numero que voce digitou…").Programação Orientada a Objetos – Universidade Metodista de São Paulo ExemploContinue.print(cont + " "). /** * Exemplo de uso da palavra-chave continue.out.. 0 1 2 3 4 # PULANDO O 5 # 6 7 8 Exercícios 1) Escreva um programa que leia um número positivo inteiro e imprimir a quantidade de dígitos que este número possui.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 import java. cont++) { if(cont == 5) { System. } System.println("# PULANDO O 5 #").in). System.println("Digite um numero de 1 a 9 exceto o 5: ").Scanner. for(int cont = 0.out. continue.util.nextInt().out. cont <= numero.out.. System.61 - . porém observe que desta vez. C:\>javac ExemploContinue. ao invés de interromper o laço caso o usuário digite o número 5 ele irá contar de 1 até o número digitado pelo usuário. Caso ele passe pelo número 5. int numero = entrada. */ public class ExemploContinue { public static void main(String[] args) { Scanner entrada = new Scanner(System.

. 2. 6) Qual a saída da compilação e execução da classe abaixo: public class Teste { public static void main(String[] args) { int num = 2. 5.. 21. Sequência de Fibonacci: 1. Depois informe qual o menor número e qual o maior número e a quantidade de vezes que o menor e o maior número aparecem no vetor. por exemplo: Base10: 123 Base2: 01111011 4) Escreva um programa que leia um número positivo inteiro e calcule o valor do Fibonacci desse numero. 13. 3. depois este número deve ser decomposto e seus dígitos devem ser somado. 8. switch(num) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . 34.62 - . por exemplo: Número: 59765123 Decompondo: 5 + 9 + 7 + 6 + 5 + 1 + 2 + 3 Soma dos números: 38 Decompondo: 3 + 8 Soma dos números: 11 Decompondo: 1 + 1 Soma dos números: 2 3) Escreva um programa que leia um número positivo inteiro na base 10 e imprima seu valor na base 2. 1. 5) Escreva um programa que leia 10 números positivos inteiros entre 1 e 20 e armazene seus valores em um vetor. de forma que enquanto o número tiver mais que um digito ele deve continuar sendo decomposto. 55. 89.Programação Orientada a Objetos – Universidade Metodista de São Paulo Número: 13 Dígitos: 2 Número: 321 Dígitos: 3 2) Escreva um programa que leia um numero positivo inteiro entre 1 e 99999999999.

Imprime Imprime Imprime Erro de “2” “234” “234default” compilação 7) Durante uma partida de golfe surgiu a duvida para saber qua a velocidade em metros por segundo que um bolinha de golfe alcança.10% de desconto O .63 - . } a) b) c) d) } } System. Seu programa deve perguntar quantos retângulos formam a casa e os lados de cada retângulo. 8) Desenvolva um programa que some o valor de todos os produtos comprados por um cliente. Utilize a formula velocidade = (distancia * 1000) / (tempo * 60). 9) Desenvolva um programa que calcule a área total de uma casa.println(“default”).Programação Orientada a Objetos – Universidade Metodista de São Paulo 1: 2: 3: 4: System.println(“3”).out.out. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out.println(“2”).Cliente Ouro . default: System. de acordo com a categoria do cliente pode ser fornecido um desconto: D . System.out. desenvolva um programa que pergunte ao usuário qual a distancia que a bolinha de golfe percorreu e quanto tempo ela demorou para percorrer a distancia. System.Sem desconto No final deve ser impresso o valor total que o cliente deve pagar. para calcular e imprimir sua velocidade em metros por segundo. break.Cliente Normal .5% de desconto N . no final deve imprimir o tamanho total da área da casa.println(“1”).out.println(“4”).Cliente Diamante .

basta multiplicar os lados.64 - . por exemplo: A Sala possui 4m x 4.5m então tem uma área de 18 metros. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Dica: Para conhecer a área de um retângulo.

Daí temos. então. É importante ressaltar a utilização de letra maiúscula na primeira letra do nome da classe e as demais minúsculas. Classe e Objeto Uma classe no Java representa um modelo ou forma do mundo real que se queira reproduzir no ambiente de desenvolvimento. • Métodos Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Uma classe é composta basicamente de 3 itens: • Nome da Classe o Item responsável por identificar a classe. Pensando desta forma é muito fácil entender e pensar sobre como se projetar um sistema com orientação a objetos. coloque sempre a primeira letra de cada palavra em letra maiúscula. Ex: idade. Caso o nome de sua classe seja composto por mais de uma palavra.65 - . Podemos também representar a Locação.Programação Orientada a Objetos – Universidade Metodista de São Paulo 4. listaMensagens. CaixaCorreio. a primeira classe que vem a tona é uma que possa representar a figura do carro no seu sistema. etc. nome. a primeira palavra é toda em minúsculo e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúsculo. Este nome será utilizado toda a vez em que se for utilizar um objeto deste tipo. etc. Ex: Carro. por exemplo. costuma-se escrever o atributo com letras minúsculas. é apenas uma boa prática de desenvolvimento que visa melhorar a legibilidade do código. ContaCorrente. Pessoa. Quando pensamos em desenvolver um sistema voltado a locação de veículos. Por convenção. Isto não é uma obrigatoriedade do Java. nossa primeira classe. notaAlunoTurma. • Atributos o São valores que possam representar as propriedades e/ou estados possíveis que os objetos desta classe podem assumir. a menos que ele seja composto por mais de uma palavra. Cliente e outros objetos.

Neste caso.println("Chamando o metodo 1. */ public void metodo1() { //Comandos System. consultarDadosAluno. public boolean atributo3."). Na UML representamos uma classe da seguinte forma: Em Java.println("Chamando o metodo 2.out. */ public class NovaClasse { /* Declaração dos atributos da classe. a menos que ele seja composto por mais de uma palavra.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 /** * Classe utilizada para demonstrar a estrutura de uma classe. etc.out. public float atributo2. enviarMensagemEmail. a mesma regra citada nos nomes de Atributos também é válida. No exemplo a seguir. } public void metodo2() { //Comandos System. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . */ public int atributo1. costuma-se escrever o atributo com letras minúsculas.66 - . utilizamos a palavra-chave class para declararmos uma classe. Ex: getPessoa."). criamos uma classe chamada NovaClasse: NovaClasse.Programação Orientada a Objetos – Universidade Metodista de São Paulo o São blocos de código que possam representar as funcionalidades que a classe apresentará. /* Declaração dos métodos da classe. Assim como os atributos.

java. mas cada instância pode ter um estado (valor dos atributos) diferentes.java precisa ter o mesmo nome da classe pública. Logo após a declaração da classe. Vários objetos podem ser criados utilizando-se a mesma classe. o Objeto deve possuir as mesmas características de sua Classe. Basta pensarmos na Classe como uma grande forma e no Objeto como algo que passou por essa forma.Programação Orientada a Objetos – Universidade Metodista de São Paulo Note que utilizamos a palavra-chave class seguida do nome da classe NovaClasse. TesteNovaClasse. para criarmos um novo objeto.67 - . Os atributos podem ser criados em qualquer lugar do programa. criamos uma classe nova chamada TesteNovaClasse. basta utilizar a palavra-chave new da seguinte forma: No exemplo a seguir. A palavra-chave public informa que esta classe pode ser utilizada por qualquer outra classe dentro do projeto. Também criamos dois métodos para esta classe. porque o nome do arquivo . criamos 3 atributos. Na linguagem Java. mais adiante vamos discutir como funcionam os métodos. Este trecho de código precisa ser salvo em um arquivo com o nome NovaClasse. Esta classe será utilizada para criar um objeto da classe NovaClasse e chamar os métodos metodo1() e metodo2(). ou seja. Essa mesma classe pode ser representada em UML da seguinte forma: Objetos Um objeto é a representação (instância) de uma classe.java 01 02 03 /** * Classe utilizada para testar a classe NovaClasse */ Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

estamos utilizando a variável novaClasse para invocar os métodos metodo1() e metodo2(). */ public class Atributo { /* Declaração dos atributos da classe. */ NovaClasse novaClasse = new NovaClasse(). Para chamar um método ou um atributo a partir de um objeto utilizamos o ponto final ( . Depois utilizamos a palavra-chave new seguida de NovaClasse() para construirmos um objeto da classe NovaClasse. /* Chamando os métodos através da variavel novaClasse. */ public static void main(String[] args) { /* Criando um objeto a partir da classe NovaClasse. criamos uma variável chamada novaClasse e esta variável é do tipo NovaClasse. Utilizando os atributos da classe No exemplo a seguir. Observe que dentro do método main. ) seguido do nome do método que precisamos chamar.68 - .java C:\>java TesteNovaClasse Chamando o metodo 1. */ Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . */ novaClasse. } } Na classe acima.java 01 02 03 04 05 06 /** * Classe utilizada para demonstrar a utilização de * atributos.Programação Orientada a Objetos – Universidade Metodista de São Paulo 04 05 06 07 08 09 10 11 12 13 14 15 16 public class TesteNovaClasse { /** * Método principal da classe.java C:\>javac TesteNovaClasse.metodo2(). Quando executamos a classe TesteNovaClasse. criamos a classe Atributo e dentro dela declaramos três atributos diferentes: Atributo.metodo1(). Chamando o metodo 2. temos a seguinte saída no console: C:\>javac NovaClasse. novaClasse.

Atributo teste = new Atributo().69 - . public boolean atributo3.out. } } Quando executamos a classe TesteAtributo.atributo3 = false. */ public class TesteAtributo { /** * Método principal para testar a classe Atributo.atributo1 = 30.println("Cria um objeto da classe Atributo. System. Depois imprimiremos os seus valores: TesteAtributo.java Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo 07 08 09 10 public int atributo1. teste. criaremos um objeto da classe Atributo e atribuiremos valores para as variáveis.5f.atributo1). teste. temos a seguinte saída no console: C:\>javac Atributo.out.atributo3). No exemplo a seguir. teste. public float atributo2.out. nas próximas aulas veremos o que isto significa. Por enquanto utilize a palavra-chave public na declaração do atributo. System. Criamos um atributo para guardar um valor booleano chamado atributo3."). Criamos um atributo para guardar um valor com ponto flutuante do tipo float com o nome atributo2. */ public static void main(String[] args) { System.atributo2 = 3. } Criamos um atributo para guardar um valor inteiro do tipo int com o nome atributo1.println("Valor do atributo3: " + teste.out. System.atributo2).java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 /** * Classe utilizada para demonstrar o uso * dos atributos de outra classe.println("Valor do atributo2: " + teste.println("Valor do atributo1: " + teste.

* @return boolean informando se o atributo1 é positivo */ public boolean metodo2() { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai ."). } /** * Método que verificar se o atributo1 é maior ou igual a 0 (zero).out. Valor do atributo1: 30 Valor do atributo2: 3. return atributo1. */ public int atributo1. */ /** * Método utilizado para retornar o atributo1. Uma vez que o método é criado. */ public int metodo1() { System.70 - . */ public class MetodoRetorno { /* Declaração dos atributos da classe.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /** * Classe utilizada para demonstrar o uso de * métodos com retorno de valor. o mesmo pode ser usado em diversas partes do sistema. Para que seja possível realizar o retorno do método. criamos dois métodos: MetodoRetorno. * @return int com o valor do atributo1. No exemplo a seguir.println("Chamou o metodo 1. primeiramente é necessário declarar qual o tipo de retorno será realizado pelo método.Programação Orientada a Objetos – Universidade Metodista de São Paulo C:\>javac TesteAtributo.5 Valor do atributo3: false Métodos com retorno de valor Os métodos das classes em Java servem para executar partes específicas de códigos. /* Declaração dos métodos da classe. Utilizando os métodos podemos reaproveitar o código. Os métodos podem receber variáveis como parâmetros e devolver uma variável como retorno da execução do método.java C:\>java TesteAtributo Cria um objeto da classe Atributo.

").println("Chamou o metodo 2. true (verdadeiro) ou false (falso). uma vez declarado um retorno para o método.out. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . e retornamos a resposta dessa verificação.println("Criando um objeto da classe MetodoRetorno. para que o método realmente retorne algum valor.Programação Orientada a Objetos – Universidade Metodista de São Paulo 24 25 26 27 System.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Classe utilizada para demonstrar o uso de * métodos com retorno de valor.metodo2()). temos agora o metodo1() que retornará o valor do atributo1. é obrigatório que este retorno aconteça.out. MetodoRetorno teste = new MetodoRetorno()."). Para tal. É importante lembrar que. da seguinte forma: public int metodo1() { return atributo1.println(teste. teste. System. return atributo1 >= 0. O fato de não se enviar um retorno resulta em um erro de compilação. No metodo2() verificamos se o atributo1 é maior ou igual a 0 (zero). Porém. */ public class TesteMetodoRetorno { /** * Método principal para testar está classe.out. é necessário identificar qual valor será retornado.metodo1()). agora utilizamos a palavra-chave int. TesteMetodoRetorno.atributo1 = 30. ou seja.71 - . faremos uso da palavra-chave return. } } Note que no ponto em que até há pouco utilizávamos a palavra-chave void (que significa vazio ou sem retorno) no retorno do método. Essa mudança na declaração significa que pretendemos que este método retorne para quem o chamou um valor do inteiro tipo int. que é do tipo int. } Com isso. System.println(teste. A seguir vamos criar um objeto da classe MetodoRetorno e vamos testar a chamada para os métodos metodo1() e metodo2(). */ public static void main(String[] args) { System.out.

*/ public int atributo1.java C:\>javac TesteMetodoRetorno.println("Chamando o metodo 1.println("O valor do atributo1 eh: " + atributo1). os métodos também são capazes de receber um ou mais parâmetros que são utilizados no processamento do método. System. */ public void metodo1(int valor) { System.out.java C:\>java TesteMetodoRetorno Criando um objeto da classe MetodoRetorno Chamou o metodo 1. true Métodos com recebimento de parâmetro Na linguagem Java. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . 30 Chamou o metodo 2.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 /** * Classe utilizada para demonstrar o uso de * métodos que recebem parametros. No exemplo a seguir. atributo1 = valor.Programação Orientada a Objetos – Universidade Metodista de São Paulo 15 16 } } Quando executamos a classe TesteMetodoRetorno.out. temos a seguinte saída no console: C:\>javac MetodoRetorno. /* Declaração dos métodos da classe. criamos dois métodos que recebem parâmetros e os utilizam no processamento do método: MetodoParametro. */ /** * Método utilizado para atribuir o valor do atributo1. */ public class MetodoParametro { /* Declaração dos atributos da classe.72 - .").

Note que a declaração de um parâmetro é igual à declaração de um atributo na classe.out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 /** * Método que recebe uma quantidade de parametros variados * e imprime todos os valores recebidos. * Essa possibilidade de receber uma quantidade de parametros * variados é chamado de varargs e foi implementado a partir * da versão 5. */ for(int cont = 0. */ for(int valor : valores) { System. Se necessário.length. e dentro do método podemos utilizar este atributo valor. um erro na passagem dos tipos dos parâmetros representa um erro de compilação.out. System..73 - . valores) { System.").0 do java. /* Este for faz a mesma coisa que o anterior.out.out.println("\n"). então seu valor é recebido por cópia. este novo tipo de for chamado foreach foi implementado a partir da versão 5.. */ public void metodo2(int. Se o parâmetro recebido no método for primitivo. */ if(valores.length > 0) { /* Para cada argumento recebido como parametro. } } } Na linha 14 o metodo1(int valor) recebe um parâmetro inteiro do tipo int chamado valor. } System.print(valor + " "). podemos declarar tantos parâmetros quantos forem precisos para execução do método.println("\n"). } System. cont < valores. informamos seu tipo e identificador.0 do java. /* Verifica se recebeu algum argumento. imprime seu valor. Quando fazemos uma chamada a um método com parâmetros de entrada. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . cont++) { int valor = valores[cont]. caso receba um objeto como parâmetro seu valor é recebido por referência.out.println("Chamando o método 2.print(valor + " ").

70.metodo2()..out. /* Chama o método sem passar parametro. valores). */ public class TesteMetodoParametro { /** * Método principal para testar a classe MetodoParametro. 100). } } Criamos um atributo do tipo MetodoParametro chamado teste.metodo1(100).")..metodo2(10). identificador O método metodo2(int. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .metodo2(10. */ teste.Programação Orientada a Objetos – Universidade Metodista de São Paulo Quando é necessário passar uma quantidade de parâmetros muito grande ou uma quantidade desconhecida de parâmetros. 40. passando valores variados para ele. Depois. */ teste. */ public static void main(String[] args) { System. 90. teste. 60. /* Chama o método passando um parametro.. MetodoParametro teste = new MetodoParametro(). A seguir criaremos um objeto da classe MetodoParametro e vamos utilizar o metodo1(int valor) e metodo2(int. 80. 30. e depois criamos um objeto da classe MetodoParametro. /* Chama o método passando dez parametros.println("Cria um objeto da classe MetodoParametro.. */ teste. valores) recebe uma quantidade variável de valores inteiros do tipo int.. 20. 50.. TesteMetodoParametro. A partir do objeto teste chamamos o metodo1 passando o valor 100 como parâmetro. A sintaxe do varargs é: tipo.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 /** * Classe utilizada para demonstrar o uso * da chamada de métodos de outra classe. chamamos o metodo2.74 - . isso pode ser feito através de um array ou podemos usar varargs (veremos mais adiante).

inclusive com correspondência entre letras maiúsculas e minúsculas e não deve ter retorno. 10 20 30 40 50 60 70 80 90 100 10 20 30 40 50 60 70 80 90 100 Métodos construtores Sempre quando criamos um novo objeto em Java. todas as classes possuem um construtor com seu nome seguindo de parênteses “()”. Quando usamos a palavra-chave new. Um método construtor. é responsável pela criação do objeto daquela classe.java 01 /** Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .75 - . temos a seguinte saída no console: C:\>javac MetodoParametro. 10 10 Chamando o metodo 2. Para que um método seja considerado construtor. utilizamos à sintaxe: O que ainda não foi comentado sobre este comando é a necessidade de se referenciar o método construtor daquela classe.java C:\>javac TesteMetodoParametro. Vamos criar um exemplo de construtor padrão que não recebe: ClasseConstrutor. qual construtor deve ser executado para instanciar um objeto. o compilador do Java fará isso por você. iniciando com valores seus atributos ou realizando outras funções que possam vir a ser necessárias. Caso você não declare manualmente o construtor.java C:\>java TesteMetodoParametro Cria um objeto da classe MetodoParametro. Por padrão. como o próprio nome já diz.Programação Orientada a Objetos – Universidade Metodista de São Paulo Quando executamos a classe TesteMetodoParametro. O valor do atributo eh: 100 Chamando o metodo 2. Chamando o metodo 2. estamos passando para ela como um parâmetro. Chamando o metodo 1. ele deve possuir o mesmo nome da classe.

System. } } Neste exemplo.out. * @param valor3 . */ public class ClasseConstrutor2 { public int atributo1. boolean valor3) { System."). public boolean atributo3. */ public ClasseConstrutor() { System.println("\t" + valor2).Valor inteiro que será guardado no atributo1.println("Recebeu os seguintes parametros:\n\t" + valor1). */ public ClasseConstrutor2(int valor1.out. * @param valor2 . */ public class ClasseConstrutor { /** * Construtor padrão.Valor float que será guardado no atributo2. a frase “Criando um objeto da classe ClasseConstrutor.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 /** * Classe utilizada para demonstrar o uso do construtor * que inicializa os atributos da classe. System.Programação Orientada a Objetos – Universidade Metodista de São Paulo 02 03 04 05 06 07 08 09 10 11 12 13 14 * Classe utilizada para demonstrar o uso do construtor. System.76 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .” será impressa no console. sempre que criarmos um objeto da classe ClasseConstrutor."). public float atributo2. float valor2.out. * * @param valor1 . * * Note que o construtor possui o mesmo nome da classe e não informa o * retorno.println("Criando um objeto da classe ClasseConstrutor.out.println("\t" + valor3).println("Criando um objeto da classe ClasseConstrutor2. No exemplo a seguir. criaremos um construtor que recebe parâmetros: ClasseConstrutor2. /** * Construtor que recebe os valores para inicializar os atributos.Valor boolean que será guardado no atributo3.out.

5F. o compilador não cria um construtor padrão ClasseConstrutor2(). */ ClasseConstrutor cc = new ClasseConstrutor(). } } Criamos um objeto da classe ClasseConstrutor chamado o construtor sem parâmetros ClasseConstrutor(). Em seguida. */ public class TesteConstrutor { /** * Método principal que cria dois objetos. passando os três parâmetros para ele. boolean valor3). float e boolean.77 - . Quando executamos a classe TesteConstrutor. No exemplo a seguir. atributo2 = valor2. } } Neste exemplo. vamos construir um objeto da classe ClasseConstrutor e um objeto da classe ClasseConstrutor2. */ public static void main(String[] args) { /* Chama o construtor padrão da classe ClasseConstrutor. */ ClasseConstrutor2 cc2 = new ClasseConstrutor2(10. 3. Se não passarmos todos os parâmetros ou a ordem deles estiver diferente do esperado não conseguiremos compilar a classe. TesteConstrutor. /* Chama o construtor da classe ClasseConstrutor2 passando os valores que serão guardados nos atributos. chamando o construtor ClasseConstrutor2(int valor1. false). criamos um objeto da classe ClasseConstrutor2.Programação Orientada a Objetos – Universidade Metodista de São Paulo 23 24 25 26 27 atributo1 = valor1. para construirmos um objeto da classe ClasseConstrutor2. Quando criamos um construtor que recebe parâmetros. float valor2. é necessário passar para o construtor três parâmetros: int. temos a seguinte saída no console: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . atributo3 = valor3.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 /** * Classe utilizada para demonstrar o uso do construtor.

Programação Orientada a Objetos – Universidade Metodista de São Paulo

C:\>javac ClasseConstrutor.java C:\>javac ClasseConstrutor2.java C:\>javac TesteConstrutor.java C:\>java TesteConstrutor Criando um objeto da classe ClasseConstrutor. Criando um objeto da classe ClasseConstrutor2. Recebeu os seguintes parametros: " 10 " 3.5 " false

Exercícios
1-) Crie a classe Vetor a seguir e siga as instruções nos comentários.
/** * Classe utilizada para representar um conjunto de números, em que podemos * localizar o valor do maior elemento, menor elemento e * media dos elementos do vetor. * * @author <<Nome>> */ public class Numeros { int[] valores; public Numeros(int[] _valores) { System.out.println("\nCriando um objeto da classe Vetor e inicializando o vetor de inteiros.\n"); valores = _valores; } public void localizarMaior() { /* Deve imprimir o valor do maior elemento do vetor. */ } public void localizarMenor() { /* Deve imprimir o valor do menor elemento do vetor. */ } public void calcularMedia() { /* Deve imprimir a media de todos os elementos do vetor. */ }

}

Agora crie a classe TesteVetor, para verificar a execução dos métodos:

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 78 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo
/** * Testa a classe Numeros. * * @author <<Nome>> */ public class TesteNumeros { public static void main(String[] args) { /* 1- Crie um vetor de inteiro com 10 valores. */ /* 2- Crie um objeto da classe Numeros, passando o vetor de inteiros para o construtor. */ nums.localizarMaior(); nums.localizarMenor(); nums.calcularMedia();

}

}

2-) Crie uma classe que representa uma conta bancaria que possua o número da conta e saldo. Está classe também deve executar os seguintes métodos: • extrato (Mostra na tela o número e o saldo da conta) • saque (Recebe como parâmetro um valor e retira este valor do saldo da conta) • deposito (recebe como parâmetro um valor e adiciona este valor ao saldo da conta) Ao final das operações saque e deposito, sua classe deve imprimir o número e o saldo da conta. Crie uma classe para testar os métodos da classe conta bancaria. 3-) Crie uma classe que representa uma calculadora, está calculadora deve ter os seguintes métodos: • soma (recebe dois números e mostra o valor da soma) • subtração (recebe dois números e mostra o valor da subtração entre eles) • divisão (recebe dois números e mostra o valor da divisão entre eles) • multiplicação (recebe dois números e mostra o valor da multiplicação entre eles) • resto (recebe dois números e mostra o valor do resto da divisão entre esses dois números) Crie uma classe para testar os métodos da classe calculadora. 4-) Crie uma classe Televisor. Essa classe deve possuir três atributos: canal (inicia em 1 e vai até 16) volume (inicia em 0 e vai até 10) ligado (inicia em desligado ou false) Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai - 79 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo e a seguinte lista de métodos: aumentarVolume() //Aumenta em 1 o volume reduzirVolume() //Diminui em 1 o volume subirCanal() //Aumenta em 1 o canal descerCanal() //Diminui em 1 o canal ligarTelevisor() //Liga a televisão desligarTelevisor() //Desliga a televisão mostraStatus() //Dizer qual o canal, o volume e se o televisor está ligado Nos métodos informe se é possível realizar a operação, por exemplo, se o volume estiver no 10 e chamar o método aumentarVolume() novamente imprima uma mensagem de aviso, etc. Quando desligado, nosso televisor deve voltar o canal e o volume a seus valores iniciais e não deve realizar nenhuma operação. Crie uma classe para testar a classe Televisao.

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 80 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo

5. A Classe java.lang.String

A classe java.lang.String é utilizada para representar textos (sequência de caracteres). O tamanho que uma String suporta é igual ao tamanho disponível de memória. Para criar uma String podemos utilizar qualquer uma das seguintes formas: String nome = new String("Rafael"); // ou String sobrenome = "Sakurai"; Para fazer a concatenação de Strings podemos usar o sinal + ou usar o método concat da classe String, por exemplo: String nomeCompleto = nome + " " + sobrenome; // ou String nomeCompleto2 = "Cristiano".concat(" Camilo"); O valor de uma String é imutável, não se pode alterar seu valor. Quando alteramos o valor de uma String, estamos criando uma nova String. Então, quando fazemos: String novoNome = "Cris" + "tiano”; Estamos criando 3 Strings: “Cris” “tiano” “Cristiano”

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 81 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo Alguns caracteres não podem ser simplesmente colocados dentro de uma String, como, por exemplo, as aspas duplas (“).Este símbolo é usado para indicar o início e o fim de uma String. Por este motivo, caso tenhamos: String aspas = """; // Erro de compilação Teremos um erro de compilação, pois estamos deixando uma aspas duplas “ fora do texto. Para os caracteres que não podem ser simplesmente adicionados dentro da String, usamos a barra invertida \ como escape de caracteres. Segue abaixo uma tabela com alguns escapes de caracteres e o que eles representam dentro da String. \t \n \” \’ \\ Tabulação horizontal Nova linha Aspas duplas Aspas simples Barra invertida

A classe java.lang.String tem alguns métodos para se trabalhar com os textos, por exemplo: compareTo – Compara se duas Strings são iguais. Ele retorna um número inteiro sendo 0 apenas caso ambas as String sejam idênticas. compareToIgnoreCase – Compara se duas Strings são iguais sem diferenciar letras maiúsculas e minúsculas. equals – Verifica se uma String é igual a outra. Retorna um tipo booleano. replace – Altera um caractere de uma String por outro caractere. replaceAll – Altera cada substring dentro da String com uma nova substring. split – Divide uma String em varias substrings a partir de uma dada expressão regular. Mais métodos da classe String podem ser encontrados em: http://java.sun.com/javase/6/ docs/api/java/lang/String.html. Cuidado ao utilizar os métodos da String, quando não houver uma instancia da classe String, no caso null. Invocar um método de uma referência nula gera uma exceção NullPointerException, um erro que ocorre em tempo de execução, por exemplo: String abc = null; abc.equals("xpto"); Este código lançará uma NullPointerException, pois a String abc está vazia (null), e está tentando invocar o método equals() de um String null (exceções serão abordadas).

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 82 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo

Conversão para String (texto)
Para transformar qualquer tipo primitivo para String, basta utilizar o método: String.valueOf( <<informações que se tornará texto>> ); Para utilizá-lo, você deve atribuir a saída do método a uma String, e preencher o campo interno do método com o valor desejado, por exemplo: Conversão de inteiro para String: int numero = 4; String texto = String.valueOf(numero); Observe que na segunda linha, a variável do tipo inteira está sendo utilizada no método valueOf() para que a conversão possa ser executada, e o resultado da conversão está sendo atribuída a String chamada texto. O método valueOf() pode converter os seguintes tipos para String: int para String String texto = String.valueOf(1); long para String String.valueOf(580l); float para String ! String.valueOf(586.5f); double para String ! String.valueOf(450.25); boolean para String ! String.valueOf(true); char para String String.valueOf(‘a’); Note que os tipos byte e short não constam nesta lista, logo, para realizar a sua conversão é necessário transformar estes tipos primeiramente em int e só então convertê-los para String.

Conversão de String para tipos Primitivos

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 83 -

String para float float d = Float. String para byte byte o = Byte.charAt(1). String para int int b = Integer. String para boolean boolean g = Boolean.parseBoolean(“true”).parseInt(texto). nesta seção falaremos sobre a conversão de tipos primitivos para String.parseByte(texto). é necessário utilizar um dos conversores específicos de cada tipo.84 - . para tal. podemos passar parâmetros para este método. String para double double e = Double. Recebendo Strings como parâmetro diretamente no método main Quando executamos uma classe que possui o método public static void main(String[] args).parseDouble(texto). Em Java é possível transformar qualquer String em um tipo primitivo. String para char char f = texto. //Pega o primeiro caractere da String. criamos um programa que recebe alguns nomes como parâmetro: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . String para short short a = Short. são eles: String texto = “15”.parseFloat(texto).parseShort(texto).parseLong(texto). Para passar os parâmetros para o método main via console. utilizamos a seguinte sintaxe: java nomeDaClasse parametro1 parametro2 No exemplo a seguir. String para long long c = Long.Programação Orientada a Objetos – Universidade Metodista de São Paulo Assim como tratamos da manipulação de tipos de valores primitivos para String.

out.out."). devemos utilizar as aspas duplas para delimitar a área do parâmetro. } } else { System. Quando executamos a aplicação passando os nomes como parâmetro.java C:\>java ParametrosMain Nenhum nome foi passado como parametro. C:\>javac ParametrosMain. } } } Se executarmos esta classe sem passar parâmetros.Programação Orientada a Objetos – Universidade Metodista de São Paulo ParametrosMain.85 - .println(nome).println("Nenhum nome foi passado como parametro. Note que quando precisamos passar um parâmetro que possua espaços em brancos. por exemplo Cristiano e “Rafael Sakurai”.java C:\>java ParametrosMain Cristiano "Rafael Sakurai" Cristiano Rafael Sakurai Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . será impresso a seguinte mensagem: C:\>javac ParametrosMain. */ public class ParametrosMain { public static void main(String[] args) { if(args.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 /** * Classe utilizada para mostrar a passagem de parâmetros * para o método main.length > 0) { for(String nome : args) { System. estes nomes são impressos no console.

qtd parâmetros: 2 .valores dos parâmetros separados por virgula: Rafael.25 E a saída do programa na console deve ser: "Ola meu nome é Rafael e eu tenho 25 anos.frase: "Ola meu nome é {0} e eu tenho {1} anos" .valores dos parâmetros separados por virgula Exemplo: .86 - .qtd parâmetros .frase ." Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Exercícios 1) Crie um programa em que o usuário deve digitar as seguintes informações: .

Identidade e Igualdade Ao criar um objeto a partir de uma classe. private int idade.87 - . } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . sempre que declaramos um novo objeto. No exemplo a seguir.Programação Orientada a Objetos – Universidade Metodista de São Paulo 6. pois o mesmo irá efetivamente criar o novo objeto em memória e fornecer o seu “endereço” a variável declarada. Exatamente por este motivo. criamos uma variável que serve de meio de acesso ao objeto criado em memória. } public String getNome() { return nome. } public void setIdade(int idade) { this. ou como chamamos. temos de utilizar o comando new. O comando new recebe um parâmetro que é um construtor de classe. vamos trabalhar com a classe Pessoa: Pessoa.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 /** * Classe utilizada para representar uma Pessoa. public int getIdade() { return idade. uma referência. */ public class Pessoa { private String nome.idade = idade.

setIdade(pedro. vamos ver como funciona a referência de um objeto: TestePessoa. } } Neste exemplo. */ public class TestePessoa { public static void main(String[] args) { Pessoa paulo = new Pessoa(). paulo. No exemplo a seguir. a saída do programa será a seguinte: A idade de Paulo é: 25 A idade de Pedro é: 25 Agora por que a idade de Paulo foi exibida como 25. System.out. O correto é dizer que manuel é uma referência a um objeto do tipo Pessoa e não que manuel é o objeto propriamente dito. Com isso. System.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 /** * Classe utilizada para mostrar identidade de objeto. Pessoa pedro = paulo.out. na referência a seguir: Pessoa manuel = new Pessoa().println("A idade de Paulo eh: " + paulo.getIdade() + 1). ela apenas será a representação de um tipo primitivo ou uma referência a um objeto.nome = nome. sendo que apenas incrementamos a idade de Pedro? Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .println("A idade de Pedro eh: " + pedro.setIdade(24).getIdade()).Programação Orientada a Objetos – Universidade Metodista de São Paulo 19 20 21 22 23 public void setNome(String nome) { this. podemos afirmar que em Java uma variável nunca é um objeto. pedro.getIdade()). } } Logo.88 - .

println("É a mesma pessoa!!!"). pois o comando: Pessoa pedro = paulo. Por este motivo. Quando queremos comparar se duas variáveis apontam para o mesmo objeto. if(paulo == pedro) { System. para a variável pedro. Pessoa pedro = paulo.setIdade(24). Seria como imaginarmos a figura a seguir: Nesta figura.89 - . como ambas as variáveis apontam para o mesmo objeto.Programação Orientada a Objetos – Universidade Metodista de São Paulo Isso acontece. ele copia a referência de um objeto de uma variável para outra. também refletirá na referência paulo. podemos notar que.out. por exemplo: TestePessoa2. */ public class TestePessoa2 { public static void main(String[] args) { Pessoa paulo = new Pessoa(). podemos usar a igualdade ( == ). } else { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . como falamos acima. qualquer operação realizada através da referência pedro.java 01 02 03 04 05 06 07 08 09 10 11 12 13 /** * Classe utilizada para mostrar igualdade de objeto. Na verdade copia o valor da variável paulo. paulo.

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . */ public class ExemploIgualdadeString { public static void main(String[] args) { String a = new String("a"). E quando queremos saber se o conteúdo de dois objetos são iguais.println("São pessoas diferentes!!!").out. */ public class ExemploIgualdadeString2 { public static void main(String[] args) { String a = new String("a").java 01 02 03 04 05 06 07 /** * Exemplo para mostrar igualdade de String.println("As duas Strings são diferentes. será impresso “As duas Strings são iguais”. todas as classes do Java possuem este método.90 - .out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 14 15 16 17 System. Agora se compararmos essas duas Strings com o operador de igualdade == teremos um resposta que não é esperada: ExemploIgualdadeString2.equals(b)) { System. pois o conteúdo das Strings são iguais.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 /** * Exemplo para mostrar igualdade de String. pois ambas variáveis paulo e pedro estão apontando para o mesmo objeto da memória.").").out. if(a. } } } Esta comparação vai retornar true. } } } Neste exemplo. utilizamos o método equals(). String b = "a". ExemploIgualdadeString. } else { System. String b = "a".println("As duas Strings são iguais.

Caso precisemos saber se duas instancias desta mesma classe são iguais. } } } Neste exemplo.out.91 - . O método equals(). está classe tem um método equals() que vem da classe java. de preferência ao método equals(). Quando criamos uma nova classe.").out.").Programação Orientada a Objetos – Universidade Metodista de São Paulo 08 09 10 11 12 13 14 15 if(a == b) { System. pois as variáveis não apontam para o mesmo objeto String.”. será impresso “As duas Strings são diferentes. então temos de sobrescrever o método equals(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . que existe na classe que criamos.println("As duas Strings são iguais. } else { System.Object.lang. use comparação == somente com tipos primitivos. Então cuidado na comparação entre objetos. tem a mesma função que a igualdade ( == ).println("As duas Strings são diferentes.

int y) { return x * y. } public String buscarDados(int matricula) { return "abcdef". No exemplo a seguir. A assinatura de um método é composta por: visibilidade – tipo de permissão ao método. parâmetros – atributos utilizados dentro do processamento do método.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 /** * Classe utilizada para demonstrar a utilização de diferentes assinaturas * de métodos. retorno – tipo de retorno do método ou void caso não tenha retorno.println("Ola!!!"). vamos agora então tratar de assinatura de método. exceções – informação de algum erro que pode ocorrer na execução do método. } public Pessoa consultarPessoa(String nome) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .92 - .out. Assinatura de Métodos Formalizando os conceitos de nome de método e de métodos com parâmetros.Programação Orientada a Objetos – Universidade Metodista de São Paulo 7. } public long calcular(int x. */ public class AssinaturaMetodo { public void imprimir() { System. temos alguns exemplos de métodos que podemos declarar: AssinaturaMetodo.

contendo os seguintes métodos: Televisao. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .93 - . porém com parâmetros diferentes são identificados como métodos distintos entre si. e em uma determinada chamada. TelevisaoTeste. */ public class Televisao { public void alterarCanal() {} public void alterarCanal(int numeroCanal) {} public void alterarCanal(int numeroCanal. mas com parâmetros diferentes. tv.alterarCanal(10). } public void enviarEmail(Email e) { } } Para o compilador os métodos de mesmo nome. int modeloAparelhoTv) {} } O compilador interpretaria estes três métodos de forma distinta. Exemplo: Criamos a classe Televisao.java 01 02 03 04 05 06 07 08 09 /** * Classe utilizada para demonstrar vários métodos * com o mesmo nome. saberia exatamente qual deles utilizar. */ public class TelevisaoTeste { public static void main(String[] args) { Televisao tv = new Televisao().java 01 02 03 04 05 06 07 08 09 10 /** * Classe utilizada para demonstrar a chamada de um método.Programação Orientada a Objetos – Universidade Metodista de São Paulo 19 20 21 22 23 24 return new Pessoa(). * em uma classe com diversos método com mesmo nome.

vamos imaginar uma mesa de bilhar. formando uma cadeia. } Visto que seus nomes e argumentos são idênticos. porém com parâmetros diferentes entre si. A fim de exemplificar melhor o que estamos falando. mas com retorno diferente.java 01 02 03 04 05 06 07 08 /** * Classe utilizada para demonstrar vários métodos com o mesmo nome e * mesmos parâmetros. mudando apenas o tipo de retorno. necessariamente não é preciso que um objeto esteja contido dentro de outro. damos o nome de Sobrecarga de Método. logo os seguintes métodos listados abaixo seriam considerados erros de compilação: Contas. Este tipo de relacionamento pode ser representado pela troca de informações.Programação Orientada a Objetos – Universidade Metodista de São Paulo Note que na chamada ao método alterarCanal(). A este tipo de operação damos o nome de Troca de Mensagens. sendo que a movimentação da bola ao longo da mesa deve ser realizada pela imposição do taco. Troca de Mensagens Na linguagem Java. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . é possível que objetos distintos se relacionem entre si por meio de seus métodos. logo o método da classe Televisao a ser executado seria: public void alterarCanal(int numeroCanal) { } O que identifica a assinatura do método é a união das informações de nome do método e parâmetros. para nós usuários. para que a bola possa se mover é necessário que o taco a atinja diretamente. Abstraindo esta idéia. int num2) { } //Erro de compilação. chamada de execução de métodos. esta sendo invocado com passagem de um parâmetro inteiro. */ public class Contas { public int fazerConta(int num1. Ao conceito de se criar vários métodos de mesmo nome. int num2) { } public float fazerConta(int num1. Para que seja possível aos objetos se conversarem.94 - . o que nos compete é apenas o movimento do taco. etc. Em um ambiente deste tipo. mas basta simplesmente que um referencie os métodos do outro.

*/ public class TacoTeste { public static void main(String[] args) { Taco tacoDeBilhar = new Taco(). Bola bola8 = new Bola().bater(bola8). tacoDeBilhar.95 - . uma chamada ao método bater(Bola bola) da classe Taco. este método indica apenas que estamos movendo o taco para acertar uma bola. indicando qual a bola alvo do taco. Já na classe Taco.java 01 02 03 04 05 06 07 08 09 10 11 12 /** * Classe utilizada para demonstrar a troca * de mensagens entre as classes. logo: TacoTeste.java 01 02 03 04 /** * Classe utilizada para representar um taco de bilhar. } } Imaginando a situação acima. teríamos algo deste gênero: Taco. o método bater(Bola bola) é encarregado de executar a ação de bater na bola. Feito isso. Logo.Programação Orientada a Objetos – Universidade Metodista de São Paulo Agora imagine que o Usuário será representado pela classe TacoTeste. */ class Taco { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . teríamos a classe TacoTeste instanciando objetos de cada um dos dois tipos.

* * @param forca . que diferentemente das classes que desenvolvemos até então. 25. float angulo) { //Código para calcular a tragetória da bola. assemelhando-se a uma conversa entre elas. * @param angulo . Varargs Quando temos um método que não sabemos ao certo quantos parâmetros serão passados. que ele recebe um parâmetro do tipo varargs. podemos passar um vetor ou lista de atributos primitivos ou objetos. sem qualquer interferência do usuário através da classe TacoTeste. mas em Java também podemos definir na assinatura do método. a chamada do método mover(int forca.Bola que será alvo do taco.Programação Orientada a Objetos – Universidade Metodista de São Paulo 05 06 07 08 09 10 11 12 13 14 /** * Método utilizado para representar a ação do taco * bater na bola de bilhar. } } Este relacionamento entre as classes sem a intervenção externa. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .mover(5. */ public void bater(Bola bola) { bola. } } Note então.Intensidade da batida.5F).java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 /** * Classe utilizada representar uma bola de bilhar. */ public void mover(int forca. damos o nome de troca de mensagens.96 - .Angulo que a bola foi acertada. */ class Bola { /** * Método que será utilizado para fazer o deslocamento * da bola de bilhar. * * @param bola . Bola. float angulo) da classe Bola está sendo referenciado de dentro da classe Taco.

int soma = somarValores(10. 20).Programação Orientada a Objetos – Universidade Metodista de São Paulo O método pode receber quantos parâmetros forem necessários. * @return Soma total dos parâmetros. //Você pode chamar o método sem passar parâmetro.. System.out. 15. valores) { int soma = 0.Parâmetros variados.println(soma). */ public class VarargsTeste { public static void main(String[] args) { //Você passa quantos parâmetros quiser. * * @param valores .. sua sintaxe é assim: << Tipo .java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 /** * Classe utilizada demostrar a chamada de um método * que recebe parâmetros variados. for(int valor : valores) { soma += valor. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . } /** * Método que soma valores inteiros não importando * a quantidade de parâmetros. porém só pode ter apenas um varargs na assinatura do método..out. System. */ public static int somarValores(int..println(soma2). 5. Identificador >> Exemplo: VarargsTeste. int soma2 = somarValores(). } return soma.97 - .

java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /** * Classe utilizada demostrar a chamada de um método * que recebe parâmetros variados. */ int soma = somarValores(2. */ public static int somarValores(int multiplicador. 20). } return soma * multiplicador. 15. 5. * @return Soma total dos parâmetros. System. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . 20) vão para o varargs valores.println(soma). * @param valores .out. o mesmo pode ser chamado diretamente passando os n valores e os parâmetros enviados são automaticamente adicionados em um array do mesmo tipo do varargs. valores) { int soma = 0. passando o * primeiro valor (2) para o atributo multiplicador. } /** * Método que soma valores inteiros não importando * a quantidade de parâmetros. int.Programação Orientada a Objetos – Universidade Metodista de São Paulo Neste exemplo. 10.. por exemplo: VarargsTeste2. ao invés de criar um array ou lista e colocar os valores dentro dele para depois chamar o método. for(int valor : valores) { soma += valor.98 - . */ public class VarargsTeste2 { public static void main(String[] args) { /* Aqui estamos chamando o método somarValores. Também podemos usar o vargars em um método que recebe outros parâmetros.Parâmetros variados. temos o seguinte método somarValores que recebe um varargs de inteiros. O varargs é um facilitador. 15. e se quiser também não precisa passar nenhum atributo para ele. mas quando tem mais parâmetros o varargs precisa ser o ultimo parâmetro recebido pelo método.. e os * valores (10. 5. quando chamamos este método podemos passar quantos atributos do tipo inteiro for necessário.

int valor = somarValores(2)... O método que tem na assinatura um parâmetro do tipo varargs só é chamado quando nenhuma outra assinatura de método corresponder com a invocação. o método somarValores recebe dois parâmetros.99 - .java 01 02 03 04 05 06 07 08 /** * Classe utilizada demostrar formas erradas do uso de varargs.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 /** * Classe utilizada demostrar a chamada de um método * que recebe parâmetros variados. System. int.println(valor2). então quando chamamos este método passamos o atributo multiplicador recebe o valor 2 e o atributo valores recebe os valores 10. } public static int somarValores(int valores) { return valores. 5.. valores) { } public void executarOperacao(double....out.Programação Orientada a Objetos – Universidade Metodista de São Paulo Neste exemplo. */ public class VarargsTeste3 { public int somarValores(float. 5). caso contrario ocorrerá erro de compilação.. valores) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . System. Lembrando que o varargs precisa ser o ultimo parâmetro do método e não pode ter mais que um varargs. por exemplo: VarargsTeste4. por exemplo: VarargsTeste3. um inteiro e um varargs do tipo inteiro. numeros. estes dois métodos ficam com erro de compilação.out. 15 e 20.. } public static int somarValores(int.println(valor). */ public class VarargsTeste4 { public static void main(String[] args) { //Vai chamar o método que recebe um parâmetro inteiro. String operacao) { } } Portanto. precos. int valor2 = somarValores(2. //Vai chamar o método que recebe um varargs.

double num2). public double operacao(double num1. } } Neste exemplo. double num2). • Retorna a soma dos dois números.. . é chamado o método somarValores(int numero). numeros). short num2). • Deve retornar um texto dizendo: “ Minha idade é “ + idade .. double altura). public double operacao(int num1. crie os seguintes métodos: • • • public String dizerInformacao(String nome). • Retorna o produto dos dois números. Na segunda chamada são passados vários parâmetros do tipo inteiro. public String dizerInformacao(double peso. Esta classe deve possuir os seguintes métodos: • • • • • public double operacao(double num1. • Retorna o resto da divisão dos dois números. • Deve retornar um texto dizendo: “ Meu peso é “ + peso + “ e minha altura é “ + altura . public double operacao(int num1. na primeira chamada do método somarValores passando apenas um atributo inteiro. • Deve retornar um texto dizendo: “ Meu nome é “ + nome . Para trabalharmos os conceitos de sobrecarga de métodos. public String dizerInformacao(int idade). 2-) Crie uma classe chamada Pessoa sem atributo algum.Programação Orientada a Objetos – Universidade Metodista de São Paulo 21 22 23 24 25 26 27 28 29 int soma = 0. int num2). } return soma. public double operacao(int num1. neste caso o método chamado será o somarValores(int. int num2). Exercícios 1-) Crie uma classe chamada Calculadora. Elabore um roteiro de teste para a sua calculadora e observe os resultados.100 - Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . • Retorna a subtração dos dois números. for(int valor : valores) { soma += valor. • Retorna o resultado da divisão dos dois números.

Programação Orientada a Objetos – Universidade Metodista de São Paulo Munido do retorno de cada um destes métodos. Imprima-o em tela.101 - . 4-) Crie uma classe Conta com os seguintes métodos e atributos: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . leia estas quatro informações que devem ser inseridas pelo usuário. Para praticarmos o uso da classe Scanner. 3-) Crie as classes e implemente os métodos para o seguinte diagrama de classe: Crie uma classe de teste e elabore um roteiro de teste da suas classes.

Programação Orientada a Objetos – Universidade Metodista de São Paulo No método depositar por questões de segurança.00 caso a conta seja do tipo “Corrente”. • Tente depositar R$ 1.00 da poupança. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .00 da corrente para a conta poupança.000. não deve permitir depósitos superiores a R $ 1. • Tente depositar R$ 1.00 reais na conta poupança.00 da corrente. Feito isso.102 - .500. • Saque R$ 1. • Transfira R$ 1. • Deposite R$ 98. trace o seguinte roteiro: • Crie duas contas. • Tente sacar R$ 100. • Transfira R$ 700. mas o contrario não é permitido. uma do tipo “Corrente“ e outra do tipo “Poupança” com um saldo inicial qualquer.00 da poupança. exiba mensagens indicando o retorno e ou o resultado (êxito ou falha) de cada um dos métodos.52 na conta poupança. pode realizar transferência da conta corrente para a conta poupança.800.000.000.00 da poupança para a conta corrente. Na classe de teste. O método sacar não deve permitir saques superiores ao saldo total da conta. • Saque R$ 1. também não deve permitir que o saldo da conta fique negativo.00 reais na conta corrente. O método transferir.500.

Plain Old Java Object – POJO Plain Old Java Object ou POJO. com a visibilidade privada. O termo foi inventado por Martin Fowler. são objetos Java que seguem um desenho extremamente simplificado.". "Nós queríamos saber por que as pessoas eram contra o uso de objetos regulares em seus sistemas e concluímos que era devido à falta de um nome extravagante para eles. sendo elas: • • • Possui um construtor default (padrão . O termo segue o padrão de atribuir um nome para tecnologias que não possuem nenhuma característica nova. e funcionou muito bem.java Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . exceto aqueles que seguem o padrão de getter e setter para seus respectivos atributos OBS: O padrão getter é a forma de pegar o valor do atributo e o padrão setter é a forma de alterar o valor do atributo. Um POJO é um JavaBean que segue definições rígidas de estrutura. melhor. Não possui métodos específicos.sem argumentos) ou não declarar construtor (assim o compilador Java criara um construtor default automaticamente). Possui todos os seus atributos.103 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo 8. Rebecca Parsons e Josh MacKenzie em Setembro de 2000. Segue abaixo alguns exemplos do que pode ser considerado um POJO: Carro. É mais atrativo do que o termo bean do Java devido à confusão gerada pela semelhança dos termos JavaBeans e dos EJB (Enterprise JavaBeans). Este padrão é baseado na idéia de que quanto mais simples o projeto. Assim nós demos-lhes um. O termo ganhou aceitação por causa da necessidade de um termo comum e facilmente inteligível que contrasta com os complicados frameworks de objetos. sejam eles tipos primitivos ou objetos.

} public void setNome(String nome) { this.nome = nome. } public void setCarrosParaManutencao(Carro[] carrosParaManutencao) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .104 - .java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /** * Esta classe mesmo fazendo referência a classe anterior. } public void setCor(String cor) { this. */ public class Carro { private String nome. private String cor. * continua sendo um POJO.Programação Orientada a Objetos – Universidade Metodista de São Paulo 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /** * Este é um exemplo típico de um POJO. Perceba que está classe possui * apenas 2 atributos e um método GET e outro SET para cada um deles. public String getCor() { return cor. } public String getNome() { return nome. } } Oficina. private String nome. */ public class Oficina { private Carro[] carrosParaManutencao. public Carro[] getCarrosParaManutencao() { return carrosParaManutencao.cor = cor.

nome = nome. } public String getNome() { return nome.105 - . } public void setNome(String nome) { this.carrosParaManutencao = carrosParaManutencao.Programação Orientada a Objetos – Universidade Metodista de São Paulo 15 16 17 18 19 20 21 22 23 24 25 this. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

A organização de pacotes ocorre de forma semelhante a uma biblioteca de dados. Pacotes Na linguagem Java existe uma maneira simples e direta de se organizar arquivos. além de possibilitar que se utilize mais de uma classe de mesmo nome no mesmo projeto.106 - . Neste exemplo. Essa forma de organização recebe o nome de empacotamento. Vários arquivos são agrupados em pastas comuns. No Java utilizamos a palavra package para representar o pacote da classe. temos os seguintes pacotes: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . logo se tem por hábito agrupar arquivos de funções semelhantes em mesmas pastas.Programação Orientada a Objetos – Universidade Metodista de São Paulo 9.

e o nome do pacote escrito em minúsculo.telas. O pacote não pode ter o nome de uma palavra-chave do java e não pode começar com número ou caracteres especiais (exceto $ e _). por exemplo. Uma boa pratica para nomes de pacotes é utilizar apenas uma palavra como nome do pacote.107 - .metodista. o próximo passo é declarar no arquivo da classe o nome do pacote ao qual ela pertence.biblioteca.telas e dentro deste pacote vamos colocar a classe CadastroLivro: Criada então essa hierarquia. apenas recomenda-se notação semelhante a da Internet. email. biblioteca. Esta declaração deve ser feita obrigatoriamente na primeira linha do arquivo (sem contar comentários) da seguinte maneira: CadastroLivro. a fim de reduzir ao máximo a possibilidade de termos mais de um pacote de arquivos de mesmo nome.Programação Orientada a Objetos – Universidade Metodista de São Paulo br biblioteca imagens model tela util A árvore hierárquica do pacote não possui regras restritas de limitação de quantidade de nós. /** * Tela utilizada para cadastrar livros da biblioteca.java 01 02 03 04 05 06 07 package br. */ public class CadastroLivro { } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . No exemplo a seguir vamos criar a estrutura de pacotes br. pessoa.

import br.Programação Orientada a Objetos – Universidade Metodista de São Paulo Note na declaração acima que as pastas foram divididas por pontos.telas. (Importado por padrão) Utilitários da linguagem Pacote de entrada e saída Pacote de interface gráfica Pacote de rede Pacote de banco de dados Quando se está desenvolvendo uma classe e deseja-se utilizar uma classe de outro pacote.util. Vale lembrar que. os arquivos ficam realmente organizados e. O pacote de desenvolvimento Java já traz consigo muitos pacotes de funções especificas. Desta forma.biblioteca.biblioteca.108 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Logo a mesma hierarquia de pastas deve ser seguida nesta declaração. Para tal. De forma semelhante ao comando package. somos obrigados a declarar esta utilização.XmlConvert.model”.biblioteca.biblioteca. demonstramos que a classe CadastroLivro irá utilizar a classe “Livro” do pacote “br. sendo alguns eles: PACOTE java.awt java.util java. quando criamos uma classe na raiz de nosso projeto esta classe não possui pacote. utilizamos o comando import. import br. isolados de outros pacotes.modelo. */ public class CadastroLivro { } No exemplo acima. de certa forma.java 01 02 03 04 05 06 07 08 09 10 11 package br.io java.util.MostrarTela.sql DESCRIÇÃO Pacote usual da linguagem. da seguinte forma: CadastroLivro.Livro. /** * Tela utilizada para cadastrar livros da biblioteca.lang java. o comando import deve considerar a hierarquia de pastas e separá-las por pontos. import br.net java.biblioteca.

interface. public class Funcionario extends Pessoa { public Funcionario(String nome) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . OBS: Durante o processo de compilação do arquivo . podemos importar o pacote inteiro utilizando o caractere asterisco ( * ) no lugar do nome das classes.class. protected void setNome(String nome) { this.java 01 02 03 04 05 06 07 08 09 10 package br. } public String getNome() { return this. */ public class CadastroLivro { Livro novoLivro = new Livro(). } Neste exemplo é criado um novo objeto a partir da classe Livro.biblioteca.nome. assim as classes são compiladas um pouco mais rápido.java para . CadastroLivro. como utilizamos o * no import.telas.model. que está dentro do pacote br. podemos utilizar qualquer classe do pacote model.nome = nome. public classe Pessoa { private String nome.109 - .tela. /** * Tela utilizada para cadastrar livros da biblioteca.modelo. o compilador primeiro importa as classes que estão com o pacote completo e depois procura pelas classes que tiveram o pacote inteiro importado. import br. Exercícios 1-) O que acontece se tentarmos compilar e executar o seguinte código: package pessoa.tela.interface. } } package pessoa.*.biblioteca.biblioteca.Programação Orientada a Objetos – Universidade Metodista de São Paulo Quando queremos utilizar muitas classes de um mesmo pacote. então normalmente é utilizado o nome inteiro do pacote e da classe.

110 - .getNome().out.getNome()). } package pessoa. } } a) Imprime Cristiano b) Imprime Funcionario Cristiano c) Erro porque a classe Funcionario não pode usar o método super. } public String getNome() { return "Funcionario: "+ super.Programação Orientada a Objetos – Universidade Metodista de São Paulo } setNome(nome).println(f. public class TesteFuncionario { public static void main(String[] args) { Funcionario f = new Funcionario("Cristiano").tela. System.getNome().interface. d) Erro de compilação e) Erro em tempo de execução Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

String destinatario. método ou até mesmo uma classe. Basicamente Java possui quatro modificadores básicos de acesso.111 - . String assunto. sejam elas do mesmo pacote. public void enviarEmail(String remetente.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 package br.remetente = remetente.destinatario = destinatario. utilizamos alguns modificadores que nos permitem “proteger” o acesso a um atributo. /** * Classe utilizada para representar um email que será enviado. */ public class Email { private String remetente. Visibilidade Em Java. de outros pacotes ou até subclasses. Exemplo: Email. private String destinatario.visibilidade. Este modificador pode ser aplicado a atributos e métodos. String mensagem) { this. private String assunto. private String mensagem. this. sendo eles: Modificador de acesso: private private é um modificador de acesso que restringe totalmente o acesso aquele recurso da classe de todas as demais classes. de outras classes.Programação Orientada a Objetos – Universidade Metodista de São Paulo 10. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

//ERRO de Compilação.assunto = assunto.").java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 package br.br". "cristiano@almeida. //ERRO de Compilação.com.enviar().Visibilidade". } } Neste exemplo.). */ public class TesteEmail { public static void main(String[] args) { Email email = new Email(). // Código para validar se as informações do email estão corretas. email. os outros métodos e atributos da classe não podem ser usados por outras classes pois tem o modificador private. /** * Classe utilizada para testar o envio de email.remetente = "teste@almeida..visibilidade. "Material da aula de visibilidade já está disponivel. email. temos a classe Email.Programação Orientada a Objetos – Universidade Metodista de São Paulo 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 this. "Aula de POO . this.validarEmail()) { this.com.enviar().br". email. TesteEmail..mensagem = mensagem.com. return ok. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .enviarEmail("rafael@sakurai.br". a partir de outras classes podemos chamar apenas o método enviarEmail(.112 - . } private void enviar() { // Envia o email. if(this. } } private boolean validarEmail() { boolean ok = false.

^ 2 errors Modificador de acesso: default (ou package) default é um modificador um pouco menos restritivo que o private. Este tipo de modificador é aplicado a todas as classes.. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .. Neste exemplo.). atributos ou métodos.visibilidade. br. Este modificador permite que apenas classes do mesmo pacote tenham acesso as propriedades que possuem este modificador. } Se criarmos outra classe dentro do mesmo pacote da classe Pessoa.113 - .Email email.br". */ class Pessoa { String nome.Email email. então está classe tem acesso à classe Pessoa também. temos uma classe Pessoa que não declarou o modificador. não tiveram o seu modificador explicitamente declarado.java br\visibilidade\TesteEmail.visibilidade. mas não conseguimos acessar o atributo remetente e o método enviar().remetente = "teste@almeida. TestePessoaPacote. os quais.enviar().java 01 02 03 04 05 06 07 08 package br.visibilidade. /** * Classe utilizada para representar uma Pessoa.visibilidade. portanto o modificador é o default.java:14: remetente has private access in br. pois são privados e o compilador gera dois erros de compilação: C:\>javac br/visibilidade/TesteEmail.Programação Orientada a Objetos – Universidade Metodista de São Paulo Neste exemplo conseguimos criar um objeto a partir da classe Email e enviar o email utilizando o método enviarEmail(.java:15: enviar() has private access in br. //ERRO de Compilação.com.visibilidade. // ERRO de Compilação.java 01 package br. Pessoa. ˆ br\visibilidade\TesteEmail.

visibilidade. //OK } } Agora se tentarmos utilizar a classe Pessoa. */ public class TestePessoaPacote { public static void main(String[] args) { Pessoa pessoa = new Pessoa(). //Não encontra a classe Pessoa. ˆ br\visibilidade\outropacote\TestePessoaPacote2.TestePessoaPacote2 Pessoa pessoa = new Pessoa().Programação Orientada a Objetos – Universidade Metodista de São Paulo 02 03 04 05 06 07 08 09 10 11 /** * Classe utilizada para testar a classe Pessoa. terá erro de compilação. pessoa. TestePessoaPacote2.visibilidade. ˆ find find Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . pessoa.java br\visibilidade\outropacote\TestePessoaPacote2. */ public class TestePessoaPacote2 { public static void main(String[] args) { Pessoa pessoa = new Pessoa().java:08: cannot symbol symbol: class Pessoa location: class br. temos a seguinte mensagem do compilador: C:\>javac br/visibilidade/outropacote/TestePessoaPacote2.114 - .outropacote.TestePessoaPacote2 Pessoa pessoa = new Pessoa(). } } Quando tentamos compilar essa classe. a partir de outro pacote.nome = "Cristiano Camilo dos Santos de Almeida". /** * Classe utilizada para testar a classe Pessoa.outropacote.java 01 02 03 04 05 06 07 08 09 10 11 package br.java:08: cannot symbol symbol: class Pessoa location: class br.outropacote.visibilidade.nome = "Rafael Guimarães Sakurai". pois não tem acesso.

nomeProduto = nomeProduto. TesteProdutoPacote.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 package br. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Modificador de acesso: protected protected é um modificador um pouco menos restritivo que o default. e está classe tem o atributo nomeProduto e os métodos getNomeProduto() e setNomeProduto() que possuem o modificador protected.nomeProduto = "Lapis". } } Se criarmos outra classe no pacote br.java 01 02 03 04 05 06 07 08 09 10 package br. /** * Classe utilizada para representar um Produto. */ public class Produto { protected String nomeProduto.visibilidade. temos a classe Produto. Com este tipo modificador.visibilidade. protected void setNomeProduto(String nomeProduto) { this.115 - . /** * Classe utilizada para testar a visibilidade protected * do atributo e métodos da classe Produto. */ public class TesteProdutoPacote { public static void main(String[] args) { Produto prodLapis = new Produto(). podemos utilizar os atributos e métodos protected declarados na classe Produto.visibilidade. } protected String getNomeProduto() { return nomeProduto. podemos declarar que um atributo ou método é visível apenas para as classes do mesmo pacote ou para as subclasses daquela classe. prodLapis. Neste exemplo. Produto.

116 - .java 01 02 03 04 05 06 07 08 09 package br. /** * Classe utilizada para testar a visibilidade protected * do atributo e métodos da classe Produto a partir de outro * pacote. prodCaneta.outropacote.visibilidade. então está classe recebe através da herança os atributos e métodos protected.visibilidade. } } Se a classe que está em outro pacote for uma subclasse da classe Produto. System.out.println(prodCaneta.getNomeProduto()).setNomeProduto("Caneta").) SubProdutoOutroPacote. Produto prodCaneta = new Produto(). prodCaneta.Produto.out.getNomeProduto()).setNomeProduto("Caneta"). não conseguiremos utilizar os atributos e métodos da classe Produto.visibilidade.Programação Orientada a Objetos – Universidade Metodista de São Paulo 11 12 13 14 15 16 17 System.outropacote.getNomeProduto()).out.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 package br. TesteProdutoOutroPacote. } } Se criarmos uma classe em um pacote diferente. */ public class TesteProdutoOutroPacote { public static void main(String[] args) { Produto prodCaneta = new Produto().println(prodCaneta. System. import br. /** * Classe utilizada para representar um Produto.Produto. */ public class SubProdutoOutroPacote extends Produto { public String getProduto() { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .visibilidade. import br. (Veremos o conceito de herança mais adiante.println(prodLapis. pois não temos acesso ao método.

Declarando classes. temos vários outros modificadores que serão abordados futuramente. } } Modificador de acesso: public public é o modificador menos restritivo de todos os demais.java. OBS: Dentro de um arquivo . atributos ou métodos com este modificador. Modificador private protected default public abstract final static native transient synchonized Em uma classe Não aplicável Não aplicável Somente pacote Acesso total Não instância Sem herança Não aplicável Não aplicável Não aplicável Não aplicável Em um método Acesso pela classe Acesso pelo pacote e subclasses Acesso pelo pacote Acesso total Deve ser sobrescrito Acesso pela classe Indica código nativo Não aplicável Em um atributo Acesso pela classe Acesso pelo pacote e subclasses Acesso pelo pacote Acesso total Não aplicável Acesso pela classe Não aplicável Não serializavel Não pode ser sobrescrito CONSTANTE Sem acesso simultâneo Não aplicável Exercícios 1-) Qual das alternativas abaixo esta correta: package p1. public class Pessoa { private String texto = "". Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . A seguir.java.Programação Orientada a Objetos – Universidade Metodista de São Paulo 10 11 12 return "Produto: " + getNomeProduto(). automaticamente dizemos que aquela propriedade é acessível a partir de qualquer outra classe. temos uma relação de todos os modificadores e os seus respectivos impactos quando aplicados a Classes. e está classe precisa obrigatoriamente ter o mesmo nome que o nome do arquivo . Além dos modificadores de acesso. Métodos e Atributos.117 - . só pode existir uma classe do tipo public.

118 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo protected void dizer(String texto) { System.println(texto).dizer("Ola"). p.out. } } package p2. b) Não imprime nada c) Não compila d) Erro em tempo de execução Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . public class TestePessoa { public static void main (String[] args) { Pessoa p = new Pessoa(). } } a) Imprime "Ola".

} public void setTitulo(String titulo) { this. permitindo somente sua manipulação de forma indireta. */ public class Livro { private String titulo.encapsulamento. private String autor.titulo = titulo.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package br. } public String getTitulo() { return titulo. public String getAutor() { return autor. } public void setAutor(String autor) { this.119 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo 11. nada mais é do que proteger membros de outra classe de acesso externo. /** * Classe utilizada para representar o Livro.autor = autor. Isso é possível da seguinte maneira: Consideremos o seguinte exemplo de uma classe Livro: Livro. Encapsulamento Encapsular. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

por exemplo: Professor. private String nome. que permite apenas o acesso destas informações a partir da própria classe. } public int getRegistro() { return registro. } } Aluno.encapsulamento. } public void setRegistro(int registro) { this. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .java 01 02 package br.Programação Orientada a Objetos – Universidade Metodista de São Paulo 25 } Note que os dois atributos da classe (titulo e autor) são do tipo private. /** * Classe utilizada para representar um Professor */ public class Professor { private int registro. logo para que seja possível ler ou alterar essas informações criamos métodos ditos métodos assessores ou então getters e setters. } public void setNome(String nome) { this.nome = nome.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package br. Encapsule aquilo que pode ser alterado com frequência na sua aplicação. A princípio parece ser algo sem muita utilidade.registro = registro. mas desta forma podemos criar atributos os quais podemos apenas ler informações ou ainda gerar tratamentos específicos sempre que outra classe solicita a alteração de um atributo de nossa classe. public String getNome() { return nome.encapsulamento.120 - .

} public void setMatricula(int matricula) { this. } public void setNome(String nome) { this.Programação Orientada a Objetos – Universidade Metodista de São Paulo 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /** * Classe utilizada para representar um Aluno. também criamos métodos set (métodos utilizados para alterar o valor de uma propriedade) e get (método utilizado para obter o valor de uma propriedade) para cada atributo. } } Note que os atributos das classes Professor e Aluno são private. dessa forma eles só podem ser acessados pelas suas classes.nome = nome. /** * Classe utilizada para consultar os alunos e professores * através de seu nome. private String nome. */ public class Consultar { public Aluno[] consultarAlunoPorNome(Aluno[] alunos.matricula = matricula. */ public class Aluno { private int matricula. public String getNome() { return nome.length].encapsulamento.java 01 02 03 04 05 06 07 08 09 10 11 package br. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .121 - . String nome) { Aluno[] alunosEncontrados = new Aluno[alunos. } public int getMatricula() { return matricula. int contAlunos = 0. Dado a classe Professor e Aluno. queremos consultar os alunos e professores pelo nome: Consultar.

String nome) { Professor[] profEncontrados = new Professor[professores. i < professores. i++) { if(alunos[i]. } } Professor[] retorno = new Professor[contProfessores]. } return retorno.getNome().length. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . int contProfessores = 0. i++) { retorno[i] = profEncontrados[i]. i++) { retorno[i] = alunosEncontrados[i]. e precisamos adicionar outra busca que procura coordenadores pelo seu nome.java 01 02 03 04 package br. /** * Classe utilizada para representar um Coordenador.Programação Orientada a Objetos – Universidade Metodista de São Paulo 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 for(int i = 0.length.equals(nome)) { profEncontrados[contProfessores++] = professores[i]. } } Agora digamos que nosso programa que busca os alunos e professores esta funcionando corretamente.122 - . for(int i = 0. } } Aluno[] retorno = new Aluno[contAlunos].length].getNome(). for(int i = 0. i < contProfessores. for(int i = 0. Coordenador.encapsulamento. } return retorno. i++) { if(professores[i]. i < contAlunos. i < alunos. } public Professor[] consultarProfessorPorNome(Professor[] professores.equals(nome)) { alunosEncontrados[contAlunos++] = alunos[i].

} public String getCursoCoordenado() { return cursoCoordenado. } } Para consultar o coordenador pelo nome. } public void setNome(String nome) { this. private String nome. Se criarmos uma classe Pessoa para ser uma classe Pai dessas classes e se a classe Pai tiver o atributo nome. /** * Classe utilizada para representar um Pessoa. public String getNome() { return nome. então todas as subclasses recebem este atributo por herança: Pessoa. } public void setCursoCoordenado(String cursoCoordenado) { this. Professor e Coordenador tem o atributo nome em comum e é exatamente por este atributo que os consultamos.Programação Orientada a Objetos – Universidade Metodista de São Paulo 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 */ public class Coordenador { private String cursoCoordenado. public String getNome() { return nome.cursoCoordenado = cursoCoordenado.java 01 02 03 04 05 06 07 08 09 10 11 12 package br. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .encapsulamento. precisamos usar um método bem parecido com o que consulta o aluno e professor. mas se notarmos as classes Aluno.123 - .nome = nome. */ public class Pessoa { private String nome.

Programação Orientada a Objetos – Universidade Metodista de São Paulo
13 14 15 16 public void setNome(String nome) { this.nome = nome; } }

As subclasses Professor, Aluno e Coordenador ficaram da seguinte forma:
Professor.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 package br.encapsulamento; /** * Classe utilizada para representar um Professor. */ public class Professor extends Pessoa { private int registro; public int getRegistro() { return registro; } public void setRegistro(int registro) { this.registro = registro; } } Aluno.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 package br.encapsulamento; /** * Classe utilizada para representar um Aluno. */ public class Aluno extends Pessoa { private int matricula; public int getMatricula() { return matricula; } public void setMatricula(int matricula) { this.matricula = matricula; } }

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 124 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo

Coordenador.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 package br.encapsulamento; /** * Classe utilizada para representar o Coordenador. */ public class Coordenador extends Pessoa { private String cursoCoordenado; public String getCursoCoordenado() { return cursoCoordenado; } public void setCursoCoordenado(String cursoCoordenado) { this.cursoCoordenado = cursoCoordenado; } }

Para consultar o Aluno, Professor e Coordenador vamos criar apenas um método que recebe um vetor de Pessoa e o nome que será procurado e retorna um vetor com as Pessoas encontradas:
ConsultarPessoa.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 package br.encapsulamento; /** * Classe utilizada para consultar de uma forma genérica qualquer * subclasse de Pessoa através de seu nome. */ public class ConsultarPessoa { public Pessoa[] consultarAlunoPorNome(Pessoa[] pessoas, String nome) { Pessoa[] pessoasEncontradas = new Pessoa[pessoas.length]; int contPessoas = 0; for(int i = 0; i < pessoas.length; i++) { if(pessoas[i].getNome().equals(nome)) { pessoasEncontradas[contPessoas++] = pessoas[i]; } } Pessoa[] retorno = new Pessoa[contPessoas]; for(int i = 0; i < contPessoas; i++) {

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 125 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo
20 21 22 23 24 25 retorno[i] = pessoasEncontradas[i]; } return retorno; } }

Dessa forma usamos herança e encapsulamos a forma de encontrar um Aluno, Pessoa e Coordenador, agora se tivermos que adicionar um Diretor, por exemplo, nosso método de consulta não precisa ser alterado, precisamos apenas criar a classe Diretor e fazer ela filha da classe Pessoa.

Exercícios
1-) Crie uma classe chamada Comparador. Esta classe não deve possuir nenhum atributo e nenhum método construtor. Esta classe deve possuir métodos capazes de receber dois parâmetros, compará-los e por fim retornar true, caso sejam iguais, e false caso sejam diferentes. • • • public boolean comparaInt(int num1, int num2); public boolean comparaDouble(double num1, double num2); public boolean comparaString(String texto1, String texto2);

Lembre-se que em Java, as Strings são tratadas como objetos! Elabore um roteiro que teste os três métodos de sua nova classe. 2-) Crie uma classe chamada Pessoa com os seguintes atributos: String nome; int idade; E com um método construtor que inicialize estes dois atributos. public Pessoa(String novoNome, int novaIdade); Feito isso, crie uma classe de teste e instancie cinco pessoas com os seguintes atributos: 1º- João, 24 anos ( ex: Pessoa pessoa1 = new Pessoa(“João”, 24); ) 2º- Carlos, 24 anos 3º- João, 32 anos 4º- João, 32 anos 5º = 3º (ao invés de utilizar o construtor, inicialize-a com a 3º Pessoa ex: Pessoa pessoa1 = pessoa3; ) Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai - 126 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo Agora, compare-os da seguinte maneira e imprima os resultados... if(1º==2º) if(3º==4º) if(1º.idade == 2º.idade) if(1º.nome.equals(4º.nome)) if(5º==3º) 3-) Crie uma classe que serve como utilitário para String, está classe tem um método que recebe uma String texto e um varargs de String parâmetros, você deve ler através da console, qual o texto, quantos parâmetros tem no texto e quais são os parâmetros, por exemplo: texto = “Oi, meu nome é {0} e tenho {1} anos.” quantidade de parâmetros 2 parâmetros: “Rafael” e “24” Depois de ler esses dados seu programa deve imprimir: “Oi, meu nome é Rafael e tenho 24 anos.” OBS: O texto pode ter {n} parâmetros, este é apenas um exemplo. 4-) Crie uma classe com visibilidade default chamada ContaBancaria, pertencente ao pacote “metodista.poo.aula10.banco” com os seguintes atributos:

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 127 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo E a classe filha public final ContaCorrente , pertencente também ao pacote “metodista.poo.aula10.banco”, com o seguinte atributo:

Para testarmos nossa classe, crie uma classe de teste que deve pertencer ao pacote “metodista.poo.aula10”, depois instancie um objeto do tipo ContaCorrente. Teste todas as formas de acesso possíveis aos membros da classe ContaBancaria e ContaCorrente. Note que a partir da classe de teste você não deverá conseguir instanciar um objeto do tipo ContaBancaria e que a classe ContaCorrente não deverá suportar nenhuma subclasse.

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 128 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo

12. Interfaces

Interface é um recurso da linguagem Java que apresenta inúmeras vantagens no sentido da modelagem e instanciação de objetos, porém deve-se entender claramente os conceitos básicos da orientação a objetos a fim de utilizá-la plenamente. Uma interface é similar a um contrato, através dela podemos especificar quais métodos as classes que implementam esta interface são obrigados a implementar. Exemplo de interface UML:

ou Estes são dois modos de se representar uma interface utilizando a UML, criamos uma interface chamada Banco, em Java está interface fica do seguinte modo:
Banco.java 01 02 03 04 05 06 package material.exemploInterface; /** * Interface utilizada para representar os métodos minimos que * os bancos precisam implementar. */

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 129 -

tendo apenas sua assinatura e terminando com ponto e vírgula ( .estender classe .implementar método . está classe obrigatoriamente precisa implementar todos os métodos declarados na interface.não pode ser final Quando uma classe implementa uma interface. utilizamos a palavra interface antes do seu nome. ) e todos os métodos precisam ser públicos.Programação Orientada a Objetos – Universidade Metodista de São Paulo 07 08 09 10 11 12 public interface Banco { public abstract void manutencaoConta(Conta conta).130 - .construtor . porém todos os atributos de uma interface são constantes publicas. public abstract void extrato(Conta conta). double valor). } Para criarmos uma interface em Java.implementar outra interface . Dentro da interface não podemos: . Na UML a implementação de uma interface é feita da seguinte forma: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Podemos declarar atributos. Na interface declaramos os métodos de forma abstrata. Uma interface pode estender (sub-interface) outras interfaces. apenas quando usamos classes abstratas implementando interface que não precisamos obrigatoriamente implementar todos os métodos (classes abstratas serão vistas mais para frente). double valor). public abstract boolean deposito(Conta conta. public abstract boolean saque(Conta conta.

*/ public class Conta { /** * Nome do proprietario da Conta. Nas classes podem ser feitas implementações diferentes dos métodos.Programação Orientada a Objetos – Universidade Metodista de São Paulo Neste exemplo.numero = numero.exemploInterface. } public void setNomeProprietario(String nomeProprietario) { this. /** * Classe utilizada para representar uma Conta bancaria. mas as assinaturas dos métodos precisam ser iguais as da interface. } public int getNumero() { return numero. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . public String getNomeProprietario() { return nomeProprietario. */ private int numero. /** * Saldo da Conta. */ private double saldo.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 package material. } public void setNumero(int numero) { this.131 - . Neste exemplo também estamos usando uma classe conta: Conta. podemos também adicionar mais métodos que os obrigatórios.nomeProprietario = nomeProprietario. temos duas classes BancoSakurai e BancoCristiano implementando a interface Banco. /** * Número da Conta. */ private String nomeProprietario.

Programação Orientada a Objetos – Universidade Metodista de São Paulo 36 37 38 39 40 41 42 43 44 45 } public double getSaldo() { return saldo. this. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .contaBancoSakurai.contaBancoSakurai.exemploInterface. } public void setSaldo(double saldo) { this.25.getSaldo() >= 0. package material.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 //Verifica se tem saldo para realizar a manutenção da conta. /** * Classe utilizada para representar o Banco Sakurai */ public class BancoSakurai implements Banco { /** * Conta que representa o Banco Sakurai.setNomeProprietario("Banco Sakurai"). * * Cria uma conta para o banco sakurai. public void manutencaoConta(Conta conta) { boolean temSaldo = conta.132 - . */ private Conta contaBancoSakurai.setNumero(0). this.contaBancoSakurai. } } O código Java dessas duas classes ficam da seguinte forma: BancoSakurai.saldo = saldo. this.contaBancoSakurai = new Conta(). */ public BancoSakurai() { this. } /** * Construtor padrão da classe.setSaldo(0d).

if(temSaldo) { double novoSaldo = conta.getNumero() + " !!!").setSaldo(novoSaldo). deposito(this. double novoValor = conta. public boolean saque(Conta conta. mostra o extrato da conta. } } //Deposita o dinheiro da manutencao na conta do banco sakurai. 0. double valor) { //Realiza o deposito na conta.25).0. conta. System.println("Deposito efetuado!!!"). double novoValor = conta.getSaldo() . return false. manutencaoConta(conta).25. } else { System.out.println("Não conseguiu cobrar a manutenção da conta" + conta.out.getSaldo() >= valor) { //Realiza o saque na conta. } } //Toda vez que fizer um saque faz cobra a manutenção da conta.out.setSaldo(novoValor). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . double valor) { //Verifica se tem saldo suficiente para fazer o saque if(conta. return true.setSaldo( novoValor ). } else { System.Programação Orientada a Objetos – Universidade Metodista de São Paulo 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 public void extrato(Conta conta) { } public boolean deposito(Conta conta.contaBancoSakurai. //Se não conseguir fazer o saque.getSaldo() + valor. extrato(conta).println("Saque efetuado!!!").println("Não conseguiu fazer o saque!!!").133 - .getSaldo() . conta. conta.out. System. return true.valor.

out.getSaldo()). System. System.setNomeProprietario("Banco Cristiano").getNumero()). System.setSaldo(0d). System. } else { System. public BancoCristiano() { this. return false.contaBancoCristiano = new Conta().contaBancoCristiano.BANCO SAKURAI -.println("Nome: " + conta.out.out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 } } } public boolean transferencia(Conta contaOrigem.\n"). valor). this. double valor).out. } System.out.134 - . */ public class BancoCristiano implements Banco { private Conta contaBancoCristiano.println("Saldo: " + conta.out. this.getNomeProprietario()). Conta contaDestino. deposito(contaDestino.println("\n---------------------\n").println("Não conseguiu fazer a transferencia."). //Verifica se conseguiu sacar dinheiro na conta de origem. valor). if(fezSaque) { //Faz o deposito na conta de destino. return true.println("-> EXTRATO CONTA\n"). Conta contaDestino. double valor) { boolean fezSaque = saque(contaOrigem.println("Transferencia efetuada. Nesta implementação o BancoSakurai alem de fornecer os métodos obrigatórios da interface Banco.contaBancoCristiano. System.setNumero(0).out. System. também disponibiliza um método adicional chamado transferencia(Conta contaOrigem. this.println("\n -.contaBancoCristiano.java 01 02 03 04 05 06 07 08 09 10 11 12 13 package material. BancoCristiano.").exemploInterface.out. /** * Classe utilizada para representar o Banco Cristiano. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .println("Numero: " + conta.

135 - .0.println("Não conseguiu fazer o saque!!!"). conta.contaBancoCristiano. double novoValor = conta.contaBancoCristiano. double novoSaldo = conta.01.getSaldo() . manutencaoConta(conta). } else { System. //Toda vez que fizer um deposito faz cobra a manutenção da conta. return true. System. //Deposita o dinheiro da manutenção na conta do Banco Cristiano.getSaldo() + 0.println("Saque efetuado!!!").println("Deposito efetuado!!!").Programação Orientada a Objetos – Universidade Metodista de São Paulo 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 } public void manutencaoConta(Conta conta) { //Sempre executa o saque na conta bancaria.setSaldo(saldoBanco).setSaldo( novoValor ). } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . mostra o extrato da conta. } public boolean saque(Conta conta. return true. conta. extrato(conta).getSaldo() >= valor) { //Realiza o saque na conta. } } public boolean deposito(Conta conta. System. double valor) { //Realiza o deposito na conta. //Toda vez que fizer um saque faz cobra a manutenção da conta.getSaldo() + valor. conta.setSaldo(novoSaldo).getSaldo() . this. manutencaoConta(conta). //Se não conseguir fazer o saque. double saldoBanco = this.setSaldo(novoValor). return false.01.out.out. double novoValor = conta.out.valor. double valor) { //Verifica se tem saldo suficiente para fazer o saque if(conta.

setNomeProprietario("Cristiano Camilo").println("Numero: " + conta. System.println("Nome: " + conta. /** * Classe utilizada para testar a interface Banco. 150.out.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 package material. System. contaC. contaC.setNumero(1). Conta contaS = new Conta(). Está implementação tem um algoritmo diferente do BancoSakurai.saque(contaC. System. informando os métodos mínimos que devem ser implementados e cada classe é responsável pela lógica de negocio utilizado nos métodos. } } Nesta classe BancoCristiano.getNomeProprietario()).out.getNumero()).out.out. podemos ver que ele possui apenas os métodos obrigatórios da interface Banco.println("Saldo: " + conta. 500). System. contaC. bancoCristiano.out.136 - .extrato(contaC). bancoCristiano. */ public class BancoTeste { public static void main(String[] args) { Banco bancoCristiano = new BancoCristiano().\n"). aqui o método manutencaoConta() tem um valor que será retirado da conta mesmo que a conta não tenha mais saldo. contaS.50). Assim podemos perceber que a interface serve como uma base.println("-> EXTRATO CONTA\n"). Conta contaC = new Conta().out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 57 58 59 60 61 62 63 64 65 public void extrato(Conta conta) { System.println("\n---------------------\n"). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .setSaldo(1000).setNomeProprietario("Rafael Sakurai").getSaldo()). e as * classes BancoCristiano e BancoSakurai.BANCO CRISTIANO -.exemploInterface. BancoTeste. bancoCristiano. System. Banco bancoSakurai = new BancoSakurai().deposito(contaC.println("\n -.

BANCO CRISTIANO --> EXTRATO CONTA Nome: Cristiano Camilo Numero: 1 Saldo 650. bancoSakurai.saque(contaS.99).exemploInterface. Este tipo de sintaxe é muito usado quando usamos polimorfismo. 40. Repare que estamos criando uma variável bancoCristiano do tipo da interface Banco.deposito(contaS. Note a seguinte sintaxe: Banco bancoCristiano = new BancoCristiano().Programação Orientada a Objetos – Universidade Metodista de São Paulo 22 23 24 25 26 27 28 29 contaS.48 ---------------------Deposito efetuado!!! Saque efetuado!!! Deposito efetuado!!! -.java C:\>java material. 300).setSaldo(500). temos a seguinte saída no console: C:\>javac material\exemploInterface\BancoTeste.137 - .BancoTeste Deposito efetuado!!! Saque efetuado!!! -.extrato(contaS).BANCO SAKURAI --> EXTRATO CONTA Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .setNumero(1). depois estamos criando um objeto da classe BancoCristiano que é uma classe que implementa a interface Banco. } } Neste exemplo criamos dois bancos e duas contas e fizemos algumas operações em cima das contas e no final imprimimos o extrato das contas. contaS. bancoSakurai. bancoSakurai. (Polimorfismo será abordado mais adiante) Quando executarmos a classe BancoTeste.

Uma interface em Java. double valor). Exercícios 1-) Vamos criar um programa Java para ordenar vários tipos de objeto diferente.class.Programação Orientada a Objetos – Universidade Metodista de São Paulo Nome: Rafael Sakurai Numero: 1 Saldo: 240.exercicioInterface. assim como qualquer outra classe em Java. a seguinte linha causará um erro de compilação: bancoSakurai. Neste exemplo teremos um erro de compilação. Conta contaDestino. pois a interface Banco não tem a assinatura para o método transferencia(Conta contaOrigem. também gera um arquivo . Esta interface irá possuir a assinatura de método que todas as classes que desejam ser comparadas precisa implementar: Comparavel.74 ---------------------Quando usamos uma variável usando o tipo interface. Para isto vamos utilizar uma interface chamada Comparavel. BancoSakurai banco = new BancoSakurai(). podemos apenas chamar os métodos que possuem na interface.138 - . 1000. */ public interface Comparavel { /** * Assinatura de método que toda classe que quer permitir * a comparação entre seus objetos precisa implementar. este método é disponibilizado através da classe BancoSakurai.java 01 02 03 04 05 06 07 08 09 10 11 package metodista.00). /** * Interface que deve ser implementada por todas as classes que * devem ser ordenadas. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . após sua compilação. então para usá-lo precisaremos de uma variável do tipo BancoSakurai.transferencia(contaS. contaC. utilizando o algoritmo de Bubble Sort.

*/ if(objetos[i]. * < 0 se o objeto recebido é maior que o objeto que será comparado. } } } } } Como todos os objetos que são comparáveis implementam a interface Comparavel. i < objetos. */ Comparavel temp = objetos[i]. sabemos que todas as classes Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .length. /** * Classe utilizada para ordenar qualquer tipo de classe * que implementa a interface Comparavel. então criamos o método ordenar.Objeto que será comparado. * @return 0 se os objetos forem iguais. objetos[i] = objetos[j].Programação Orientada a Objetos – Universidade Metodista de São Paulo 12 13 14 15 16 17 18 19 * * @param o .139 - . i++) { for(int j = i + 1. e como uma classe implementa os métodos da interface.length.exercicioInterface. * * @param objetos . */ public class Ordenar { /** * Método que utiliza o algoritmo de bubble sort * para ordenar um vector de objetos do tipo <code>Comparavel</code>. que recebe um vetor de objetos do tipo Comparavel. */ public void ordenar(Comparavel[] objetos) { for(int i = 0. objetos[j] = temp. j < objetos. */ public abstract int comparar(Object o).comparar(objetos[j]) > 0) { /* Troca os objetos de lugar no vetor. * > 0 se o objeto recebido é menor que o objeto que será comparado. j++) { /* Verifica se os objetos não estão na ordem.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package metodista.Vetor de objetos que serão ordenados. } Vamos criar uma classe que ordena um array de objetos que são do tipo Comparavel: Ordenar.

esta classe. String titulo) { this.titulo = titulo. */ public class Livro implements Comparavel { private String autor. } public int comparar(Object o) { int comparacao = 0. } public String getTitulo() { return titulo. private String titulo.titulo = titulo. Quando uma classe implementa uma interface.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package metodista. this. Apenas quando usamos classes abstratas implementando interface é que não precisamos. Livro. obrigatoriamente. vamos criar uma classe que implemente a interface Comparavel.Programação Orientada a Objetos – Universidade Metodista de São Paulo comparáveis terão o método comparar. implementar todos os métodos.exercicioInterface. está classe * implementa a interface Comparavel. obrigatoriamente.comparar(objeto[j]).autor = autor. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . public Livro(String autor. por isso podemos ordenar os objetos usando o método objeto[i]. } public void setTitulo(String titulo) { this. Agora. } public void setAutor(String autor) { this.140 - .autor = autor. /** * Classe utilizada para representar um Livro. } public String getAutor() { return autor. precisa implementar todos os métodos declarados na interface.

141 - . /* Imprime os livros ordenados.exercicioInterface.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package metodista.compareTo(livro. cont++) { System. cont < livros. /** * Classe utilizada para testar a ordenação generica.getTitulo().println("Autor: " + livros[cont]. System. "Java em todo lugar").Programação Orientada a Objetos – Universidade Metodista de São Paulo 35 36 37 38 39 40 41 42 43 44 45 46 47 //Verifica se o objeto que vai comparar é do tipo Livro.println("\n--------\n"). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . livros[2] = new Livro("Sakurai". vamos criar uma classe para testar a ordenação de um vetor de Livros. Agora.out. if(comparacao == 0) { comparacao = this.out. compara o titulo dos livros. } } A classe livro implementou o método comparar para fazer a comparação de acordo com o autor e título do livro.getAutor().length.getAutor()). */ Livro[] livros = new Livro[4]. livros[1] = new Livro("Cristiano". } } return comparacao.ordenar(livros). "Viajando no Java"). */ public class TestarOrdenacao { public static void main(String[] args) { /* Cria um vetor de livros.getAutor()). "Almoçando com Java").getTitulo()). System. comparacao = this.getTitulo()).out. o. livros[3] = new Livro("Cristiano".compareTo(livro. */ for(int cont = 0. TestarOrdenacao. "Classes Java em fila indiana"). /* Ordena os livros */ Ordenar o = new Ordenar(). if(o instance of Livro) { Livro livro = (Livro) o. livros[0] = new Livro("Sakurai". //Se os autores forem iguais.println("Livro: " + livros[cont].

a JVM verifica qual o tipo da classe do objeto e chama o método que foi implementado nele. Teste a ordenação da classe Animal. O método ordenar() irá chamar o método comparar() que foi implementado pela classe Livro. --------Autor: Cristiano Titulo: Viajando no Java --------Autor: Sakurai Titulo: Almoçando com Java --------Autor: Sakurai Titulo: Java em todo lugar --------2-) Crie uma classe Animal que possui os atributos especie e raca.142 - . estamos passando o vetor de objetos livros para ser ordenado. e implemente o método comparar de forma que compare por especie e raca. faça está classe implementar a interface Comparavel. Quando testamos esta classe. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Como Livro implementa Comparavel podemos passar um objeto do tipo Livro em que é esperado um objeto do tipo Comparavel. temos a seguinte saída: Autor: Cristiano Titulo: Classes Java em fila indiana. isto é feito em tempo de execução da aplicação.Programação Orientada a Objetos – Universidade Metodista de São Paulo 24 25 26 } } } Quando chamamos o.ordenar(livros). isto é chamado de Polimorfismo.

evitando rescrita de código.matricula = matricula. de forma a apontar para qual classe a nossa nova classe deve herdar seus atributos e métodos.matricula = matricula. Neste exemplo. Temos as classes Funcionario e Coordenador que possuem o atributo nome e matricula em comum. /** * Classe utilizada para representar o Funcionario. devemos utilizar a palavra reservada extends.Programação Orientada a Objetos – Universidade Metodista de São Paulo 13. private int matricula.departamento = departamento.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 package material. podemos criar classes que herdem atributos e métodos de outras classes. Este tipo de relacionamento é chamado de Herança. String departamento) { this. } public void setMatricula(int matricula) { this. } public int getMatricula() { return matricula. demonstraremos a vantagem do reaproveitamento de código utilizando a Herança. int matricula. */ public class Funcionario { private String nome. Herança Em Java. this.heranca. this. public Funcionario(String nome.nome = nome. private String departamento.143 - . } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Funcionario. Para representarmos este tipo de relacionamento na linguagem.

String cursoCoordenado) { this. public Coordenador(String nome. } } Como esses atributos. } public int getMatricula() { return matricula. } } Coordenador.nome = nome. this. e elas possuem algo a mais em comum que é seu propósito.heranca. } public String getCursoCoordenado() { return cursoCoordenado. this. nome e matricula.matricula = matricula. são comuns para ambas as classes.cursoCoordenado = cursoCoordenado. } public void setCursoCoordenado(String cursoCoordenado) { this. */ public class Coordenador { private String nome. private int matricula.Programação Orientada a Objetos – Universidade Metodista de São Paulo 20 21 22 23 24 25 26 27 public String getNome() { return nome. } public void setNome(String nome) { this. ambas são utilizadas para representar Pessoas.144 - .matricula = matricula. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package material.departamento = departamento.cursoCoordenado = cursoCoordenado. } public void setMatricula(int matricula) { this. } public void setNome(String nome) { this.nome = nome. /** * Classe utilizada para representar o Coordenador. } public void setDepartamento(String departamento) { this. int matricula.nome = nome. } public String getNome() { return nome. private String cursoCoordenado. } public String getDepartamento() { return departamento.

/** * Construtor que recebe o nome da pessoa. } public void setNome(String nome) { this.Programação Orientada a Objetos – Universidade Metodista de São Paulo Podemos criar uma classe Pessoa que terá os atributos nome e matricula. int matricula) { this.java 01 02 03 04 05 06 07 08 09 10 package material. this. int matricula.matricula = matricula. * * @param nome */ public Pessoa(String nome.145 - . } public void setMatricula(int matricula) { this. public Funcionario(String nome.matricula = matricula.nome = nome.nome = nome.heranca. */ public class Pessoa { private String nome.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package material. matricula). /** * Classe utilizada para representar um Funcionario que é uma Pessoa. e por meio da herança reaproveitaremos esses atributos nas classes Funcionario e Coordenador. } public String getNome() { return nome. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . } public int getMatricula() { return matricula. /** * Classe utilizada para representar a Pessoa. } } Agora vamos alterar a classe Funcionario e Coordenador: Funcionario. String departamento) { super(nome. */ public class Funcionario extends Pessoa { private String departamento. private int matricula. Pessoa.heranca.

java 01 02 03 04 package material. this. logo.Programação Orientada a Objetos – Universidade Metodista de São Paulo 11 12 13 14 15 16 17 18 this. temos as classes Funcionario e Coordenador como classes filha ou subclasses da classe pai Pessoa. o Funcionario É UMA Pessoa.heranca. public Coordenador(String nome. } } Com a declaração acima. matricula). Com isso podemos dizer que as subclasses Funcionario e Coordenador herdam todos os atributos e métodos da sua super classe Pessoa.departamento = departamento. } public void setDepartamento(String departamento) { this. */ public class Coordenador extends Pessoa { private String cursoCoordenado. logo. int matricula. porém podemos sempre manuseá-lo como uma Pessoa.departamento = departamento. } } Coordenador.heranca. } public void setCursoCoordenado(String cursoCoordenado) { this. /** * Classe utilizada para representar um Coordenador que é uma Pessoa. Por isso. pois é uma subclasse.146 - . } public String getCursoCoordenado() { return cursoCoordenado. /** * Classe utilizada para testar a Herança da classe Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . apenas possui algumas características a mais do que Pessoa. também é possível se fazer o seguinte tipo de declaração: TesteFuncionario.cursoCoordenado = cursoCoordenado. String cursoCoordenado) { super(nome. lembre-se.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 package material.cursoCoordenado = cursoCoordenado. } public String getDepartamento() { return departamento.

222. pois uma Pessoa nem sempre é um Funcionario. porque nem toda Pessoa é um Funcionario. poderíamos ter a seguinte situação: Neste exemplo. */ public class TesteFuncionario { public static void main(String[] args) { /* Declarações comuns. } } Porém note que na linha 18. /* Erro de compilação. todas as classes herdam os seguintes métodos dela: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Aluno e Professor. temos um erro de compilação. esta classe é filha de java.Object. */ Pessoa camilo = new Pessoa("Camilo".Programação Orientada a Objetos – Universidade Metodista de São Paulo 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 * Funcionario. afinal de contas. */ Pessoa sakurai = new Funcionario("Sakurai". /* Todo Funcionario é uma Pessoa. 123). ou seja.lang. Por Object ser pai de todas as classes. 111. "informatica").147 - . */ Funcionario cristiano = new Pessoa("Cristiano". "telecomunicação"). a classe Object é a classe pai de todas as classes. Quando uma classe não define explicitamente que está herdando outra classe então. e três subclasses Funcionario. Funcionario rafael = new Funcionario("Rafael". 456). Uma classe pode herdar apenas de uma classe (super classe). temos a super classe Pessoa.

Podemos visualizar que a classe Coordenador utiliza ambas as palavras-chaves: Coordenador. } public String getCursoCoordenado() { return cursoCoordenado. String cursoCoordenado) { super(nome.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 package material. /** * Classe utilizada para representar um Coordenador que é uma Pessoa.heranca. */ public class Coordenador extends Pessoa { private String cursoCoordenado. matricula).Programação Orientada a Objetos – Universidade Metodista de São Paulo Quando lidamos com classes que possuem a relação de herança. Estes comandos são: this super Define que o recurso pertence à classe atual. this.cursoCoordenado = cursoCoordenado. Note que neste construtor temos a chamada super(nome. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Define que o recurso pertence à super classe.148 - . matricula). } } O construtor que recebe o nome. que irá chamar o construtor da classe Pessoa que recebe um String e um inteiro como parâmetro. public Coordenador(String nome. } public void setCursoCoordenado(String cursoCoordenado) { this.cursoCoordenado = cursoCoordenado. matrícula e curso do coordenador. podemos fazer uso de duas palavras-chave que servem para identificar se estamos utilizando um método e ou atributo da classe atual ou de sua super classe. int matricula.

alguns sobrescritos: << Para resgatar as informações da super classe use o modificador super >> Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Utilizando a palavra-chave this . Exercícios 1-) Crie uma classe Computador com os seguintes métodos e atributos: Feito isso.149 - .cursoCoordenado = cursoCoordenado . crie mais duas outras classes chamadas Desktop e Notebook. com os seguintes atributos e métodos a mais. classes filhas de Computador.Programação Orientada a Objetos – Universidade Metodista de São Paulo Dentro deste mesmo construtor temos a seguinte chamada this. referenciaremos o atributo cursoCoordenador da própria classe Coordenador.

crie uma classe de teste que instancie três objetos. 2-) Crie uma classe Veículo com os seguintes métodos e atributos: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Para atestar a questão da herança. nos objetos dos tipos Notebook e Desktop. por exemplo.150 - . faça chamadas aos métodos da super classe Computador como. sendo um de cada um dos tipos. o método dizerInformacoes().Programação Orientada a Objetos – Universidade Metodista de São Paulo Para testarmos nosso ambiente.

Crie um roteiro de testes que comprove o funcionamento de suas classes. } } a) b) c) d) private padrão (default) protected public Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .151 - . atribuindo a cada uma delas um novo atributo e 2 novos métodos. crie mais três subclasses filhas de Veiculo. 3-) Dado as classes abaixo informe qual(is) do(s) modificador(es) de acesso não podem ser utilizados no método getNome() da classe Funcionário.nome. class Pessoa { String nome. String getNome() { return this.Programação Orientada a Objetos – Universidade Metodista de São Paulo Feito isso.nome. } } class Funcionario extends Pessoa { String getNome() { return “Funcionário: ” + super.

*/ public abstract class Pessoa { private String nome. as classes abstratas possuem o único propósito de servirem como super classes a outras classes do Java. /** * Classe Abstrata representando uma Pessoa.abstrata. public Pessoa(String nome) { this. que é o de não permitir que novos objetos sejam instanciados a partir desta classe. } public void setNome(String nome) { this. Por este motivo. temos um tipo especial de classe chamado classe abstrata. Este tipo de classe possui uma característica muito específica.Programação Orientada a Objetos – Universidade Metodista de São Paulo 14. Em Java definimos uma classe como abstrata utilizando a palavra reservada abstract na declaração da classe. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . por exemplo: Pessoa. } public String getNome() { return nome. Classes Abstratas Em Java.152 - .nome = nome.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 package material.nome = nome.

Como todo método abstrato precisa ser implementado pela classe filha. pois não seria visível na subclasse.titulo = titulo. Esses métodos são implementados nas suas classes derivadas concretas com o objetivo de definir o comportamento específico. */ public abstract class Tela { private String titulo. O método abstrato define apenas a assinatura do método e.Programação Orientada a Objetos – Universidade Metodista de São Paulo Na linha 6 estamos criando uma classe abstrata através da palavra-chave abstract. Neste exemplo. criaremos uma classe abstrata chamada Tela .que é compartilhada por um grupo de classes derivadas.a parte genérica dessa funcionalidade . Uma classe abstrata é desenvolvida para representar entidades e conceitos abstratos. então não pode ser private.abstrata. /** * Classe abstrata que possui os métodos básicos para * as telas do computador de bordo de um veiculo.153 - . Tela. pois não pode ser instanciada. } public abstract String obterInformacao(). como por exemplo. Ela define um modelo (template) para uma funcionalidade e fornece uma implementação incompleta . Cada uma das classes derivadas completa a funcionalidade da classe abstrata adicionando um comportamento específico. que deve ser implementado pelas classes filhas. Nesta classe implementaremos alguns métodos que devem ser utilizados por todas as telas do computador de bordo de um veículo. Uma classe abstrata pode também possuir atributos e métodos implementados.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 package material. setTitulo() para informar o título da tela e imprimir(). a menos que o mesmo seja do tipo private. que imprime as informações na tela. Nesta classe definiremos também a assinatura de um método abstrato chamado obterInformacao(). não contém código assim como feito nas Interfaces. portanto. componentes estes que estarão integralmente acessíveis nas subclasses. public void setTitulo(String titulo) { this. sendo utilizada como uma classe pai. Uma classe abstrata normalmente possui métodos abstratos. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

agora.out. que esta classe herdou da classe Tela.println(this. Esta classe será utilizada para mostrar a km atual percorrida pelo veículo. Neste teste. */ int km = 0. criaremos um objeto da classe TelaKilometragem e chamar o método imprimir(). */ @Override public String obterInformacao() { km += 10.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package material. System. */ public class TelaKilometragem extends Tela { /* Atributo que guarda o valor da km atual do veiculo. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . criar uma classe para testar a nossa aplicação. return String.println("\t" + obterInformacao()).abstrata. que será uma subclasse da classe abstrata Tela.154 - .titulo). */ public TelaKilometragem() { /* Atribui o valor do titulo desta tela.valueOf(km) + " km". /** * Tela que mostra a kilometragem percorrida por um veiculo. * * @return Texto com a km atual. } } Agora criaremos a classe TelaKilometragem. * neste método buscamos a km atual do veiculo. } } Vamos.out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 16 17 18 19 20 public void imprimir() { System. TelaKilometragem. */ super.setTitulo("Km Atual"). } /** * Implementa o método abstrato da classe Tela. /** * Construtor que iniciliza o titulo da tela.

a JVM verifica o tipo do objeto e chama o método que foi implementado nele.abstrata.out.println("\n------------\n"). que foi implementado na classe TelaKilometragem. System. } } Quando definimos Tela tk = new TelaKilometragem().imprimir(). /** * Classe utilizada para testar a Tela Kilometragem. tk. estamos guardando um objeto do tipo TelaKilometragem dentro de uma variável do tipo Tela. mas note que o método imprimir() usa o método obterInformacao().java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 package material.Programação Orientada a Objetos – Universidade Metodista de São Paulo TesteTelaKm. tk.155 - . Em tempo de execução. estamos chamando o método que foi implementado na classe abstrata Tela. isto chama-se Polimorfismo.imprimir(). Temos a seguinte saída no console: Km Atual " 10 km ---------Km Atual " 20 km Segue abaixo um quadro comparativo entre Interface e Classe Abstrata: Classe Abstrata Pode possui atributos de instância Interface Possui apenas constantes Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Podemos fazer isso porque toda TelaKilometragem é uma subclasse de Tela.imprimir(). Quando chamamos o método tk. */ public class TesteTelaKm { public static void main(String[] args) { TelaKilometragem tk = new TelaKilometragem().

Cada uma delas com a seguinte especificação: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .156 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Possui métodos de diversas visibilidade e métodos implementados ou abstratos É estendida por classes (sub-classes) Uma subclasse só pode estender uma única classe abstrata (regra básica da herança em Java) Hierarquia de herança com outras classes abstratas Todos os métodos são public e abstract É implementada por classes Uma classe pode implementar mais de uma interface Hierarquia de herança com outras interfaces Exercícios 1-) Crie uma classe abstrata chamada Animal. desenvolva duas subclasses da classe Animal. com a seguinte implementação: Feito isso.

157 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

Ao executar a classe Principal. crie uma classe para testar suas 2 subclasses.Programação Orientada a Objetos – Universidade Metodista de São Paulo Feito isso. Tente instanciar diretamente a classe Animal. teremos a seguinte saída no console: Saída: ################# Titulo: These days Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . apenas para relembrar o conceito de generalização: 2-) Analise o diagrama abaixo e desenvolva um sistema que irá imprimir a descrição que conterá (titulo.158 - . data de fabricação no formato dd/MM/yyyy) e o valor do CD ou DVD com desconto e sem desconto. numero da faixa. Crie o método abaixo na classe principal. artista.

0 ################# Titulo: Still in The Tail Artista: Scorpions Num Faixas: 3 Data de Fabricação: 01/01/2010 Sem desconto: R$120. em que um Cliente pode comprar quantos produtos ele quiser.Programação Orientada a Objetos – Universidade Metodista de São Paulo Artista: Bon Jovi Num Faixas: 1 Data de Fabricação: 21/03/2011 Sem desconto: R$100.0 Com desconto: R$85.0 3-) Continuando o exercício 2. vamos criar uma venda de Produtos.0 Com desconto: R$85.0 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . temos a seguinte saída no console: Saída: Cliente: Chimena #### Endereço de entrega #### Endereço: Rua Alfeu Tavares Número: 320 Bairro: Rudge Ramos Cidade: São Bernardo do Campo CEP: 09000-110 Produtos comprados: ################# Titulo: These days Artista: Bon Jovi Num Faixas: 1 Data de Fabricação: 23/03/2011 Sem desconto: R$100. Ao executar o programa. Para dados de entrega do produto é necessário realizar o cadastro do endereço do cliente.0 Com desconto: R$108.0 ################# Titulo: Still in The Tail Artista: Scorpions Num Faixas: 3 Data de Fabricação: 01/01/2010 Sem desconto: R$120.159 - .

0 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .0 Valor Com Desconto: R$193.160 - .0 Valor Total: R$220.Programação Orientada a Objetos – Universidade Metodista de São Paulo Com desconto: R$108.

a interrupção do programa. basicamente é uma classe de Java representada na sua forma mais genérica pela classe java. Uma exceção.Programação Orientada a Objetos – Universidade Metodista de São Paulo 15. Diferentemente de outras linguagens.Exception. Exceções em Java A linguagem Java possui um mecanismo especial para o tratamento de erros que possam ocorrer em tempo de execução do programa. o surgimento de um erro ocasiona a interrupção imediata do programa. estas são literalmente “lançadas” de volta para a cadeia de execução e chamada das classes. porém em Java podemos tratar esta situação de erro de uma forma adequada e evitando.161 - . Uma característica importante sobre exceções é que. pelo fato delas poderem ocorrer a qualquer momento. logo todas as exceções que ocorram ao longo da execução do seu programa podem ser tratadas como objetos do tipo Exception.lang. assim. Por exemplo: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

Uma vez declarado um bloco try. segue um exemplo deste novo bloco: ExemploExcecao. a qualquer momento é possível se “pegar” essa exceção e dar a ela o tratamento adequado. */ } } } No caso acima. as demais linhas de código deixam de ser executadas até encontrar o bloco catch que irá tratar a exceção. é necessário pontuar que um determinado trecho de código que será observado e que uma possível exceção será tratada de uma determinada maneira. o bloco try. todas as exceções do Java são classes filhas de Exception. a declaração do bloco catch torna-se obrigatória. é que quando uma exceção ocorre. Exemplo: ExemploTryCatch.Programação Orientada a Objetos – Universidade Metodista de São Paulo Bloco try / catch Como a exceção é lançada por toda a cadeia de classes do sistema. em correspondência ao bloco try. prepara-se para “pegar” a exceção ocorrida e dar a ela o tratamento necessário. /** * Classe utilizada para demonstrar o bloco try / catch. lembrando do conceito da herança. Para se fazer este tratamento. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . é o trecho de código em que uma exceção é esperada e o bloco catch.excecao.162 - .java 01 package material. Algo importante de ser comentado.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 package material. */ } catch (Exception ex) { /* Trecho de código no qual uma * exceção do tipo "Exception" será tratada. Na linha 12 o bloco catch declara receber um objeto do tipo Exception. */ public class ExemploExcecao { public static void main(String[] args) { try { /* Trecho de código no qual uma * exceção pode acontecer.excecao.

nextInt().:").java C:\>java material. Caso não ocorra erro durante a execução teremos a seguinte saída no console: C:\>javac material\excecao\ExemploTryCatch. int numero2 = s.Scanner.. caso aconteça um erro na linha 13.println(numero1+ " + " + numero2 + " = " + (numero1+numero2))..out..in). retornando então o código a ser executado apenas a partir da linha 19 (trecho correspondente ao bloco catch).:"). int numero1 = s.print("Digite um valor inteiro.nextInt().Programação Orientada a Objetos – Universidade Metodista de São Paulo 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.:abc Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . } } } Observemos o exemplo acima. Neste código. as linhas de 14 a 17 não seriam executadas. */ public class ExemploTryCatch { public static void main(String[] args) { Scanner s = new Scanner(System.. } catch (Exception ex) { System..:5 Digite um valor inteiro..ExemploTryCatch Digite um valor inteiro.excecao.java C:\>java material. /** * Classe que demonstra o uso do try / catch.print("Digite um valor inteiro.out.ExemploTryCatch Digite um valor inteiro. try { System.163 - .util. Uma vez que uma exceção foi tratada por um bloco catch. System.println("ERRO . a execução do programa segue normalmente.out.Valor digitado nao e um numero inteiro!").:10 Digite um valor inteiro.:3 5 + 3 = 8 Se no lugar de um número inteiro for digitado outra informação teremos a seguinte saída no console: C:\>javac material\excecao\ExemploTryCatch.excecao.out. System.

Para realizarmos tal tarefa é necessária a utilização da palavra chave throw da seguinte maneira: throw new << Exceção desejada >>().nextLine().in). * utilizada quando queremos lançar uma exceção.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package material.164 - .excecao. /** * Classe utilizada para demonstrar o uso da palavra chave throw. import java.out. em uma situação de login em que o usuário digita incorretamente sua senha. } } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Valor digitado nao e um numero inteiro! Palavra chave throw Também é possível que você próprio envie uma exceção em alguma situação especifica.println(ex. } System.util. Vamos ver um exemplo de lançamento de uma exceção do tipo Exception: ExemploThrow.out. */ public class ExemploThrow { public static final String SENHASECRETA = "123456".Programação Orientada a Objetos – Universidade Metodista de São Paulo ERRO . public static void main(String[] args) { try { Scanner s = new Scanner(System. } catch (Exception ex) { System.out.getMessage()). if(!senha. System.Scanner. String senha = s.equals(SENHASECRETA)) { throw new Exception("Senha invalida!!!").println("Senha correta!!!\nBem vindo(a)!!!"). como por exemplo.print("Digite a senha: ").

util.excecao.excecao.printStackTrace().Programação Orientada a Objetos – Universidade Metodista de São Paulo Note que. independentemente se uma exceção ocorrer. temos a seguinte saída no console.ExemploThrow Digite a senha: abc Senha invalida!!! C:\>javac material\excecao\ExemploThrow. Exception. no segundo teste entramos com a senha valida “123456” e executamos a aplicação por completo. a implementação do bloco try / catch será obrigatória. caso a exceção em questão seja do tipo checked. C:\>javac material\excecao\ExemploThrow. portanto foi lançado a exceção. Retorna uma String com a mensagem contida na exceção. Muito comum para auxiliar no diagnóstico de erros. Observe também que a palavra reservada new foi utilizada.excecao.165 - . Imprime em tela a pilha de execução.java 01 02 03 04 05 package material. import java. note que no primeiro teste entramos com uma senha invalida “abc”.java C:\>java material. Isso se faz necessário para que a exceção possa ser lançada por toda a pilha de execução até que seja devidamente tratada ou acarrete no término da aplicação. Quando executamos este código. Exception. assim que a palavra throw for utilizada. Por exemplo: ExemploFinally.getMessage(). visto que a exceção é um novo objeto que deve ser criado na memória. /** Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .getClass().java C:\>java material.Scanner. Retorna uma String com o nome complete da classe da exceção. Bloco finnaly A palavra chave finally representa um trecho de código que será sempre executado.ExemploThrow Digite a senha: 123456 Senha correta!!! Bem vindo(a)!!! Alguns métodos importantes da classe Exception: Exception.

in). } } } No exemplo anterior.java C:\>java material.out. divisor.print("Digite o valor do divisor: ").print("Digite o valor do dividendo: ").getMessage()). */ public class ExemploFinally { public static void main(String[] args) { Scanner s = new Scanner(System.println(dividendo+" / "+divisor+" = "+(dividendo / divisor)).println("Erro: " + ex. sempre será exibida.").ExemploFinally Digite o valor do dividendo: 6 Digite o valor do divisor: 0 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 * Classe que demonstra o uso do bloco finally.java C:\>java material.excecao. divisor = s.out.nextInt(). note que o bloco finally será executado mesmo que ocorra alguma exceção: C:\>javac material\excecao\ExemploFinally. } System.out. Caso não ocorra erro durante a execução teremos a seguinte saída no console: C:\>javac material\excecao\ExemploFinally. System.166 - . try { int dividendo. ocorrendo ou não um Exception. } catch (Exception ex) { System.out. } finally { System.nextInt(). System. dividendo = s.excecao.println("Bloco Finally.ExemploFinally Digite o valor do dividendo: 7 Digite o valor do divisor: 2 7 / 2 = 3 Bloco Finally Se digitarmos zero no valor do divisor será lançado uma exceção. if(divisor == 0) { throw new Exception("Nao eh permitido fazer uma divisao por zero!").out. a mensagem “Bloco Final!”.

por exemplo.167 - . Veremos mais adiante alguns códigos que fazem uso do finally para este propósito.nextDouble().Programação Orientada a Objetos – Universidade Metodista de São Paulo ERRO: Nao eh permitido fazer uma divisao por zero! Bloco Finally O bloco finally é muito utilizado quando queremos liberar algum recurso como. quer retorna-la para o objeto que fez a chamada ao método que lançou a exceção.print("Digite o valor do divisor: "). double divisor = s. Exemplo: ExemploThrows.out.excecao.out.in). etc. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .print("Digite o valor do dividendo: ").nextDouble(). double dividendo = s.util. Quando utilizamos o throws precisamos também informar qual ou quais exceções podem ser lançadas. */ public class ExemploThrows { public static void main(String[] args) { Scanner s = new Scanner(System. try { ExemploThrows et = new ExemploThrows(). mas você não deseja tratá-la. uma conexão com o banco de dados. basta utilizar a palavra chave throws no final da assinatura do método.println("O resultado da divisao eh: " + resultado). import java. * deixando para quem chamar o método tratar alguma possivel exceção. /** * Classe utilizada para demonstrar o uso da palavra chave throws. double resultado = et.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package material. Palavra chave throws Caso em algum método precise lançar uma exceção.dividir(dividendo.Scanner. um arquivo de dados. System. divisor). System.out. System.

esta exceção será tratada pelo método main(): C:\>javac material\excecao\ExemploThrows. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .lang.Exception. } return dividendo / divisor.Programação Orientada a Objetos – Universidade Metodista de São Paulo 24 25 26 27 28 29 30 31 32 33 34 35 36 } catch (Exception ex) { System. } } public double dividir(double dividendo. Java possui diversos tipos específicos de exceção. cada um deles diretamente relacionado a uma operação específica.ExemploThrows Digite o valor do dividendo: 5 Digite o valor do divisor: 0 Nao e permitido fazer uma divisao por zero! Hierarquia das Exceptions A princípio. E o método public static void main(String[] args) será responsável por tratar alguma exceção que o método dividir(double dividendo. } } Note que na linha 29 declaramos na assinatura do método que ele pode ou não lançar uma exceção do tipo java.168 - .out. double divisor) throws Exception { if(divisor == 0) { throw new Exception("Nao e permitido fazer uma divisao por zero!").excecao.Exception. Caso não ocorra erro durante a execução teremos a seguinte saída no console: C:\>javac material\excecao\ExemploThrows.excecao.java C:\>java material.5 Se digitarmos zero no valor do divisor será lançado uma exceção pelo método dividir().ExemploThrows Digite o valor do dividendo: 7 Digite o valor do divisor: 2 O resultado da divisao eh: 3.lang.java C:\>java material.println(ex.getMessage()). por este motivo para que uma classe seja considerada uma exceção é imprescindível que ela de alguma forma seja filha de java. double divisor) possa lançar.

todas as classes filhas de Exception são do tipo checked. se faz necessária a utilização do bloco try / catch ou da palavra chave throws. Unchecked Exceptions Um dos fatores que tornam a RuntimeException e suas classes filhas tão específicas em relação as demais subclasses de Exception é que elas são exceções não diretamente Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . pois como podem acontecer em qualquer parte do código durante sua execução.Exception são normalmente divididas em duas parte as Checked e Unchecked. Como ela é prevista já em tempo de compilação.Programação Orientada a Objetos – Universidade Metodista de São Paulo As exceções que são subclasses de java.169 - . temos um exemplo da hierarquia de algumas subclasses de Exception. normalmente.RuntimeException. No quadro abaixo. exceto pelas subclasses de java. quando não tratadas ocasionam na interrupção do programa. são exceções já previstas pelo compilador.RuntimeException (exceção em tempo de execução). Usualmente são geradas pela palavra chave throw (que é discutido mais adiante). Uma das subclasses mais comuns é a java. que explicaremos mais adiante. Checked Exceptions As checked exceptions. A princípio.lang.lang.lang. sobretudo para os usuários finais.

/** * Classe utilizada para demonstrar exceções filhas de RuntimeException. a princípio não era tratado e uma exceção do tipo java.next(Unknown Source) " at java.java:15) Este tipo de exceção. int numero = s. C:\>javac material\excecao\ExemploRuntimeException.170 - . */ public class ExemploRuntimeException { public static void main(String[] args) { Scanner s = new Scanner(System.main(ExemploRuntime Exception.util.: "). System.Scanner.nextInt(Unknown Source) " at java. Porém.util. vamos supor que nosso usuário não digite um inteiro. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .excecao.Scanner.out. temos uma variável do tipo int recebendo uma entrada do usuário também do tipo int.util.java 01 02 03 package material.excecao..in).: abc Exception in thread "main" java. } } Observe que no trecho de código acima.Scanner.InputMismatchException.java C:\>java material. Agora iremos prever este erro.util.util..print("Digite um numero inteiro. utilizando o bloco try / catch: ExemploRuntimeException2.throwFor(Unknown Source) " at java.out. mas sim um caractere.excecao.util.Scanner.InputMismatchException será gerada e nosso programa é encerrado.util.nextInt().java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 package material. import java.excecao. System. Por exemplo: ExemploRuntimeException.ExemploRuntimeException.Programação Orientada a Objetos – Universidade Metodista de São Paulo previstas por acontecer em tempo de execução. import java.Scanner. são unchecked exceptions.nextInt(Unknown Source) " at material.ExemploRuntimeException Digite um numero inteiro.util.println("Numero lido: " + numero). ou seja.InputMismatchException " at java. que acontece somente em tempo de execução.

nextInt().: 7 O valor lido foi: 7 Errors Errors são um tipo especial de Exception que representam erros da JVM.println("O valor lido foi: " + numero). tais como estouro de memória. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . C:\>javac material\excecao\ExemploRuntimeException2.util. pois sempre quando um java.lang.: x O valor inserido nao e um numero inteiro! Digite um numero inteiro.in). entre outros.: ").print("Digite um numero inteiro. } } Desta forma. numero = s.Scanner.out. */ public class ExemploRuntimeException2 { public static void main(String[] args) { int numero = 0.171 - .excecao.println("O valor inserido nao e um numero inteiro!"). while(!validado) { try { Scanner s = new Scanner(System.Error ocorre a execução do programa é interrompida. /** * Classe utilizada para demonstrar exceções filhas de RuntimeException...: abc O valor inserido nao e um numero inteiro! Digite um numero inteiro.java C:\>java material..out.. System. a digitação incorreta do usuário será tratada e uma mensagem de erro será exibida caso uma exceção aconteça.ExemploRuntimeException2 Digite um numero inteiro. a variável validado não receberia o valor true. validado = true. Para este tipo de erro normalmente não é feito tratamento. boolean validado = false. } } System. } catch (InputMismatchException ex) { System.out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import java.

util.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package material. basta declara-los um abaixo do outro. */ } catch (Exception ex) { /* Trecho de código no qual uma exceção do tipo "Exception" será tratada. ou que possa facilitar o entendimento do problema para quem estiver tentando chamar seu método possa tratar o erro. */ public class ExemploMultiplasExcecoes { public static void main(String[] args) { try { /* Trecho de código no qual uma exceção pode acontecer.InputMismatchException.Programação Orientada a Objetos – Universidade Metodista de São Paulo Tratando múltiplas Exceções É possível se tratar múltiplos tipos de exceção dentro do mesmo bloco try / catch.excecao. import java. */ } } } OBS: As exceções tratadas pelos catchs devem seguir a ordem da mais especifica para a menos especifica. */ } catch (RuntimeException ex) { /* Trecho de código no qual uma exceção do tipo "RuntimeException" será tratada. dessa forma podemos lançar exceções com mensagens de fácil entendimento pelo usuários. para tal. Criando sua exceção Na linguagem Java podemos também criar nossas próprias exceções. */ } catch (InputMismatchException ex) { /* Trecho de código no qual uma exceção do tipo "InputMismatchException" será tratada. /** * Classe utilizada para demonstrar o uso de varios catchs. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . normalmente fazemos isso para garantir que nossos métodos funcionem corretamente. assim como segue: ExemploMultiplasExcecoes.172 - .

para isso precisamos criar esta classe filha de Exception. que iremos utilizar para testar o lançamento da nossa exceção ErroDivisao.out. */ public class ErroDivisao extends Exception { public ErroDivisao() { super("Divisao invalida!!!"). int numero2 = s.Scanner.173 - . /** * Classe utilizada para demonstrar o uso da exceção ErroDivisao.java 01 02 03 04 05 06 07 08 09 10 package material.excecao. */ public class TesteErroDivisao { public static void main(String[] args) { try { Scanner s = new Scanner(System. System. } } Agora vamos criar a classe TesteErroDivisao.util.nextInt().Programação Orientada a Objetos – Universidade Metodista de São Paulo No exemplo abaixo vamos criar uma exceção chamada ErroDivisao que será lançada quando ocorrer uma divisão incorreta.out. crie o método restoDaDivisao que irá calcular o resto da divisão de dois números e lançara a exceção ErroDivisao caso tenha o valor do divisor maior que o valor do dividendo. System. TesteErroDivisao teste = new TesteErroDivisao().java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 package material. import java.restoDaDivisao(numero1.print("Digite o valor do dividendo: ").in). System.excecao.nextInt(). TesteErroDivisao.out.print("Digite o valor do divisor: "). /** * Exceção que deve ser lançada quando uma divisão é invalida. } catch (ErroDivisao ex) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . numero2)). int numero1 = s. ErroDivisao.println("Resto: " + teste.

println(ex. int divisor) throws ErroDivisao { if(divisor > dividendo) { throw new ErroDivisao().getMessage()). Sua classe deve tratar as seguintes exceções: ArithmeticException e InputMismatchException 2-) Crie uma classe que crie um vetor de inteiros de 10 posições.java C:\>java material.174 - . } } public int restoDaDivisao(int dividendo. deixe que o usuário digite valores até que a entrada 0 seja digitada.TesteErroDivisao Digite o valor do dividendo: 3 Digite o valor do divisor: 7 Divisao invalida!!! Exercícios 1-) Crie uma classe que aceite a digitação de dois números e faça a divisão entre eles exibindo seu resultado. permita que o usuário digite valores inteiros afim de preencher este vetor. Feito isso. } } Quando executamos a classe TesteErroDivisao caso não ocorra nenhum problema será apresentado o resto da divisão. C:\>javac material\excecao\TesteErroDivisao.Programação Orientada a Objetos – Universidade Metodista de São Paulo 22 23 24 25 26 27 28 29 30 31 32 33 System. se ocorrer algum erro será apresentado a mensagem “Divisão Invalida!!!”.java C:\>java material. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out.TesteErroDivisao Digite o valor do dividendo: 5 Digite o valor do divisor: 2 Resto: 1 C:\>javac material\excecao\TesteErroDivisao.excecao. } return dividendo % divisor.excecao. Não implemente nenhum tipo controle referente ao tamanho do vetor.

Sua classe deve tratar as seguintes exceções: ArrayIndexOutOfBoundsException e InputMismatchException 3-) Crie uma classe Login com a seguinte modelagem: Login private String usuario.out. Ex: try{ if(<<usuário incorreto>>) throw new Exception(“Usuário incorreto”). ou então deve lançar uma nova exceção dizendo qual credencial está errada. crie uma classe para testar a inicialização de um objeto do tipo Login e que utilize o método fazerLogin.Programação Orientada a Objetos – Universidade Metodista de São Paulo Uma vez digitado o valor 0. Caso sejam realmente iguais. } catch (Exception e) { System.println(“Erro”). String _senha){ /* Deve receber informações de usuário e senha e compara-las com as da classe. } */ } Feito isso. exiba-os em tela. deve retornar verdadeiro. com informações digitadas pelo usuário. Feita toda a coleta dos dados.175 - . String _senha) { // Construtor padrão } public void setSenha (String _senha) { // Troca a senha do usuário. // Determina o nome do usuário private String senha. E os métodos: public Login(String _usuario. o mesmo deve ser inserido no vetor e a digitação de novos elementos deve ser interrompida. } public boolean fazerLogin(String _usuario. tratar essa exceção dentro do próprio método imprimindo o erro em tela e por fim retornar false. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . // Determina a senha do usuário.

Programação Orientada a Objetos – Universidade Metodista de São Paulo

4-) O que será impresso se tentarmos compilar e executar a classe TesteExcecao? public class MinhaExcecao extends Exception {} public class TesteExcecao { public void teste() throws MinhaExcecao { throw new MinhaExcecao(); } public static void main(String[] args) { MinhaExcecao me = null; try { System.out.println("try "); } catch (MinhaExcecao e) { System.out.println("catch "); me = e; } finally { System.out.println("finally "); throw me; } System.out.println("fim"); } } a) b) c) d) e) Imprime Imprime Imprime Imprime Erro de "try " "try catch " "try catch finally " "try catch finally fim" compilação

5-) Crie uma classe chamada ContaBancaria, pertencente ao pacote “exercicio. excecao.contas” com os seguintes atributos: private double saldo; // Determina o saldo da conta. private double limite; // Determina o limite de crédito do cheque especial. E os métodos: public ContaBancaria(double valorSaldo, double valorLimite){} Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai - 176 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo // Construtor padrão da classe. public double getSaldo(){} // Retorna o saldo da conta. protected double getLimite(){} // Retorna o limite da conta. public double getSaldoComLimite(){} // Retorna o saldo da conta somado ao limite. public void sacar(double valor) throws ContaException {} // Deve decrementar o valor do saque da Conta. Retorna “true” caso a operação tenha sido bem sucedida, ou seja, a conta possui este valor (lembre-se de considerar o limite). public void depositar(double valor) throws ContaException {} // Deve incrementar o valor a Conta. E crie também a seguinte classe: ContaException extends Exception • public ContaException (String _mensagem); • Construtor padrão da classe. Deve chamar o mesmo construtor da Superclasse. Requisitos A sua classe conta bancária deve permitir apenas saques inferiores a R$ 500,00 ou que não façam com que a soma entre o saldo e o limite da conta resultem em um valor menor do que zero. Caso estas condições não se cumpram, deve ser lançada uma ContaException com uma mensagem que identifique o tipo de erro. • A conta não deve permitir depósitos superiores a R$ 1.000,00. Caso esta condição não se cumpra, deve ser lançada uma ContaException com uma mensagem que identifique o tipo de erro. • Crie uma classe para testar a classe ContaBancaria

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 177 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo

16. Polimorfismo

Quando trabalhamos com herança e dizemos que uma subclasse PessoaFisica e PessoaJuridica são filhas da super classe Pessoa, podemos então dizer que um PessoaFisica e PessoaJuridica É UMA Pessoa, justamente por ser uma extensão ou tipo mais especificado deste. Essa é a semântica da herança.

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 178 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo Dizer que uma Pessoa É UMA PessoaFisica está errado, porque ela pode também ser uma PessoaJuridica. Quando trabalhamos com uma variável do tipo Pessoa que é uma super classe, podemos fazer está variável receber um objeto do tipo PessoaFisica ou PessoaJuridica, por exemplo:

Com isso, podemos dizer que polimorfismo é a capacidade de um objeto ser referenciado de diversas formas diferentes e com isso realizar as mesmas tarefas (ou chamadas de métodos) de diferentes formas. Um exemplo do uso do polimorfismo utilizando a classe Pessoa, seria todas as subclasses sobrescreverem o método getNome().
Pessoa.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 package material.polimorfismo; /** * Classe utilizada para representar uma Pessoa. */ public class Pessoa { private String nome; public String getNome() { return nome; } public void setNome(final String nome) { this.nome = nome; } } PessoaFisica.java 01 02 03 04 05 06 07 package material.polimorfismo; /** * Classe utilizada para representar uma Pessoa Física * que É UMA subclasse de Pessoa. */ public class PessoaFisica extends Pessoa {

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 179 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo
08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 private long cpf; public PessoaFisica() { } public long getCpf() { return cpf; } public void setCpf(long cpf) { this.cpf = cpf; } public String getNome() { return "Pessoa Fisica: " + super.getNome() + " - CPF: " + this.getCpf(); } }

A subclasse PessoFisica sobrescreve o método getNome() e retorna a seguinte frase: “Pessoa Fisica: nomePessoa – CPF: cpfPessoa”.
PessoaJuridica.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 } public void setCnpj(long cnpj) { this.cnpj = cnpj; } public long getCnpj() { return cnpj; public PessoaJuridica() { } /** * Classe utilizada para representar uma Pessoa Fisica * que É UMA subclasse de Pessoa. */ public class PessoaJuridica extends Pessoa { private long cnpj; package material.polimorfismo;

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 180 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo
20 21 22 23 24 public String getNome() { return "Pessoa Juridica: " + super.getNome() + " - CNPJ: " + this.getCnpj(); } }

A subclasse PessoaJuridica sobrescreve o método getNome() e retorna a seguinte frase: “Pessoa Juridica: nomePessoa – CNPJ: cnpjPessoa”. Desta maneira, independentemente do nosso objeto PessoaFisica e PessoaJuridica ter sido atribuído a uma referencia para Pessoa, quando chamamos o método getNome() de ambas variáveis, temos a seguinte saída: Pessoa Fisica: Cristiano - CPF: 0 Pessoa Juridica: Rafael - CNPJ: 0 Exemplo:
TestePessoa.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package material.polimorfismo; /** * Classe utilizada para demonstrar o uso do polimorfismo, * vamos criar um vetor de Pessoa e adicionar nele objetos * do tipo PessoaFisica e PessoaJuridica. */ public class TestePessoa { public static void main(String[] args) { Pessoa fisica = new PessoaFisica(); fisica.setNome("Cristiano"); fisica.setCpf(12345678901L); Pessoa juridica = new PessoaJuridica(); juridica.setNome("Rafael"); Pessoa[] pessoas = new Pessoa[2]; pessoas[0] = fisica; pessoas[1] = juridica; for(Pessoa pessoa : pessoas) { System.out.println(pessoa.getNome()); }

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 181 -

pois somente a classe PessoaFisica possui este método: public static void main(String[] args) { Pessoa fisica = new PessoaFisica(). a JVM percebe que a variável fisica está guardando um objeto do tipo PessoaFisica.setNome("Cristiano"). se tentarmos utilizar a variável do tipo Pessoa para atribuir o CPF através do método setCpf() teremos um erro de compilação. é preciso ter variáveis do tipo PessoaFisica e PessoaJuridica. Durante a execução do programa. e a variável juridica está guardando um objeto do tipo PessoaJuridica.182 - .Pessoa não possui o método setCpf(long): C:\>javac material\polimorfismo\TestePessoa. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . quando chamamos um método através da classe Pessoa. polimorfismo. fisica. não informamos qual o CPF ou CNPJ da pessoa. porque durante a execução do programa. o método getNome() foi chamado da classe PessoaFisica e PessoaJuridica. só podemos chamar os métodos que existem na classe Pessoa.java C:\>java material. a JVM verifica qual a classe de origem do objeto e chama o método desta classe. Para podermos atribuir o valor para CPF ou CNPJ.Pessoa " fisica.TestePessoa Pessoa Fisica: Cristiano .polimorfismo.CNPJ: 0 Mesmo as variáveis sendo do tipo Pessoa.CPF: 0 Pessoa Juridica: Rafael . Note que neste exemplo apenas atribuímos o valor do nome da Pessoa. Durante a compilação teremos o seguinte erro informando que a classe material.setCpf(12345678901L). fisica.polimorfismo. ^ 1 error Atenção: mesmo o objeto sendo do tipo PessoaFisica.java:12: cannot find symbol symbol : method setCpf(long) location: class material.Programação Orientada a Objetos – Universidade Metodista de São Paulo 24 25 } } Saída: C:\>javac material\polimorfismo\TestePessoa.java material\polimorfismo\TestePessoa.setCpf(12345678901L).

Programação Orientada a Objetos – Universidade Metodista de São Paulo No exemplo a seguir as variáveis são do tipo PessoaFisica e PessoaJuridica. fisica. pessoas[1] = juridica.polimorfismo.getNome()). juridica. fisica.183 - . */ public class TestePessoa2 { public static void main(String[] args) { PessoaFisica fisica = new PessoaFisica().CNPJ: 1000100012345678 Se criarmos variáveis do tipo PessoaFisica ou PessoaJuridica.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package material. } } } Agora quando executarmos este programa tem a seguinte saída: C:\>javac material\polimorfismo\TestePessoa2. elas serão guardadas dentro de um vetor de Pessoa: TestePessoa2.java Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . PessoaJuridica juridica = new PessoaJuridica(). for(Pessoa pessoa : pessoas) { System.CPF: 12345678901 Pessoa Juridica: Rafael . por exemplo: TestePessoa3. pessoas[0] = fisica.polimorfismo. juridica.setNome("Cristiano").out.java C:\>java material.setNome("Rafael").TestePessoa2 Pessoa Fisica: Cristiano . Pessoa[] pessoas = new Pessoa[2]. * vamos criar um vetor de Pessoa e adicionar nele objetos * do tipo PessoaFisica e PessoaJuridica.setCnpj(1000100012345678L).setCpf(12345678901L). /** * Classe utilizada para demonstrar o uso do polimorfismo. atribuirmos os valores para nome e cpf ou cnpj.println(pessoa. depois disso podemos fazer variáveis do tipo Pessoa terem referencia para o mesmo objeto que as variáveis do tipo PessoaFisica e PessoaJuridica.

System. System.setCpf(12345678901L).setNome("Cristiano").println(pessoa2. * vamos criar duas variaveis do tipo Pessoa e adicionar nele objetos * do tipo PessoaFisica e PessoaJuridica.setCnpj(1000100012345678L). */ public class TestePessoa3 { public static void main(String[] args) { PessoaFisica fisica = new PessoaFisica(). Quando executarmos este programa tem a seguinte saída: C:\>javac material\polimorfismo\TestePessoa3. Pessoa pessoa1 = fisica.Programação Orientada a Objetos – Universidade Metodista de São Paulo 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package material.out.out.println(pessoa1.polimorfismo. } } Na linha 18 foi criado uma variável pessoa1 do tipo Pessoa que recebe um objeto do tipo PessoaFisica. pois foram previamente preenchidos.out. System. juridica.polimorfismo. System. PessoaJuridica juridica = new PessoaJuridica(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out.CPF: 12345678901 Pessoa 2 Pessoa Juridica: Rafael .setNome("Rafael").CNPJ: 1000100012345678 Dessa vez o valor do cpf e cnpj são impressos.TestePessoa3 Pessoa 1 Pessoa Fisica: Cristiano .java C:\>java material. Na linha 19 foi criado uma variável pessoa2 do tipo Pessoa que recebe um objeto do tipo PessoaJuridica.println("Pessoa 2"). Pessoa pessoa2 = juridica. fisica. fisica.println("Pessoa 1").getNome()). juridica.184 - .getNome()). /** * Classe utilizada para demonstrar o uso do polimorfismo.

pessoa1. Pessoa pessoa2 = new PessoaJuridica().out.out. Object objeto = "Programacao Orientada a Objetos". System. * vamos criar duas variaveis do tipo Pessoa e adicionar nele objetos * do tipo PessoaFisica e PessoaJuridica. depois vamos também criar uma variável do tipo Object (que é a super classe de todas as classes) e guardar nela um objeto do tipo String. vamos criar duas variáveis do tipo Pessoa com objetos do tipo PessoaFisica e PessoaJuridica.getNome()). PessoaJuridica juridica = (PessoaJuridica) pessoa2.out. String texto = (String) objeto. mas quando estamos trabalhando com uma super classe e temos a certeza de qual o tipo de subclasse ele está representando podemos fazer o casting de objetos. /** * Classe utilizada para demonstrar o uso do polimorfismo.setNome("Cristiano").setNome("Rafael"). funciona de forma similar ao casting de atributos primitivos.println(juridica.println(fisica. System.setCnpj(1000100012345678L). } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . No exemplo a seguir. TestePessoa4. System.getNome()).polimorfismo.setCpf(12345678901L). fisica. PessoaFisica fisica = (PessoaFisica) pessoa1.println(texto).185 - . */ public class TestePessoa4 { public static void main(String[] args) { Pessoa pessoa1 = new PessoaFisica().java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package material. para guardar o objeto em sua classe. pessoa2.Programação Orientada a Objetos – Universidade Metodista de São Paulo Casting (conversão) de objetos Vimos anteriormente que uma Pessoa (super classe) nem sempre É UMA PessoaFisica (subclasse). juridica.

Programação Orientada a Objetos – Universidade Metodista de São Paulo 30 } Na linha 18 estamos fazendo um casting de Pessoa para PessoaFisica. Coloca valor no salário do funcionário. public double setSalario(double salario).CPF: 12345678901 Pessoa Juridica: Rafael . Na linha 21 estamos fazendo um casting de Pessoa para PessoaJuridica. E os métodos: public double getSalario().java C:\>java material. Fórmula: Salário * 0.TestePessoa4 Pessoa Fisica: Cristiano . Retorna o salário do funcionário. Temos a seguinte saída no console: C:\>javac material\polimorfismo\TestePessoa4. Calcula a participação nos lucros do funcionário. Determina o salário do funcionário. Retorna 0.5 << Secretaria >> public double calcularParticipacaoNosLucros().polimorfismo.2 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Fórmula: Salário * 0. Na linha 24 estamos fazendo um casting de Object para String. com apenas um método: << Gerente >> public double calcularParticipacaoNosLucros(). E as seguintes classes filhas.CNPJ: 1000100012345678 Programacao Orientada a Objetos Exercícios 1-) Crie uma classe Funcionario com o seguinte atributo: private double salario. Calcula a participação nos lucros do funcionário. public double calcularParticipacaoNosLucros().186 - .

Possuo “ + qtdMemoria + “ Mb de memória. Determina a velocidade do processador. Teste o polimorfismo. Meu processador ” + fabricanteDoProcessador + “ trabalha a uma velocidade “ + velocidadeDoProcessador + “. Feito isso. Retorna o fabricante do processador. int memo. public final int getVelocidadeDoProcessador(). Determina a quantidade de memória. private int qtdMemoria. public final int getQtdMemoria(). E os seguintes métodos: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . classes filhas de Computador. public String dizerInformacoes().187 - . Determina a quantidade de alto-falantes. referenciando o método calcularParticipacaoNosLucros().”. Retorna a velocidade do processador. crie mais duas outras classes chamadas Desktop e Notebook.Programação Orientada a Objetos – Universidade Metodista de São Paulo Feito isso. mas armazenando-os em referencias para Funcionario. public boolean possuiTouchPad. alguns sobrescritos: << Notebook >> public int qtdAltoFalantes. true caso possua touchPad e false caso não o possua. public final String getFabricanteDoProcessador(). Deve retornar o texto: ”Sou um computador. private String fabricanteDoProcessador. String proc). Retorna a quantidade de memória. E os seguintes métodos: public Computador(int vel.. instancie dois objetos de cada um dos tipos das subclasses. Determina a quantidade de memória. Construtor base da classe. com os seguintes atributos e métodos a mais. Funcionario amanda = new Secretaria(). da seguinte forma: Funcionario carlos = new Gerente(). 2-) Crie uma classe Computador com os seguintes atributos: private int velocidadeDoProcessador.

Programação Orientada a Objetos – Universidade Metodista de São Paulo public Notebook(int vel, int memo, String proc); Construtor base da classe. Deve assumir que qtdAltoFalantes = 0 e possuiTouchPad = false. public Notebook(int vel, int memo, String proc, int falantes, boolean touch); Novo construtor da classe. public int getQtdAltoFalantes (); Retorna a quantidade de alto-falantes. public boolean isPossuiTouchPad(); Retorna true caso possua touchPad. public String retornaInformacoesCompletas(); Deve retornar o texto: ”Sou um notebook. Meu processador ” + super.getFabricanteDoProcessador() + “ trabalha a uma velocidade “ + super.getVelocidadeDoProcessador() + “. Possuo “ + super.getQtdMemoria() + “ Mb de memória. Tenho um total de ” + qtdAltoFalantes + “alto-falantes”; << para resgatar as informações da super classe use a palavra chave super >> public String dizerInformacoes(); Deve retornar o texto: ”Sou um notebook. Meu processador ” + fabricanteDoProcessador + “ trabalha a uma velocidade “ + velocidadeDoProcessador + “. Possuo “ + qtdMemoria + “ Mb de memória.”. << Desktop >> public String corDoGabinente; Determina a cor do gabinete. public int potenciaDaFonte; Inteiro que armazena a potência da fonte. Ex: 300, 350, 400, etc. E os seguintes métodos: public Desktop(int vel, int memo, String proc); Construtor base da classe. Deve assumir que corDoGabinete = new String(“branco”) e potenciaDaFonte = 400. public Desktop(int vel, int memo, String proc, String cor, int pot); Novo construtor da classe. public String getCorDoGabinente(); Retorna a cor do gabinete. public int getPotenciaDaFonte(); Retorna a potência da fonte. public String retornaInformacoesCompletas(); Deve retornar o texto: ”Sou um desktop. Meu processador ” + super.getFabricanteDoProcessador() + Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai - 188 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo “ trabalha a uma velocidade “ + super.getVelocidadeDoProcessador() + “. Possuo “ + super.getQtdMemoria() + “ Mb de memória. Meu gabinete é de cor ” + corDoGabinete + “.”; << para resgatar as informações da super classe use o modificador super >> public String dizerInformacoes(); Deve retornar o texto: ”Sou um desktop. Meu processador ” + fabricanteDoProcessador + “ trabalha a uma velocidade “ + velocidadeDoProcessador + “. Possuo “ + qtdMemoria + “ Mb de memória.”. Para testarmos nosso ambiente, crie uma classe Principal que instancie três objetos, sendo um de cada um dos tipos. Para atestar a questão da herança, nos objetos dos tipos Notebook e Desktop, faça chamadas aos métodos da super classe Computador como, por exemplo, o método dizerInformacoes(). Feito isso, para testarmos o polimorfismo, instancie objetos dos tipos NoteBook e Desktop e atribua-os a referencias de Computador. Agora teste o polimorfismo, invocando o método dizerInformacoes().

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 189 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo

17. Conexão com bancos de dados - J.D.B.C.

O banco de dados é onde persistimos (armazenamos) os dados que pertencem ao nosso sistema. A maioria dos bancos de dados comerciais hoje em dia é do tipo relacional e derivam de uma estrutura diferente da orientada a objetos. Para executarmos o manuseio de informações em um banco de dados, devemos fazer uso de sub-linguagens de banco de dados (Database Sub Language – DSL), voltadas para as operações do banco de dados. Geralmente, as sub-linguagens de dados são compostas da combinação de recursos para a definição de dados (Data Definition Language – DDL) e recursos específicos para a manipulação de dados (Data Manipulation Language – DML). A conhecida linguagem de consulta SQL (Structured Query Language) é uma destas linguagens que fornece suporte tanto a DDL como a DML. Para efetivarmos a conexão de um programa desenvolvido em Java com uma base de dados qualquer, a linguagem Java implementa um conceito de ponte, que implementa todas as funcionalidades que um banco de dados padrão deve nos fornecer.

No desenho acima podemos notar o relacionamento direto da JDBC com o banco de dados, porém este relacionamento depende também da extensão desta ponte que é representada

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 190 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo pela implementação JDBC escolhida. Esta implementação depende do banco de dados com o qual queremos nos comunicar e a ela damos o nome de Driver. Para gerenciar estes drivers de conexão, a linguagem Java possui um gerente de drivers chamado java.sql.DriverManager. O driver do MySQL pode ser adicionado através das Propriedades do Projeto, na aba Biblioteca utilize o botão Adicionar Biblioteca e selecione MySQL JDBC Driver. OBS: caso você queria colocar o driver de outro banco de dados é preciso clicar no botão Adicionar JAR/Pasta e selecionar o arquivo .jar que representa o drive desejado (OBS: no site do fabricante é possível obter este driver).

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 191 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo Para criarmos uma conexão com o banco de dados primeiramente é necessário informarmos qual driver de conexão o DriverManager deve utilizar. Feita essa disponibilização do arquivo de driver, na programação se faz necessário registrar o driver do banco de dados no sistema. Para isso, basta carregá-lo através do método Class.forName() . Esse método abre uma classe que se registra com o DriverManager.getConnection(). A partir da classe DriverManager, podemos utilizar um método chamado getConnection, com o qual poderemos nos conectar a uma determinada base de dados utilizando uma String padrão de conexão.
Conexao.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 } public Connection conectar() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root"); System.out.println("Conectou no banco de dados."); } catch (SQLException ex) { System.out.println("Erro: Não conseguiu conectar no BD."); } catch (ClassNotFoundException ex) { System.out.println("Erro: Não encontrou o driver do BD."); } /** * Classe utilizada para conectar e desconectar do banco de dados. */ public class Conexao { public static void main(String[] args) { Conexao conexao = new Conexao(); Connection conn = conexao.conectar(); conexao.desconectar(conn); import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; package material.jdbc;

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai

- 192 -

Programação Orientada a Objetos – Universidade Metodista de São Paulo
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 } } } } } catch (SQLException ex) { System.out.println("Não conseguiu desconectar do BD."); public void desconectar(Connection conn) { try { if(conn != null && !conn.isClosed()) { conn.close(); System.out.println("Desconectou do banco de dados."); } return conn;

Na linha 20 estamos carregando o driver do banco de dados MySQL com.mysql.jdbc. Driver. Na linha 21, utilizamos o método getConnection da classe DriverManager para criar uma conexão com o banco de dados armazenado em um objeto do tipo java.sql.Connection. O método getConnection() recebe três parâmetros: 1˚ url de conexão com o banco de dados, 2˚ usuário e 3˚ senha. Para fazer a conexão com o banco de dados precisamos tratar algumas exceções que podem ocorrer: Na linha 23, tratamos a exceção java.sql.SQLException que é lançada caso não consiga criar uma conexão com o Banco de Dados. Na linha 25, tratamos a exceção java.lang.ClassNotFoundException que é lançada caso não consiga carregar o driver do banco de dados. Depois de utilizar a conexão com o banco de dados é muito importante que liberemos esta conexão, ou seja, precisamos encerrar a conexão com o banco de dados. Na linha 32 temos o método desconectar que recebe uma Connection como parâmetro, dentro deste método estamos verificando se a conexão com o banco ainda não foi encerrada para depois encerra-la. Quando tentamos encerrar uma conexão com o banco também pode ocorrer alguma exceção para isso na linha 38 estamos tratando caso ocorra alguma java.sql.SQLException. Quando executamos esta classe, temos a seguinte saída no console: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai - 193 -

import import import import java.consulta(). Statement stm = conn.Statement. */ public class Consulta { public static void main(String[] args) { Consulta consultaBD = new Consulta().sql.createStatement(). java. try { String consulta = "SELECT * FROM PESSOA WHERE NOME like 'A%'". podemos então solicitar a execução de comandos SQL.jdbc.194 - . java.Connection.sql. porém é importante ressaltar que o intuito de uma consulta a um banco de dados é o de receber uma informação. Connection conn = conexao.ResultSet. } public void consulta() { Conexao conexao = new Conexao(). consultaBD.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package material. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .sql. java. Desconectou do banco de dados. Consulta de dados Uma vez conectado.ResultSet que deve receber o retorno do método executeQuery que é responsável por executar a consulta. /** * Classe utilizada para demonstrar a consulta ao banco de dados. logo.SQLException. é fundamental que essa resposta seja armazenada em uma estrutura. O Statement é o objeto que servirá de instrumento para a execução de comandos SQL.conectar().Statement.sql.Programação Orientada a Objetos – Universidade Metodista de São Paulo Conectou no banco de dados. Para isso podemos utilizar a classe java.sql. Exemplo: Consulta. para que tenhamos acesso a este tipo de chamada ao banco de dados é necessário criarmos um java.sql.

exceto char. Observe também a forma como o ResultSet foi percorrido na linha 26. logo. Todos estes métodos devem receber como parâmetro o nome da coluna de resposta.getString("NOME")).23 Desconectou do banco de dados.Programação Orientada a Objetos – Universidade Metodista de São Paulo 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ResultSet resultado = stm.Amanda . Para resgatar as informações desejadas. 1 .getInt("IDADE") + "\n"). O método next() retorna true. } } catch (SQLException ex) { System. A classe ResultSet oferece o método next() para percorrer a resposta dada pelo banco de dados. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai ." + resultado.getLong("ID")). Caso nossa consulta acima lista houvesse retornado 4 linhas. ou o número correspondente a posição da coluna retornada.println("Não conseguiu consultar os dados de Pessoa. System.out.print(" .").195 - .out.out. System. caso ainda existam novas linhas na resposta e false quando não tem mais registros para percorrer.print(resultado. antes de ler a primeira linha de resposta de sua consulta é necessário a chamada a este método next() para que o ponteiro passe para a primeira posição e possa resgatar as informações desejadas.30 5 . while(resultado. temos a seguinte saída no console: Conectou no banco de dados.out.print(" . } } } Quando executamos essas classe. assim como no exemplo anterior. por padrão o ResultSet estaria com seu ponteiro posicionado na posição -1.desconectar(conn).next()) { System. É importante ressaltar que apenas um único objeto ResultSet pode ser aberto por vez por Statement ao mesmo tempo. } finally { conexao." + resultado.executeQuery(consulta). a classe ResultSet oferece métodos do tipo get para todos os tipos de dados primitivos.Ana . Note pelo exemplo anterior que o método responsável por executar a consulta na base de dados foi o executeQuery na linha 24.

System.println("Não conseguiu adicionar uma pessoa no BD.inserir().sql. stm.sql. manipulacao. no banco de dados. } finally { conexao."). Manipulacao. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Manipulação de dados Podemos utilizar a classe Statement para guardar (persistir) ou atualizar as informações na base de dados. try { 25)".196 - .sql. import java. String adicionar = "INSERT INTO PESSOA (NOME.Connection. package material.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public void atualizar() { } } Statement stm = conn.createStatement().Statement. import java.desconectar(conn). public void inserir() { Conexao conexao = new Conexao(). Connection conn = conexao.println("Adicionou a pessoa Rafael no BD.conectar(). import java. } /** * Classe utilizada para demonstrar como adicionar ou atualizar dados * */ public class Manipulacao { public static void main(String[] args) { Manipulacao manipulacao = new Manipulacao().jdbc.SQLException.atualizar(). utilizando o método execute.out.out.execute(adicionar)."). } catch (SQLException ex) { System. IDADE) VALUES ('Rafael'. manipulacao.

JdbcOdbcDriver com."). try { String atualizar = "UPDATE PESSOA SET NOME = 'Cristiano' WHERE NOME = 'Rafael'".executeUpdate(atualizar). pedimos para o Statement atualizar um registro da tabela PESSOA do banco de dados. } catch (SQLException ex) { System. Conexao conexao = new Conexao()."). System. Note que para adicionar ou atualizar as informações no banco de dados.desconectar(conn). tanto da classe Statement como da classe Connection. é importante a chamada ao método close().conectar().out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 } } } Statement stm = conn. Na linha 40. podemos utilizar o método execute. Connection conn = conexao.jdbc. stm.mysql. pedimos para o Statement adicionar um novo registro na tabela PESSOA do banco de dados. para que a conexão com o banco de dados seja finalizada. Após a conclusão das operações e leitura ou de manipulação de dados.Driver String de Conexão jdbc:odbc:<<nome da base>> jdbc:mysql://<<ipDoBanco>>/<<baseDeDados>> Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . A classe Statement possui o método execute para adicionar ou atualizar um registro no banco de dados e o método executeUpdate para atualizar as informações no banco de dados.out.println("Não conseguiu atualizar uma pessoa no BD. Na linha 24.odbc.jdbc. Relação de algumas bases de dados Banco Microsoft ODBC MySQL Driver sun. } finally { conexao.createStatement(). a diferença é que este método retorna um inteiro com a quantidade de registros que foram alterados.println("Atualizou o nome de Rafael para Cristiano.197 - .

passo a passo.exemplo. iremos criar um sistema de cadastro de veículos. Read. criar uma aplicação completa de acesso a uma base de dados utilizando JDBC.driver. Delete) Neste exemplo vamos. Para tal. } public void setPlaca(String placa) { this. Update. */ public class Carro { private String placa.198 - .modelo = modelo. private String modelo.R. } public void setModelo(String modelo) { this.D.U.jdbc. private Double potencia. public String getModelo() { return modelo. (Create. /** * Classe utilizada para representar um carro. Para esta aplicação.OracleDriver jdbc:oracle:thin:@ (DESCRIPTION= (ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = <<ipDoBanco>>)(PORT = 1521))) (CONNECT_DATA =(SERVICE_NAME = <<nomeDaBase>>))) Exemplo de aplicação C.placa = placa.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package material. como segue abaixo: Carro.jdbc. } public Double getPotencia() { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . criamos o POJO Carro. } public String getPlaca() { return placa.Programação Orientada a Objetos – Universidade Metodista de São Paulo jdbc:oracle:thin:@<<ipDoBanco>>:1521:<<nomeDaBase>> ou Oracle oracle.

sql. conn = DriverManager. private ResultSet rs = null. } } Agora que já temos modelado a nossa classe principal. } public void setPotencia(Double potencia) { this. String ipDoBanco = "localhost". senha). /** * Classe utilizada para executar as ações sobre o banco de dados. */ public class Conexao { private Connection conn = null. } catch (SQLException ex) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . String nomeDoBanco = "carro".199 - .jdbc. java.forName("com.getConnection(stringDeConexao.exemplo. private Statement stm = null. usuario.Connection. conforme segue abaixo: Conexao.sql.sql. java. Class.Statement.mysql. String stringDeConexao = "jdbc:mysql://" + ipDoBanco + "/" + nomeDoBanco."). java.Driver").out. Para estabelecermos a conexão com a base de dados de uma maneira mais simples.SQLException. import import import import import java.DriverManager.sql.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package material. java.sql.jdbc. String senha = "root". devemos definir como nosso programa irá interagir com a base de dados.println("Conectou no banco de dados.potencia = potencia.ResultSet. private Connection conectar() { try { String usuario = "root". System.Programação Orientada a Objetos – Universidade Metodista de São Paulo 28 29 30 31 32 33 34 return potencia. faremos uso da classe Conexao.

} return ok. } public ResultSet executarConsulta(String consulta) { conn = conectar().stm). stm. fecharStatement(this.executeQuery(consulta). } catch (SQLException ex) { System.200 - . desconectar(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . //Caso ocorra algum erro desconecta do banco de dados.Programação Orientada a Objetos – Universidade Metodista de São Paulo 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 System. } public void desconectar() { fecharResultSet(this.out.").conn).out. } catch (ClassNotFoundException ex) { System.println("Erro: Não encontrou o driver do BD. } return rs.println("Não conseguiu executar a consulta\n" + consulta). rs = stm.createStatement(). conn = conectar(). } public boolean executarDML(String dml) { boolean ok = false. try { stm = conn. try { stm = conn.createStatement().").println("Nao conseguiu executar o DML\n" + dml). } finally { desconectar().rs).execute(dml). fecharConnection(this. ok = true.out.out. } return conn. } catch (SQLException ex) { System.println("Erro: Não conseguiu conectar no BD.

close()."). } } catch (SQLException ex) { System.isClosed()) { resultado. } } Utilizaremos um padrão de projeto chamado DAO (Data Acess Object). definidas por seus métodos.println("Erro ao fechar o procedimento de consulta.out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 } } public void fecharConnection(Connection conn) { try { if(conn != null && !conn.out.println("Erro ao fechar o resultado da consulta. ou seja. } } public void fecharStatement(Statement stm) { try { if(stm != null && !stm. Semelhantemente.out. } } catch (SQLException ex) { System.close(). para nosso exemplo criaremos uma classe CarroDAO com as quatro operações básicas. converter em instruções SQL e mandar para o banco de dados.isClosed()) { conn. Desta forma conseguimos distinguir fortemente a modelagem do sistema da modelagem de dados e das regras de negócio. temos um DAO para cada objeto do domínio do sistema."). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .println("Desconectou do banco de dados."). } } catch (SQLException ex) { System. Geralmente.201 - .close(). } } public void fecharResultSet(ResultSet resultado) { try { if(resultado != null && !resultado.out. System."). deve saber como pegar os objetos. O DAO deve saber buscar os dados do banco e converter em objetos para ser usado pela sua aplicação.isClosed()) { stm.println("Nao conseguiu desconectar do BD.

").sql. */ public class CarroDAO { public void incluir(Carro carro) { String incluir = "INSERT INTO CARRO VALUES ('" + carro. if(rs. " + carro.getPlaca() + "'.setPlaca(rs.202 - . conexao. Carro carro = null.jdbc.executarDML(incluir).exemplo. } } catch (SQLException ex) { System. ResultSet rs = conexao.out.SQLException. carro. Conexao conexao = new Conexao(). } public Carro consultarPorPlaca(String placa) { Conexao conexao = new Conexao(). * que envolvem o Carro.setModelo(rs.getPotencia() + ")". import java.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 package material.ResultSet. } finally { conexao.setPotencia(rs. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . '" + carro. carro.getModelo() + "'. carro.Programação Orientada a Objetos – Universidade Metodista de São Paulo CarroDAO.next()) { carro = new Carro().sql. try { String consulta = "SELECT * FROM CARRO WHERE PLACA = '" + placa + "'".println("Nao conseguiu consultar os dados do Caminhao.getString("MODELO")). /** * Classe utilizada para executar as operações no banco de dados.getDouble("POTENCIA")). import java.desconectar().getString("PLACA")).executarConsulta(consulta). } return carro.

devemos importar o arquivo correspondente ao banco de dados MySQL. O método consultarPorPlaca recebe apenas a placa de um carro (imagine que esta informação é uma chave da tabela e que não devemos ter mais de um carro com a mesma placa) e que retorna um objeto do tipo Carro com todos os seus atributos devidamente alimentados. conexao. é necessário que você acrescente a biblioteca (arquivo .java 01 02 03 04 05 package material. crie um programa semelhante ao abaixo: TestarCarro. conexao.jar) correspondente ao seu banco de dados. conseguimos isolar toda esta interação com a base de dados do restante do código.Programação Orientada a Objetos – Universidade Metodista de São Paulo 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 public void alterarPorPlaca(Carro carro) { String update = "UPDATE CARRO SET MODELO = '" + carro. Para o nosso exemplo. import java. Para testarmos nosso sistema.util.executarDML(update).getModelo() + "'.jdbc.203 - . } public void excluir(Carro carro) { String delete = "DELETE FROM CARRO WHERE PLACA='" + carro. } } Para que a classe acima não apresente nenhum erro de compilação.Scanner.getPotencia() + "WHERE PLACA = '" + carro. O método alterarPorPlaca() recebe um objeto Carro e a partir de sua placa faz a atualização nos atributos placa e potencia.exemplo. POTENCIA = " + carro. Observe que nosso método incluir() apenas recebe o objeto Carro a ser inserido na base de dados e internamente faz toda a operação relacionada ao banco de dados.getPlaca() + "'".executarDML(delete). Desta forma.getPlaca() + "'". /** Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Conexao conexao = new Conexao(). tornando-o mais simples de se realizar qualquer tipo de manutenção. O método excluir() recebe o Carro como parâmetro e o apaga da base de dados. Conexao conexao = new Conexao().

System.excluir(carro). carro = carroDAO. carroDAO. System.in).consultarPorPlaca(placaConsultar).incluir(carro). char opcao = ' '.out. opcao = menu().println("\t(I)ncluir").out. carro = carroDAO. carroDAO.println("\t(C)onsultar"). } public static char menu() { Scanner s = new Scanner(System.println("\t(A)lterar"). case 'A': carro = coletarDados().out.print("\nOpcao: ").println("\t(S)air").out. break. do { Carro carro = null. break.out. } while(opcao != 'S'). */ public class TestarCarro { public static void main(String[] args) { CarroDAO carroDAO = new CarroDAO(). break. System. break.println("\t(E)xcluir"). System. switch(opcao) { case 'I': carro = coletarDados(). System. carroDAO.alterarPorPlaca(carro).consultarPorPlaca(placaExcluir). System. case 'C': String placaConsultar = consultarPlaca().println("Escolha a sua opcao: ").out. } mostrarDadosCarro(carro). char opcao = ' '.204 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 * Classe utilizada para testar o CRUD de Carro.out. case 'E': String placaExcluir = consultarPlaca(). System. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

setPlaca(s.getModelo()).nextLine()). System.out. return carro. return s.out. System.print("Digite a potencia do carro: "). System.out.nextLine(). System.setPotencia(s. System.setModelo(s.println("\n############### DADOS DO CARRO #################"). temos a seguinte saída no console: Escolha a sua opcao: " (I)ncluir " (E)xcluir " (A)lterar Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out. System.charAt(0). } public static String consultarPlaca() { Scanner s = new Scanner(System.in).print("Digite a placa do carro: ").nextDouble()).println("############### DADOS DO CARRO ################# \n"). carro.getPotencia()). } public static Carro coletarDados() { Scanner s = new Scanner(System. return opcao. System.out.getPlaca()).205 - .out.println("POTENCIA DO MOTOR: " + carro. System.println("MODELO: " + carro.in). Carro carro = new Carro().out. } } } Ao executarmos a classe TestarCarro.print("Digite a placa do carro: ").toUpperCase().Programação Orientada a Objetos – Universidade Metodista de São Paulo 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 opcao = s.out.nextLine()).println("PLACA: " + carro.nextLine(). } public static void mostrarDadosCarro(Carro carro) { if(carro != null) { System.print("Digite o modelo do carro: "). carro.out. carro.

0 ############### DADOS DO CARRO ################# Escolha a sua opcao: " (I)ncluir " (E)xcluir " (A)lterar " (C)onsultar " (S)air Opcao: Se consultarmos todos os carros cadastrados no banco de dados aparecerá o carro que acabamos de criar: mysql> select * from carro. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo " " (C)onsultar (S)air Opcao: A console fica aguardando até que digitemos alguma opção. Desconectou do banco de dados.206 - . Desconectou do banco de dados. +----------+--------+----------+ | placa | modelo | potencia | +----------+--------+----------+ | abc-1234 | X3 | 450. ############### DADOS DO CARRO ################# PLACA: abc-1234 MODELO: X3 POTENCIA DO MOTOR: 450.05 sec> Agora vamos utilizar a opção ‘C’ para consultar um carro pela placa “abc-1234”: Opcao: C Digite a placa do carro: abc-1234 Conectou no banco de dados. primeiro vamos criar um novo carro para isto vamos entrar com a opção ‘I’: Digite a placa do carro: abc-1234 Digite o modelo do carro: X3 Digite a potencia do carro: 450 Conectou no banco de dados.00 | +----------+--------+----------+ 1 row in set <0.

Programação Orientada a Objetos – Universidade Metodista de São Paulo ############### DADOS DO CARRO ################# PLACA: abc-1234 MODELO: X3 POTENCIA DO MOTOR: 450. +----------+--------+----------+ | placa | modelo | potencia | +----------+--------+----------+ | abc-1234 | X4 | 350.207 - . ############### DADOS DO CARRO ################# PLACA: abc-1234 MODELO: X4 POTENCIA DO MOTOR: 350.0 ############### DADOS DO CARRO ################# Escolha a sua opcao: " (I)ncluir " (E)xcluir " (A)lterar " (C)onsultar " (S)air Opcao: Se consultarmos todos os carros cadastrados no banco de dados aparecerá o carro que acabamos de alterar: mysql> select * from carro. Desconectou do banco de dados.0 ############### DADOS DO CARRO ################# Escolha a sua opcao: " (I)ncluir " (E)xcluir " (A)lterar " (C)onsultar " (S)air Opcao: Agora vamos utilizar a opção ‘A’ para alterar as informações de modelo e potencia: Opcao: A Digite a placa do carro: abc-1234 Digite o modelo do carro: X4 Digite a potencia do carro: 350 Conectou no banco de dados.00 | Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

Opcao: E Digite a placa do carro: abc-1234 Conectou no banco de dados. cada vez que um produto é vendido deve ser reduzido do estoque a quantidade de produtos e quando a Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . 2-) Crie uma aplicação para controlar a venda e o estoque dos produtos criados no exercício anterior. Desconectou do banco de dados. tipo e data de validade).00 sec> Agora vamos utilizar a opção ‘E’ para apagar o carro do banco de dados. Conectou no banco de dados. Consultar.0 ############### DADOS DO CARRO ################# Escolha a sua opcao: " (I)ncluir " (E)xcluir " (A)lterar " (C)onsultar " (S)air Opcao: Se consultarmos todos os carros. preco. Atualizar e Apagar) para controlar as informações referentes a Produto (nome. Empty set <0. O controle de estoque deve conter o Produto e sua Quantidade em estoque. não teremos nenhum registro no banco de dados: mysql> select * from carro. Desconectou do banco de dados.Programação Orientada a Objetos – Universidade Metodista de São Paulo +----------+--------+----------+ 1 row in set <0.00 sec> Exercícios 1-) Crie uma aplicação CRUD (Salvar. ############### DADOS DO CARRO ################# PLACA: abc-1234 MODELO: X4 POTENCIA DO MOTOR: 350.208 - .

Programação Orientada a Objetos – Universidade Metodista de São Paulo quantidade em estoque for menor ou igual a 10. se o estoque for 0 (zero) então não deve permitir a venda do produto. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . então deve informar que é necessário comprar mais produto.209 - .

. faremos uso do pacote swing.SWING A Linguagem Java oferece dois pacotes básicos para o desenvolvimento de interfaces gráficas. por oferecer um ambiente amigável e simples. termos um passo a passo. Interfaces gráficas . barras de menu. desde o desenvolvimento de aplicações robustas até aplicações para dispositivos portáteis. Utilizando o NetBeans como IDE de desenvolvimento para interfaces gráficas O NetBeans é uma IDE de desenvolvimento que oferece suporte aos mais variados segmentos de desenvolvimento Java. etc. porém seu grande diferencial está no desenvolvimento de interfaces gráficas. guias. Todos os pacotes oferecem recursos para criação de janelas.. (Novo Projeto) Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . A seguir. Para tal.210 - . listando os principais pontos de como se criar uma aplicação gráfica no NetBeans. sendo eles o AWT e o Swing. que é um pacote derivado do awt com a vantagem de ser 100% multiplataforma.. Em nosso curso. botões. Passo 1 – Criando um projeto Para que seja possível se criar e organizar seus arquivos Java..Programação Orientada a Objetos – Universidade Metodista de São Paulo 18. primeiramente é necessária a criação de um novo projeto. use a opção: File (Arquivo) → New Project.

Programação Orientada a Objetos – Universidade Metodista de São Paulo Na aba Categories (Categorias) selecione a opção e na aba Projects (Projetos) selecione a opção Java Application (Aplicação Java). clique em Next (Próximo) uma nova janela será exibida. Feito isso.211 - . solicitando que mais informações sejam fornecidas: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Isso nos remete a criação de um projeto padrão do Java.

apenas identificará a IDE que este é seu projeto principal de trabalho. devido a sua função em nosso projeto. Preferencialmente. Neste campo.Programação Orientada a Objetos – Universidade Metodista de São Paulo Nesta janela. Coloque um nome que julgar melhor. Passo 2 – Criando uma nova classe (JFrame) Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . devemos preencher o campo Project Name (Nome do Projeto) com alguma informação. coloque um nome que tenha relação com o programa que você irá desenvolver.212 - . sendo que no nosso caso colocamos o nome Principal. caso você possua mais de um projeto aberto dentro do NetBeans. Esta classe será responsável por iniciar a chamada a outras classes do projeto. podemos alterar o local onde os arquivos desenvolvidos serão salvos.java”. Dentro do projeto tem uma pasta chamada src e dentro desta pasta fica os arquivos fontes. é possível criar uma classe inicial no projeto. este será o caminho que você acessar para localizar seus arquivos “. A opção Set as Main Project (Definir como Projeto Principal). Por fim. Clique em Finish (Finalizar). Mais abaixo existe a opção Project Location (Localização do projeto). Atenção: caso você queira resgatar suas classes mais tarde. na opção Create Main Class (Criar Classe Principal).

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . sendo que a pasta na qual criaremos nossos novos arquivos Java será a de nome Source Packages (Pacotes de Código-Fonte). temos acesso a um menu de opções.Programação Orientada a Objetos – Universidade Metodista de São Paulo Inicialmente.213 - . mais especialmente na primeira opção: New (Novo). ou sobre o nome do pacote metodista. Clicando com o botão direito do mouse sobre nome Source Package. conforme figura abaixo. nosso projeto será dividido em 4 pastas principais. Para a criação de uma janela.aula.swing. Dentro deste menu. podemos escolher qual o tipo de novo componente desejamos criar. selecione a opção JFrame Form (Formulário JFrame).

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .214 - . conforme a figura abaixo e clique em Finish (Finalizar).Programação Orientada a Objetos – Universidade Metodista de São Paulo Com isso uma nova janela será exibida: Nesta nova janela coloque apenas o Class Name (Nome da Classe).

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .215 - . seremos automaticamente direcionados para a tela de edição gráfica. vamos clicar com o botão direito do mouse no JFrame. que habilitará o novo assistente de criação de janelas chamado Matisse. Caso seja da preferência. na janela do Inspector (Inspetor).Programação Orientada a Objetos – Universidade Metodista de São Paulo Passo 3 – Editando visualmente seu novo Formulário JFrame Com nossa classe devidamente criada. podemos manter marcada a opção Free Design (Desenho Livre). e logo abaixo a janela de Properties (Propriedades). de forma padronizada e seguindo as melhores práticas de desenvolvimento. com a lista de componentes que podem ser colocados no JFrame. a qual nos dará mais liberdade para trabalhar com o JFrame. A seguir. temos a Palette (Paleta). Ao lado esquerdo. temos a janela do Project (Projeto). podemos escolher a opção Null Layout. O Inspetor nos mostra todos os componentes que já foram adicionados ao JFrame. Ao lado direito. O Matisse é um assistente bastante interessante que procura automaticamente alinhar e dimensionar os componentes. logo abaixo o Navigator (Navegador) e o Inspector (Inspetor). e indo até a opção Set Layout (Definir Layout).

Programação Orientada a Objetos – Universidade Metodista de São Paulo Agora selecione o JFrame clicando sobre ele uma vez com o botão esquerdo do mouse na janela principal. Na nova listagem que será exibida. ou na janela do Inspector e na janela de Propriedades vamos selecionar a opção Code (Código).216 - . altere o valor de Form Size Policy (Política de Tamanho de Formulário) para Generate Resize Code (Gera Código de Redimensionamento). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

Repita este Procedimento para os outros dois componentes. podemos movê-los ou alterar o seu tamanho livremente.217 - . como resultando queremos ter algo semelhante a janela abaixo: Com cada um dos componentes devidamente organizados na tela.Programação Orientada a Objetos – Universidade Metodista de São Paulo Este modo de redimensionamento é utilizado para os itens da tela serem ajustados automaticamente conforme o tamanho da janela é alterado. Para trocar entre o ambiente de Design (Desenho) que mostra um ambiente mais gráfico e fácil de visualizar os componentes e o ambiente de Fonte (Source) que mostra o código fonte da classe. usamos as seguintes abas: Passo 4 – Adicionando novos componentes ao Formulário JFrame Agora iremos adicionar três novos componentes ao nosso JFrame: • JButton (botão) • JLabel (rotulo) • JTextField (campo para entrada de texto) Para isso. selecione o primeiro destes componentes e clique dentro do JFrame no local onde deve ficar o componente. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . na janela Paleta.

Programação Orientada a Objetos – Universidade Metodista de São Paulo Ao clicar com o botão direito do mouse sobre cada um dos componentes.. para alterar o texto exibido em Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . clique com o botão direito do mouse sobre cada um dos três componentes e selecione a opção Edit Text (Editar Texto). será listado algumas opções: Iremos selecionar a opção Change Variable Name. mais uma vez. (Mudar o nome da variável) e vamos colocar os seguintes nomes nas variáveis: • o JTextField vamos chamar de entrada. • e o JLabel vamos chamar de saida.. • o JButton vamos chamar de botao. Feito isso.218 - .

na janela de Propriedades.Programação Orientada a Objetos – Universidade Metodista de São Paulo cada um destes componentes. O resultado será algo próximo da janela abaixo: Note que o JLabel mesmo não parecendo visível. vamos apagar o texto do JTextField e do JLabel e vamos alterar o texto do JButton para “Clique aqui”.219 - . ele ainda está no JFrame e pode ser visto e selecionado através do Inspector. propriedade Variable Name (Variável Nome). Por hora. após selecionar o componente desejado. é possível notar que o novo nome do componente pode ser obtido tanto na janela do Inspector como. Após estes passos. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

devemos selecionar Action e por fim a opção actionPerformed. JButton. Quando adicionamos estes componentes na tela. desta forma será automaticamente mudado a visão do projeto para o modo de edição de fonte (Source).Programação Orientada a Objetos – Universidade Metodista de São Paulo Note que todos os componentes que estamos trabalhando aqui são Objetos e o JFrame. estamos criando uma nova instancia dos objetos deles.220 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Passo 5 – Adicionando uma ação ao botão Para adicionarmos uma ação ou um Evento propriamente dito ao botão. devemos clicar sobre ele (ou sobre seu correspondente na janela do Inspector) com o botão direito do mouse e dentro da opção Events (Eventos). JTextField e JLabel.

estará com o cursor dentro do seguinte texto: Lembre-se. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . ficando então este trecho de código da seguinte maneira: Na Linha 72. logo apague esta linha e no lugar dela escreva o texto abaixo.221 - . lemos o conteúdo de texto que existe no componente entrada (o JTextField) e armazenamos seu valor na variável do tipo String chamada dados. Na linha 73. colocamos no componente saida (o JLabel) o texto que havíamos guardado na variável String..Programação Orientada a Objetos – Universidade Metodista de São Paulo Uma vez no modo de edição Fonte. o “//” simboliza uma linha de comentário..

assim como fizemos no passo 4. então clique 2 vezes sobre a classe Principal no menu Projeto e a editaremos da seguinte maneira: Principal. } } Na linha 8 estamos criando um objeto do nosso formulário (PrimeiroForm) e na linha 10 estamos declarando que o mesmo deve ficar visível.Programação Orientada a Objetos – Universidade Metodista de São Paulo Com isso.java na janela do Projeto e selecionar a opção Run File (Executar Arquivo).aula.swing. public class Principal { public static void main(String[] args) { PrimeiroForm form = new PrimeiroForm(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Por fim.222 - . Por fim.setVisible(true). sabemos agora que com os códigos “getText()” e “setText()”. /** * Classe utilizada para demonstrar como criar um objeto de uma classe * filha de JFrame e exibilá na tela. todo o texto inserido na JTextField será transferido para a JLabel. Feito isso.java 01 02 03 04 05 06 07 08 09 10 11 12 package metodista. e note que ao se digitar algo na JTextField e clicar no botão “Clique Aqui”. //Mostra o JFrame na tela. form. devemos chamar essa nossa nova janela de algum lugar. nosso programa será executado. basta salvar ambos os arquivos e clicar com o botão direito do mouse sobre a classe Principal. podemos “pegar” ou “colocar” um texto em um dos componentes. porém durante a execução do programa.

dentro dele podemos adicionar diversos componentes como botões. imagens.HIDE (Janela continua aberta.Programação Orientada a Objetos – Universidade Metodista de São Paulo Utilizando o JFrame O JFrame é uma classe que representa uma janela ou quadro da aplicação desktop. textos. usando o System.WindowConstants.EXIT_ON_CLOSE (Encerra todo o programa.DISPOSE (Fecha a janela) Exemplo: setDefaultCloseOperation(javax. mas não é mostrada na tela) . listas.setDefaultCloseOperation(int operation) Seta a forma como a janela do JFrame deve ser fechada.exit(0)) . JFrame.swing.EXIT_ON_CLOSE).DO_NOTHING (Não faz nada) . Alguns dos métodos mais utilizados do JFrame são: JFrame.setTitle(String title) Altera o titulo da janela. campos de digitação.223 - . este método recebe uma String como titulo. seus valores podem ser: . Exemplo: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

204)).awt. Utilizando JTextField O pacote Swing. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Exemplo: setResizable(false).224 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo setTitle("Primeiro Formulário"). 255. JFrame.setResizable(Boolean resizable) Dependendo do valor true (verdadeiro) ou false (falso). Exemplo: setName("principal"). podemos fazer da seguinte forma: this. clique sobre ele e clique sobre o JFrame.setBackground(new java. conta com uma classe chamada JTextField.getContentPane(). Esta classe é responsável por receber texto quando adicionada a um container (JFrame). a janela JFrame permite ter seu tamanho alterado durante sua execução. JFrame.Color(204. Após o JTextField ter sido posicionado. é possível alterar sua disposição e tamanho no formulário. localize-o no painel ao lado direito na Paleta. Para trocar a cor do JFrame. Para adicioná-lo a sua aplicação.setName(String name) Altera o nome da janela JFrame.

mas todos os caracteres digitados nele são guardados dentro de uma String. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Alguns dos métodos mais utilizados do JTextField são: JTextField. JTextField.225 - . seja ele numérico ou caractere. E vimos anteriormente que podemos alterar o nome e texto do JTextField.getText(“O texto deve estar entre aspas duplas”).getText().Programação Orientada a Objetos – Universidade Metodista de São Paulo Este campo é capaz de receber qualquer tipo de dado.setText(String texto) Coloca uma String dentro do campo JTextField solicitado. Exemplo: entrada. JTextField. Exemplo: entrada. Exemplo: String texto = entrada.setEditable(true).setEditable(boolean valor) Dependendo do valor passado true (verdadeiro) ou false (falso) permite ou não a edição do campo.getText() Retorna o valor digitado dentro do campo solicitado.

Exemplo: entrada.awt. é nela em que adicionamos as ações que desejamos que nosso programa execute. pois na maioria dos casos. Exemplo: entrada.Font("Arial".setFont(Font font) Altera o tipo de formato da fonte do componente JTextField. 255. JTextField. que utiliza o padrão RGB para definir a cor. Utilizando JButton Assim como o JTextField.Color(204.awt. Esta classe é uma das mais importantes de todas as aplicações. JTextField. Depois de posicionado. Para adicionálo a sua aplicação. 10)). o componente JButton também faz parte do pacote Swing. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Este método recebe um objeto do tipo Color. Este método recebe um objeto do tipo Font que defini a fonte.setEditable(false). é possível alterar sua disposição e tamanho. localize-o na Paleta e clique dentro do JFrame na posição desejada.setBackground(Color c) Alterar a cor do fundo do JTextField.setFont(new java.setEnabled(boolean valor) Dependendo do valor passado true (verdadeiro) ou false (falso) desativa o campo solicitado.setBackground(new java. 204)). 1. estilo do texto e tamanho.Programação Orientada a Objetos – Universidade Metodista de São Paulo JTextField. Exemplo: entrada.226 - .

setFont(Font font) Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . JButton.setText(String texto) Coloca uma String dentro do botão JButton solicitado. O mesmo digitado na criação do programa pela opção Edit Text “Editar Texto”.setText(“O texto deve estar entre aspas duplas”). Neste momento é aconselhável uma atenção especial ao nome do botão para que o mesmo seja intuitivo no sentido de auxiliar o usuário na utilização do seu programa. utilize os mesmos procedimentos listados no trecho que fala do JTextField. Exemplo: botao. é recomendável alterar o texto e o nome da variável que representará este componente no programa.getText(). Para tal.getText() Retorna o texto escrito no botão. Exemplo: String texto = botao.setEnabled(boolean valor) Dependendo do valor passado true (verdadeiro) ou false (falso) desativa o campo solicitado. JButton. Alguns dos métodos mais utilizados do JButton são: JButton.setEditable(false). do botão direito do mouse. JButton.227 - . Exemplo: botao.Programação Orientada a Objetos – Universidade Metodista de São Paulo Também como fizemos com o JTextField.

255.228 - .Font("Arial".awt.setIcon(ImageIcon imageIcon) Adiciona um ícone dentro do botão.getResource( "/imagens/ ok. Este método recebe um objeto do tipo Font que defini a fonte. Este método recebe um objeto o tipo ImageIcon que representa uma imagem.setBackground(Color c) Alterar a cor do fundo do JButton.swing. 204)).awt. 10)). Este método recebe um objeto do tipo Color.ImageIcon(getClass(). estilo do texto e tamanho. Exemplo: botao. Exemplo: botao. que utiliza o padrão RGB para definir a cor. JButton.setFont(new java.jpg"))). 1. e esta imagem pode estar dentro do seu projeto ou pode estar em algum diretório do micro. JButton. Exemplo: botao.setIcon(new javax.Color(204.Programação Orientada a Objetos – Universidade Metodista de São Paulo Altera o tipo de formato da fonte do componente JButton. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .setBackground(new java.

é possível alterar sua disposição. Alguns dos métodos mais utilizados do JLabel são: JLabel. Uma coisa interessante é que a propriedade text do JLabel pode receber um texto no formato HTML.Programação Orientada a Objetos – Universidade Metodista de São Paulo Utilizando o JLabel O JLabel é um componente utilizado para mostrar textos ou imagens na tela. Exemplo: String texto = saida. tamanho.getText() Retorna o texto escrito no botão.setFont(Font font) Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Exemplo: saida. Para adicionálo a sua aplicação.229 - . JLabel. localize-o na Paleta e clique dentro do JFrame na posição desejada. do botão direito do mouse.setText(String texto) Coloca uma String dentro do label JLabel solicitado.setText(“O texto deve estar entre aspas duplas”). O mesmo digitado na criação do programa pela opção Edit Text “Editar Texto”.getText(). JLabel. texto e nome. Depois de posicionado.

Este método recebe um objeto do tipo Color. JLabel. localize-o na Paleta e clique dentro do JFrame na posição desejada. Depois de posicionado.getResource( "/imagens/ saida.Color(204.setBackground(Color c) Alterar a cor do fundo do JLabel.setIcon(new javax.awt.awt.ImageIcon(getClass(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .setBackground(new java.swing. Exemplo: saida. 19.Programação Orientada a Objetos – Universidade Metodista de São Paulo Altera o tipo de formato da fonte do componente JLabel. 10)). Para adicioná-lo a sua aplicação.Font("Arial". Este método recebe um objeto o tipo ImageIcon que representa uma imagem. JLabel. Exemplo: saida. e esta imagem pode estar dentro do seu projeto ou pode estar em algum diretório do micro.230 - . 204)). Exemplo: saida. é possível alterar sua disposição. que utiliza o padrão RGB para definir a cor. tamanho. Este método recebe um objeto do tipo Font que defini a fonte. 1.setIcon(ImageIcon imageIcon) Adiciona uma imagem dentro do JLabel. estilo do texto e tamanho.jpg"))).setFont(new java.Utilizando o JComboBox O JComboBox é utilizado para mostrar uma lista de itens no qual o usuário deve escolher um deles. texto e nome. 255.

então será mostrado uma barra de rolagem dentro dele.231 - .setModel(new javax.swing. "Leonardo" })).getSelectedItem().getSelectedItem() Retorna o item que foi selecionado no formato de Objeto. Exemplo: cmbNomes. Exemplo: cmbNomes.setMaximumRowCount(2). se o tamanho máximo for menor que a quantidade de itens dentro do JComboBox.setMaximumRowCount(int count) Informa qual a quantidade máxima de itens serão exibidos no JComboBox.setFont(Font font) Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .setModel(ComboBoxModel aModel) Adiciona os itens que serão listados dentro do JComboBox. JComboBox. Exemplo: String nomeSelecionado = (String) cmbNomes.Programação Orientada a Objetos – Universidade Metodista de São Paulo Alguns dos métodos mais utilizados do JComboBox são: JComboBox. "Cristiano". JComboBox. JComboBox.DefaultComboBoxModel(new String[] { "Rafael".

Programação Orientada a Objetos – Universidade Metodista de São Paulo Altera o tipo de formato da fonte do componente JComboBox.awt. 1. Este método recebe um objeto do tipo Font que defini a fonte. basta utilizar um componente já conhecido do tipo JLabel. crie um formulário JFrame e adicione ao mesmo um componente JLabel.Font("Verdana". Para tal. mais especificamente no Swing é muito simples. Imagens no Swing Para se manusear imagens no Java. Assim como o exemplo anterior. 12)). Exemplo: cmbNomes. como segue no exemplo a seguir: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . estilo do texto e tamanho.232 - .setFont(new java.

e alterando a sua propriedade de nome Icon.233 - . A mais simples delas é simplesmente acessando o menu de propriedades deste item. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Feito isso. existem duas maneiras de se adicionar uma figura a este componente.

Programação Orientada a Objetos – Universidade Metodista de São Paulo Clicando então nessa propriedade uma janela de configurações será exibida e lhe será dada a opção de adicionar uma figura dentro do projeto ou dentro de algum diretório do computador ou url.234 - . Para isto. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . para isto. deve receber como parâmetro um objeto do tipo Icon. podemos fazer uso do seguinte método: <<JLabel>>.setIcon(new ImageIcon("foto.setIcon( ) Este método.jpg")). utilize a seguinte sintaxe: <<JLabel>>. setIcon(). também é possível incluir ou alterar uma figura em tempo de execução. teremos então uma janela com a figura desejada: Assim como foi possível alterarmos o valor desta propriedade no menu de propriedades do NetBeans. Com isso.

setIcon(new ImageIcon("c:/minhasFotos/foto. A utilização do componente ImageIcon não é automaticamente entendida pelo Java.swing.listapessoas.listapessoas.235 - . Neste exemplo vamos criar uma tela para cadastrar pessoas e essas pessoas serão armazenadas dentro de um vetor de pessoas e exibido uma lista com os nomes das pessoas cadastradas.poo. Caso deseje utilizar caminhos relativos.ImageIcon. Onde /pacote/arquivo é o endereço completo da figura dentro de seu projeto. basta utilizar o seguinte comando: <<JLabel>>. por exemplo: <<JLabel>>.swing. Para alterar uma imagem em tempo de execução por outra contida dentro de seu projeto.gif Agora sabendo como manusear fotos em tempo de execução.Programação Orientada a Objetos – Universidade Metodista de São Paulo Onde o arquivo de foto deve estar na pasta inicial do projeto. Vamos criar um novo Projeto Java chamado ListaPessoas. Exemplo de aplicação desktop. sabemos então como alterar fotos de acordo com a interação do usuário com nosso programa. visto que a figura irá compor seu projeto e não necessitará ser colocada em um caminho fixo no sistema operacional. nosso projeto deve ficar assim: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . pessoa. por exemplo: projetoJava/imagens/Logo. logo.setIcon(new ImageIcon(getClass().jpg")). e adicionar um pacote chamado metodista.poo.tela e outro pacote chamado metodista. é necessário que na linha que antecede a declaração da classe (public class Imagens extends javax.JFrame { ) seja acrescentada uma importação deste componente da seguinte forma: import javax.getResource(“/pacote/arquivo”))). utilize a notação desde a raiz do sistema operacional. Note que este método é mais interessante.

pessoa. form. /** * Classe utilizada para demonstrar como criar um objeto de uma classe * filha de JFrame e exibilá na tela.java 01 02 03 04 05 06 07 08 09 10 11 12 package metodista.poo. public class Principal { public static void main(String[] args) { PrimeiroForm form = new PrimeiroForm().236 - .listapessoas.Programação Orientada a Objetos – Universidade Metodista de São Paulo Agora dentro do pacote metodista.pessoa vamos criar uma classe chamada Pessoa que possui os atributos nome e idade. //Mostra o JFrame na tela. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .poo.setVisible(true). Pessoa.listapessoas.

tela.poo.listapessoas. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .237 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Vamos criar uma tela dentro do pacote metodista. para o usuário digitar o nome e idade da pessoa e guardar essas informações em um vetor de Pessoas.

Programação Orientada a Objetos – Universidade Metodista de São Paulo O JTextField que guarda o texto do nome chama txtNome e o JTextField que guarda o texto da idade chama txtIdade. /** * Classe utilizada para demonstrar como criar um objeto de uma classe * filha de JFrame e exibilá na tela. Foram adicionados mais alguns atributos e métodos conforme código abaixo: TelaCadastroPessoas. form.swing.setVisible(true). } } Na linha 11 foi declarado um vetor de Pessoa chamado pessoas que suporta até 100 objetos dentro ele.java 01 02 03 04 05 06 07 08 09 10 11 12 package metodista. O JButton que possui a função de Cadastrar uma nova pessoa chama btnCadastrar. public class Principal { public static void main(String[] args) { PrimeiroForm form = new PrimeiroForm(). //Mostra o JFrame na tela.aula. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .238 - .

swing. /** * Classe utilizada para demonstrar como criar um objeto de uma classe * filha de JFrame e exibilá na tela. Na linha 96 pega os valores do txtNome e txtIdade.java 01 02 03 04 05 06 07 08 package metodista. public class Principal { public static void main(String[] args) { PrimeiroForm form = new PrimeiroForm(). E vamos alterar o código do método acionado quando o botão cadastrar é acionado para poder atualizar a lista de pessoas cadastradas: TelaCadastroPessoas. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Na linha 97 adiciona este novo objeto Pessoa dentro do vetor de pessoas.239 - . cria um objeto do tipo Pessoa.Programação Orientada a Objetos – Universidade Metodista de São Paulo Na linha 12 foi declarado um inteiro que serve como contador. para marcar quantas pessoas foram adicionadas no vetor. Agora vamos adicionar na tela de cadastro de pessoas uma JLabel para mostrar para o usuário quais são as pessoas que foram guardadas dentro do vetor. Na linha 95 foi criado um método que é chamado quanto o botão é acionado.aula. Na linha 98 incrementa o contador que informa quantas pessoas tem cadastradas no vetor.

temos um for que passa pelo vetor de pessoas e guarda na String o texto encontrado. Na linha 127 a 129. Na linha 121 e 122 deixa o JTextField do nome e idade em branco. Na linha 125. passando o vetor de pessoas e o JLabel que será atualizado. está declarando um método que faz a atualização do JLabel que mostra as pessoas cadastradas.240 - . chama o método atualizarListaPessoas. atribui o valor da String listaPessoas no JLabel lblPessoas.setVisible(true). está String será escrita no formato HTML. } } Na linha 120. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . form. Na linha 132. encerro o texto HTML dentro da String.Programação Orientada a Objetos – Universidade Metodista de São Paulo 09 10 11 12 //Mostra o JFrame na tela. Na linha 126. cria uma String que vai guardar o nome e idade de todas as pessoas. Na linha 130.

241 - . Este componente está localizado na barra lateral e é representado pelo item: Vamos criar um exemplo de aplicação para listar todos os arquivos de um diretório: Nossa tela será esta mostrada na visão de Projeto. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . seu nome é JFileChooser (Selecionador de arquivo).Programação Orientada a Objetos – Universidade Metodista de São Paulo JFileChooser Existe um componente Swing que serve para localizar e selecionar um ou mais arquivos no sistema operacional.

Va m o s c o n f i g u r a r n o s s o J F i l e C h o o s e r p a r a a c e i t a r s o m e n t e d i r e t ó r i o s (DIRECTORIES_ONLY). DIRECTORIES_ONLY (Somente Diretórios) e FILES_AND_DIRECTORIES (Arquivos e Diretórios).242 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . pois este é um componente um pouco grande e mante-lo dentro do JFrame acaba atrapalhando visualmente o desenvolvimento da tela. pois vamos ler todos os arquivos do diretório selecionado.Programação Orientada a Objetos – Universidade Metodista de São Paulo Note que o componente JFileChooser foi adicionado na parte de Outros componentes. Nas propriedades do JFileChooser podemos definir através da propriedade f i l e S e l e c t i o n M o d e s e e l e i r a a c e i t a r F I L E S _ O N LY ( S o m e n t e A r q u i v o s ) .

getName()). cont++) { File arquivo = arquivos[cont]. File[] arquivos = diretorio.Programação Orientada a Objetos – Universidade Metodista de São Paulo Depois de montado a tela vamos adicionar a ação do botão Pesquisar que será responsável por abrir a tela do Selecionador de Arquivo (JFileChooser) e listar todos os arquivos dentro da Área de texto (JTextArea).setText(diretorio. cont < arquivos. if(arquivo.length.setText(areaArquivos.getText() + " \n" + arquivo. } else { File diretorio = jFileChooser1.ActionEvent evt) { jFileChooser1. if(diretorio != null) { txtDiretorio. areaArquivos.getName()).243 - .showOpenDialog(this).java 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 for(int cont = 0. 100 } 101 102 103 104 } } } } Quando executarmos a aplicação teremos a seguinte tela: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .getSelectedFile().event. ExemploFileChooser.setText(arquivo.isFile()) { if(cont == 0) { areaArquivos.getAbsolutePath()).awt. private void btnPesquisarActionPerformed(java.listFiles().

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .244 - . serão listados na área de texto todos os arquivos do diretório.Programação Orientada a Objetos – Universidade Metodista de São Paulo Quando clicar no botão Pesquisar abre a seguinte janela do Selecionador de Arquivos: Depois de selecionar o diretório e clicar no botão Open.

primary key(id) ).245 - . JMenu e JMenuItem Para criação de menus utilizamos os componentes JMenuBar para montar a barra do menu. neste exemplo utilizaremos o MySql.Programação Orientada a Objetos – Universidade Metodista de São Paulo Utilizando o JMenuBar. alterar ou excluir Livros. A tabela do banco de dados tem as seguintes colunas. JMenu para criar o menu e JMenuItem para criar os itens do menu. Vamos criar um programa para cadastrar. titulo varchar(50) not null. este programa será feito utilizando Swing e utiliza um menu para chamar outras telas.Chave Primaria . Vamos criar agora a classe Livro: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . isbn varchar(20) not null. paginas int not null. consultar. autor varchar(50) not null. mas pode ser feito em qualquer outro banco de dados.Obrigatório Texto .Obrigatório Texto Texto Número create table Livro ( id int not null auto_increment.: ID TITULO AUTOR ISBN PAGINAS Número .

*/ public class Livro { private Integer id.id = id. } public Integer getId() { return id. this. this. this.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 public Integer getPaginas() { return paginas. private String titulo. } public void setIsbn(String isbn) { this.modelo.autor = autor. } public String getAutor() { return autor.id = id.titulo = titulo. String isbn. } public void setId(Integer id) { this. String autor. this. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .autor = autor. private Integer paginas. String titulo. private String autor.isbn = isbn. } } public Livro(Integer id.titulo = titulo. this. } public void setAutor(String autor) { this. package material.paginas = paginas.isbn = isbn. private String isbn. } public String getIsbn() { return isbn. } public void setPaginas(Integer paginas) { this.246 - . String autor.isbn = isbn. this. this.) { /** * Classe utilizada para representar um Livro. } public Livro(String titulo.autor = autor. Integer paginas) { this. Integer paginas) { this.swing.Programação Orientada a Objetos – Universidade Metodista de São Paulo Livro. String isbn.paginas = paginas.paginas = paginas.

sql.Connection.titulo = titulo. Livro.Programação Orientada a Objetos – Universidade Metodista de São Paulo 39 40 41 42 } public String getTitulo() { return titulo. } Vamos criar uma classe chamada Conexao para fazer a conexão e desconexão do banco de dados.sql.jdbc. import java.conn = DriverManager. */ public class Conexao { private Connection conn = null.getConnection("jdbc:mysql://localhost/ gerenciarlivro". "root".SQLException. * * @return Connection representando a conexão com o banco de dados. package material.out.mysql. import java.DriverManager. import java. */ this.println("Conectado no banco da dados.247 - .dao.").sql.Driver"). */ private void conectar() throws Exception { try { /* Carrega o driver de conexão do MySql. } public Conexao() throws Exception { conectar(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .forName("com. */ Class.swing.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 /* Cria a conexão com o Mysql. /** * Classe utilizada para realizar a conexão e desconexão do banco de dados. System. "root"). } catch (ClassNotFoundException ex) { /** * Método que cria a conexão com o banco de dados. } public void setTitulo(String titulo) { this.

conn. } catch (SQLException ex) { ex. throw new Exception("Erro ao carregar o driver do Mysql.println("Não conseguiu fechar a conexão com o banco de dados. } } ex. * * @param conn . } /** * Método que pega a conexão.println("Desconectado do banco de dados.conn != null && !this.").Connection que será fechada.248 - .close().printStackTrace(). System.conn. então fecha a conexão com o banco de dados.printStackTrace().*/ if(this.isClosed()) { this. } } /** * Método que fecha a conexão com o banco de dados. * * @return Connection */ public Connection getConn() { return this. System.").out.").conn.Programação Orientada a Objetos – Universidade Metodista de São Paulo 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 } } } catch (SQLException ex) { ex. throw new Exception("Nao conseguiu conectar com o banco de dados. */ public void desconectar() { try { /* Se a conexão não for nula e não estiver fechada.out.").printStackTrace(). Agora vamos cria a classe LivroDAO que será responsável por manipular os dados referentes a livro no banco de dados: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

swing. material.swing. if(livro.dao. import import import import import import java. stm.Livro. + " VALUES (" + livro. java.getIsbn() + "'.getTitulo() + "'.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package material.getInt("PROXIMO_ID")).getPaginas() + ")".getPaginas() + " WHERE ID = " + livro. ISBN = '" + livro.ArrayList. if(rs. " + livro.SQLException. '" + livro. java.setId(rs. ISBN. TITULO. AUTOR = '" + livro. '" + livro. */ public class LivroDAO { public Livro salvar(Livro livro) throws Exception { Conexao conexao = new Conexao().getAutor() + "'. java.getId() + ".getId().getId() == null) { String consultarId = "SELECT MAX(ID) + 1 PROXIMO_ID FROM LIVRO".execute(insert).getIsbn() + "'.sql. try { stm = conexao.executeQuery(consultarId). /** * Classe utilizada para realizar as operações de Livro no Banco de dados.List. } } else { String atualizar = " UPDATE LIVRO SET TITULO = '" + livro.util. String insert= "INSERT INTO LIVRO (ID. java.createStatement(). ResultSet rs = null. '" + livro.Programação Orientada a Objetos – Universidade Metodista de São Paulo Livro. rs = stm.getConn().getTitulo() "'. PAGINAS = " + livro. PAGINAS)" + Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .ResultSet.sql.getAutor() + "'.249 - .Statement.modelo. Statement stm = null.util. AUTOR.sql.next()) { livro.

stm.desconectar().createStatement(). stm. } return apagou.250 - .execute(atualizar).isClosed()) { stm.isClosed()) { stm. } conexao. } public boolean excluir(Integer id) throws Exception { boolean apagou = false. throw new Exception("Erro ao salvar o livro no banco de dados.close().execute(delete).close().isClosed()) { rs. } conexao. Conexao conexao = new Conexao()."). } finally { if(stm != null && !stm. stm = conexao.printStackTrace(). try { String delete = "DELETE FROM LIVRO WHERE ID = " + id.Programação Orientada a Objetos – Universidade Metodista de São Paulo 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 System. Statement stm = null.desconectar().out. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . } return livro. } finally { if(rs != null && !rs.close(). } if(stm != null && !stm.printStackTrace().getConn(). } } catch (SQLException ex) { ex. } public List<Livro> consultarTodos() throws Exception { List<Livro> livros = new ArrayList<Livro>(). throw new Exception("Erro ao excluir o livro no banco de dados. } catch (SQLException ex) { ex. apagou = true.println(atualizar)."). Conexao conexao = null.

} } catch (SQLException ex) { ex.getString("ISBN").desconectar(). String consulta = "SELECT * FROM LIVRO ORDER BY TITULO".add(livro).isClosed()) { stm.251 - .close(). } conexao.getString("AUTOR"). rs. rs = stm. rs. } return livros. rs.Programação Orientada a Objetos – Universidade Metodista de São Paulo 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 } 113 } Statement stm = null. vamos criar a tela principal do sistema: Crie um JFrame chamado Biblioteca e adicione dentro dele um Menu Bar (JMenuBar) : Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . stm = conexao. while(rs.getString("TITULO"). } if(stm != null && !stm.isClosed()) { rs. throw new Exception("Erro ao consultar os livros no banco de dados.getInt("ID").").printStackTrace(). ResultSet rs = null. try { conexao = new Conexao().createStatement(). rs.executeQuery(consulta).next()) { Livro livro = new Livro(rs. Feito a parte de comunicação com o banco de dados.close().getInt("PAGINAS")).getConn(). livros. } finally { if(rs != null && !rs.

o mesmo já vem com dois JMenu (File e Edit). depois altere o nome das variáveis para menuArquivo e menuLivro respectivamente: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .252 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Quando criamos um JMenuBar. altere os textos deles para Arquivo e Livro.

adicione os seguintes Menu Itens (Novo e Listar) e os nomes das variáveis devem ser livroNome e livroListar respectivamente: Agora vamos criar um novo JFrame chamado LivroNovo. Dentro do menu Livro. que será utilizado para cadastrar novos livros: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . vamos adicionar um Menu Item (JMenuItem). esse item terá o nome Sair e o nome da variável deve ser alterado para arquivoSair.Programação Orientada a Objetos – Universidade Metodista de São Paulo Agora dentro do menu Arquivo. Nossa JFrame deve ficar da seguinte forma: O item Sair será utilizado para encerrar a aplicação.253 - .

LivroDAO. this.swing.valueOf(livro.swing.getAutor()). initComponents().swing. import material. txtAutor.livro = new Livro().java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package material. public LivroNovo() { this.254 - .tela.livro = livro.getPaginas())).getIsbn()). /** * Classe utilizada para representar a tela de cadastro de livro. */ public class LivroNovo extends javax.modelo.swing. import javax.dao. txtIsbn.JFrame { private Livro livro.Programação Orientada a Objetos – Universidade Metodista de São Paulo Nesta tela vamos definir os seguintes construtores: NovoLivro.setText(livro. import material.setText(livro.Livro.setText(String. } public LivroNovo(Livro livro) { initComponents().JOptionPane. txtPaginas. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .swing.

ERROR_MESSAGE). return false. return false.getText() == null || txtTitulo.setText(null).setText(livro.". 129 } 130 131 private void btnLimparActionPerformed(java.getText(). "Campo titulo é obrigatório. 128 txtTitulo. "Campo autor é obrigatório. 133 } O botão Salvar deve salvar os dados do livro na base de dados é interessante validar o campo antes de salvar os dados.java 124 private void limpar() { 125 txtAutor. "Campo ISBN é obrigatório.awt.java 135 136 private boolean validarCampos() { if(txtTitulo. } "AVISO".Programação Orientada a Objetos – Universidade Metodista de São Paulo 24 25 txtTitulo.ActionEvent evt) { 132 limpar(). NovoLivro.length() == 0) { 149 JOptionPane.getText(). JOptionPane.".equals("") || txtIsbn. 144 145 146 147 148 if(txtIsbn.getText() == null || txtIsbn. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .trim().setText(null).setText(null).equals("") || txtAutor. NovoLivro.getText(). 127 txtPaginas. return false.ERROR_MESSAGE).getText().getText().event.length() == 0) { 137 JOptionPane.".showMessageDialog(this.getTitulo()).ERROR_MESSAGE).getText().setText(null).255 - .getText() == null || txtAutor.length() == 0) { 143 JOptionPane. JOptionPane. } O botão Limpar deve apagar todos os campos da tela.equals("") || txtTitulo.trim().showMessageDialog(this.trim(). 138 139 140 141 142 if(txtAutor. 126 txtIsbn. 150 151 152 } "AVISO". JOptionPane.showMessageDialog(this. } "AVISO".

} return false. 156 157 158 159 160 161 162 163 try { int paginas = Integer.equals("") || txtPaginas.showMessageDialog(this.valueOf(txtPaginas.". } catch (Exception ex) { } "AVISO". "O Campo Páginas deve conter apenas número inteiro.INFORMATION_MESSAGE). JOptionPane. private void btnSalvarActionPerformed(java.showMessageDialog(this.getId() == null) { atualizar = false.setPaginas(Integer.Programação Orientada a Objetos – Universidade Metodista de São Paulo 153 154 if(txtPaginas. "Informação". } else { this. if(livro. 164 "AVISO". } if(validarCampos()) { livro.showMessageDialog(this.setTitulo(txtTitulo.getText()).trim().getText()). JOptionPane.getText() == null || txtPaginas. LivroDAO dao = new LivroDAO().ERROR_MESSAGE).".setVisible(false).getText(). return false.getText()). 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 if(!atualizar) { JOptionPane. dao. JOptionPane. livro. limpar().256 - . } return true. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .getText())).getText().length() == 0) { 155 JOptionPane.getText()). livro.valueOf(txtPaginas. "Campo Páginas é obrigatório.salvar(livro). "Livro salvo com sucesso!". JOptionPane.setAutor(txtAutor.ERROR_MESSAGE).awt.ActionEvent evt) { try { boolean atualizar = true. livro.event.setIsbn(txtIsbn.

modelo. modelo.getMessage(). modelo.java 82 83 84 85 86 private DefaultTableModel recarregarTabela() { DefaultTableModel modelo = new DefaultTableModel().257 - .addColumn("Título").addColumn("Autor").showMessageDialog(this.Programação Orientada a Objetos – Universidade Metodista de São Paulo 192 193 194 195 } } catch (Exception ex) { } JOptionPane. JOptionPane.ERROR_MESSAGE).addColumn("ID"). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . "ERRO". que será usado para mostrar todos os livros cadastrados e também será usado para excluir um livro ou chamar a tela para alterar os dados do livro: Vamos criar um método dentro da classe LivroListar para recarregar a tabela mostrando as informações dos livros que consultamos: LivroListar. 196 } 197 } Crie também um JFrame chamado LivroListar. ex.

ActionEvent evt) { try { if(tableLivros.addColumn("ISBN").addColumn("Páginas"). JOptionPane. LivroListar. Personalize o código de criação da tabela. List<Livro> livros = dao. "ERRO".getTitulo(). 100 } 101 102 103 } return modelo.getMessage().consultarTodos().getIsbn(). JOptionPane.getSelectedRow() >= 0) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .getPaginas()}).ERROR_MESSAGE).getId().Programação Orientada a Objetos – Universidade Metodista de São Paulo 87 88 89 90 91 92 93 94 95 96 97 98 99 } } catch (Exception ex) { for(Livro livro : livros) { modelo.addRow(new Object[] {livro. para quando ela for inicializada já consultar as informações do banco.showMessageDialog(this. livro. livro.awt. ex.getAutor(). try { LivroDAO dao = new LivroDAO().event.258 - . modelo.java 105 106 107 private void brnExcluirActionPerformed(java. O botão Excluir deve excluir o registro de livro que estiver selecionado na tabela. modelo. livro. livro.

titulo. ln.java 127 128 129 130 131 132 133 134 135 136 137 138 139 } } LivroNovo ln = new LivroNovo(livro). 124 } 125 } O botão Alterar deve chamar a tela de LivroNovo.excluir(id).getSelectedRow(). 2). Livro livro = new Livro(id.getMessage().ERROR_MESSAGE). JOptionPane.ERROR_MESSAGE). autor. private void btnAlterarActionPerformed(java.getSelectedRow().".awt.getValueAt(tableLivros. "Livro não foi apagado. Integer paginas = (Integer) tableLivros. 0).getValueAt(tableLivros.getSelectedRow(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . String titulo = (String) tableLivros.getSelectedRow(). 4).event. JOptionPane.setModel(recarregarTabela()).getValueAt(tableLivros. JOptionPane.setVisible(true). "ERRO".getSelectedRow() >= 0) { Integer id = (Integer) tableLivros. boolean excluiu = dao. JOptionPane.getSelectedRow().getValueAt(tableLivros. String autor = (String) tableLivros. "Livro apagado com sucesso.".getSelectedRow().showMessageDialog(this. 3). ex.ActionEvent evt) { if(tableLivros. isbn. passando o objeto livro que foi selecionado na tabela.Programação Orientada a Objetos – Universidade Metodista de São Paulo 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 } } catch (Exception ex) { } if(excluiu) { tableLivros. String isbn = (String) tableLivros. } else { JOptionPane.getValueAt(tableLivros.259 - . "Apagar Livro". 0).showMessageDialog(this. JOptionPane. "Apagar Livro".getValueAt(tableLivros. LivroDAO dao = new LivroDAO(). 1). LivroListar.showMessageDialog(this.INFORMATION_MESSAGE). Integer id = (Integer) tableLivros. paginas).

} O item do menu Livro → Novo terá o seguinte código que serve para abrir a tela de Novo Livro. ll.awt.setVisible(true).setVisible(true). Biblioteca.ActionEvent evt) { System. preço. divisão e multiplicação.Programação Orientada a Objetos – Universidade Metodista de São Paulo Depois de criado as telas LivroNovo e LivroListar vamos adicionar as ações nos itens do menu da tela Biblioteca: O item do menu Arquivo → Sair terá o seguinte código que serve para fechar a aplicação. Atualizar e Apagar) para controlar as informações referentes à Produto (nome.260 - . no banco de dados. subtração. Biblioteca.ActionEvent evt) { LivroListar ll = new LivroListar().event. Consultar.awt.ActionEvent evt) { LivroNovo ln = new LivroNovo().awt. exclusão e consulta dos dados fornecidos abaixo. } O item do menu Livro → Listar terá o seguinte código que serve para abrir a tela de Listar Livros.exit(0).java 81 82 83 84 private void livroListarActionPerformed(java. 3-)Realizar a inclusão.java 72 73 74 private void arquivoSairActionPerformed(java. Nossa calculadora deverá ter as seguintes operações: adição. LivroListar. 2-) Crie uma aplicação CRUD (Salvar.event.java 76 77 78 79 private void livroNovoActionPerformed(java. OBS: Utilize a estrutura criada no exercício 1 do capitulo de JDBC. Criar tela em Swing. } Exercícios 1-) Vamos criar uma calculadora utilizado o Swing. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . alteração. tipo e data de validade) utilize uma interface gráfica Swing.event. ln.

VALOR NUMBER(7. Criar classe ImovelDAO com: Conexão com o banco. Consulta de dados. Diagrama de Classes Passos: Criar classe Imovel com seus getters e setters. TIPO_IMOVEL VARCHAR2(1). Desconexão com o banco.2).261 - .2). Inserção de dados.Programação Orientada a Objetos – Universidade Metodista de São Paulo SCRIPT PARA CRIAÇÃO DA TABELA : CREATE TABLE IMOVEL ( ID NUMBER. AREA_UTIL NUMBER(6. Exclusão de dados. DESCRICAO VARCHAR2(200) ). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Alteração de dados.

Programação Orientada a Objetos – Universidade Metodista de São Paulo Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .262 - .

uma nova exceção do tipo ErroDaConta está sendo lançada linha 09. /** * Classe responsavel por calcular o resto da divisão de dois números.Programação Orientada a Objetos – Universidade Metodista de São Paulo Exemplos de aplicações Swing Exemplo de tratamento de exceção usando Swing Primeiramente vamos criar uma tela com o seguinte layout: Esta nossa tela de exemplo. */ public class Divisao { public int restoDaDivisao(int dividendo.263 - . com o seguinte código: Divisao. será remetida a classe que a chama. irá se comunicar com uma classe chamada Divisao. } return dividendo % divisor.exemplo. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 package material. } } Note que no exemplo acima.calculadora. int divisor) throws ErroDaConta { if(divisor > dividendo) { throw new ErroDaConta(). Agora criaremos a nossa classe de exceção ErroDaConta. Isto pode ser observado pelo comando throws na linha 07. no nosso caso a classe representada pela tela acima. mas não será tratada por um bloco try.

parseInt(dividendoT).calculadora. } catch (ErroDaConta ex) { JOptionPane.exemplo.restoDaDivisao(dividendo. JOptionPane. int dividendo = Integer. txtResto.java 01 02 03 04 05 06 07 08 09 10 11 12 package material.getText(). int divisor = Integer. vamos ao código de nossa classe JFrame.getMessage().setText(String.getText(). "ERRO". */ public class ErroDaConta extends Exception { private static final long serialVersionUID = 3397131173998746565L.parseInt(divisorT). Calculadora.java 40 41 42 public Exception(String message) { super(message). String dividendoT = txtDividendo.java 101 102 103 104 105 106 107 108 109 110 111 112 113 try { int resto = div. public ErroDaConta() { super("Divisão invalida!"). } } Desta forma estamos criando nossa própria exceção.showMessageDialog(this. divisor).Programação Orientada a Objetos – Universidade Metodista de São Paulo ErroDaConta.ActionEvent evt) { Divisao div = new Divisao(). declarando que nossa classe é filha de Exception. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . do início do exemplo.awt.event. private void btnCalcularActionPerformed(java. ex. String divisorT = txtDivisor. e que por este motivo será uma checked exception.valueOf(resto)). /** * Classe utilizada para representar uma exceção durante uma divisão invalida. } Agora que já definimos as classes iniciais.264 - .ERROR_MESSAGE). Na linha 10 o seguinte construtor da classe Exception está sendo invocado: Exception.

"ERRO". "ERRO". 116 } catch (NumberFormatException ex) { 117 JOptionPane.NumberFormat Exception (ambas classes filhas de RunTimeException) que não necessitaria ser tratada.ERROR_MESSAGE). pois é uma Unchecked Exception.showMessageDialog(this. somos forçados a utilizar o bloco try para fazer este tratamento.Programação Orientada a Objetos – Universidade Metodista de São Paulo 114 115 } catch (ArithmeticException ex) { JOptionPane. Conforme a linha 114 também está prevendo a possibilidade de nosso usuário solicitar uma divisão por zero. JOptionPane.lang. "Número invalido!". Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .265 - . como fizemos uma chamada ao método restoDaDivisao() e o mesmo pode lançar uma exceção ErroDaConta. "Divisão por zero!". 118 } 119 } Perceba que.lang. tipo de erro este que é representado no Java por uma java.ArithmeticException e na linha 116 estamos prevendo a digitação de um número não inteiro através da exceção java. JOptionPane.showMessageDialog(this.ERROR_MESSAGE).

O script para criação da base de dados e tabela no MySQL: CREATE DATABASE VEICULOS. /** * Classe utilizada para representar um Caminhão. OBS: Não se esqueça de adicionar o driver do banco de dados no seu projeto. para adicionar novos caminhões e para apagar os caminhões. com exibição em tela Neste exemplo vamos criar uma tela que será utilizada para visualizar os caminhões que foram cadastrados.Programação Orientada a Objetos – Universidade Metodista de São Paulo Exemplo de aplicação C.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 package material. private String modelo.U.codigo = codigo. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . public Caminhao() { } public Integer getCodigo() { return codigo. USE VEICULOS.266 - . MODELO VARCHAR(50) NOT NULL ).crud. Vamos utilizar a classe Caminhao abaixo: Caminhao. */ public class Caminhao { private Integer codigo. private String placa. } public void setCodigo(Integer codigo) { this.D. CREATE TABLE CAMINHAO ( CODIGO INT NOT NULL.swing. PLACA VARCHAR(8) NOT NULL.R.

} public void setPlaca(String placa) { this.modelo = modelo.Programação Orientada a Objetos – Universidade Metodista de São Paulo 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 public String getPlaca() { return placa. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .crud. package material. } public void setModelo(String modelo) { this.sql.forName("com. import java. "root".swing. apagar e consultar todos os caminhões.267 - .").mysql.SQLException. import java. */ public class CaminhaoDAO { public Connection abrirConexao() { Connection conn = null.sql. CaminhaoDAO.getConnection("jdbc:mysql://localhost/veiculos". alterar.placa = placa.Connection.Statement. "root").java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 /** * Classe utilizada para conectar e desconectar do banco de dados. import java. } } Vamos agora criar uma classe chamada CaminhaoDAO.sql. } public String getModelo() { return modelo.Driver").jdbc.sql.out.DriverManager. try { Class. import java.ResultSet. * salvar. import java. que será utilizada para acessar os dados referentes ao caminhão. conn = DriverManager. System.sql.println("Conexão criada com sucesso.

println("Erro ao conectar no banco de dados. CaminhaoDAO.out. System.out.close().").createStatement(). temos o método que criará as conexões com o banco de dados. } catch (SQLException ex) { ex. public void fecharConexao(Connection conn) { try { if(conn != null && !conn. ResultSet rs = stm.isClosed()) { conn. Na linha 14.println("Erro ao fechar conexão com o BD.268 - .printStackTrace().println("Erro ao carregar o driver do BD.out."). try { conn = abrirConexao(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . if(conn != null) { String consulta = "SELECT * FROM CAMINHAO".executeQuery(consulta). System.out.").java 41 42 43 44 45 46 47 48 49 50 51 52 53 54 public Caminhao[] consultarTodos() { Caminhao[] caminhoes = null. } } return conn. Na linha 29.Programação Orientada a Objetos – Universidade Metodista de São Paulo 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 } } } } catch (SQLException ex) { ex. Statement stm = conn. int cont = 0."). } catch (ClassNotFoundException ex) { System. System.printStackTrace(). temos o método que fechará as conexões com o banco de dados.println("Conexão fechada com sucesso. while(rs.next()) { cont++. Connection conn = null.

int linha = 0. Na linha 53.getInt("CODIGO")). caminhao.beforeFirst().out.next()) { Caminhao caminhao = new Caminhao().setModelo(rs. rs. significa que tem registros de caminhão na tabela do banco de dados. System. } finally { fecharConexao(conn).269 - . caminhao. Na linha 48. Na linha 57. while(rs. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .setCodigo(rs. caminhoes[linha++] = caminhao.").getString("MODELO")).getString("PLACA")). caso o contador tenha o valor maior que 0 (zero). temos um while que serve para percorrer todos os registros do ResultSet para sabermos quantas linhas foram retornadas. } Na linha 41. criamos uma String com a consulta de todos os caminhões da tabela CAMINHAO.Programação Orientada a Objetos – Universidade Metodista de São Paulo 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 } if(cont > 0) { caminhoes = new Caminhao[cont].println("Erro ao consultar os dados do BD. caminhao. Na linha 50.printStackTrace().setPlaca(rs. executa a consulta e guarda seu resultado dentro de um ResultSet. } } } } catch (SQLException ex) { ex. declaramos um método que será utilizado para consultar todos os caminhões cadastrados. } return caminhoes.

getCodigo() + ".java 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 public boolean salvarCaminhao(Caminhao caminhao) { boolean salvou = false. declaramos o método que irá salvar os caminhões na base de dados. Connection conn = null. } Na linha 82.printStackTrace().println("Erro ao salvar o caminhão no BD. criando objetos do tipo Caminhao e guardando os valores consultados da base de dados dentro desses objetos. utilizamos o bloco finally para fechar a conexão com o banco de dados. e depois guardando o objeto caminhao dentro do vetor de caminhões. Na linha 62. retornamos o vetor de caminhões. } return salvou. stm.out. de acordo com a quantidade de registros. } catch (SQLException ex) { ex. salvou = true.getModelo() + "')". CaminhaoDAO. } finally { fecharConexao(conn).270 - . fazemos o ResultSet apontar para antes do primeiro registro. temos um while que irá percorrer todo o ResultSet."). Statement stm = conn. '" + caminhao. já que percorremos ele inteiro na linha 52 e o mesmo está apontando para o final do ResultSet. '" + caminhao.getPlaca() + "'.createStatement(). este método retorna um boolean informando se conseguiu ou não salvar.execute(adicionar).Programação Orientada a Objetos – Universidade Metodista de São Paulo Na linha 58. System. Na linha 75. criamos um vetor de Objetos Caminhao. Na linha 59. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Na linha 79. try { conn = abrirConexao(). String adicionar = "INSERT INTO CAMINHAO VALUES (" + caminhao.

utilizamos o bloco finally para fechar a conexão com o banco de dados. Na linha 111. stm. declaramos o método que irá apagar os caminhões da base de dados a partir do seu código. criamos uma String com o código SQL para apagar o registro do caminhão da base de dados. excluiu = true.java 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 public boolean excluirCaminhao(Integer codigo) { boolean excluiu = false. Na linha 97. Connection conn = null.printStackTrace(). apagamos o caminhão da base de dados. CaminhaoDAO. System. String excluir = "DELETE FROM CAMINHAO WHERE CODIGO = " + codigo.").out. utilizamos o bloco finally para fechar a conexão com o banco de dados. } catch (SQLException ex) { ex. Statement stm = conn. } finally { fecharConexao(conn). retornamos o valor do boolean informando se o caminhão foi salvo no banco de dados.Programação Orientada a Objetos – Universidade Metodista de São Paulo Na linha 88.271 - . executamos a inserção na base de dados.createStatement(). depois irá retornar um boolean informando se conseguiu ou não apagar o caminhão. try { conn = abrirConexao(). criamos uma String com o código SQL de inserção do caminhão na base de dados. } return excluiu.println("Erro ao apagar o caminhão no BD. Na linha 109. Na linha 92.execute(excluir). Na linha 117. } Na linha 104. Na linha 101. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

"). declaramos o método que irá alterar os caminhões da base de dados. 127 128 try { 129 conn = abrirConexao(). 139 System. 133 System.272 - . Na linha 134.Programação Orientada a Objetos – Universidade Metodista de São Paulo Na linha 121. utilizamos o bloco finally para fechar a conexão com o banco de dados. retornamos o valor do boolean informando se o caminhão foi atualizado no banco de dados Vamos criar um JFrame chamado CaminhaoTela para desenharmos a tela do programa. criamos uma String com o código SQL para atualizar o registro do caminhão da base de dados. 136 alterou = true. 126 Connection conn = null. 134 Statement stm = conn. Na linha 140. 145 } 146 } Na linha 124. 135 stm.getCodigo().out. retornamos o valor do boolean informando se o caminhão foi removido do banco de dados CaminhaoDAO.createStatement(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .getPlaca() + 131 "'.out." + " MODELO = '" + caminhao. será possível atualizar os campos PLACA e MODELO do caminhão. atualizamos o caminhão da base de dados. Na linha 130.println(alterar). 142 } 143 144 return alterou.getModelo() + "' WHERE CODIGO = " + 132 caminhao.java 124 public boolean alterarCaminhao(Caminhao caminhao) { 125 boolean alterou = false.printStackTrace(). Na linha 144. 140 } finally { 141 fecharConexao(conn). 130 String alterar = "UPDATE CAMINHAO SET PLACA = '" + caminhao.execute(alterar).println("Erro ao alterar o caminhão no BD. 137 } catch (SQLException ex) { 138 ex.

Altere o nome da variável que representa o objeto da tabela para tabelaCaminhoes.Programação Orientada a Objetos – Universidade Metodista de São Paulo Dentro do JFrame. ele é utilizado para fazer barra de rolagem. vamos utilizar a tabela para mostrar todos os caminhões que foram cadastrados. adicione um Painel de rolagem (JScrollPane). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Adicione uma Tabela (JTable) dentro do Painel de rolagem.273 - .

Programação Orientada a Objetos – Universidade Metodista de São Paulo Adicione um Separador (JSeparator) na tela. da parte de edição dos caminhões. e altere seus textos conforme a imagem abaixo: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .274 - . Adicione na tela os Rótulos (JLabel). Campo de texto (JTextField) e Botões (Button . para separarmos a parte que irá listar os caminhões.JButton).

caminhao.getCodigo().addColumn("Código").addColumn("Modelo").consultarTodos().java. CaminhaoTela. caminhao.getModelo()}). vamos adicionar o seguinte método que será usado para carregar os valores referentes aos caminhões cadastrados no banco de dados. btnNovo – Botão que limpa os campos. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Caminhao[] caminhoes = caminhaoDAO.Programação Orientada a Objetos – Universidade Metodista de São Paulo Altere também o nome das variáveis dos Campos de texto e Botões conforme abaixo: txtCodigo – Campo texto para digitação do código do caminhão.getPlaca(). if(caminhoes != null) { for(Caminhao caminhao : caminhoes) { modelo.addColumn("Placa"). modelo. btnAlterar – Botão para alterar os dados do caminhão.java 140 141 142 143 144 145 146 147 148 149 150 151 152 public DefaultTableModel recarregarTabela() { CaminhaoDAO caminhaoDAO = new CaminhaoDAO(). btnApagar – Botão para apagar os dados do caminhão. txtModelo – Campo texto para digitação do modelo do caminhão. btnSalvar – Botão para salvar um novo caminhão.275 - . modelo. DefaultTableModel modelo = new DefaultTableModel(). Dentro do JFrame CaminhaoTela.addRow(new Object[] {caminhao. txtPlaca – Campo texto para digitação da placa do caminhão. modelo.

e chamamos o método que acabamos de criar recarregarTabela(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Na linha 144 a 145 adicionamos as colunas da tabela. criamos um DefaultTableModel que é um modelo em que será adicionado as colunas e registros da tabela JTable. Na linha 149. chamamos a classe CaminhaDAO que faz a comunicação com o banco de dados.276 - . percorremos todo o vetor de caminhões adicionando suas informações no modelo da tabela. retornamos um modelo de tabela com suas colunas e linhas preenchidas. Agora vamos personalizar o código de criação da JTable que mostrara os caminhões cadastrados no banco de dados.Programação Orientada a Objetos – Universidade Metodista de São Paulo 153 154 155 } return modelo. Na linha 143. alteramos o valor do segundo ComboBox para “propriedade personalizada”. consultamos todos os caminhões que estão cadastrados no banco de dados. Na linha 142. } Na linha 141. Na tela Personalizador de código. dessa forma podemos alterar o código que cria o modelo da tabela. Na linha 154. clique com o botão direito em cima da tabela e clique em Personalizar código.

277 - . selecione Eventos → Mouse → mouseClicked. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . quando o usuário clicar na tabela iremos preencher os campos Código.Programação Orientada a Objetos – Universidade Metodista de São Paulo Vamos também adicionar um evento de click do mouse na tabela. Placa e Modelo. Para isso clique com o botão direito do mouse em cima da tabela.

Na linha 241. txtPlaca.setText(codigo.java 240 241 242 private void tabelaCaminhoesMouseClicked(java.MouseEvent evt) { if(tabelaCaminhoes. Da linha 242 a 244 pegamos os valores das colunas da tabela. txtCodigo. 244 String modelo = (String) tabelaCaminhoes.getSelectedRow() >= 0) { Integer codigo = (Integer) tabelaCaminhoes.setText(placa). 245 246 247 248 249 250 251 } } txtCodigo. 1).setEditable(false).setText(modelo).getValueAt(tabelaCaminhoes.getValueAt(tabelaCaminhoes.getSelectedRow(). 2). txtModelo.awt.getValueAt(tabelaCaminhoes.toString()). 0).Programação Orientada a Objetos – Universidade Metodista de São Paulo No código fonte coloque o seguinte código: CaminhaoTela.getSelectedRow().getSelectedRow().event. 243 String placa = (String) tabelaCaminhoes.278 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . estamos validando se uma linha foi selecionada.

Placa e Modelo e também recarregar a tabela de caminhões: CaminhaoTela.setModel(recarregarTabela()). txtCodigo. note que na linha 247 estamos chamando o método setEditable() do campo Código passando o parâmetro false.279 - . txtPlaca. Se executarmos nosso programa veremos que os dados foram consultados da base de dados. Alterar e Apagar: Primeiro vamos criar um método para limpar os dados dos campos Código.setEditable(true).java Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Salvar.setText(null).Programação Orientada a Objetos – Universidade Metodista de São Paulo Da linha 246 a 249 estamos alterando o valor dos campos Código. txtModelo.java 157 158 159 160 161 162 163 private void limparTela() { txtCodigo.setText(null). tabelaCaminhoes. Agora precisamos também dar funcionalidades para os botões Novo. Placa e Modelo. } O botão Novo terá a seguinte ação: CaminhaoTela. dessa forma o campos será desabilitado para edição.setText(null).

trim().event.awt. que limpa os campos e recarrega a tabela. "Dados incompletos.showMessageDialog(this.".INFORMATION_MESSAGE).getText()). } } else { JOptionPane.getText())). CaminhaoDAO caminhaoDAO = new CaminhaoDAO().trim().getText(). temos o evento actionPerformed do botão Novo.ActionEvent evt) { limparTela().length() > 0 && txtModelo.getText() != null && txtCodigo. JOptionPane. JOptionPane. JOptionPane.setPlaca(txtPlaca. Na linha 216.".showMessageDialog(this.trim(). } else { JOptionPane.". } } Na linha 168.".salvarCaminhao(caminhao). "Salvar caminhão.ActionEvent evt) { if(txtCodigo. "Caminhão salvo.showMessageDialog(this. JOptionPane. if(salvou) { limparTela(). Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo 212 213 214 private void btnNovoActionPerformed(java. caminhao.valueOf(txtCodigo.ERROR_MESSAGE). O botão Salvar terá a seguinte ação: CaminhaoTela.awt.event. boolean salvou = caminhaoDAO.setCodigo(Integer.ERROR_MESSAGE). caminhao. } Na linha 215.getText().length() > 0) { Caminhao caminhao = new Caminhao().getText()).getText() != null && txtPlaca. "Todas as informações precisam ser preenchidas.length() > 0 && txtPlaca.java 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 private void btnSalvarActionPerformed(java. "Salvar caminhão.setModelo(txtModelo. temos o evento actionPerformed do botão Salvar. caminhao.".getText() != null && txtModelo. fazemos a chamada para o método limparTela().". "Erro ao salvar o caminhão.280 - .getText().

verificamos se conseguiu apagar com sucesso. fazemos uma validação para verificar se algum registro da tabela foi selecionado. se algum campo não foi preenchido iremos enviar a mensagem (linha 188) avisando o usuário. Na linha 198. recarregamos a tabela e informamos ao usuário que foi salvo com sucesso. Na linha 184.Programação Orientada a Objetos – Universidade Metodista de São Paulo Na linha 169. chamamos o método que salva o caminhão na base de dados. chamamos o método que apaga o caminhão da base de dados.281 - . caso consiga. caso não consiga apagar vamos informar o usuário. se nenhuma linha da tabela foi selecionada iremos enviar a mensagem (linha 209) avisando o usuário. verificamos se conseguiu salvar com sucesso. Na linha 179. Na linha 205. Na linha 195. então limpamos os dados da tela. então recarregamos a tabela e informamos ao usuário que o caminhão foi apagado com sucesso. temos o evento actionPerformed do botão Apagar. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . fazemos uma validação para verificar se foram digitados todos os dados do caminhão. caso não consiga salvar vamos informar o usuário. Na linha 178. caso consiga. O botão Apagar terá a seguinte ação: Na linha 194. Na linha 200.

Agora teste novamente seu programa. verificamos se conseguiu alterar com sucesso. se nenhuma linha da tabela foi selecionada iremos enviar a mensagem (linha 237) avisando o usuário. caso não consiga alterar vamos informar o usuário. Na linha 220. chamamos o método que altera o caminhão da base de dados. Na linha 226.Programação Orientada a Objetos – Universidade Metodista de São Paulo O botão Alterar terá o seguinte código: Na linha 219. então recarregamos a tabela e informamos ao usuário que o caminhão foi alterado com sucesso. temos o evento actionPerformed do botão Alterar.282 - . Na linha 228. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Na linha 233. fazemos uma validação para verificar se algum registro da tabela foi selecionado. caso consiga.

A FileInputStream recebe em seu construtor uma referencia File. Tanto a invocação do arquivo pela classe File.io. */ Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . quanto diretamente pela FileInputStream fará com que o arquivo seja buscado no diretório em que o Java foi invocado (no caso do NetBeans vai ser dentro do diretório do projeto).java 01 02 03 04 05 06 07 package material.io.Programação Orientada a Objetos – Universidade Metodista de São Paulo 19. A linguagem Java oferece uma classe específica para a leitura do fluxo de bytes que compõem o arquivo.txt).io.File.arquivo. para ler os arquivos que estão em outros diretórios do seu computador (ex: C: \arquivos\arquivo.283 - . /** * Classe utilizada para demonstrar o uso da classe File. ou uma String que deve representar o caminho completo do arquivo. ainda.File é responsável por representar arquivos ou diretórios do seu sistema de arquivos. ExemploFile. excluí-lo. A classe java. Esta classe pode fornecer informações úteis assim como criar um novo arquivo. tamanho do arquivo. verifica se este caminho é referente a um diretório ou um arquivo. dessa forma podemos ler as informações que estão dentro do arquivo. espaço livre em disco ou.FileInputStream. Leitura de arquivos Existem diversos meios de se manipular arquivos na linguagem de programação Java. import java. Você também pode usar um caminho absoluto. esta classe chama-se java. caminho absoluto. Exemplo de leitura de arquivo Exemplo de um programa que a partir de um caminho.

out.arquivo.Programação Orientada a Objetos – Universidade Metodista de São Paulo 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class ExemploFile { public static void main(String[] args) { ExemploFile ef = new ExemploFile().284 - .println("Este caminho eh de um diretorio. através do método isFile() da classe File. ef. Caso contrário."). este objeto será utilizado para representar um arquivo ou diretório.txt Este caminho eh de um arquivo.txt e imprimir seu texto no console. ef. Verificamos se o objeto f é um arquivo.java 01 02 package material.isFile()) { System. verificamos se o objeto f é um diretório. teremos a seguinte saída no console: C:\>javac material\arquivo\ExemploFile. então irá imprimir a mensagem informando que o caminho é referente a um arquivo.verificarCaminho("C:\\Arquivos\\teste.out. System.println("Este caminho eh de um arquivo. Ao executar a classe ExemploFile. caso retorne true.txt"). ExemploFileInputStream.out. através do método isDirectory() da classe File. Neste exemplo.arquivo. } } } Criamos um objeto f do tipo File a partir de um caminho recebido. if(f. } else if(f. caso retorne true.java C:\>java material. } public void verificarCaminho(String caminho) { File f = new File(caminho).println(caminho)."). vamos ler um arquivo . então irá imprimir a mensagem informando que o caminho é referente a um diretório.isDirectory()) { System. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .ExemploFile C:\Arquivos Este caminho eh de um diretorio C:\Arquivos\teste.verificarCaminho("C:\\Arquivos").

io.println((char) c). } /** * Método utilizado para ler os dados de uma arquivo. /** * Classe utilizada para ler as informações de um arquivo e imprimir * no console.out. import java. try { /* Cria um objeto do tipo FileInputStream para ler o arquivo. } finally { try { if(fis != null) { /* Fecha o arquivo que está sendo lido. */ int c. quando o caracter lido for igual a -1.FileInputStream.out."). */ Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . /* Le o caracter do arquivo e guarda na variavel inteira c.Programação Orientada a Objetos – Universidade Metodista de São Paulo 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import java.lerArquivo("C:\\Arquivos\\teste.FileNotFoundException.println("Erro ao ler o arquivo. } } catch (FileNotFoundException ex) { System. */ while((c = fis. /* Cria uma variavel interia para ler os caracteres do arquivo. exemplo. */ public class ExemploFileInputStream { public static void main(String[] args) { ExemploFileInputStream exemplo = new ExemploFileInputStream(). lembrando que todo caractere no Java é representado por um numero inteiro. } catch (IOException ex) { System.IOException.println("Erro ao abrir o arquivo.out. significa que chegou ao final do arquivo. */ fis = new FileInputStream(caminho). * * @param caminho */ public void lerArquivo(String caminho) { FileInputStream fis = null.txt")."). import java.read()) != -1) { System.io.io.285 - .

para imprimir o texto do arquivo.Programação Orientada a Objetos – Universidade Metodista de São Paulo 46 47 48 49 50 51 52 53 fis. Também precisamos tratar as exceções que podem ser lançadas durante a leitura de um arquivo.arquivo. teremos a seguinte saída no console: C:\>javac material\arquivo\ExemploFileInputStream. lembre-se de fechar o arquivo utilizando o método close(). Percorremos todo o arquivo e fazer o casting de inteiro para caractere.out. seu construtor recebe uma String com um caminho de arquivo. lembre-se que todos os caracteres em Java são representados por um número inteiro. vamos declarar uma variável int c que será utilizada para guardar os caracteres lidos do arquivo. note que se o valor lido através do método read() for igual a -1. e a partir desses caracteres podemos adicionar filtros em cima deles.java C:\>java material.close().286 - .ExemploFileInputStream t e s t e Streams de caracteres Streams de caracteres é a forma como trabalhamos com os próprios caracteres lidos do arquivo.io. Exemplos destes leitores são as classes abstratas java. significa que chegamos ao final do arquivo. } } catch (IOException ex) { System. } } } } Criamos um objeto do tipo FileInputStream.Reader e java. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Sempre que estiver manipulando um arquivo."). esta classe lê os bytes do arquivo.io.Writer. Para percorrer os bytes do arquivo. Ao executar a classe ExemploFileInputStream.println("Erro ao fechar o arquivo.

io. java.println(caminho + " nao existe.out. } finally { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . import import import import import java. java.IOException.").out.io.out.io. leremos um arquivo e imprimiremos seus caracteres no console: ExemploReader.read()) != -1) { System.util.").io. Scanner s = new Scanner(System. try { r = new FileReader(caminho).io.in).287 - .io.Scanner. /** * Classe utilizada para demonstrar a leitura de caracteres. } catch (IOException ex) { System.FileNotFoundException. String caminho = s.FileReader. exemplo.io.print((char) c). que representa a leitura de caracteres de um arquivo Neste exemplo.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package material. System.Reader. */ public class ExemploReader { public static void main(String[] args) { ExemploReader exemplo = new ExemploReader().lerArquivo(caminho).Programação Orientada a Objetos – Universidade Metodista de São Paulo java.nextLine().Reader representa um fluxo de entrada de dados tratados como caracteres.Reader A classe abstrata java.print("Digite o caminho do arquivo: ").FileReader. java.println("Erro de leitura de arquivo. while((c = r.arquivo.out. java. } public void lerArquivo(String caminho) { Reader r = null. Essa classe possui várias subclasses dedicadas a cada fonte de dados específica. } } catch (FileNotFoundException ex) { System. int c. tais como a classe java.

significa que chegamos ao final do arquivo. que aqui gorjeiam. Nao gorjeiam como la. Onde canta o Sabia. lembre-se que todos os caracteres em Java são representados por um número inteiro.arquivo. Sempre que estiver manipulando um arquivo. note que se o valor lido através do método read() for igual a -1. que será utilizada para guardar os caracteres lidos do arquivo.Programação Orientada a Objetos – Universidade Metodista de São Paulo 34 35 36 37 38 39 40 41 42 43 try { if(r != null) { r.ExemploReader. } } } } Criamos um objeto do tipo FileReader. } } catch (IOException ex) { System.java C:\>java material. teremos a seguinte saída no console: C:\>javac material.Writer A classe java. Ao executar a classe ExemploReader. está classe lê os caracteres do arquivo. As aves.FileWriter.io.io.println("Erro ao fechar o arquivo " + caminho).ExemploReader Digite o caminho do arquivo: C:\Arquivos\Cancao do Exilio. java. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . lembre-se de fechar o arquivo utilizando o método close().io.arquivo.txt Minha terra tem palmeiras. Percorremos todo o arquivo e vamos fazer o casting de inteiro para caractere. para imprimir o texto do arquivo. Declaramos uma variável int c. seu construtor recebe uma String com um caminho de arquivo. Essa classe possui várias subclasses dedicadas a cada fonte de dados específica. tais como a classe java. Tratamos as exceções que podem ser lançadas durante a leitura de um arquivo.close().out.288 - .Writer é uma classe abstrata que representa um fluxo de saída de dados tratados como caracteres.

System. Writer writer = null.FileReader. java.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package material.println(entrada + " ou " + saida + " nao existem!"). writer = new FileWriter(saida). int c.out. String saida) { Reader reader = null.read()) != -1) { System. java. } System.util.Reader.io.IOException.io.io.println("\n").out. leremos um arquivo e o copiaremos para outro arquivo: ExemploWriter. String entrada = s.print("Digite o caminho do arquivo de saida: ").Programação Orientada a Objetos – Universidade Metodista de São Paulo Neste exemplo. } public void copiarArquivo(String entrada. Scanner s = new Scanner(System.io. } catch (FileNotFoundException ex) { System.io. java. saida). java.nextLine(). exemplo.nextLine().Writer. java. /** * Classe utilizada para ler um arquivo e copia-lo.arquivo.io. */ public class ExemploWriter { public static void main(String[] args) { ExemploWriter exemplo = new ExemploWriter().print((char) c).FileNotFoundException. java.print("Digite o caminho do arquivo de entrada: "). String saida = s.in). System.write(c).out.out. import import import import import import import java. } catch (IOException ex) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out.Scanner. writer.FileWriter.copiarArquivo(entrada. try { reader = new FileReader(entrada). while((c = reader.289 - .

out. Ao executar a classe ExemploWriter. teremos a seguinte saída no console: C:\>javac material\arquivo\ExemploWriter. } try { if(writer != null) { writer. } finally { try { if(reader != null) { reader.println("Erro de leitura de arquivo!").java C:\>java material\arquivo\ExemploWriter Digite o caminho do arquivo de entrada: C:\Arquivos\entrada.txt Digite o caminho do arquivo de saida: C:\Arquivos\saida. Criamos um objeto do tipo FileWriter.out. } } } } Criamos um objeto do tipo FileReader. Para liberar os recurso lembre-se de fechar o arquivo de entrada e o arquivo de saída. } } catch (IOException ex) { System.close().Programação Orientada a Objetos – Universidade Metodista de São Paulo 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 System. para ler o arquivo.txt Exemplo de copia de arquivo. Percorremos os caracteres do arquivo de entrada e gravaremos os caracteres lidos no arquivo de saída.println("Erro ao fechar o arquivo " + entrada).close(). para criar um novo arquivo e escrever nele as informações do arquivo que será lido.290 - .println("Erro ao fechar o arquivo " + saida). Streams de bytes Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out. } } catch (IOException ex) { System.

Esse fluxo de dados é recebido de maneira extremamente primitiva em bytes. Assim como na InputStream.291 - .InputStream A classe InputStream é uma classe abstrata que representa um fluxo de entrada de dados.sound.io.IOException. a uma conexão remota via sockets ou até mesmo a entrada e saída padrão de um programa (normalmente o teclado e o console). tais como as classes java. por este motivo. existem diversas implementações em Java de subclasses de InputStream que são capazes de tratar de maneira mais específica diferentes tipos de fluxos de dados.Programação Orientada a Objetos – Universidade Metodista de São Paulo Como já mencionado no título deste material.io. O importante a se falar sobre as Streams.PrintStream. javax.OutputStream) para toda e qualquer operação deste gênero. diversos métodos lançam java.io. Exemplos concretos destas classes podem ser vistos na utilização dos métodos print() e println() de System. seja ela relativa a um arquivo. que é uma exception do tipo checked.in. que é um InputStream. Na linguagem Java. e na utilização de System. é possível se utilizar fluxos de entrada (java. java. Streams nada mais são do que fluxos de dados sejam eles de entrada ou de saída. java.util. pois out é uma java. Por este motivo.Scanner.io. é importante que seja aplicado um filtro sobre esse fluxo de bytes que seja capaz de converter caracteres para bytes e vice e versa. esse fluxo de dados é enviado em bytes.AudioInputStream. por isso o utilizamos para entrada de dados.sampled.out . graças aos benefícios trazidos ao polimorfismo. é que como ambas trabalham com leitura e escrita de bytes. por este motivo utilizamos o Writer e Reader. As classes abstratas InputStream e OutputStream definem respectivamente o comportamento padrão dos fluxos em Java: em um fluxo de entrada é possível ler bytes e no fluxo de saída escrever bytes.io. utilizado na construção de um objeto da classe java.io. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . entre outros mais especializada para cada tipo de fonte.io .InputStream) e de saída (java.OutputStream A classe OutputStream é uma classe abstrata que representa um fluxo de saída de dados.io. o que nos obriga a tratá-la ou declará-la no método.FileInputStream. que é filha (indiretamente) de OutputStream. Quando trabalhamos com classes do pacote java.

tais como as classes java. import java.io. uma delas é gravando o objeto diretamente no sistema de arquivos.FileOutputStream.292 - .arquivo. Seguindo a mesma idéia das já discutidas FileInputStream e FileOutputStream.nome = nome.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 package material.ImageOutputStream.Serializable. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . public Pessoa(String nome) { this. São elas: java.Programação Orientada a Objetos – Universidade Metodista de São Paulo existem diversas implementações em Java de subclasses de InputStream que são capazes de tratar de maneira mais específica diferentes tipos de fluxos de dados. A declaração do objeto deve ocorrer assim como segue: Pessoa. private String nome. } public String getNome() { return nome.io. sua conversão em um fluxo de bytes) é necessário inicialmente que este objeto implemente uma interface chamada java. existem duas classes específicas para a serialização de objetos. entre outros mais especializados para cada tipo de destino. Para que seja possível a escrita de um objeto em um arquivo. privado e estático chamado serialVersionUID. a classe do objeto que desejamos serializar deve implementar esta interface.Serializable. javax. Serialização de objetos Na linguagem Java existe uma forma simples de persistir objetos.io.ObjectOutputStream e java. ou seu envio via rede (ou seja. alem do que afim de evitar uma warning (aviso) no processo de compilação será necessária a declaração de um atributo constante. Por este motivo.io.imageio. */ public class Pessoa implements Serializable { private static final long serialVersionUID = 7220145288709489651L.stream. Este atributo apenas será utilizado como um controlador (um ID) no processo de serialização.io.ObjectInputStream. /** * Classe utilizada para demonstrar o uso da interface Serializable.

da seguinte forma: Pessoa Manuel = new Pessoa(). java.txt")).. Feita esta instanciação. C:\>serialver use: serialver [-classpath classpath] [-show] [classname. deve receber uma OutputStream qualquer. vamos nos aprofundar nas classes de leitura e escrita de objetos em arquivos físicos: java. Após a escrita do arquivo.io. e nos lembrando da premissa da herança.Pessoa material.Programação Orientada a Objetos – Universidade Metodista de São Paulo 19 20 } } Este número da serialVersionUID pode ser adquirido através do programa serialver que vem junto com o JDK. da seguinte forma: Object objeto = new Object(). não se esqueça de finalizar a comunicação com o arquivo utilizando o método close(). out.Pessoa: static final long serialVersionUID = 7220145288709489651L.293 - . como por exemplo uma FileOutputStream para serialização do objeto em um arquivo. podemos utilizar qualquer objeto neste método.io.writeObject(objeto). Feito isso. podemos escrever um objeto qualquer no arquivo relacionado no construtor utilizando o método writeObject (Object obj). por padrão. localizado na pasta %JAVA_HOME%\bin.writeObject(manuel).ObjectOutputStream Esta classe possui um construtor que. da classe ObjectInputStream.java C:\> serialver material.arquivo.arquivo. Exemplo: ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("arquivo. out.ObjectInputStream Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .] C:\>javac material\arquivo\Pessoa. Assim como no caso do método readObject()..

não se esqueça de finalizar a comunicação com o arquivo utilizando o método close() de InputStream.io. como por exemplo uma FileInputStream para converter um arquivo em Objeto. java. Pessoa manuel = new Pessoa("Manuel").io. java. java. é importante ressaltar que por ele retornar um objeto (lembrando que todos os objetos em Java são.FileNotFoundException. Exemplo: ObjectInputStream in = new ObjectInputStream(new FileInputStream("arquivo. caminho).io.gravarObjeto(manuel. da seguinte forma: Pessoa manual = (Pessoa) in.ObjectInputStream. Feita esta instanciação.io.io.arquivo.294 - . /** * Classe utilizada para gravar um objeto em um arquivo e depois * ler o objeto do arquivo.ObjectOutputStream. Exemplo que armazena um objeto em um arquivo e vice-versa.readObject(). TestePessoa. deve receber uma InputStream qualquer.FileInputStream. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Após a leitura do arquivo.Programação Orientada a Objetos – Universidade Metodista de São Paulo Esta classe possui um construtor que.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 package material. por padrão. java.readObject(). podemos ler um objeto a partir do arquivo relacionado no construtor utilizando o método readObject(). Sobre este método. import import import import import import java. filhos da classe java. String caminho = "arquivo.txt".lang. tp.IOException.txt")). da seguinte forma: Object objeto = in.FileOutputStream. */ public class TestePessoa { public static void main(String[] args) { TestePessoa tp = new TestePessoa(). direta ou indiretamente. java.io.Object) é possível já armazenar este retorno no objeto que já sabemos ser compatível através de uma operação de casting.

getNome()).println("Erro ao ler o arquivo: " + caminho). } return pessoa.out. oos. pessoa = (Pessoa) ois. try { ObjectInputStream ois = new ObjectInputStream( new FileInputStream(caminho)).txt com o objeto Pessoa no formato que ele entende para depois converter de novo para objeto Pessoa.println("Erro ao gravar o objeto no arquivo").lerObjeto(caminho).writeObject(pessoa). } catch (IOException ex) { System.close().println("Erro ao ler o objeto do arquivo").close(). ois. } catch (ClassNotFoundException ex) { System.out.295 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .println(pessoa. } } O programa gera o arquivo. } private void gravarObjeto(Pessoa pessoa. oos. } catch (FileNotFoundException ex) { System. System. } catch (IOException ex) { System.readObject().println("Erro ao converter o arquivo em objeto").out.Programação Orientada a Objetos – Universidade Metodista de São Paulo 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 Pessoa pessoa = tp.out. String caminho) { try { ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(caminho)).out. } } private Pessoa lerObjeto(String caminho) { Pessoa pessoa = null.

converta a String digitada pelo usuário para caracteres por meio do método . // Determina cor do Carro. Lembre-se que o método de escrita em arquivo texto comporta apenas caracteres.toCharArray(). private Color cor. public double getVelocidadeMaxima (){} // Retorna a velocidade máxima do Carro. Color _cor){} // Construtor padrão da classe. 2-) Crie um programa capaz de coletar um texto digitado pelo usuário. logo. Feito isso. public String getCombustivel (){} Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Pegue este texto e grave em um arquivo de texto. crie um programa capaz de ler este arquivo e imprimir seu conteúdo em tela. // Determina a velocidade máxima do Carro. private String combustivel. // Determina o tipo de combustível que o Carro aceita.Programação Orientada a Objetos – Universidade Metodista de São Paulo Exercícios 1-) Crie um arquivo de texto com o seguinte texto: “Meu nome é <<seu nome>>”. 3-) Crie a seguinte classe Java: Carro private double velocidadeMaxima.296 - . String _combustivel. E os métodos: public Carro(double _velocidadeMaxima.

297 - . COMBUSTIVEL VARCHAR2 (15) ). crie um programa principal que serialize e armazene em um arquivo de texto um objeto do tipo criado acima. MODELO VARCHAR2(20). ANO NUMBER. Formato do arquivo XML: <automovel> <renavam>2334433</renavam> <marca>Chevrolet</marca> Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Para trabalhar com datas pesquise a classe DateFormat. Feito isso. cpf. 4-) Crie uma aplicação Swing que permita cadastrar Pessoas (nome. SCRIPT para criação da tabela: CREATE TABLE AUTOMOVEL ( RENAVAM NUMBER. Seu programa deve tratar uma exceção do tipo FileNotFoundException (na instanciação do FileInputStream) criando um arquivo no sistema de arquivos através do comando createNewFile() da classe File. MARCA VARCHAR2(20). cpf. public Color getCor(){} // Retorna a cor do Carro.xml. TIPO VARCHAR2(20). OBS: Utilize uma classe Pessoa para trabalhar com as informações da pessoa que será cadastrada ou consultada do arquivo.txt no formato: nome. dos dados de um automóvel pelo número do renavam e depois salvar como XML no arquivo automovel. 6-) Realizar uma consulta. esta aplicação deve salvar os contatos em um arquivo .Programação Orientada a Objetos – Universidade Metodista de São Paulo // Retorna o tipo de combustível que o Carro aceita. 5-) Crie uma agenda de contatos utilizando Swing. os dados das pessoas devem ser salvos em um arquivo . COR VARCHAR2(15).txt. dataNascimento Sua aplicação também deve permitir ler todas as pessoas que estão no arquivo e mostrar em uma tabela. dataNascimento).

298 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Criar classe AutomovelArquivo com método de gravação do XML. Criar classe AutomovelDAO com método de inclusão e consulta que deve ser por RENAVAM.Programação Orientada a Objetos – Universidade Metodista de São Paulo <modelo>Vectra</modelo> <tipo>sedan</tipo> <cor>preto</cor> <ano>2010<ano> <combustível>gasolina<combustível> </automovel> Passos: Criar classe Automóvel com seus getters e setters. Criar classe de Conexão com métodos de abertura e fechamento de conexão.

ou seja. A estrutura básica de um vetor é representada por seu nome e um índice. long[] vetorLong. mesmo que ele seja um vetor de tipos primitivos. todos os elementos de um vetor são do mesmo tipo.299 - . float[] vetorDeFloat. não é possível redimensionar um vetor ou adicionar a ele mais elementos do que este pode suportar. devemos informar ao menos seu nome e o tipo de dado que este irá armazenar. É importante ressaltar que um vetor em Java torna-se um objeto em memória. Exemplo: int[] vetorDeInteiros. String[] vetorDeStrings. ou seja.Programação Orientada a Objetos – Universidade Metodista de São Paulo 20. Recursos da Linguagem Java Arrays ou Vetores em Java Segundo a definição mais clássica da informática. É importante ressaltar que todo o vetor possui um tamanho fixo. Em Java. Em Java a posição inicial do vetor é definida pelo valor zero. um vetor é uma estrutura de dados homogenia. lembrando que as regras de herança também são válidas para vetores. este tipo de dado pode ser representado tanto por um tipo primitivo como por uma classe qualquer. que deve ser utilizado toda a vez que se deseja acessar um determinado elemento dentro de sua estrutura. Declaração do vetor Para se declarar um vetor. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

Uma vez que um vetor é uma estrutura de tamanho fixo. um vetor deve ser inicializado antes de ser utilizado. */ public class ExemplosVetores { public static void main(String[] args) { int[] vetor. Assim como uma variável comum. esta informação é necessária a sua inicialização. float[] vetorDeFloat = new float[5].java 01 02 03 04 05 06 07 08 09 /** * Classe utilizada para demonstrar o uso de vetor. */ public class ExemplosVetores { public static void main(String[] args) { int vetor[] = {2. Existe outra forma de se inicializar vetores já com valores em cada uma de suas posições. 5. 4. 5}. } } Note que esta forma de inicialização é bastante prática.java 01 02 03 04 05 06 07 08 /** * Classe utilizada para demonstrar o uso de vetor. vetor = new int[4]. int[] vetorDeInteiros = new int[4]. 8. } } Assim como um objeto. String[] vetorDeString = new String[6]. conforme exemplo a seguir: ExemplosVetores.Programação Orientada a Objetos – Universidade Metodista de São Paulo Inicialização de dados do vetor Uma vez que um vetor torna-se um objeto em memória. porem não deixa clara a quantidade de elementos que há no vetor obrigando o assim que você conte a quantidade de elementos para saber o tamanho do vetor. também é possível inicializar um vetor que já foi declarado anteriormente. sua inicialização é muito semelhante à de um objeto normal. Uma chamada a um índice de um vetor não inicializado gera uma exceção.300 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . para isto basta utilizar chaves da seguinte maneira: ExemplosVetores.

System. Um pouco sobre a classe Arrays Dentro do pacote java. 5.println("Elemento do indice 2 = " + vetor[2]).Programação Orientada a Objetos – Universidade Metodista de São Paulo Acesso aos elementos do vetor Consideremos o código do exemplo anterior. logo. 5}.java 01 02 03 04 05 06 07 08 09 10 /** * Classe utilizada para demonstrar o uso de vetor.out.println("Elemento do indice 4 = " + vetor[4]). a representação do seu vetor se daria da seguinte forma: índice= vetor = 0 2 1 5 2 4 3 8 4 5 Logo. Esta classe possui uma série de métodos estáticos que nos ajudam a trabalhar mais facilmente com vetores.301 - . 8.out.util encontramos uma classe chamada Arrays. seu último elemento é sempre igual ao tamanho do vetor menos um. System. */ public class ExemplosVetores { public static void main(String[] args) { int vetor[] = {2. Dentre seus principais métodos podemos evidenciar os seguintes: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .java C:\>java ExemploVetores Elemento do indice 2 = 4 Elemento do indice 4 = 5 Lembre-se que o primeiro índice do vetor é sempre zero. } } Com isso teríamos a seguinte saída em tela: C:\>javac ExemplosVetores. para acessar os valores de cada uma das posições deste vetor você deve utilizar o seu índice correspondente dentro de colchetes. assim como segue: ExemplosVetores. 4.

Para isto ele utiliza o método da busca binária que será discutido mais a frente. Observe no exemplo abaixo que tanto um atributo como uma variável interna a um método podem ser declarados como constantes. Dependendo do escopo e da utilização desta sua variável. • • • Trabalhando com constantes Assim como outras linguagens de programação. vetores são objetos) ele o ordena e não retorna valor algum. Pode-se copiar o vetor completamente ou apenas parte dele.Programação Orientada a Objetos – Universidade Metodista de São Paulo • binarySearch o Este método recebe sempre 2 parâmetros sendo um deles o vetor e outro o elemento que se deseja buscar dentro dele. Para tanto. } } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Coleções serão discutidas mais a frente copyOf o Cria uma cópia de um vetor. pois sua ordenação já foi realizada. basta utilizar o modificador de acesso final. é possível combina-la com outros modificadores de acesso. Por este método receber o vetor por parâmetro (que lembrando. Uma vez que a variável foi declarada como uma constante. */ public class ExemploConstantes { private final long NUMERO_ATRIBUTO_CONSTANTE = 547L. public static void main(String[] args) { final char VARIAVEL_CONSTANTE = 'A'. public final double OUTRO_NUMERO_ATRIBUTO_CONSTANTE = 365. é obrigatório a atribuição de um valor inicial para a mesma.302 - . ExemploConstantes. por exemplo.22. asList o Coverte o vetor em uma coleção do tipo lista. em Java também é possível se trabalhar com constantes. sort o Realizar a ordenação de um vetor utilizando um algoritmo do tipo Quick Sort.java 01 02 03 04 05 06 07 08 09 10 11 /** * Classe utilizada para demonstrar o uso de variaveis do tipo contante. Este tipo de algoritmo também será discutido mais a diante.

303 - . ExemploConstante exemplo = new ExemploConstante(). Por exemplo. exemplo.201015.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 /** * Classe utilizada para demonstrar o uso de variaveis do tipo contante. Justificativas do uso de Enums a constantes A seguir. Observe que a tentativa de atribuir um valor a qualquer uma destas variáveis irá gerar um erro de compilação. public final double OUTRO_NUMERO_ATRIBUTO_CONSTANTE = 365. */ public class ExemploConstantes2 { private final long NUMERO_ATRIBUTO_CONSTANTE = 547L.OUTRO_NUMERO_ATRIBUTO_CONSTANTE . veja a seguinte classe: ExemploUsarEnums.Programação Orientada a Objetos – Universidade Metodista de São Paulo Tendo em vista que tais variáveis foram declaradas como constantes.NUMERO_ATRIBUTO_CONSTANTE = 10001010L. } } Enums As Enums surgiram na linguagem Java a partir da versão 5 como uma alternativa ao uso de constantes. VARIAVEL_CONSTANTE = 'B'.22. e para atender de maneira melhor algumas das situações específicas que podem ocorrer durante a programação. ExemploConstantes2. qualquer classe pode passar um valor de mesmo tipo da sua constante. temos algumas justificativas do porque de se utilizar Enums em Java em relação às constantes: • As constantes não oferecem segurança – Como normalmente constantes são variáveis de um tipo específico. mas que na verdade não existe.06. seu valor não pode ser alterado após a sua declaração. exemplo. public static void main(String[] args) { final char VARIAVEL_CONSTANTE = 'A'.java 01 /** Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . caso sua constante sirva para ser utilizada em algum método.

304 - . o desenvolvedor é forçado a padronizar um domínio. public final int CONCEITO_BOM = 3. public void calcularAprovacao(int conceito) { • Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .println("Aprovado!"). } else if(conceito == CONCEITO_RUIM) { System. Por exemplo.Programação Orientada a Objetos – Universidade Metodista de São Paulo 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 * Classe utilizada para demonstrar o uso de enumeration (enum). • Não há um domínio estabelecido – Para evitar duplicidades entre os nomes de constantes nas diversas classes de um sistema.out. Perceba no exemplo anterior que todas as constantes iniciam com o prefixo CONCEITO justamente com este fim. caso você crie um novo valor intermediário aos já existentes. public final int CONCEITO_OTIMO = 4.println("Aprovado com louvor!"). public final int CONCEITO_REGULAR = 2. Qual seria seu valor uma vez que ele deveria estar entre os conceitos RUIM e BOM? Provavelmente você teria de alterar todo o seu código para algo semelhante ao que segue abaixo: ExemploUsarEnums2.out. public final int CONCEITO_BOM = 2. */ public class ExemploUsarEnuns { public final int CONCEITO_RUIM = 1. public void calcularAprovacao(int conceito) { if(conceito == CONCEITO_OTIMO) { System. */ public class ExemploUsarEnuns2 { public final int CONCEITO_RUIM = 1. public final int CONCEITO_OTIMO = 3. imagine que você precise criar um novo conceito chamado REGULAR. ainda considerando o exemplo acima.java 01 02 03 04 05 06 07 08 09 10 /** * Classe utilizada para demonstrar o uso de enumeration (enum). } } } Caso outra classe invoque o método calcularAprovacao na linha 9 e passe o número 4 como parâmetro ele simplesmente não funcionará. } else if(conceito == CONCEITO_BOM) { System.out. Fragilidade de modelo .Como uma constante sempre requer um valor. todos os atuais deverão ser alterados também.println("Reprovado!").

Vamos ao primeiro exemplo: ConceitosEnum. • Seus valores impressos são pouco informativos – Como constantes tradicionais de tipos primitivos são apenas valores numéricos em sua grande maioria. } else if(conceito == BOM) { Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .out.println("Aprovado com louvor!"). RUIM. somos forçados a alterar os valores das variáveis BOM e OTIMO. } else if(conceito == CONCEITO_RUIM) { System.out. } } } Note que ao invés de apenas criamos este novo valor.println("Regular!"). Como criar uma Enum A estrutura de uma Enum é bem semelhante à de uma classe comum. } else if(conceito == CONCEITO_BOM) { System.println("Reprovado!"). } else if(conceito == CONCEITO_REGULAR) { System. Toda a Enum possui um construtor que pode ou não ser sobrecarregado.out.println("Aprovado!"). por exemplo.println("Regular!").println("Aprovado com louvor!"). seu valor impresso pode não representar algo consistente.Programação Orientada a Objetos – Universidade Metodista de São Paulo 11 12 13 14 15 16 17 18 19 20 21 if(conceito == CONCEITO_OTIMO) { System.out. } else if(conceito == REGULAR) { System. BOM. public void calcularAprovacao(ConceitosEnum conceito) { if(conceito == OTIMO) { System. Imagine isso em um contexto com duzentas ou trezentas variáveis.out.305 - . o que o número 2 significa para você em seu sistema? Um conceito? Uma temperatura? Um modelo de carro? Etc. Por exemplo. */ public enum ConceitosEnum { OTIMO. REGULAR.out.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 /** * Classe utilizada para demonstrar o uso de enumeration (enum).

observe que como os elementos da enum não possuem mais um valor atrelado a si. Por fim. mas sim uma enum do tipo ConceitosEnum. visto que a própria enum já cumpre este papel. Vamos agora a um exemplo de uma enum com método construtor e com atributos: ConceitosEnumComConstrutor. */ public enum ConceitosEnumComConstrutor { OTIMO("Aprovado com louvor!"). mas. private String mensagem.println("Reprovado!"). eles não possuem um tipo específico sendo que todos eles são vistos como elementos da enumeração Conceitos.out. Uma enum. Isto já torna desnecessária a denominação de um prefixo de domínio para os nomes dos conceitos. } Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .306 - . REGULAR("Aprovado!"). também vale ressaltar que uma enum pode ter métodos. diferentemente das constantes. private ConceitosEnumComConstrutor(String mensagem) { this. já é inicializada quando você inicia sua aplicação Java. não necessitando ser instanciada. } else if(conceito == RUIM) { System.out. } } } Observe que no exemplo acima quatro valores foram criados nas linhas 5 a 8. a criação de um novo conceito. BOM("Regular!").println("Aprovado!"). tal como ocorria com as constantes. diferentemente de uma classe.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 /** * Classe utilizada para demonstrar o uso de enumeration (enum). O método calcularAprovacao na linha 10 recebe como parâmetro agora não mais um número inteiro qualquer. Ainda sobre o exemplo acima. Desta forma garante-se que ele sempre receberá um valor conhecido e que não teremos os mesmos problemas que poderiam ocorrer com uma variável de um tipo específico.Programação Orientada a Objetos – Universidade Metodista de São Paulo 16 17 18 19 20 21 System. tal como um EXCELENTE ou PÉSSIMO em nada influenciaria no código já existente dentro da enum.mensagem = mensagem. RUIM("Reprovado!").

Desta forma. Não precisa criar uma instancia para usá-la. outra classe poderia acessar estes dados de maneira muito mais transparente. C:\>javac PrincipalTesteEnum. } } Observe na linha 7 como a enum está sendo invocada. conforme o segue abaixo: PrincipalTesteEnum.java 01 02 03 04 05 06 07 08 09 /** * Classe utilizada para testar o enum.307 - .println("Conceito.mensagem.OTIMO..Programação Orientada a Objetos – Universidade Metodista de São Paulo 16 17 18 19 public String calcularAprovacao() { return this..: " + ConceitosEnumComConstrutor.out. } } Perceba que agora as mensagens estão sendo utilizadas no construtor terão seu valor definido no atributo mensagem para cada um dos elementos da enum.calcularAprovacao()).: Aprovado com louvor! Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . */ public class PrincipalTesteEnum { public static void main(String[] args) { System.java C:\>java PrincipalTesteEnum Conceito.

Queue (fila) e Map (mapa). O núcleo principal das coleções é formado pelas interfaces da figura a abaixo.Programação Orientada a Objetos – Universidade Metodista de São Paulo 21. List (lista).util. normalmente utilizamos coleções heterogêneas de um tipo especifico.Collection A interface Collection define diversos métodos que são implementados pelas classes que representam coleções. Collection Uma coleção (collection) é um objeto que serve para agrupar muitos elementos em uma única unidade. dentro das coleções são adicionados Objetos também chamados de elementos. Todas as interfaces e classes são encontradas dentro do pacote (package) java.util.308 - . java. Alguns dos métodos que devem ser implementados por todas as subclasses de Collection: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . essas interfaces permitem manipular a coleção independente do nível de detalhe que elas representam. pode ter coleções homogêneas e heterogêneas. embora a interface Map não ser filha direta da interface Collection ela também é considerada uma coleção devido a sua função. Temos quatro grandes tipos de coleções: Set (conjunto). temos muitas subclasses concretas que implementam varias formas diferentes de se trabalhar com cada coleção. a partir dessas interfaces. estes elementos precisão ser Objetos.

java.Queue Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Retorna uma boolean informando se a coleção está vazia ou não. A imagem abaixo mostra em azul as principais filhas da classe Collection.309 - . com exceção da interface Map.Programação Orientada a Objetos – Universidade Metodista de São Paulo add(Object e) – Adiciona um Objeto dentro da coleção.Retorna o tamanho da coleção. isEmpty() . contains(Object o) – Verifica se um Objeto está dentro da coleção. toArray() . addAll(Collection c) – Adiciona uma coleção de Objetos dentro da coleção.Converte uma coleção em um vetor. também mostra em verde as classes concretas mais utilizadas que implementam as interfaces. clear() .Set A interface Set é uma coleção do tipo conjunto de elementos.util. java. As características principais deste tipo de coleção são: os elementos não possuem uma ordem de inserção e não é possível ter dois objetos iguais. size() .Remove todos os Objetos da coleção. remove(Object o) – Remove um Objeto da coleção.util.

add("Luizinho"). Luizinho e Joãozinho. } } } Neste exemplo irá imprimir Zezinho. /** * Classe utilizada para demonstrar o uso da estrutura * de dados Lista. cont++) { String nome = (String) nomes. nomes.get(cont). em que a ordem dos elementos é dado através de sua inserção dentro da lista. java. import java. podemos também criar filas com prioridades.List A interface List é uma coleção do tipo lista. As principais características deste tipo de coleção são: a ordem que os elementos entram na fila é a mesma ordem que os elementos saem da fila (FIFO). for(int cont = 0. não pode haver chaves duplicadas dentro do mapa.util.util.size().ArrayList.Programação Orientada a Objetos – Universidade Metodista de São Paulo A interface Queue é uma coleção do tipo fila. As principais características deste tipo de coleção são: os objetos são armazenados na forma de chave / valor. nomes. Para localizar um objeto dentro do mapa é necessário ter sua chave ou percorra o mapa por completo.out. pois é a ordem que os elementos foram adicionados na lista.310 - .util. ExemploLista.add("Joãozinho").println(nome).util.List. */ public class ExemploLista { public static void main(String[] args) { List nomes = new ArrayList().add("Zezinho").java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 import java.Map A interface Map é uma coleção do tipo mapa. java. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . cont < nomes. System. nomes.

import java.util.Iterator. } } } Um pouco sobre Generics Usualmente. it.util.311 - .java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 import java. podemos utilizar uma nova estrutura criada a partir do Java 5.add("Luizinho").Iterator.0 chamada de Generics. ExemploLista2.List.Programação Orientada a Objetos – Universidade Metodista de São Paulo Outra forma de percorrer os elementos de uma lista é através da interface java.add("Zezinho"). System.hasNext(). for(Iterator it = nomes.util. nomes. assim como segue o exemplo: ListaPessoa.List.ArrayList.util.java 01 02 03 04 05 import java. Por este motivo. não há uso interessante uma lista com vários tipos de objetos misturados.util. /** * Classe utilizada para demonstrar o uso da estrutura * de dados Lista. import java. A estrutura de Generics serve para restringir as listas a um determinado tipo de objetos (e não qualquer Object).next(). /** * Classe utilizada para demonstrar o uso da estrutura Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .util. nomes.out.add("Joãozinho").iterator(). */ public class ExemploLista2 { public static void main(String[] args) { List nomes = new ArrayList(). import java.) { String nome = (String) it.println(nome).ArrayList. nomes.

duração e funcionários que participam deste projeto. pessoas.. isbn. */ public class ListaPessoa { public static void main(String[] args) { List<Pessoa> pessoas = new ArrayList<Pessoa>(). com as propriedades nome. um Projeto possui código. pois o compilador já sabe que dentro da lista só tem objetos do tipo Pessoa. crie um programa que permita ao usuário entrar com os dados de alguns livros. > ao lado do List e ArrayList.println(pessoa.List. cargo e pode estar trabalhando em diversos projetos. Este parâmetro indica que nossa lista foi criada para trabalhar exclusivamente com objetos de um tipo específico.out. como em nosso caso a classe Pessoa. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . esses livros devem ser guardados dentro de uma coleção filha da interface java. */ Pessoa p = pessoas.get(0). Exercícios 1-) Crie um programa que represente e teste a seguinte estrutura: Uma funcionário possui matricula. nome. pois temos certeza que apenas terá objetos do tipo Pessoa dentro da lista. /* Observe que o casting não é necessário. /* Podemos utilizar o for-each para percorrer os elementos da lista.util. autor. para ordenar está lista de acordo com o nome do livro e no final imprima a lista de livros ordenado. } } } Repare no uso de um parâmetro < .Programação Orientada a Objetos – Universidade Metodista de São Paulo 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 * de dados Lista com Generics.add(new Pessoa("Rafael")). pessoas. paginas e preço. */ for(Pessoa pessoa : pessoas) { System. nome. A utilização deste recurso nos traz uma segurança maior em tempo de compilação de código. Depois crie um método que utiliza o algoritmo de Bubble Sort.add(new Pessoa("Cristiano")).312 - .getNome()).. 2-) Dado uma classe Livro.

Programação Orientada a Objetos – Universidade Metodista de São Paulo 3-) Continuando o exercício 2. autor ou isbn.313 - . crie um algoritmo de Pesquisa Binaria. Lembre-se de ordenar a lista de livros antes de fazer a pesquisa. que possa consultar um livro pelo seu nome. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

temos os seguintes pacotes: br metodista (dentro da pasta br) poo (dentro da pasta metodista) aula1 (dentro da pasta poo) aula2 (dentro da pasta poo) Usamos os pacotes para separa os fontes da nossa aplicação. variável e etc. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Apêndice A – Boas práticas O Java como qualquer outra linguagem tem algumas boas praticas de desenvolvimento. por exemplo: Neste exemplo. Nos nomes que usamos para representar pacote. para padronizar o código fonte. método. de forma que fique mais fácil encontrar classes de um determinado assunto ou objetivo. Nome de pacote (package) O nome de pacote (package) é normalmente representado por uma palavra em minúsculo. classe. devemos ter bom senso para criar nomes que facilitem a identificação do mesmo.314 - .

E o nome do arquivo . então o nome é todo em minúsculo. então o primeiro caractere de cada palavra a partir da segunda palavra deve ser maiúsculo e o restante da palavra em minúsculo.java só pode existir uma classe public. por exemplo: OBS: Dentro de cada arquivo .java deve ser o idêntico ao nome da classe public. então o nome é todo em minúsculo.315 - . Exemplo: Nome de variável O nome de variável segue o seguinte padrão: a) se o nome da variável tem apenas uma palavra. então o primeiro caractere de cada palavra a partir da segunda palavra deve se maiúsculo e o restante da palavra em minúsculo. b) se o nome da variável tem mais de uma palavra. b) se o nome do método tem mais de uma palavra. Nome de método O nome de método segue o seguinte padrão: a) se o nome do método tem apenas uma palavra.Programação Orientada a Objetos – Universidade Metodista de São Paulo Nome de classe O nome da classe deve começar com o primeiro caractere de cada palavra em maiúsculo. Exemplo: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . as demais classes devem ter acesso default.

etc. método. Um bom padrão de indentação pode ser da seguinte forma. a cada bloco de abre chave “{“ e fecha chave “}” ou a cada condição que pode executar um código. Comentário pode ser feito de três formas em Java: // Comentário de uma única linha Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . por exemplo: Comentários Outra boa pratica do desenvolvimento de software é o comentário sobre o código escrito. facilitando a visualização.316 - . variável.Programação Orientada a Objetos – Universidade Metodista de São Paulo Indentação Uma outra boa pratica do desenvolvimento em qualquer linguagem de programação é a indentação (alinhamento) do código fonte. dessa forma fica mais fácil identificar qual o objetivo de uma classe. deve ter seu código interno com um espaçamento maior.

Programação Orientada a Objetos – Universidade Metodista de São Paulo /* Comentário com mais de uma linha */ /** * Javadoc * Mais informações sobre o javadoc no tópico abaixo.317 - . */ Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

Programação Orientada a Objetos – Universidade Metodista de São Paulo Apêndice B – Javadoc Javadoc é um utilitário do pacote de desenvolvimento Java utilizado para a criação de um documento HTML com todos os métodos e atributos das classes contidas em seu projeto. que servem como marcação. O texto deve sugerir uma substituição. variáveis.descreve a versão do produto.descreve a versão do produto quando o elemento foi adicionado à especificação da API. */ Os comentários do Javadoc são usados para descrever classes. para que na geração do documento determinadas informações já sejam colocadas em campos específicos. Cada comentário deve ser colocado imediatamente acima do recurso que ele descreve.essa marca adiciona um link à seção "Veja também" da documentação. pacotes.adiciona um comentário de que a classe. Comentários de classes e interfaces Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .318 - . objetos. tais como o autor do método descrito ou sua versão. além dos comentários inseridos com as tags especiais: /** * Comentário do JavaDoc. @version . interfaces e métodos. Segue abaixo alguns destes comandos: Comentários gerais @deprecated . @since . Também é possível utilizar-se de comandos especiais. @see . método ou variável deveria não ser usada.

autor do elemento.sql. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .jdbc.319 - .descreve os parâmetros de um método acompanhado por uma descrição. String senha.0 */ public ConexaoBD(String usuario. @throws .para documentar a serialização de objetos.Connection. @version . import java.Driver"). * Você deve utiliza-lo para conectar a base de dados.forName("com. String ipDoBanco.SQLException.DriverManager. String nomeDaBase) throws SQLException . Exemplo: ConexaoBD. */ public class ConexaoBD { /** * Método construtor.sql.descreve o valor retornado por um método. Exception { Class.0 * @version 1.sql.número da versão atual.Programação Orientada a Objetos – Universidade Metodista de São Paulo @author . @return . /** * Classe utilizada para realizar as interações com o banco de dados.mysql. import java. Comentários de métodos @param .java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import java. * @param usuario usuário do banco de dados * @param senha senha do usuário de acesso * @param ipDoBanco endereço IP do banco de dados * @param nomeDaBase nome da base de dados * @throws SQLException * @throws Exception * @author Cristiano Camilo * @since 1.indica as exceções que um dado método dispara com uma descrição associada. Comentários de serialização @serial .

String nomeDaBase) Método construtor.getConnection("jdbc:mysql://" + ipDoBanco "/" + nomeDaBase.ConexaoBD(String usuario.println("Conectado ao banco de dados. usuario. assim como segue: conexao. No diretório que contém os arquivos-fonte execute o comando: javadoc -d dirDoc nomeDoPacote Onde dirDoc é o nome do diretório onde se deseja colocar os arquivos HTML. basta somente deixar o javadoc fazer o seu trabalho.Programação Orientada a Objetos – Universidade Metodista de São Paulo 26 27 28 29 30 31 32 + Connection conn = DriverManager. a utilização de tal notação já é automaticamente interpretada pela IDE. System. Parameters: usuario usuário do banco de dados senha senha do usuário de acesso ipDoBanco endereço IP do banco de dados nomeDaBase nome da base de dados Throws: SQLException Exception @author Cristiano Camilo @since 1. nos será exibido uma versão compacta do javadoc da mesma.0 Gerando a documentação em HTML Depois comentar seu programa usando as tags acima. Você deve utiliza-lo para conectar a base de dados."). } //Outros métodos } No NetBeans ou Eclipse. String ipDoBanco. e ao se invocar este método de qualquer classe do projeto. pois o mesmo vai se encarregar de gerar um conjunto de páginas HTML.out.320 - . Gerando a documentação em HTML com Eclipse Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .0 @version 1. senha). String senha.

A próxima janela a ser exibida pede que mais informações sejam fornecidas. A primeira delas corresponde ao caminho do arquivo executável do Javadoc. selecione a opção Javadoc e clique em Next..Programação Orientada a Objetos – Universidade Metodista de São Paulo Também é possível se gerar essa documentação a partir do Eclipse.. mais abaixo você deve marcar a partir de qual pacote do seu projeto o Javadoc será gerado.. É possível deixar a pasta do projeto marcada para que o Java gere documentação de todo o seu projeto. Mais abaixo existe a opção de visibilidade dos membros os quais você deseja criar seu Javadoc. Na janela de opções que será exibida. Deixe marcada a opção public. O importante aqui é notar que será gerada a documentação sempre do nível selecionado até os outros Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .. para isso faça: Clique no se projeto com o botão direito do mouse e selecione a opção Export. para que a documentação seja gerada para todos os membros de suas classes que estarão disponíveis para as demais classes.321 - .

a documentação gerada será de todos os termos private. ou seja.322 - . protected e public. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . e aponte o destino de geração de sua documentação na opção Destination. deixe marcada a opção Standard Doclet.Programação Orientada a Objetos – Universidade Metodista de São Paulo níveis menos restritos. default ou package. basta clicar em Finish e sua documentação estará disponível na pasta solicitada. Por fim temos a opção de Doclet. selecionando private. que corresponde ao padrão de fonte que será utilizado. Feito isso.

O download do Windows x64. A primeira tela que aparece é sobre a Licença de uso do Java. clique em Aceitar (Accept) para continuar.0 update 2. Busque pela versão mais atualizada para download. atualmente temos a versão 7.com/technetwork/java/javase/downloads/index. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Apêndice C – Instalando e Configurando o Java Java Development Kit (JDK) O Java Development Kit é o nome dado ao pacote de aplicativos fornecidos pela Oracle para o desenvolvimento de aplicações Java.oracle. Este manual dedica-se a lhe fornecer os passos básicos para efetuar a instalação deste pacote de aplicativos e como configurá-lo adequadamente. lembrando que para fazer o download é necessário aceitar os termos e licença da Oracle. Fazendo o download No site da Oracle http://www. tem cerca de 87MB e após a sua finalização execute-o.html é disponibilizado o JDK para download.323 - . Clicando em “download”. por exemplo. será apresentado a versão do Java para o sistema operacional de sua preferencia.

clique em Próximo (Next) para continuar.Programação Orientada a Objetos – Universidade Metodista de São Paulo Na próxima tela podemos definir onde o Java deve ser instalado. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .324 - . Na próxima tela mostra a instalação do Java.

para terminar a instalação.Programação Orientada a Objetos – Universidade Metodista de São Paulo Clique em Concluir (Finish). Durante a instalação do Java SDK. também começa a instalação do Java SE Runtime Environment (JRE).325 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Escolha onde o JRE deve ser instalado e clique em Próximo (Next) para continuar.

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Na próxima tela mostra a instalação do JRE.326 - .

Programação Orientada a Objetos – Universidade Metodista de São Paulo Depois da instalação do JDK e JRE precisamos configurar algumas variáveis de ambiente: Nas Propriedades do sistema. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .327 - . clique em Variáveis de ambiente na aba Avançado.

Esta variável serve para executar os comandos do java de diretório. Adicione a variável do sistema JAVA_HOME com o valor igual ao caminho onde foi instalado o Java.Programação Orientada a Objetos – Universidade Metodista de São Paulo Adicione a variável do sistema CLASSPATH com o valor apenas de um ponto final. Agora altere a variável de sistema Path. digite cmd e clique em ENTER. Para testar se o Java esta instalado e configurado corretamente. abra um command. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . no final dela adicione .%JAVA_HOME%\bin. pode ser feito através do menu Iniciar / Executar.328 - .

html.329 - . Execute o arquivo de instalação do NetBeans e aparecerá a tela abaixo de configuração. neste exemplo baixamos a distribuição Java de 216MB. Depois de instalado o Java podemos também instalar um IDE para facilitar o desenvolvimento. deve ser impresso no console a versão do Java que está instalado. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .org/downloads / index. para desenvolvimento desktop e web. pois nessa instalação demonstro como instalar o NetBeans completo.Programação Orientada a Objetos – Universidade Metodista de São Paulo No command digite java –version. Instalação do Netbeans O download do NetBeans pode ser feito através do site: http://netbeans.

Programação Orientada a Objetos – Universidade Metodista de São Paulo Na tela de Bem-vindo. Neste tela precisamos informar onde o NetBeans será instalado e qual versão do Java vamos utilizar. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Marque a opção de aceito da licença do NetBeans e clique em Próximo. selecione os servidores web GlassFish e Apache Tomcat apenas se desejar configura-los para desenvolvimento web.330 - .

331 - . Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Nesta tela podemos definir onde será instalado o servidor web Glassfish. Nesta tela podemos definir onde será instalado o servidor web Tomcat.

Programação Orientada a Objetos – Universidade Metodista de São Paulo Depois que as configurações foram feitas. Na próxima tela é mostrado o progresso da instalação do NetBeans. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .332 - . clique no botão Instalar.

para concluir a instalação.Programação Orientada a Objetos – Universidade Metodista de São Paulo Depois de instalado o NetBeans podemos fazer o registro on-line ou clicar em Finalizar. Instalação do Eclipse Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .333 - .

basta apenas extrai-lo em um diretório do computador.Programação Orientada a Objetos – Universidade Metodista de São Paulo O download do eclipse pode ser feito através do site: http://www.5 distribuição Eclipse IDE for Java EE Developers de 189MB.zip. neste exemplo fizemos o download do Eclipse 3. O Eclipse pode ser executado através do arquivo eclipse.exe dentro da pasta do eclipse: Quando o eclipse carrega ele pergunta onde é o diretório que estão os projetos: Podemos informar um local onde está os projetos e também podemos deixar marcado a caixa Use este como um padrão e não pergunte novamente (Use this as the default and do not ask again).334 - . para que está caixa de dialogo não apareça novamente.org/downloads/.eclipse. pois através dela podemos programar Java para desktop e web. Depois de feito o download do arquivo eclipse-jee-galileo-SR1-win32. A tela do eclipse é a seguinte: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

335 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .

O NetBeans também conta com um ambiente de desenvolvimento amigável. aplicações desktop client/server.Programação Orientada a Objetos – Universidade Metodista de São Paulo Apêndice D – Primeira aplicação no NetBeans O NetBeans é uma IDE de desenvolvimento que fornece suporte aos mais variados segmentos de desenvolvimento Java. simples e intuitivo. Permite o desenvolvimento de aplicações Java simples console.336 - .0 Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . Iniciando o NetBeans 6. aplicações web distribuídas e aplicações de dispositivos portáteis. bem como algumas outras linguagens de programação como Ruby e C/C++. também possui suporte a modelagem UML.

0 A seguir vamos mostrar um passo a passo de como criar uma aplicação console utilizando o NetBeans: Criando um novo Projeto Java Na IDE do NetBeans. clique em File (Arquivo) e depois em New Project (Novo Projeto) ou utilize o atalho Ctrl+Shift+N: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .337 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Tela principal do NetBeans 6.

338 - . escolha a categoria Java e em seguida escolha o projeto Java Application (Aplicação Java): Feito isso clique em Next (Próximo) para continuarmos a criação do projeto. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .Programação Orientada a Objetos – Universidade Metodista de São Paulo Na tela de New Project (Novo Projeto).

java”.Create Main Class (Criar Classe Principal) é possível criar uma classe inicial no projeto. Esta classe será responsável por iniciar a chamada a outras classes do projeto. .Programação Orientada a Objetos – Universidade Metodista de São Paulo Aparecerá a janela de New Java Application (Nova Aplicação Java). devemos preencher os campos: . sendo que no nosso caso colocamos o nome HelloWorld. Coloque um nome que julgar melhor. Feito isso clique em Finish (Finalizar) para terminar a criação do projeto Java. este será o caminho que você acessar para localizar seus arquivos “.Set as Main Project (Definir como Projeto Principal) apenas identificará a IDE que este é seu projeto principal de trabalho. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .339 - . este campo indica onde os arquivos do projeto serão salvos. caso você queria procurar pelos arquivos desenvolvidos no projeto. devido a sua função em nosso projeto.Project Location (Localização do Projeto). . caso você possua mais de um projeto aberto dentro do NetBeans. . Atenção. Dentro do projeto tem uma pasta chamada src e dentro desta pasta fica os arquivos fontes.Project Name (Nome do Projeto). Nesta janela. caso você queira resgatar suas classes mais tarde. utilize um nome que tenha relação com o programa que você irá desenvolver.

Programação Orientada a Objetos – Universidade Metodista de São Paulo Criado o projeto Java teremos a seguinte estrutura: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .340 - .

341 - . Navegação da classe que esta aberta na área 2. serve para visualizar atributos e métodos da classe. Área de edição das classes. Saída da execução das aplicações console. 3. 2. Estrutura do Projeto Java.Programação Orientada a Objetos – Universidade Metodista de São Paulo 1. Testando a aplicação console Hello World Escrevendo o código da aplicação: Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai . 4.

342 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Executando a aplicação java: Para executarmos a aplicação podemos clicar no ícone Run Main Project (Executar projeto principal) ou podemos executar apenas a classe que criamos clicando com o botão direito em cima de HelloWorld. Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .java e clicando no menu Run File (Executar arquivo).

Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .343 - .Programação Orientada a Objetos – Universidade Metodista de São Paulo Depois que executamos a aplicação Java temos a seguinte saída na aba Output.

html The Java Tutorials: Collections .html Criado por Cristiano Camilo dos Santos de Almeida e Rafael Guimarães Sakurai .http://www.com/javase/tutorial/collections/index.oracle.6 .http://www.com/javase/1.br/ articles/viewcomp.com/javase/6/docs/api/ [JAVA SE] – Tecnologia Java SE .eclipse.http://docs.oracle.com/projects/duke/ pages/GreenProject Java Como Programar – Deitel – Prentice Hall JavaDoc .5.devmedia.http://www.oracle.netbeans.http://docs.oracle.Bookman [DEVMEDIA] Conceitos básicos das plataformas Java e J2ME .com/technetwork/java/javase/tech/ index.asp?comp=6484&hl Eclipse – http://www.API JDK 1.Programação Orientada a Objetos – Universidade Metodista de São Paulo Bibliografia Big Java – Cay Horstmann .html Use a Cabeça Java – Kathy Sierra e Bert Bates – O’Reilly Varargs .html NetBeans .com.http://docs.ime.0/docs/guide/language/varargs.344 - .org/ Recursão e algoritmos recursivos . Goodrich e Roberto Tamassia Estruturas de dados & algoritmos em Java – Robert Lafore [GREEN PROJECT] A brief History of the Project Green .http://kenai.org Estrutura de Dados e Algoritmos em Java – Michal T.http://www.usp.br/~pf/algoritmos/aulas/recu.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->