Programação Orientada a Objetos

UNESA - Universidade Estácio de Sá Análise de Sistemas de Computação Professor: Ângelo Stroligo Pecly Programação Orientada a Objetos
1- Introdução à programação Java Em torno de 1990, uma equipe da SUN Microsystems, liderada por James Gosling foi incumbida de desenvolver programas para controlar aparelhos eletrônicos. A linguagem inicialmente utilizada foi C++, mas, com o decorrer do tempo, essa equipe se deparou com várias dificuldades inerentes ao C++ (tais como herança múltipla e ponteiros). Para contornar essas dificuldades foi desenvolvida a linguagem Oak, que tinha a mesma estrutura do C++, só que sem os detalhes que o tornava complicado para controlar aparelhos eletrônicos. A linguagem Oak foi utilizada na construção do sistema Star Seven (que possibilita o controle de vários aparelhos eletrônicos de uma casa através do toque em uma tela) e de um sistema de televisão interativa. Apesar de nenhum dos dois projetos terem se tornado produtos, a linguagem Oak, com o decorrer do tempo, pôde amadurecer. Tendo em vista que o nome Oak já havia sido reivindicado, a SUN passou a chamar a linguagem Oak de Java. Em 1993, a Internet passou a suportar WWW, deixando de ser composta somente de texto e adotando um ambiente gráfico. Com isso, a SUN adaptou a já poderosa (independente de plataforma, segura e simples) linguagem Java para esse novo mundo, criando o recurso de Applet. Para mostrar que Java era uma linguagem robusta, a SUN implementou um browser, o HotJava. Em meados de 1995 a linguagem Java foi lançada oficialmente, e passou a ser incorporada aos browsers da Netscape e da Microsoft. 1.1- As suas Características
✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗

Simples: Java eliminou as dificuldades herdadas do C++ e adicionou facilidades, tal como Garbage Collector; Orientada a Objetos: Java é pura (totalmente OO) e agrega um grande conjunto de classes em suas bibliotecas; Distribuída: Suporta aplicações em rede e objetos distribuídos (RMI); Segura: Verifica o byte-code antes da execução; Robusta: O interpretador permite tratamento de exceções e não permite que uma aplicação paralise o sistema (projetada para software confiável); Plataforma Independente: Java, por ser interpretada, pode rodar em qualquer plataforma (desde que esta tenha o interpretador); Alta Performance: Mais rápida que linguagens script (em browsers) e passível de compilação just-in-time (JIT); Multi-tarefa: Pode-se executar threads simultaneamente;

1.2- Os 3 Alicerces Tradicionalmente, as linguagens de programação são avaliadas por três parâmetros: velocidade, segurança e portabilidade. O ideal é uma linguagem que tenha um equilíbrio entre estes três alicerces, pois a deficiência em algum desses itens pode comprometer o sucesso do software que está sendo desenvolvido. Abaixo, é apresentado graficamente a relevância de cada um destes alicerces nas linguagens C++, Java, Smalltalk e Tcl.

Programação Orientada a Objetos 1.3- Principais diferenças Por questões de segurança, simplificação, e por ser uma linguagem OO pura, Java não utiliza:
✗ ✗ ✗ ✗ ✗ ✗

Structures e unions; #define; Ponteiros; Herança múltipla; Funções; Goto; Em compensação Java adicionou: Garbage collector automático; Acoplamento dinâmico;

✗ ✗

1.4- JVM (Java Virtual Machine) Para que Java conseguisse atingir independência de plataforma, a SUN optou por uma arquitetura independente (máquina virtual), para a qual um código fonte Java é compilado. O código fonte (programa.java), após compilado, se transforma em byte-code (programa.class). Esse byte-code atualmente não pode ser executado em nenhuma arquitetura, mas pode ser interpretado em várias arquiteturas, desde que estas tenham um interpretador Java instalado. Veja abaixo como ocorrem as mudanças <código fonte>  <byte-code (plataforma independente)>  <binário (plataforma dependente)>: Interpretador
1001110111

Programa Java

Meu Programa

MeuPrograma.java

MeuPrograma.class

Compilador O interpretador Java é uma implementação da máquina virtual Java, voltada para uma determinada plataforma. Um código fonte Java é compilado somente uma vez, mas será interpretado quantas vezes forem necessárias a sua execução. Programa Java
MeuPrograma.java

Compilador

Interpretador

Interpretador

Meu Programa

Meu Programa

Palm

PC

Programação Orientada a Objetos 1.5- Ambientes de Desenvolvimento Já existem no mercado vários ambientes para desenvolvimento em Java. O ambiente que define os padrões é o JDK, desenvolvido pela SUN. A grande vantagem do JDK é ser freeware, mas ele não possui interface gráfica e nem apresenta suporte adequado à sua construção. Outro ambiente bastante conhecido é o Jbuilder, fabricado pela Inprise. As suas grandes vantagens são a interface gráfica padrão Delphi/CBuilder, suporte à construção de interface gráfica e o seu depurador gráfico. Abaixo, segue uma tabela com os ambientes mais utilizados, fabricante, e onde encontrar informações úteis:
Ambiente JDK Jbuilder JCreator Visual J++ Fabricante SUN Inprise Xinox Software Microsoft Referência http://www.javasoft.com/products/jdk/1.1/index.html http://www.inprise.com/jbuilder Http://www.jcreator.com http://msdn.microsoft.com/visualj

1.5.1- Introdução ao JDK (Java Development Kit) Nesta seção, apresentamos as ferramentas mais utilizadas no JDK1.3:

javac
Compilador Java Transformar código fonte em byte-code javac [opções] codigofonte.java opções mais utilizadas: -classpath diretório Diretório de classes utilizadas pelo programa. -d diretório Diretório destino para os byte-codes. -g Cria tabelas de debug. -deprecation Exibe a localização de métodos obsoletos. -nowarn Não exibe advertências. -o Tenta otimizar o byte-code a ser gerado. -verbose Exibe informações de status -depend Causa a recompilação das classes dependentes de códigofonte.java javac Button.java

Descrição Função Sintaxe

Exemplo ✗

Java
Interpretador Java Executar programas (byte-codes) escritos em Java java [opções] nomedaclasse <args> opções mais utilizadas: -debug Executa o debug. -classpath diretório Diretório de classes utilizadas pelo programa. -mxx Quantidade máxima de memória para a seção. -msx Quantidade de memória para a inicialização. -noasyncgc Não utiliza coleta de lixo assíncrona. -noclassgc Desliga a coleta de lixo automática para classes. -nojit Desabilita a compilação just-in-time. -version Exibe informações sobre versão. -help Exibe informações sobre utilização. -ssx Tamanho da pilha para código C. -ossx Tamanho da pilha para código Java. -v, -verbose Exibe informações de status. -verify Verifica o código Java. -verifyremote Verifica o código Java carregado de um classloader. -noverify Não verifica o código Java.

Descrição Função Sintaxe

Programação Orientada a Objetos
-verbosegc Exibe informações de status do coletor de lixo. -DpropertyName=newValue Configura valores de propriedades. java Button

Exemplo

1.6- Declaração de variáveis Uma variável é um nome definido pelo programador ao qual pode ser associado um valor pertencente a um certo tipo de dados. Em outras palavras, uma variável é uma porção de memória, identificada por um nome, que é capaz de armazenar um valor de um certo tipo. Desta forma toda variável possui um nome, um tipo, um conteúdo e um endereço de memória. O nome de uma variável em Java pode ser uma seqüência de um ou mais caracteres alfabéticos e numéricos, iniciados por uma letra ou ainda pelos caracteres ‘_’ (underscore) ou ‘$’ (cifrão). Os nomes não podem conter outros símbolos gráficos, operadores ou espaços em branco, podendo ser arbitrariamente longos embora apenas os primeiros 32 caracteres serão utilizados para distinguir nomes de diferentes variáveis. É importante ressaltar que as letras minúsculas são consideradas diferentes das letras maiúsculas, ou seja, a linguagem Java é sensível à caixa, assim temos como exemplos válidos: a _especial total VALOR x2 Maximo $min ExpData

Seguindo as mesmas regras temos abaixo exemplos inválidos de nomes de variáveis: 1x Total geral numero-minimo void

A razão deste nomes serem inválidos é simples: o primeiro começa com um algarismo, o segundo possui um espaço em branco, o terceiro contém o operador de subtração, mas por que o quarto é inválido? Porque além das regras de formação de nome em si (identificadores), uma variável não pode utilizar como nome uma palavra reservada da linguagem. As palavras reservadas são os comandos e nomes dos tipos primitivos. As palavras reservadas da linguagem Java, que portanto não podem ser utilizadas como nome de variáveis ou outros elementos, são: abstract boolean break byte case catch char class continue synchronized do double else extends false final finally float for package implements import instanceof int interface long native new null this private protected public return short static super switch if throw throws transient true try void volatile while default

Além destas, existem outras que embora reservadas não são usadas pela linguagem: const operator future outer generic rest goto var inner volatile

Algumas destas, tal como o goto, faziam parte da especificação preliminar do Oak, antes de sua formalização como Java. Recomenda-se não utilizá-las qualquer que seja o propósito.

Ou seja. depois declaramos uma lista contendo um ou mais nomes (identificadores) de variáveis desejadas deste tipo. sendo válidas em todo o escopo onde foram declaradas e nos escopos internos à estes. leia as explicações passo a passo do programa e depois recorra a um usuário mais experiente. Veja alguns exemplos: int i.7. e isso faz diferença. byte mascara.Java Chame o compilador Java para este arquivo: javac HelloWorld. Variáveis podem ser declaradas em qualquer ponto de um programa Java. boolean ok = false. double valorMedio.57.Java Seu diretório deve ter recebido um novo arquivo após essa compilação: HelloWorld. (javac e java respectivamente) Crie o arquivo acima em um diretório e salve-o com o nome: HelloWorld. float total. não se desespere. onde nesta lista os nome são separados por vírgulas e a declaração terminada por ‘. nome2 [.’ (ponto-e-vírgula). leia atentamente o programa. float angulo = 1. preco.Programação Orientada a Objetos Desta forma para declararmos uma variável devemos seguir a seguinte sintaxe: tipo nome1 [. Por escopo entende-se o bloco (conjunto de comandos da linguagem) onde ocorreu a declaração da variável. é bem provável que ele não compile.class de arquivo): java HelloWorld Resolvendo os eventuais problemas Se você se tiver digitado tudo ao envés de usar “copy and paste”.Programa “Hello World” // HelloWorld. Normalmente a Java é muito fácil de . nome3 [ …. } } Compilando um primeiro programa ✗ ✗ ✗ ✗ ✗ Certifique-se de ter adicionado a sua lista de path’s o path do compilador e interpretador Java. nomeN]]]. Também é possível definirmos um valor inicial para uma variável diretamente em sua declaração: int quantidade = 0. char letra = ‘c’.out.println("Hello World!").java quando chamou o compilador? E quando chamou o interpretador. primeiro indicamos um tipo. também? Se ainda não der certo. Você não esqueceu nenhum ponto e vírgula? E as chaves? HelloWorld começa com letra maiúscula. 1. você foi coerente com a convenção adotada de letras maiúsculas e minúsculas para seus identificadores? Você estava no mesmo diretório de HelloWorld.class Chame o interpretador Java para este arquivo (omita a extensão .java public class HelloWorld { public static void main (String args[]) { System. se isto ocorrer.

por enquanto guarde public class como o início da declaração de uma classe. public static void main (String args[]) { public É um qualificador do método que indica que este é acessível externamente a esta classe (para outras classes que eventualmente seriam criadas). este tipo de comentário pode ser intercalado em uma linha de código. Mas por motivos de clareza do código declararemos todas no início do bloco. Esta classe só possui uma declaração. public class HelloWorld { Na declaração acima class é a palavra reservada que marca o início da declaração de uma classe. void Semelhante ao void do C++ ou C. Existe também um outro tipo de comentário formado por /* Insira aqui o texto a ser ignorado */ . o . ou seja: delimitam um bloco de código. uma espécie de valor vazio que tem que ser especificado. eles podem ser entendidos como algo semelhante ao BEGIN-END de Pascal ou Modula-3. e você precisará de pouca ajuda. Desta forma. note que um método. é o valor de retorno da função. só pode ser declarado {internamente} a classe a qual pertence.java Comentários em Java seguem a mesma sintaxe de C++. quando a função não retorna nenhum valor ela retorna void.println("Hello World!"). Para quem não conhece C ou C++.<NomemetodoStatic>(argumentos). Os programadores Pascal notarão que variáveis locais dos métodos podem ser declaradas em qualquer local entre as chaves. todo o restante da linha é ignorado. para tal deve-se seguir a sintaxe: <NomeClasse>.out. Explicação passo a passo do programa exemplo: // HelloWorld. Os métodos static podem ser invocados. mesmo quando não for criado nenhum objeto para a classe. por hora você precisa saber que particularmente o método main precisa ter essa qualificação porque ele é chamado sem que se crie nenhum objeto de sua classe. “//” inicia uma linha de comentário. todo pedaço de código em Java deve pertencer ao “abre chaves”. System. “fecha chaves” da definição de uma classe. é dentro deste método e através das iterações entre os atributos. exemplo: java HelloWorld argumentotexto1 argumentotexto2 { } “Abre chaves” e “fecha chaves”. Comentários são tratados como espaços em branco. String args[] É o argumento de main e por conseqüência do programa todo. ele é um vetor de Strings que é formado quando são passados ou não argumentos através da invocação do nome do programa na linha de comando do sistema operacional. O “abre chaves” marca o início das declarações da classe que são os atributos e métodos. a do método main. Chamada do método println para o atributo out da classe ou objeto System. static É um outro qualificador que indica que o método deve ser compartilhado por todos os objetos que são criados a partir desta classe. o seu interesse o fará cada vez mais familiar com esta linguagem. O termo “public” é um qualificador. “HelloWorld” é o nome dado a esta classe. evitando as confusões sobre “escopo”. Retornaremos a esta explicação mais tarde. variáveis e argumentos visíveis nele que o programa se desenvolve. main Este é um nome particular de método que indica para o compilador o início do programa. ao contrário de C++.Programação Orientada a Objetos se programar.

Exercícios: 1. textos explicativos. é normal que você não tenha entendido tudo. Aproveitando tal característica do javadoc. tabelas. Além das tags html comentário de documentação que também podem ter múltiplas linhas . Por hora você pode guardar esta linha de código como o comando para imprimir mensagens na tela. imprime a String e posiciona o cursor na linha abaixo . mas tem o propósito de documentar o programa: /* */ Geralmente o comentário de documentação é posicionado imediatamente antes do elemento a ser documentado e tem seu conteúdo extraído automaticamente pelo utilitário javadoc fornecido juntamente com o JDK.1. } Finalmente o fecha chaves termina com a declaração da classe HelloWorld. com a inclusão de imagens. links e outros recursos. Esta ferramenta gera páginas em formato html contendo os comentários organizados da mesma forma que a documentação fornecida juntamente com o JDK.Programação Orientada a Objetos argumento é uma constante do tipo String.A Linguagem Java 2. usualmente se adiciona tags html aos comentários de documentação para melhorar a forma final da documentação produzida. 2.Experimente fazer modificações mensagens na tela. Imprima outras de uma linha de múltiplas linhas de documentação O primeiro. Esses conceitos ainda serão aprofundados e são citados aqui apenas por curiosidade. usualmente explicativos. são informações deixadas juntamente com o código como informação para quem programa. “ponto e vírgula” separa operações. onde o argumento que vem entre aspas é a String a ser impressa. adicione comentários. analogamente print não avança linha. de uma linha. ou seja. utiliza duas barras (//) para marcar seu início: // comentário de uma linha // tudo após as duas barras é considerado comentário O segundo usa a combinação /* e */ para delimitar uma ou mais linhas de comentários: /* comentário de múltiplas linhas */ O último tipo é semelhante ao comentário de múltiplas linhas. println assim como writeln de Pascal.Comentários Comentários são trechos de texto. O Java aceita três tipos de comentários: ➢ ➢ ➢ no programa HelloWorld. inseridos no programa de forma que não sejam considerados como parte do código. Conclusão Normalmente o volume de conceitos presentes num primeiro programa de uma linguagem orientada a objetos como Java é grande se comparado com o de um primeiro programa em C ou Pascal. O .

seu conteúdo não poderá ser modificado (é uma constante). @autor Peter Jandl Jr. 2. pois pode ser construído diretamente. tipo de retorno. tais como nome do autor. não necessitam de construção (instanciação através da palavra reservada new) e são tratados por valor. diferentemente de objetos (que necessitam de construção e são tratados por referência). numeroDaPorta += 40. @see java. Veja o exemplo: final float aceleracaoDaGravidade = 9. //F indica que o numero é um float final boolean VERDADE = true. Esses tipos são: Tipo (números inteiros) Byte Short Int Long (números reais) Float Double (outros tipos) Char Boolean Tamanho/Formato 8-bit complemento a dois 16-bit complemento a dois 32-bit complemento a dois 64-bit complemento a dois 32-bit IEEE 754 64-bit IEEE 754 16-bit caracter Unicode true ou false Descrição Inteiro de tamanho de um byte Inteiro curto Inteiro Inteiro longo Ponto flutuante Ponto flutuante de precisão dupla Um único caracter Um valor booleano Abaixo seguem trechos de código para auxiliar a compreensão da sintaxe de declaração de tipos primitivos: byte tamanhoDoPe = 38. ele pode ser visto como um.2.3. //Constante VERDADE com valor true Apesar de String não ser um tipo primitivo.25F. etc. //passa a conter 4136 float nota = 7.Programação Orientada a Objetos vários tipos de informações administrativas podem ser adicionadas a estes comentários especiais através de marcadores pré-definidos iniciados com “@” que permitem a criação automática de ligações hipertexto entre a documentação e a formatação padronizada de outros elementos. <p> Pode ser usada para armazenar árvores de diretórios.Tipos Primitivos Os tipos primitivos em Java.Constantes Quando uma variável (atributo) é declarada como final.File */ public class FileData extends File { /* Construtor @param filename nome do arquivo */ public FileData(String filename) { } } 2. como está descrito no exemplo a seguir: .8 Todas as regras para a declaração de variáveis são também válidas para a declaração de constantes. sem o uso de new. parâmetros.io. /* Classe destinada ao armazenamento de dados relacionados a arquivos ou diretórios. int numeroDaPorta = 4096.

Programação Orientada a Objetos //cria uma String com o valor “Exemplo!!!” String texto = “Exemplo!!!”. System.op2 op1 * op2 op1 / op2 op1 % op2 op++ ++op op---op Descrição Soma op1 com op2 Subtrai op2 de op1 Multiplica op1 por op2 Divide op1 por op2 Calcula o resto da divisão (módulo) de op1 por op2 Incrementa op de 1.Operadores de bit Operador >> Uso op1 >> op2 Operação desloca os bits de op1 para a direita de uma distância op2 .Operadores 2.4.println(texto).1.5.Operadores condicionais Operador && || ! & | Uso op1 && op2 op1 || op2 ! op op1 & op2 op1 | op2 Retorna verdadeiro se Ambos op1 e op2 são verdadeiros.out.Operadores de atribuição Operador += -= *= /= %= &= |= ^= <<= >>= >>>= Uso op1 += op2 op1 -= op2 op1 *= op2 op1 /= op2 op1 %= op2 op1 &= op2 op1 |= op2 op1 ^= op2 op1<<=op2 op1>>=op2 op1>>>=op2 op1 op1 op1 op1 op1 op1 op1 op1 op1 op1 op1 = = = = = = = = = = = op1 op1 op1 op1 op1 op1 op1 op1 op1 op1 op1 + op2 – op2 * op2 / op2 % op2 & op2 | op2 ^ op2 << op2 >> op2 >>> op2 Equivalente a 2.4. utiliza o valor depois de incrementar Decrementa op de 1.3. Avalia a expressão op1 e condicionalmente avalia a expressão op2 op é falso Ambos op1 e op2 são verdadeiros. Sempre avalia op1 e op2 2. utiliza o valor antes de incrementar Incrementa op de 1. utiliza o valor depois de incrementar 2. Avalia a expressão op1 e condicionalmente avalia a expressão op2 Ou op1 ou op2 é verdadeiro.4.4.Operadores relacionais Operador > >= < <= == != Uso op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 op1 != op2 op1 op1 op1 op1 op1 op1 é é é é e e Retorna verdadeiro se maior que op2 maior ou igual que op2 menor que op2 menor ou igual que op2 op2 são iguais op2 são diferentes 2. Sempre avalia op1 e op2 Ou op1 ou op2 é verdadeiro. utiliza o valor antes de incrementar Decrementa op de 1.2.4.Operadores aritméticos Operador + * / % ++ ++ --- Uso op1 + op2 op1 .4. // mostra a String 2.4.

Aqui pode-se utilizar todos os recursos de formatação existente na linguagem C.out. Veja um exemplo de programa que obtém dois números inteiros do teclado e exibe a soma deles.soma. Nos primórdios desta linguagem. destacamos apenas três: ➢ System. Este comando permite um maior poder de formatação da saída.6.in). quando nos referimos à saída de dados estamos particularmente interessados em exibir mensagens no monitor do computador.print(“Entre com o primeiro número: ”). . dentre eles.printf(“AV1=%d”. temos todos os níveis possíveis e suas visibilidades: Modificador Private Sem modificador Protected Public Visibilidade Somente dentro da classe Em todas as classes do mesmo pacote Em todas as classes do mesmo pacote e em subclasses Todas as classes 2. porém.Programação Orientada a Objetos << >>> & | ^ ~ op1 << op2 op1>>>op2 op1 & op2 op1 | op2 op1 ^ op2 ~op2 desloca os bits de op1 para a esquerda de uma distância op2 desloca os bits de op1 para a direita de uma distância op2 (sem sinal) e de bits ou de bits ou exclusivo de bits complemento de bits 2. a mesma função do anterior. ou seja. public class Adicao { public static void main(String args[]) { Scanner input = new Scanner(System. int n1. porém as versões mais recentes contornaram o problema e já é possível efetuar a entrada de dados de forma razoavelmente simples. ele não salta para a próxima linha. System.5.Comandos de entrada e saída de dados Saída Normalmente. se utilizava a entrada de dados por parâmetros (String args[]).util. Este comando mostra a mensagem delimitada entre as aspas no monitor e salta para a próxima linha para que uma nova saída não apareça na mesma linha. essencialmente.Scanner.nota).out. Entrada Java se popularizou essencialmente pela programação voltada à Internet e ao ambiente gráfico. System.out.println(“Olá Mundo!!!”). um novo comando exibirá um novo texto na mesma linha. Este comando exerce. Java possui alguns comandos para saída de dados. em programação.print(“UNESA”).Modificadores Os modificadores (ou qualificadores) de visibilidade indicam o nível de acesso ao método ou atributo. System. n1 = input. Esta característica fez com que suas primeiras versões fossem deficientes nas operações de entrada de dados em modo texto.nextInt().out. Na tabela a seguir. ➢ import java.n2.

do-while try-catch-finally. Como nas outras linguagens de programação. . para outros tipos de dados.println(“A soma é ”+soma). Formalmente as instruções de um programa são chamadas diretivas (statements).print(“Entre com o segundo número: ”). Um bloco em Java é um grupo de diretivas delimitadas por chaves “{ .. Em Java. } . . basta alterar/adaptar o método input.out. Naturalmente tais instruções são executadas em seqüência.. label.Controle de Fluxo Um programa de computador é uma seqüência de instruções organizadas de forma tal a produzir a solução de um determinado problema. Tais situações são caracterizadas pela necessidade da repetição de instruções individuais ou grupos de instruções e também pelo desvio do fluxo de execução. As linguagens de programação tipicamente possuem diversas estruturas de programação destinadas ao controle do fluxo de execução. que é denominado bloco. return Antes de tratarmos especificamente das estruturas de controle da linguagem é necessário colocarmos algumas definições. while. System.nextChar() Método 2. estruturas que permitem a repetição e o desvio do fluxo de execução. as estruturas de controle podem operar sobre diretivas isoladas (individuais) ou sobre várias diretivas tratadas como um conjunto. o que se denomina fluxo seqüencial de execução.nextDouble() Input. continue.out. int String float double char Tipo input.nextInt().next???(). Geralmente as estruturas de controle de execução são divididas em: Tipo Decisão Repetição Exceção Outros Palavra chave if-else.’ (ponto e vírgula). } } O exemplo acima mostra como pode ser efetuada a entrada de números inteiros. throw break. diretiva2.7. . n2 = input. Um inúmeras circunstâncias é necessário executar as instruções de um programa em uma ordem diferente da estritamente seqüencial.nextInt() input. { diretiva1. soma=n1+n2. isto é. switch-case for. para cada tipo de dado.Programação Orientada a Objetos System. diretivaN. Por sua vez um bloco de diretivas recebe um tratamento equivalente ao de uma única diretiva. sendo possível existir várias diretivas numa mesma linha desde que separadas por um ponto e vírgula. }”.nextFloat() input.next() input. as diretivas são separadas umas das outras através do símbolo de pontuação ‘. tal como na linguagem C/C++.

A seguir um exemplo de uso da diretiva if: //exemploIf. } } } Ao executar-se este programa podem ocorrer duas situações distintas como resultado: se for fornecido algum argumento na linha de comando (args. } else { comando2.7. } O comando if permite duas construções possíveis: a primeira. Caso não seja passado nenhum argumento.Estruturas de desvio de fluxo Existem várias estruturas de desvio de fluxo que podem provocar a modificação da maneira com que as instruções de um programa são executadas conforme avaliação de uma codificação.out.length > 0) { System.Programação Orientada a Objetos 2. usando opcionalmente o else. } else { System.println(args[0]).out. public class exemploIf { public static void main (String args[]) { if (args. o programa exibirá tal argumento.*. O Java dispões de duas destas estruturas: if e switch. condiciona a execução do comando1 a um resultado verdadeiro resultante da avaliação da expressão lógica associada.length > 0). .java import java. é um comando que permite a seleção entre dois caminhos distintos para execução dependendo do resultado falso ou verdadeiro resultante de um expressão lógica.1. O if é uma estrutura simples de desvio de fluxo de execução. a segunda.println(“Argumentos insuficientes!”).io. o programa exibirá a mensagem alertando o usuário. permite que seja executado o comando1 caso o resultado da expressão lógica seja verdadeiro ou que seja executado o comando2 caso tal resultado seja falso. utilizando a parte obrigatória. isto é. if (expressão_lógica) { comando1.

ou seja.io.println(“Vogal A”).java import java. um valor dentro de um conjunto cujos valores podem ser claramente ordenados (‘A’. . break. tais ações só são interrompidas com a execução de um comando break ou com o final do comando switch. é um comando de desvio múltiplo de fluxo. public class exemploSwitch { public static void main (String args []) { if (args.charAt(0)) { case ‘a’: case ‘A’: System. o conjunto dos caracteres. Os comandos encontrados a partir do caso escolhido são executadas até o final da diretiva switch ou até encontrar um comando break. } A expressão utilizada pelo switch deve.’B’. embora seja usualmente mais eficiente durante a execução. O switch equivale logicamente a um conjunto de comandos if encadeados. . case ordinal2: comando2. serão executados os comandos colocados na cláusula default. isto é.*.length > 0) { switch(args[0]. A sintaxe é a seguinte: switch(expressão_ordinal) case ordinal1: comando1. default: comando_default. por exemplo.’C’. . Se o valor resultante não possuir um caso específico.Programação Orientada a Objetos Já o switch. break. que é opcional neste comando. baseado na avaliação de uma expressão ordinal é escolhido um caminho de execução dentre vários possíveis. ). Após iniciada a execução do conjunto de comandos identificados por um certo caso.out. A seguir temos uma aplicação simples que exemplifica a utilização dos comandos switch e break. necessariamente. Conforme o resultado é selecionado em cada um dos casos indicados pela construção case. Note que o ponto de início de execução é um caso (case) cujo valor ordinal é aquele resultante da expressão avaliada. Um resultado ordinal é aquele pertencente a um conjunto onde se conhecem precisamente o elemento anterior e posterior. retornar um resultado ordinal. //exemploSwitch. .

2. .out. quando fornecido algum argumento. System.out. System.out. sendo dados a base(x) e o expoente (y).1415.out.Escreva um programa para calcular e exibir o comprimento de uma circunferência. case ‘e’: case ‘E’: case ‘i’: case ’I’: case ‘o’: case ‘O’: case ‘u’: case ’U’: System.Escreva um programa que lei um número inteiro positivo e exiba o dobro do mesmo. } No exemplo. Exercícios: 1.println(“Não foi fornecido argumento!”). 5. sendo dados a sua base e a sua altura. break.println(“Vogal I”).Programação Orientada a Objetos break. Se o argumento não for iniciado por uma vogal ocorre a execução da seleção default do comando switch. break. 5 C= x  F −32 9 6.Escreva um programa para ler uma temperatura dada na escala Fahrenheit e exibir o equivalente em Celsius. Caso não existam argumentos fornecidos o programa imprime uma mensagem correspondente.Escreva um programa que leia duas variáveis inteiras e troque o conteúdo entre elas.Escreva um programa que leia dois números e exiba-os em ordem crescente. a aplicação identifica se o primeiro caracter deste é uma vogal. AREA=  BASE x ALTURA 2 3. sendo dado o valor de seu raio. break.out. break.println(“Vogal E”). } } default: } } else { System. 7.Escreva um programa que leia dois números e exiba o maior deles.println(“Vogal O”). C=2πR Defina π.println(“Vogal U”). 4.Escreva um programa para calcular a área de um triângulo. como sendo uma constante de valor igual a 3. System. 8.Escreva um programa para calcular e exibir o valor de xy.println(“Arg Inválido”). System.out.

2.Construa um programa em Java que obtenha três números inteiros do teclado e os mostre em ordem crescente. Se a expressão é avaliada como verdadeira. É importante ressaltar que o primeiro campo (inicialização) só é executado quando se entra no comando for. para impressão. O terceiro campo realiza uma operação sobre a variável de controle. delimitamos por um par de parênteses que efetuam o controle de repetição de um comando individual ou de um bloco de comandos. O terceiro campo determina como a variável de controle será modificada a cada iteração do for. Cada campo é separado um do outro por um ponto e vírgula. caso contrário o comando for é encerrado e a execução do programa prossegue normalmente. Considera-se como iteração a execução completa do comando associado. A seguir um exemplo de utilização do comando for: // exemploFor. . public class exemploFor { public static void main (String args[]) { int j. 2.Construa um programa em Java que obtenha dois números inteiros do teclado e informe se o primeiro é divisível pelo segundo.*. todas opcionais.io. geralmente incrementando ou decrementando a variável. incr/decremento) { Lista de comandos } O for possui três campos ou seções.7.Estruturas de repetição Como repetição consideramos um trecho de código que deve se repetido por algumas vezes. Após a execução da seção de inicialização ocorre a avaliação da expressão lógica. para obtenção de dados. condição de execução. A repetição é uma das tarefas mais comuns da programação utilizada para efetuarmos contagens.java import java. nas demais “voltas” do comando este trecho é completamente ignorado. O primeiro campo é usado para dar valor inicial a uma variável de controle (um contador). o comando (ou bloco) associado é executado. Em Java dispomos do comando for cuja sintaxe é dada a seguir: for(inicialização. 2. etc. O segundo campo é um expressão lógica que determina a execução ou não do(s) comando(s) associado(s) ao for.Programação Orientada a Objetos Exercícios Teóricos 1. fazendo que ocorra o incremento ou decremento da variável de controle.

j<10. j++) { System.Programação Orientada a Objetos for (j=0. um conjunto de instruções que é repetido enquanto o resultado de uma expressão lógica (uma condição) é avaliada como verdadeira. independente da expressão lógica. isto é. . o comando associado é executado antes da expressão lógica. while (expressão_lógica) { comando ou lista de comandos } Note que o comando while avalia o resultado da expressão antes de executar o comando associado. fazendo com que tal comando seja executado pelo menos uma vez. Abaixo a sintaxe do comando while.out.println(“ “+j). Segue a sintaxe do comando do-while e uma ilustração de seu comportamento: do comando ou lista de comandos while (expressão_lógica). O do-while também é um laço condicional. Um problema típico relacionado a avaliação do comando while é o seguinte: se a condição nunca se tornar falsa o laço será repetido ininterruptamente. isto é. tal como o while é um conjunto de instruções repetido enquanto o resultado da condição é avaliada como verdadeira mas. diferentemente do while. assim é possível que o(s) comando(s) associado(s) nunca seja(m) executado(s) caso a condição seja inicialmente falsa. } } } O while é o que chamamos de laço condicional.

ou para o final do loop. o programa é desviado para o início do loop.Faça um programa em Java mostre todos os números inteiros pares de 2 a 100.parseInt(args[1]). some todos os números inteiros de 1 a N. j--. } } 2.7. while (j > Integer. while e do-while) pode ser feita uma reconsideração da condição de execução do loop. é utilizado o comando break.out.Faça um programa em Java que leia N e uma lista de N números e mostre a soma de todos os números lidos. Para a interrupção da execução de um loop. Para que isso ocorra é utilizado o comando continue.java import java. 4. System. Ao encontrar um continue. para retornar valor ao acionador do método.io. } while (min < max). no caso de for ou while. dentro de um loop (for. e mostre o resultado obtido.Interrupções com: break.println(“ “ + min + “ < “ + max). public class exemploWhile { public static void main (String args[]) { int j = 0. o que é certo é que quando este comando é encontrado a execução é imediatamente interrompida e o retorno ao acionador é efetuado. 5.*.Construa um programa em Java que leia um número inteiro N e uma lista de N números inteiros positivos e determine o maior número da lista. para a reavaliação. 2.Escreva um programa em Java que leia um conjunto de 100 números inteiros positivos e determine o maior deles. Não há uma regra quanto a localização do return.Faça um programa em Java para exibir os números inteiros de 20 a 10.io. O comando return é utilizado. min++.3. .parseInt(args[0]). no caso de do-while. int max = Integer. continue e return A qualquer momento.println(“ “ + min + “ > “ + max). max—.Programação Orientada a Objetos A seguir temos exemplos da aplicação destes dois comandos de repetição: //exemploWhile.parseInt(args[0])) { System. na construção métodos.out. } } } //exemploDoWhile. 6. 3.java import java. do { System. Exercícios 1.println(“ “+ j).Faça um programa em Java que leia um número N.*. public class exemploDoWhile { public static void main (String args []) { int min = Integer.out. decrescendo de 1 em 1.

j++){ System.j<Integer. 2. Existem várias classes de exceções adequadas para o tratamento dos problemas mais comuns em Java.Estruturas de controle de erros O Java oferece duas importantes estruturas para o controle de erros muito semelhantes as estruturas existentes na linguagem C++: try-catch e try-finally. . desviando automaticamente o fluxo de execução para rotinas de tratamento de erro. o programa deverá mostrar a média aritmética de todos os números lidos. um argumento é requerido pelo programa e um loop será executado partindo de 0 até o numero (inteiro) passado como argumento.Programação Orientada a Objetos Exercícios Teóricos 1. Com o try-catch a ocorrência de erros de um ou mais tipos dentro do trecho de código delimitado desvia a execução automaticamente para uma rotina designada para o tratamento específico deste erro.Escreva um programa em Java que leia um conjunto de números inteiros positivos terminada pelo número 0 (zero).parseInt(args[0]). . } catch (exception2) { rotina_de_tratamento_de_erro2. public class exemploIf2 { public static void main (String args[]) { if (args.out. } } } } . sabendo-se que: N! = 1 x 2 x 3 x . A leitura do valor 0 (zero) indica o fim da entrada dos dados. 3.java. usualmente inclusas nos respectivos pacotes.out.Escreva um programa em Java que calcule o fatorial de um número inteiro lido. A sintaxe do try-catch é a seguinte: try { comando_normal. Exceções especiais podem ser criadas em adição às existentes ampliando as possibilidades de tratamento de erro.NumberFormatException devido a tentativa de se converter o argumento passado para um número inteiro. //exemploIf2. Ao final.println(“\nFim da contagem”).NumberFormatException e) { System. 0! = 1.println(“ “+ j +” “). 2. } catch (java. Ambas tem o propósito de evitar que o programador tenha que realizar testes de verificação e avaliação antes da realização de certas operações.io.7.length > 0) { try { for(int j=0. delimita-se um trecho de código que será monitorado automaticamente pelo sistema. isto é. listado a seguir. } catch (exception1) { rotina_de_tratamento_de_erro1.*. x N-1 x N.lang.java import java. objetos especiais que carregam a informação sobre o tipo de erro detectado.4. A ocorrência de erros no Java é sinalizada através de exceções.out. Através destes comandos.Escreva um programa em Java que leia um conjunto de números inteiros positivos e determine o maior deles.lang.println(“Argumento inválido!”). } System. } No programa exemploIf2. Caso seja fornecido um argumento diferente de inteiro ocorre uma exceção da classe java.

independentemente de sua utilização.1. A sintaxe do try-finally é colocada a seguir: try { comando_normal..Y) e mostre todos os números de N entre X e Y. o trecho particular de código contido na cláusula finally é sempre executado ocorrendo ou não erros dentro do trecho delimitado pela cláusula try. porém. Exemplo: (0.) 3. 2.2. primo se ele não tem divisores. deve-se englobar o conceito de atributos (adjetivos) e comportamentos. Normalmente. no paradigma OO. a partir de então. para que se possa dar um comportamento dinâmico aos objetos modelados na primeira etapa. exceto 1 e ele próprio. . porém. Escreva um programa em Java que leia um número inteiro e determine se ele é ou não primo.Classes e Objetos Até este momento vimos exemplos de programas Java onde as tarefas se concentravam no método main(). Por características. um aluno de programação deseja digitar um código fonte e pôr este código para executar o mais rápido possível. E o que vem a ser um molde? Um molde pode ser entendido como um conjunto de características de um terminado objeto. calcule e mostre os N primeiros termos da sequência de Fibonacci. Uma rotina de finalização é garantidamente executada. ou seja. a partir do conceito de classes e objetos. o aluno deve ser mais contido e organizado.Construa um programa em Java que leia um número N. 3. Exercícios 1. } finally { rotina_de_tratamento_de_erro..8. pois como foi dito no parágrafo anterior. cada novo elemento desta sequência é obtido pela soma dos dois elementos imediatamente anteriores..Construa um programa em Java que leia 3 (três) números inteiros (N. } Isto é particularmente interessante quando certos recursos do sistema ou estruturas de dados devem ser liberadas.3.13.Construa um programa em Java que leia dois números inteiros (X e Y) e mostre todos os primos entre X e Y.X.1. A segunda parte deverá criar instâncias (objetos) das classes definidas para que se possa dar vida às definições contidas nas classes. 4. por definição.5. isto é. Mas o que vem a ser uma classe? Uma classe é um molde para que se possa construir objetos reais dos quais desejamos modelar.Programação Orientada a Objetos Com o try-finally temos um comportamento bastante diferente. começaremos a construir programas divididos em partes bem distintas: A primeira deverá definir o problema do mundo real através da especificação de suas características (classe). a especificação do problema e a execução do programa devem ser tratados em momentos distintos. A sequência de Fibonacci é formada inicialmente pelos valores 0 e 1 e. Inicialmente deve-se criar a classe.Um número é.

// Retorno de valores (se houver) } Nome_Do_Método(Lista_De_Argumentos) { .Programação Orientada a Objetos 3. Uma classe em Java pode ser definida através da seguinte estrutura de código: qualificador_de_acesso class Nome_Da_Classe { // atributos da classe . . com a exceção de se ter que definir o qualificador de acesso do atributo. Os métodos alteram o estado do objeto. .1. A sintaxe para se criar atributos é idêntica à criação das variáveis. Veja alguns exemplos: private int dia. uma vez que o desenvolvedor observa os comportamentos dos objetos de forma separada e sequencial (um de cada vez). . A definição de uma nova classe em Java é um processo muito simples. A representação básica de um atributo consiste em seu identificador e seu tipo.1. sendo cada uma destas maneiras mais ou menos adequada para representar tal objeto dentro de um determinado contexto. isto é. public String Nome. consequentemente. protected float nota1. . ou seja. Note que um mesmo objeto pode ser descrito de diferentes maneiras. 3. Uma outra característica interessante dos métodos é o fato de. .Métodos Um método se refere a um comportamento ou uma ação que pode ser executada sobre o objeto. devido ao encapsulamento.ano. A criação de um método deve seguir a seguinte sintaxe: Qualificador_De_Acesso Tipo_De_Retorno // Atributos . programando cada comportamento num método individual. } Os qualificadores de acesso indicam como a classe pode ser utilizada por outras classes e. naturalmente. . // Código (programação) . desde que saibamos como descrever o referido objeto. tais variáveis ficam inacessíveis fora da classe. Existem dois especificadores de acesso básicos: Qualificador Public Package Significado Indica que o conteúdo público da classe pode ser utilizado livremente por outras classes. para melhor representar os dados que serão utilizados pela aplicação. Indica que o conteúdo público da classe pode ser utilizado livremente por outras classes do mesmo pacote. para melhor representarmos os objetos reais a serem tratados pela aplicação.nota2. se implementar uma maior modularização do programa. uma vez que. ou seja. 3.2. // métodos da classe . alteram os conteúdos das variáveis de instância.1. . Os métodos também são bastante utilizados para que se possa consultar os conteúdos das variáveis de instância.1. .mes.Especificando uma classe O essencial da abordagem orientada a objetos é que podemos (e devemos) criar novos modelos de dados. outras aplicações. dentro de um certo problema.Atributos O atributo é um elemento da classe que pode representar uma característica dos objetos instanciados ou valores de controle da classe. as classes.

Suponha uma classe em Java que implemente uma data. 5. em Java. setMes(int)e setAno(int) e implementar o método setData(int. Obs. uma vez que o usuário não tem a necessidade de acessar diretamente este método.-1): decrementa o ano em 1. só podem ser acessados diretamente dentro da própria classe. ela se resume ao fato de se restringir o acesso a determinados elementos de uma determinada classe. 4.int. Exercícios 1.2.0. as atribuições aos atributos da data são implementadas de forma independente. (Ex.int) deverá funcionar de acordo com os exemplos: Parâmetros (1. porque você não pode chamar um construtor para um objeto. setAno(int). Vejamos o exemplo de um carro: Este provavelmente terá os métodos Acelerar() e Frear() como públicos.Construa os seguintes métodos: String NomeMes().4. porém.0): incrementa o dia em 1. Isto pode gerar inconsistências.: O método fará apenas uma ação por vez.1. Pense em seus atributos e métodos. Para a classe . setMes(int).0.int.Construa um programa em Java para testar a classe Data. você só usa o construtor no momento da inicialização do objeto. Parâmetros (0. No exercício número 2. 2. 3. mas importantíssimos para o correto funcionamento do objeto. ou seja. por exemplo. Implemente apenas os métodos setDia(int). pois normalmente os atributos são para controle interno do objeto ou cercados de controles imperceptíveis aos usuários.Pelo conceito de encapsulamento.Encapsulamento O Encapsulamento é uma característica muito interessante da POO.Construa o método para incrementar ou decrementar algum dos atributos da data. int getDia(). devemos proteger os atributos de modo que eles não assumam valores incoerentes. Isto é justificável. Normalmente os atributos de uma classe são definidos como private. pelo contrario. isso se justifica pelo fato de que eles modelam os comportamentos dos objetos e é presumível que o usuário deveria ter acesso as esses comportamentos. 6.1. idealizada acima. Imagine que o usuário pudesse especificar um mês como 13. Parâmetros (0. algum método referente a uma ação interna do motor. Eles não possuem valor de retorno.0): incrementa o mês em 2.int).4.1. na maioria das vezes. int getMes() e int::getAno(). Uma maneira de corrigir este problema é excluir as implementações dos métodos setDia(int). imagine se você esquecesse de inicializar corretamente. são declarados como public.Construtores Construtores são métodos especiais chamados pelo sistema no momento da criação de um objeto.: dd/mm/aaaa – 24/13/2009) Os métodos. int DiasMes() e String getData(). int Bissexto().Programação Orientada a Objetos Qualificador Public Private Protected Package (qualificador omitido) Global Sim Não Não Não Classe Sim Sim Sim Sim Pacote Sim Não Sim Sim Subclasse Sim Não Sim Não 3.1. Construtores representam uma oportunidade de inicializar os atributos de forma organizada. 3.3.Construtores e Destrutores 3. GerarCentelha() poderá e deverá ser definido como privado. Este método receberá os três atributos ao mesmo tempo e validará ou não a data. Um construtor tem sempre o mesmo nome da classe a qual pertence. O método Incr(int.Implemente a classe Data.

"+y+")"). //alocação e inicialização através do construtor Nos exemplos anteriores.Programação Orientada a Objetos String. este é o construtor: //Classe Ponto. } public void move(float dx.0 é igual a 1. Ele seria chamado automaticamente no momento da criação do objeto. arquivo PrincPonto. ap. e poderá ser decrementado pelo acionamento do método decr(). y=ay. Exercícios 1. (int)1.move(1. public Ponto(float ax. preste atenção no método com o mesmo nome que a classe. Se você precisa ter a opção de não passar ou passar outros valores.0 para ponto flutuante. A ocorrência de rotinas de criação de objetos em diversos locais de um programa é muito comum.y. só que eles não possuíam argumentos.java public class Ponto { private float x. Existem variações sobre o tema que veremos mais tarde: sobrecarga de construtor. ap. String a = new String("Texto").println("("+x+". y+=dy. Implemente também o método getCont().java public class PrincPonto { public static void main(String args[]) { Ponto ap = new Ponto((float)0. Esta classe deverá manter um valor inteiro. "copy constructor".float dy) { x+=dx.0 sozinho é considerado double. 1.float ay) // sempre omita o valor de retorno! { x=ax. . } public void mostra() { System. pré-definida na linguagem. passados como parâmetros. Este valor poderá ser incrementado pelo acionamento do método incr(). Objetos podem ser criados dentro de estruturas condicionais.0. também usávamos construtores no momento de inicializar nossos objetos. você é obrigado a passar os argumentos no momento da alocação do objeto.0). A expressão (float)0. as possíveis soluções serão dadas em polimorfismo. etc. inseridos em estruturas dinâmicas dentro de outros objetos. armazenados em arquivos.Construa a classe Contador. Para simplificar o execício estes métodos somente alterarão o estado do contador em uma unidade. (int) 2. o construtor tem a forma String(“Constante do tipo String”) com o argumento entre aspas que é especificado pelo programador. para obter o valor atual do contador e o método Mostrar(). O exemplo a seguir é simples. Esta operação indicada por (nometipo)tipo_a_ser_convertido é também chamada de "type cast".mostra(). arquivo Ponto.(float)0. } } //Programa principal.mostra(). semelhante aos anteriores.0 indica que é para ser feita a conversão de 1.out.3 é igual a 2. que exibirá o valor atual do contador.1). construtor de corpo vazio. } } Note que com a definição do construtor. ap.

1. é a possibilidade de existirem numa mesma classe vários métodos com o mesmo nome. Nesse ponto. Os programadores não acostumados com esse conceito precisam ouvir a seguinte frase: "Você não é obrigado a liberar explicitamente a memória de um objeto como é feito em C++ e outras linguagens". A sintaxe dos destrutores é a seguinte: protected void finalize() { //codigo para arrumar a casa. 3.Crie um construtor para a classe Contador. Se estivéssemos por exemplo em C++. Em Java. mas possuem valor de retorno que é igual a void. Ao contrário dos construtores. não representa o mecanismo mais importante da orientação à objetos. Em Java destrutores são métodos chamados pelo sistema quando a memória de um objeto está para ser liberada pelo coletor automático de lixo. ou seja.Destrutores ou "finalizers" A presença de coleta automática de lixo torna o conceito de destrutores um pouco diferente de seus equivalentes em outras linguagens orientadas a objetos. sendo assim.Programação Orientada a Objetos 2. que não possui coleta automática de lixo. Um exemplo bastante comum do uso de destrutores é o de um objeto que lida com arquivos que devem ser fechados quando o objeto for destruído.1. Os destrutores são muito úteis para "limpar a casa" quando um objeto deixa de ser usado.. mas isso não implica que o objeto será deletado. A palavra polimorfismo vem do grego poli morfos e significa muitas formas. Existem outros casos onde um objeto deve comunicar aos outros objetos que será inutilizado. Você pode chamar o destrutor. isto é. antes que o objeto seja apagado } Note que o que caracteriza o construtor é ter o mesmo nome da classe. Para que estes métodos de mesmo nome possam ser distinguidos eles devem possuir uma assinatura diferente. ele é armazenado no coletor automático de lixo. você não pode contar com o fato de que o destrutor será chamado imediatamente após o momento em que seu objeto sai de escopo.Sobrecarga de Métodos A forma mais simples de polimorfismo oferecido pela linguagem Java é a sobrecarga de métodos (method overload). ou seja.2. a não ser que o programa seja executado com o modo assíncrono do coletor automático de lixo desligado (java -noasyncgc NomePrograma).4. o destrutor seria chamado sempre que a memória de um objeto fosse desalocada. um objeto passa a não existir mais no programa quando nenhuma variável faz referência a ele.nomedoobjeto(). onde receberá o tratamento adequado.Sobrecarga. já o destrutor é caracterizado por possuir o nome finalize. entidades diferentes podem ser tratadas de forma semelhante conferindo grande versatilidade aos programas e classes que se beneficiam destas características. 3. Em Java a liberação de memória que é feita pelo coletor automático de lixo que é executado de modo assíncrono com o restante do programa. Na OO representa uma característica onde se admite tratamento idêntico para formas diferentes baseado em relações de semelhança. 3. sairá do programa. A assinatura (signature) de um método é uma lista que indica os tipos de todos os seus argumentos. os destrutores não tem argumentos. embora de fundamental importância. ou seja. A grande contribuição da orientação à objetos para o projeto de desenvolvimento de sistemas é o polimorfismo.2. Herança e Polimorfismo A construção de classes. que possui coleta automática de lixo. Um nó de uma lista ligada pode ser apagado simplesmente fazendo o nó anterior apontar para o posterior a ele. métodos com mesmo nome são considerados diferentes se recebem um diferente número ou tipo de . destruído.Construa um programa para testar a classe contador. o que é feito pelo programador através de uma chamada a delete.2. 3.

isto é.lang. i += incr) No exemplo acima temos o método Somatorio() que efetua a soma dos primeiros max números naturais ou efetua a soma dos primeiros max números naturais espaçados de incr e que a seleção de um método ou outro se dá pela diferença de argumentos utilizados pelo método Somatorio(). i++) (int max. } public long dobro (long x) { return 2*x. Outra situação possível é a implementação de métodos com o mesmo nome e diferentes listas de argumentos. Na prática. uma assinatura diferente. determinar a posição (índice) de um caracter ou substring. A API do Java utiliza intensivamente o mecanismo de sobrecarga. } public long dobro (String x) { return 2*(long)Integer. for (int i = 1. } } No exemplo temos na classe Calculo a implementação de três métodos denominados dobro() que tomam um único argumento retornando um valor que é o dobro do valor do argumento recebido. i < { total += i. é como se o método dobro() fosse capaz de processar argumentos de tipos diferentes. int incr) { max. i < { total += i. por exemplo. } } { (int max) { max.Programação Orientada a Objetos argumentos e tem. conforme a tabela a seguir: .parseInt(x). Através da sobrecarga foram implementadas três versões do método dobro(). cada uma capaz de receber um argumento de tipo diferente.java public class Calculo { public long dobro (int x) { return 2*(long)x. } return total.java public class Sobrecarga public long Somatorio int total = 0. o que caracteriza diferentes possibilidades para seu uso. for (int i = 1. O método indexOf se destina a localizar algo dentro de uma string. } public long Somatorio int total = 0. } return total. a classe java. possibilitando uma utilização mais flexível das idéias centrais contidas neste método como a seguir: // Sobrecarga. Um método que não recebe argumentos tem como assinatura o tipo void enquanto um outro método que recebe dois inteiros como argumentos tem como assinatura os tipos int.String onde o método indexOf possui várias implementações. int como no exemplo abaixo: // Calculo. portanto.

Numa classe onde são implementados vários métodos com o mesmo nome fica a cargo do compilador determinar qual o método apropriado em função da lista de argumentos indicada pelo método efetivamente utilizado (dynamic binding). A ausência de mecanismos para definir a sobrecarga de operadores pode ser contornada através da definição e implementação apropriada de classes e métodos. Retorna a posição.java SobrecargaTest.Sobrecarga de Construtores Da mesma forma que podemos sobrecarregar métodos de uma classe. Um outro ponto importante é que Java não fornece recursos para sobrecarga de operadores tal como existe na linguagem C++. ou seja. A seguir um exemplo de uma classe contendo três diferentes construtores (construtor default e dois construtores cópia): // Sobracarga2. Quando sobrecarregamos o construtor de uma classe.java public class Sobracarga2 { public int prim. 3. int) especificado a partir da posição dada. segura de se programar e de se usar. IndexOf(String. IndexOf(int) especificado. Apesar disto ser um aspecto restritivo da linguagem. dentro da string.int) especificada a partir da posição dada. podemos sobrecarregar seus construtores. sec = s. tal como faríamos com qualquer outro método.2.sec. } public Sobracarga2(int p) { prim = p. é perfeitamente condizente com a filosofia que orientou o desenvolvimento desta linguagem que foi criada para ser pequena. dentro da string. ao mesmo tempo ficam disponíveis tais alternativas para localização de caracteres simples ou substrings dentro de strings. criamos construtores denominados construtores cópia (copy constructor). caso contrário será indicado o erro: javac SobrecargaTest. dentro da string. é denominado construtor default. } public Sobracarga2(int p. mesmo quando implementado. Retorna a posição.2. que não recebe parâmetros. Sobrecarga s = new Sobrecarga(false). Este construtor. Obviamente deve existir um construtor cuja lista de argumentos seja utilizada na criação de um novo objeto. //Construtores public Sobracarga2() { prim = sec = 0.Programação Orientada a Objetos Método Descrição da primeira ocorrência do caracter da primeira ocorrência do caracter da primeira ocorrência da substring da primeira ocorrência da substring Retorna a posição. fica transparente para o usuário da classe a existência destes quatro métodos. IndexOf(String) especificada. Java oferece um construtor default para cada classe o qual não precisa ser declarado e implementado. simples. O compilador determina qual dos construtores utilizar através dos agrupamentos utilizados na chamada do construtor. IndexOf(int. Retorna a posição. } } .java:4: Wrong number of arguments in constructor. dentro da string. int s) { prim = p. sec = 0. uma classe pode possuir mais de um construtor onde cada um deles é diferenciado por sua assinatura. Desta forma.

Para que o atributo prim seja inicializado com outro valor podemos utilizar o construtor cópia que recebe um parâmetro inteiro.prim = 10. O método saque() irá devolver true ou false. -2).String que possui 11 diferentes construtores dos quais destacamos alguns: Construtor String() String(byte[]) String(char[]) String(String) String(StringBuffer) Descrição Cria uma nova string se conteúdo Cria uma nova string convertendo o conteúdo do vetor de bytes especificado Cria uma nova string convertendo o conteúdo do vetor de char especificado Cria uma nova string contendo a mesma seqüência de caracteres da string especificada Cria uma nova string contendo a mesma seqüência de caracteres do objeto StringBuffer especificado Ao mesmo tempo que a disponibilidade de vários construtores cópia é bastante conveniente. O uso de construtores sobrecarregados é bastante conveniente pois possibilita reduzir o código que deve ser escrito para utilização de um objeto como nos trechos de código abaixo: Sobracarga2 s s. = new Sobracarga2().Repita o exercício anterior utilizando a sobrecarga de construtores. s.sec = -2. o saldo e o limite. Outro caso possível: Sobracarga2 s. Um exemplo disto é a classe java. 2. s = new Sobracarga2(). Exercícios Teóricos 1. Faça um método GetSaldo() que retorne o saldo do cliente. Pode ser substituído por: Sobracarga3 s = new Sobracarga3(5.Faça uma classe Conta (Conta Corrente) que contenha o nome e o salário do cliente.Programação Orientada a Objetos A classe Sobracarga2 possui dois atributos inteiros prim e sec que são inicializados com valor zero através do construtor default. sua implementação em uma certa classe deve ser objeto de análise cuidadosa para determinar-se se certa adição será realmente útil aos usuários da classe evitando-se assim onerar demasiadamente o código produzido. dependendo se o cliente pode ou não realizar a retirada. . o número da conta.prim = 5. Pode ser substituído por apenas: Sobracarga2 s = new Sobracarga2(10). O saldo inicial deve ser zero e o limite de crédito (cheque especial) não poderá ser maior que o valor do salário mensal do cliente. A API do Java utiliza extensivamente o mecanismo de sobrecarga de construtores para oferecer aos programadores a maior flexibilidade possível. Faça um método deposito() e um método saque(). Para que tanto a atributo prim como sec sejam inicializados diferentemente dispõe-se ainda de um segundo construtor cópia.lang.

Rigorosamente falando.2.java public class SuperClass { . } Num diagrama UML teríamos a seguinte representação para classes hierarquicamente relacionadas: Em princípio. a classe pai contém definições que podem ser utilizadas nas classes definidas como filho. .3. Daí a origem do termo técnico que descreve a herança: especialização (specialization). não podem omitir ou suprimir tais características. por sua vez. .Herança A herança (inheritance) é o segundo e mais importante mecanismo do polimorfismo e pode ser entendido de diversas formas das quais. todos atributos e operações definidos para certa classe base são aplicáveis para seus descendentes que. } // SubClass. Por outro lado. // SuperClass.java public class SubClass extends SuperClass { . pois não seriam verdadeiros descendentes se fizessem isto. Na figura abaixo temos um exemplo de hierarquia de classes onde são indicados os atributos e operações adicionados em cada classe. Além disso as subclasses podem adicionar novos métodos e atributos não existentes na classe base. Note que os atributos e operações adicionados não são indicados explicitamente na classe derivada. criando uma versão mais específica da classe base. especializando-a. A classe pai é o que se denomina classe base (base class) ou superclasse (superclass) e as classes filho são chamadas de classes derivadas (derived class) ou subclasses (subclass). . uma subclasse pode modificar a implementação de alguma operação (reimplementar) por questões de eficiência sem modificar a interface externa da classe. . a mais simples é: uma técnica onde uma classe passa utilizar atributos e operações definidas em uma classe especificada como seu ancestral. Em Java indicamos que uma classe é derivada de uma outra classe utilizando a palavra reservada extends conforme o trecho simplificado de código dado a seguir: A superclasse não recebe qualquer indicação especial. Este mecanismo sugere que uma classe poderia ser definida em termos mais genéricos ou amplos e depois refinada sucessivamente em uma ou mais subclasses específicas. . isto é. a herança é o compartilhamento de atributos e operações entre classes baseado num relacionamento hierárquico do tipo pai e filho. ou seja. mas implicitamente pela relação de herança.Programação Orientada a Objetos 3.

Esta classe deve herdar tudo que a classe Ponto possui e acrescentar o atributo cor. Por exemplo. alguns objetos podem ser descritos como casos especiais. Aquilo que foi descrito para uma certa classe não precisa ser repetido para uma classe mais especializada originada na primeira. a herança oferece um mecanismo para generalização pois uma instância de uma classe é uma instância de todos os ancestrais desta classe.Programação Orientada a Objetos A herança é portanto um mecanismo de especialização pois uma dada subclasse possui tudo que foi definido pela sua superclasse além de atributos e métodos localmente adicionados. 2. especializações ou generalizações de outros objetos e classes. Outro aspecto bastante importante é que se o projeto de uma hierarquia de classe é suficientemente genérico e amplo. Implemente o construtor desta classe. Por outro lado. A diferença entre as classes é que na ContaE o limite de saque será de 3 vezes o valor do salário. um objeto de uma classe derivada pode ser tratado polimorficamente como um objeto da superclasse. desta forma a orientação à objetos auxilia a reduzir a redundância de código dentro de um programa ao mesmo tempo que possibilita que classes mais genéricas sejam reaproveitadas em outros projetos (reusabilidade de código). Esta classe deverá ser herdeira da classe Conta. Implemente o construtor da classe.Construa uma classe Ponto. Uma classe ou hierarquia de classes que pode ser genericamente utilizada em outros projetos é que se chama de padrão de projeto ou design pattern. isto é. Atributos e métodos definidos na classe base não precisam ser repetidos numa classe derivada. No mundo real.Construa uma classe Pixel. Exercícios 1. mas passa a ser possível o que denomina reutilização do projeto.Construa a classe ContaE. temos o desenvolvimento de uma solução generalizada e com isso torna-se possível mais do que a reutilização de código. a bola de futebol de salão é uma especialização da classe bola de futebol que por sua vez é uma especialização da classe bola. Esta classe deve especificar as coordenadas de um ponto e as operações que podem ser realizadas sobre ponto. 3. .

Outro aspecto é que as applet´s são programas executados nos ambientes gráficos das diversas plataformas que utilizam a Web.class" width=200 height=150> </applet> </body> </html> . Desta forma uma applet é um programa Java destinado a ser utilizado pelos browser´s significando que será transportada pela Internet tal como documentos HTML. as applet´s usualmente são construídas para serem pequenos programas e.Applet Applets são pequenos programas escritos em Java que podem ser embutidos em documentos hipertextos. Abaixo. public class PMPWelcome extends Applet { public void paint(Graphics g) { g.awt. Este programa será executado (interpretado) por um browser (um navegador Web) quando for carregada a página que contém tal applet. } } O código HTML necessário para se produzir a página exibida na figura acima é mostrado a seguir: <html> <head> <title>Testando Applets</title> </head> <body> <applet code="PMPWelcome. assim sua construção é bastante semelhante a criação de programas que utilizem componentes ou recursos gráficos disponíveis na AWT.Programação Orientada a Objetos 4. Em função deste uso. por questões de segurança. um pequeno exemplo de applet e seu resultado quando executado num browser. import java. import java.25). imagens GIF e JPEG e outros conteúdos típicos da rede.*.drawString(“Java is Hot!”.*.applet.25. obedecem critérios rígidos para que sua execução seja possível pelos browser´s.

a tag <applet> possui vários campos. destinada a parametrização da applet.Programação Orientada a Objetos Notamos tratar-se de um arquivo HTML normal. Como é possível. Nome da applet para comunicação inter-applet. A forma mais freqüente de uso desta tag é como exemplificado.class” ou “. O campo ARCHIVE é usado caso a applet esteja inserida num arquivo compactado tipo JAR. Margem horizontal (em pixels). o que será visto mais adiante. midle.jar” estão localizados. O campo CODEBASE indica o local onde os arquivos “. O appletviewer executa applet´s que estejam inseridas em arquivos HTML. onde a inclusão da applet é realizada através da tag <applet>. ou seja. por exemplo: appletviewer Applet1. É necessário utilizar o campo CODE para especificar a applet (programa Java) que deve ser executada. (. <param>. isto é. portanto finalizada por </applet>. URI base para os arquivos de classe Java. Altura da applet (em pixels). Alinhamento da applet (valores possíveis são: top. Os demais campos referem-se a disposição da applet na página HTML. left e right Nome do arquivo de classe Java incluindo a extensão . A programação e compilação de applet´s é uma tarefa idêntica a criação de programas em Java: utiliza-se um editor de textos comum e depois o compilador javac para realizar a compilação do programa nos byte-codes correspondentes. Novamente o nome do arquivo deve ser idêntico ao da classe pública nele contido. especificando-se a applet através do campo CODE e seu tamanho através dos campos HEIGHT e WIDTH. no interior da construção <applet></applet> podemos inserir outra tag. através de um browser compatível com Java ou através do aplicativo appletviewer fornecido juntamente com as demais ferramentas do JDK. A tag <applet> é uma tag dupla. Largura da applet (em pixels). Em seu corpo. os quais indicam: Campo ARCHIVE ALT ALIGN CODE CODEBASE HEIGHT HSPACE NAME VSPACE WIDTH Descrição Nome do arquivo compactado da applet (Java Archive – arquivo .class. bottom.html Isto produziria o seguinte resultado para a applet PMPWelcome: .class). No entanto o teste das applet´s produzidas não pode ser feito através do interpretador java e sim.jar) Nome alternativo. Margem vertical (em pixels).

que é esquematizado na figura abaixo. Enquanto os programas necessitam de um método main(). 4.2. invocado após a criação da applet (instanciação). a compreensão de seu ciclo de vida auxilia bastante no entendimento de sua estrutura. Este método é executado somente uma única vez. ➢ ➢ ➢ ➢ ➢ ➢ instanciação (create) inicialização (init) início (start) execução e renderização (paint e outros métodos) parada (stop) finalização ou destruição (destroy) Este modo de funcionamento define o ciclo de vida das applet´s. os construtores não necessitam ser explicitamente implementados dado a existência dos construtores default´s disponibilizados pelo Java.1.1. ou melhor. Implementações mínimas de applet´s utilizam geralmente o método init() ou o método paint().1. 4. as applet´s são objetos definidos em classes. As applet´s são aplicações especiais que possuem um modo particular de funcionamento. pelas JVM encarregadas da execução das applet´s. recebimento de parâmetros de execução e outras atividades de preparo. as applet´s são instanciadas pelos próprios navegadores. Adicionalmente existe um método denominado init(). Geralmente este método é utilizado em conjunto com o método . implementado em uma de suas classes.Funcionamento das Applet´s Embora a construção de applet´s seja semelhante a criação de programas gráficos em Java. Como qualquer classe Java. embora consiga tratar arquivos HTML complexos. para definir o início do programa (que provocará a instanciação e exibição de um Frame ou a execução de uma aplicação de console). Este método é normalmente usado para a adição de componentes.1.O método init() Tal como programas. portanto deve ser utilizado quando é necessário assegurar alguma condição especial para a apresentação da applet. Outra facilidade é que o arquivo HTML pode conter apenas a tag <applet>.O método start() O método start() é acionado pelo browser toda vez que a applet torna-se visível. Assim o uso do appletviewer é mais conveniente durante a fase de desenvolvimento e teste das applets.Programação Orientada a Objetos Não existe a necessidade do arquivo HTML possuir o mesmo nome que a applet ou sua classe. 4. utilizado pelos navegadores para iniciar a execução das applet´s.

e exatamente quando a applet deixará de existir).O método stop() Como complemento funcional do método start(). start(). private int stops = 0. pois através deste. 4. ou seja. É acionado pelo browser quando ocorre a troca de páginas. public class AppletMetodos extends Applet { private int inits = 0. paint() e stop() (o método destroy() não necessita ser contabilizado pois só ocorre uma única vez. O método start() é acionado pela primeira vez logo após a execução do método init().1.5. conforme a sua exibição no sistema. Este método é ativado toda vez que a applet deixa de ser visível. A maneira mais simples de construir-se uma applet é através da utilização do método paint(). Geralmente são utilizados para parar animações ou outras rotinas que consumam recursos e só devam ser executadas durante a exibição da applet.applet. exceto quando utilizado em conexões em rede ou comunicação com outras applet´s. No exemplo são declaradas e inicializadas quatro variáveis inteiras que serão utilizadas como contadores do acionamento dos métodos init(). Isto significa que a applet.1. tal como no caso da construção de animações ou outras aplicações gráficas. import java. o que ocorre quando é exibida pela primeira vez (depois da execução do método start()).4. cada vez que tal método é acionado a variável de controle conta quantas vezes isto ocorreu. quando a janela do browser é movimentada ou redimensionada como conseqüência do acionamento do método update. Segue um outro exemplo simples de applet que demonstra a ocorrência destes métodos especiais. temos acesso ao contexto gráfico da applet que permite a utilização das primitivas gráficas da AWT. 4.java import java.1. descrito a seguir. O método paint() pode ser utilizado para a realização de operações de desenho especiais na applet.Programação Orientada a Objetos stop().*.*. quando deseja-se tratar diretamente a renderização do conteúdo exibido pela applet.awt. Em cada um dos métodos coloca-se a respectiva variável de controle sendo modificada por uma operação simples de incremento. pode ter seus métodos start() e stop() acionados inúmeras vezes. Raramente necessita ser utilizado de forma explícita. .3. O método paint() é o único com código extra pois nele se exibe o valor dos contadores. private int paints = 0. sendo novamente acionado tantas vezes quantas a applet tornar-se visível. dispomos do método stop(). public void init() { inits++. ou seja. ou seja. durante seu ciclo de vida. 4. quando ocorre um rolamento (scrolling) da página exibida pelo browser ou quando a applet se torna encoberta por outra janela do sistema. //AppletMetodos. private int starts = 0.O método destroy() Este método é acionado quando a applet está sendo descarregada da página para que seja realizada a liberação final de todos os recursos utilizados durante sua execução. O método stop() é chamado imediatamente antes do método destroy().O método paint() Este método é chamado toda vez que a applet necessita atualizar sua exibição.

você precisará usar um dos métodos de exibição de textos em modo gráfico.25).*. g. 4. o que permite testar adequadamente as applet´s em execução. 4.drawString("Paint: "+paints. reload e clone (duplicação da applet).45). O programa a seguir mostra uma applet simples que usa este método para exibir uma única linha de texto.30). Usando as opções do menu “Applet” do appletviewer é possível comandar operações de: start.2.Exibindo Texto numa Applet É muito simples exibir uma linha texto. g. g. O mais comumente usado é drawString(). Desenhe uma string na superfície da applet. deve-se se adaptar à interface gráfica do usuário (GUI – Graphical User Interface). Mas como a saída de texto será gráfica.*. veja o que acontece a cada minimização e maximização da applet.drawString("Start: "+starts.Entrada e Saída Simples Ao se programar applet´s. não poderão ser usados os mesmos métodos de entrada e saída de dados do ambiente texto. import java. } } Veja o que acontece quando se executa a applet pela primeira vez.25.drawString("Init: "+inits. } } Informe ao Java que o programa usa classes do pacote awt. } public void stop() { stops++.5.5. restart. public class ExibeTexto extends Applet { public void paint(Graphics g) { g. e na seqüência.Programação Orientada a Objetos } public void start() { starts++. Informe ao Java que o programa usa classes do pacote applet. } public void paint(Graphics g) { paints++.applet. Derive a classe ExibeTexto da classe Applet do Java.60).5.1.15). import java. .drawString("Alo mundo!". ou seja. que faz parte da classe Graphics contida no pacote awt.awt. Sobregrave o método paint da classe Applet.5. stop. g.2.drawString("Stop: "+stops.

awt. Informe ao Java que o programa usa classes no pacote applet. Portanto a linha g. mostra a mensagem na tela.applet. obter entrada do usuário não é tão fácil como simplesmente chamar um comando de entrada. add(campo). Derive a classe Entrada da classe Applet do Java. porém uma das mais fáceis é acrescentar um controle da classe TextField em sua applet.*. É necessário primeiramente criar uma área da tela na qual o usuário possa digitar e editar uma resposta à sua solicitação. import java. Desta forma. seja na janela do appletviewer ou num browser.Obtendo Entradas do Usuário Novamente. Você deve estar se perguntando.Programação Orientada a Objetos Esta applet quando executada simplesmente mostrará a mensagem “Alo mundo!” em modo gráfico. você roda a applet. Java chama o método paint(). Sobregrave o método init da classe Applet.drawString("Alo mundo!". verá Graphics g entre parêntese.2. o nome do método deve ser precedido pelo nome do objeto seguido de um ponto. pelo fato de você estar programando num ambiente gráfico. Acrescente o objeto TextField à exibição da applet. Qual o significado daquele “g” seguido de um ponto antes da chamada a drawString()? Foi dito que drawString() é um método da classe Graphics. public class Entrada extends Applet { TextField campo. Quando a applet é executada ela tem que ser “pintada” e o método paint() será acionado pelo controle de eventos do Java.2. ele será executado normalmente. } } Informe ao Java que o programa usa classes no pacote awt. instrui o Java a chamar o método drawString() do objeto. finalmente.25. Declare campo como um objeto da classe TextField. Há diversas maneiras de fazer isto. O programa a seguir mostra como incluir um objeto TextField em sua applet.java import java. Se você verificar a primeira linha do método paint(). 4. Crie o novo objeto TextField. Como já foi visto.25). como este programa pode ser executado sem ter o método main()? A resposta é que o método paint() sempre é chamado quando a área de exibição da applet precisa ser “repintada”. Um objeto TextField é muito semelhante às caixas de edição que você vê ao usar o Windows. Veja esta applet sendo executada: . Caso se coloque algum código neste método. Isto significa que Java está enviando um objeto da classe Graphics ao método paint() e que o objeto é chamado g.*. public void init() { campo = new TextField(20). toda vez que você precisar chamar um método de um objeto. // Entrada. que chama drawString() que.

Observe que o objeto campo é declarado da mesma forma que se declararia qualquer outro tipo de objeto. } } Informe ao Java que o programa usa classes no pacote awt. } public void paint(Graphics g) { String s = campo. add(campo).*.*. O valor entre parênteses é a largura do TextField. Quando init() é chamado. Sobregrave o método init da classe Applet. } public boolean action(Event event. Recuperando texto de um Controle TextField Na applet Entrada. Informe ao Java que o programa usa classes no pacote applet. Se você digitar além do final da caixa de texto. A próxima etapa é adicionar o objeto à área de exibição da applet. campo já foi declarado como um objeto da classe TextField. Outra diferença entre Entrada e ExibeTexto é que a primeira possui um método init() ao invés de paint(). O argumento único do método add() é o controle que você quer acrescentar à applet. O programa declara o controle assim: TextField campo.applet. você pode digitar tudo o que quiser no controle TextField. Primeiramente. Tenha em mente que o TextField pode armazenar mais texto do que sua largura permite. o que representa uma caixa de texto. porém como você recupera o texto do controle e realmente faz algo com ele? Escreva o código da applet RecuperaTexto mostrado abaixo: //RecuperaTexto. porém ainda não lhe foi atribuído nenhum valor.40. Object arg) { repaint(). podemos utilizá-lo para montar a applet. ela declara um campo de dados chamado campo como objeto da classe TextField. Declare campo como um objeto da classe TextField.awt. pois este é um dos primeiros métodos a serem acionados pelo controlador de eventos do Java. import java.getText(). g.drawString(s. public void init() { campo = new TextField(20). Crie o novo objeto campo (TextField) . A primeira linha de código em init() cria um objeto TextField e o atribui a campo da seguinte forma: campo = new TextField(20). ou seja. Derive a classe RecuperaTexto da classe Applet do Java.java import java.50). return true.Programação Orientada a Objetos Como funciona a applet Entrada A applet Entrada é um tanto diferente da ExibeTexto. como segue: add(campo). O método init() é mais um daqueles métodos que o Java chama automaticamente. o texto rola horizontalmente. public class RecuperaTexto extends Applet { TextField campo.

Declare o inteiro x e configure seu valor para 10. Você precisa apenas chamar o método valueOf() da classe String.*. . Esta linha declara um atributo chamado s como sendo um objeto da classe String e então estabelece uma igualdade com a string do controle.40. como mostrado abaixo: //ExValNum. Sobregrave o método paint da classe Applet. esta tarefa é bastante simples de ser executada em Java. Exibindo Valores Numéricos O problema com valores numéricos no ambiente das applet´s é o fato de que não se pode exibi-los sem antes convertê-los em string.drawString(s. Java chama este método sempre que o usuário executar algo com controles na applet. Obtenha a string do controle TextField. Como funciona a applet RecuperaTexto Se você examinar o código de programa desta applet. a ação a que action() responde é o ato de o usuário pressionar a tecla ENTER após digitar o texto. Sobregrave o método action da classe Applet.40. poderá ver que foi adicionado um método paint(). Exibir a string é tão fácil como chamar seu velho amigo drawString(). Informe ao Java que o método action terminou com sucesso. É neste ponto que o texto digitado no controle TextField() é exibido.awt.Programação Orientada a Objetos Acrescente o objeto campo à exibição da applet. g.getText(). Pode ser visto nesta linha que o método getText() do objeto campo está sendo chamado. Quando você rodar esta applet. que informa ao Java a necessidade de repintar a área de exibição da applet.drawString(s. Uma grande diferença entre as duas últimas applet´s mostradas (Entrada e RecuperaTexto) é o método action(). Felizmente. } } Informe ao Java que o programa usa classes no pacote awt. Converta x numa string. Exiba o texto na área de exibição da applet. Este método simplesmente retorna a string que está armazenada no controle TextField. não faz mais nada além de chamar o método repaint().applet. Primeiramente. Sobregrave o método paint da classe Applet. public class ExValNum extends Applet { public void paint(Graphics g) { int x = 10. import java. como segue: g. String s = String.java import java. Force a applet a repintar sua área de exibição.*. Informe ao Java que o programa usa classes no pacote applet. Derive a classe ExValNum da classe Applet do Java. Neste exemplo o método action(). Este evento irá acionar o método action() que forçará que a applet seja “repintada” e consequentemente o texto digitado na caixa de texto será escrito no corpo da applet. Neste caso. Exiba a string que representa o valor de x.valueOf(x).50). paint() extrai o texto do controle da seguinte forma: String s = campo. digite algum texto no controle TextField e pressione ENTER.50).

*. Label. public class Rotulo extends Applet { Label rotulo.CENTER).CENTER ou Label.java import java. O único argumento do método é o valor que se deseja converter. Label. Um rótulo é criado chamando-se o construtor da classe Label. align).Programação Orientada a Objetos Como pode ser visto no código da applet. Exercícios 1.LEFT. É por esta razão que os desenvolvedores de interfaces gráficas do usuário criaram os diversos controles – tais como as caixas de texto. Após criar o rótulo.*. Para fazer isto. As figuras a seguir mostram o resultado desta applet.3. 4. que pode ser qualquer um dos tipos de dados numéricos de Java. add(rotulo). O valor de alinhamento pode ser Label.Botões e Rótulos Num ambiente gráfico e com o uso de janelas. Isto porque o aplicativo atualmente em execução não controla toda a tela e desta forma não pode simplesmente assumir o controle do teclado ou do dispositivo de entrada para obter informações do usuário. public void init() { rotulo = new Label(“Java is hot!”. A segunda figura foi redimensionada para ilustrar o alinhamento automático do rótulo. rótulos e menus – que permitem que os aplicativos interajam com o usuário sem fazer como que o restante do sistema entre num estado de parada.RIGTH. } } Uma aspecto interessante a respeito dos rótulos é que eles guardam automaticamente seus alinhamentos quando o tamanho da área de exibição de uma applet se modifica. 2.Construa uma Applet que obtenha dois números inteiros através de duas caixas de texto. import java.awt. Após pressionar a tecla ENTER. 3. botões.2. a classe String possui um método chamado valueOf() que pode converter valores numéricos em string´s. o programa deverá exibir a soma dos números.Construa uma Applet que obtenha um número inteiro através de uma caixa de texto e mostre o número é ou não primo. O construtor da classe Label possui dois argumentos: o texto para ser exibido e um valor de alinhamento. você deve adicioná-lo à applet utilizando o método add() como segue: add(label) Criando um Rótulo Suponha que você queira um label centralizado que exiba o texto “Java is hot!”. obter informações do usuário constituise num verdadeiro desafio. como segue: Label label = new Label(str. .applet.Construa uma Applet que obtenha um número inteiro através de uma caixa de texto e mostre os seus divisores. digite o programa a seguir: // Rotulo. Rótulos Os rótulos são os mais simples dos controles de Java e nada mais são que string´s de texto que você pode colocar em qualquer posição da área de exibição de uma applet.

Recupera a string do rótulo. Quando a applet for executada. o segundo parâmetro. Caso exista somente um botão.setLabel(str) Acrescentando um Botão numa Applet Adicionar botões numa applet é extremamente simples. é um objeto Event. Para determinar o objeto. se existirem mais botões. Configura a string do rótulo. usamos a palavra-chave instanceof. Configura o alinhamento do rótulo. Basta criar o botão e depois chamar o método add() para acrescentá-lo na applet. Como acontece em outras classes de Java. (O tipo do segundo parâmetro modifica-se conforme o objeto de interface. Button dispõe de métodos que podem ser usados pelo programador de modo a manipular um objeto botão. gerando eventos a que a applet deverá responder adequadamente. você pode usar os métodos da classe para manipular o rótulo.: Os textos dos rótulos são exibidos com a fonte atualmente em uso. como será feita a identificação de qual botão gerou tal evento? Para isto deve-se utilizar os dois parâmetros do método action(): public boolean action (Event evt. no caso de um botão.) O atributo target de um objeto Event indica o tipo de objeto que gerou o evento. É possível criar rótulos com fontes distintas desde que se crie e configure a fonte antes de criar o rótulo. e arg. porém. mais importante ainda. Para criar um botão. o rótulo do botão. são simples em termos de utilização pelo usuário. você deve fazer o seguinte: Button button = new Button(str). Botões Os botões são uma excelente forma de disparar eventos em applet´s. Especificamente. evt. pois eles são fáceis de criar e gerenciar e. é possível obter o texto e alinhamento do rótulo de acordo com os métodos enumerados na tabela abaixo. como por exemplo: String button. como a seguir: . str é a string que aparecerá no botão. é. o usuário estará apto a interagir com o botão. Manipulando Eventos de Botões Múltiplos Nas applet´s anteriores os eventos eram respondidos pelo método action() da applet. Neste caso.Programação Orientada a Objetos Métodos da Classe Label Após ter criado um objeto Label. este método poderá ser utilizado normalmente. Método int getAlignment() String getText() SetAlignment(int align) void setText(String label) Descrição Recupera a configuração de alinhamento do rótulo. Object arg) O primeiro parâmetro. Obs. Estes métodos são utilizados para recuperar ou configurar o texto do botão.getLabel() button.

chame o método TrataBotoes(). button3 = new Button("Button3").target instanceof Button) Se esta instrução if for true. saberemos exatamente qual botão recebeu o clique. observe a applet abaixo: //Botoes. .setLabel("Button2"). Declare três objetos botão.awt. Adicione os botões à área de exibição da applet. Se o rótulo do botão estiver no estado normal.setLabel("2nottuB"). Para determinar exatamente qual botão causou o evento. public void init() { button1 = new Button("Button1"). como segue: if (arg == str) Nesta linha. examinamos o parâmetro arg.java import java. Caso contrário. Crie os três botões.add(button2). button3. Sobregrave o método init(). else { button1. button2. } protected void TrataBotoes(Object label) { if (label == "Button1") button1. Se a comparação for verdadeira. Manipulando Múltiplos Botões numa Applet Para compreender melhor o funcionamento dos eventos provocados por botões. } } } Informe ao Java que o programa usa classes no pacote awt.*.*. foi um botão que gerou o evento.Programação Orientada a Objetos if (evt. Sobregrave o método action().setLabel("Button3"). button2 = new Button("Button2"). button2. public class Botoes extends Applet { Button button1.applet.setLabel("1nottuB"). coloque-o em modo inverso. else if (label == "Button2") button2. Informe ao Java que o evento foi tratado de forma adequada. Derive a classe Botoes da classe Applet do Java. Se um botão foi pressionado. Defina o método TrataButoes().setLabel("3nottuB").add(button3). else if (label == "Button3") button3. button3. import java. } public boolean action(Event evt. return true.setLabel("Button1").target instanceof Button) TrataBotoes(arg). add(button1). str é o rótulo do botão. Informe ao Java que o programa usa classes no pacote applet. Object arg) { if (evt. configure todos os rótulos dos botões de volta ao estado normal.

Toda vez que um botão é clicado com rótulo normal. Cada um dos botões representará uma operação e o último label servirá para exibir os resultados. Assim. como apresentado na figura abaixo. seu respectivo rótulo é invertido como mostra a segunda figura.Manipulação de Evento da AWT O desenvolvimento de applet´s baseia-se no modelo de execução de programa conhecido como execução orientada a eventos.Crie uma applet que coloque em sua área de exibição um label. / e *). geralmente imprimindo alguma mensagem na tela. duas caixas de texto. O último label servirá para apresentação do resultado. As duas caixas de texto servirão para receber do usuário dois valores inteiros. disparo de um temporizador. Quando o usuário pressiona uma tecla. pois geralmente o programa não tem como prever sobre qual "botão virtual" o usuário vai clicar. há a chamada para uma função do sistema que realiza a leitura do teclado. o sistema operacional se encarrega de avisar ao programa sobre a ocorrência desse "evento" e dar a ele a chance de realizar o que for preciso com a informação fornecida pelo usuário. Por outro lado. e em seguida continua o processamento realizando alguma outra tarefa. Processar eventos provenientes do mouse. o programa servirá como uma calculadora. na programação orientada a eventos. Cada um dos botões representará cada uma das operações básicas da matemática (+. Há. -. O botão “Qtd Divisores” deverá exibir a quantidade de divisores do número e o botão “Primo” deverá exibir a mensagem de que o número é ou não primo.Programação Orientada a Objetos A applet Botoes exibe três botões em sua área de exibição. quando o programa precisa ler um dado do teclado. contudo. O primeiro label deverá dar uma breve descrição do que o programa faz. No caso da applet. Na programação tradicional. por exemplo. simplesmente indicamos o que fazer para cada alteração do mouse. a execução do programa fica suspensa até o momento em que o usuário resolve prosseguir. Este paradigma de programação difere significativamente do tradicional na forma como se dá o controle de fluxo da execução. três botões e mais um label. Exercícios 1. Um evento pode ser o clicar ou mover do mouse. quatro botões e mais um label. A caixa de texto servirá para receber do usuário um valor inteiro. por exemplo. é uma grande dificuldade para a programação tradicional. O botão “Divisores” deverá exibir os divisores do número. Essa função fica continuamente monitorando o teclado para poder capturar o valor da tecla pressionada. O primeiro label deverá dar uma breve descrição do que o programa faz.Crie uma applet que coloque em sua área de exibição um label. 2. etc. . necessidade de atualizar uma janela. se for o caso. ou seja. 5. outros tipos de eventos. entrada de texto. pressionando uma tecla. uma caixa de texto. quando o programa necessita de um dado ele simplesmente avisa ao usuário sobre essa necessidade.

F1 a Event. Não se esqueça de que ocorrem dois eventos ao pressionar uma tecla: keyDown() e keyUp(). Suponha que o nome do parâmetro de evento (do tipo Event) é evento. } public boolean keyDown(Event evento.PGUP: tecla Page Up Event. keyCode armazena o código ASCII correspondente à tecla pressionada. obrigatório tratar ambos os eventos. Não é. int keyCode) . int keyCode) Este método é chamado quando alguma tecla for pressionada.retorna true.F12: Tecla de função F1-F12 Event. porém.END: tecla End Event.Teclado Existem apenas dois eventos que podem provir do teclado: keyDown e keyUp. Label.1. public void init() { texto = new TextField(20).UP: seta para cima Event. tecla = new Label("Tecla". add(tecla). public class EventosTeclado extends Applet { TextField texto.ctrlDown() – retorna true se a tecla Ctrl estiver pressionada evento. import java. Como existem teclados sem padronização. int keyCode) Este método é chamado quando a tecla pressionada é liberada pelo usuário. Implemente o exemplo a seguir para uma melhor compreensão: //EventosTeclado. usando método correspondente. Os parâmetros recebidos são os mesmo do método keyDown().LEFT: seta para esquerda Event.CENTER).*.HOME: tecla Home Event. control e alt foi pressionada é obtida do parâmetro evento recebido. add(texto).PGDN: tecla Page Down Event. existem determinados códigos especiais para designar algumas teclas: Event.java import java.metaDown() – retorna true se a tecla Alt estiver pressionada public boolean keyUp(Event event.RIGHT: seta para direita Event. Então temos evento.applet. public boolean keyDown(Event evento.ENTER: tecla ENTER A informação de que a tecla shift. se a tecla Shift estiver pressionada no momento da ocorrência do evento evento. Esses métodos já estão codificados na classe Applet provendo um tratamento padrão para os respectivos eventos.Programação Orientada a Objetos Os principais originadores de eventos de uma applet são: ➢ ➢ teclado mouse 5. Todos eles retornam um dado boolean indicando a situação da respectiva tecla.shiftDown().*. Label tecla.DOWN: seta para baixo Event.awt.

: No evento do mouse. mudar de posição sem soltar o botão e em seguida. int y) São chamadas respectivamente quando mouse entra e sai do objeto em que o método pertence. é justamente para isto que foi incluído no exemplo acima o componente TextField. não há como detectar o botão (se é o direito ou o esquerdo) do mouse pressionado. antes mesmo do clique do mouse.Mouse Os métodos associados a eventos provenientes do mouse recebem dois parâmetros: evento do tipo Event e coordenadas x e y da posição do ponteiro mouse (do tipo inteiro) relativos às coordenadas da janela atual. public boolean mouseDrag(Event event. int y) Este método é chamado sempre que ocorrer mudança de posição do mouse dentro da área do applet. int x. para acender o botão em que o mouse está. O seu argumento é objeto Event e coordenadas x e y do mouse. Os argumentos desse método são um objeto da classe Event e as coordenadas x e y do ponto da janela em que ocorreu o clique. int y) public boolean mouseExit(Event event. public boolean mouseUp(Event event. return true. Para a executar corretamente o exemplo você deve startar a applet e logo após clicar na caixa de texto.Programação Orientada a Objetos { } } Para que os eventos do teclado ocorram. aí então pode-se começar a pressionar as teclas para ver os resultados. Obs.2. int y) Este método é chamado. tecla.valueOf(keyCode)). int x. public boolean mouseDown(Event event.setText(String. int y) O método mouseDown é chamado sempre que o usuário der um clique com o mouse sobre a área da janela. soltar o botão). int x. eles devem ser estimulados a partir de algum componente da applet. Implemente o exemplo a seguir para uma melhor compreensão sobre os acionamentos dos método correspondentes aos eventos do mouse. . e Java. int x. public boolean mouseMove(Event event. public boolean mouseEnter(Event event. 5. int y) Este método é chamado quando botão do mouse que estava pressionado for solto. Isto deve-se ao fato de que o mouse do computador Machintoch possui apenas um botão. int x. Podemos usar este método por exemplo. assume que o mouse possui apenas um botão. quando o usuário arrastar o mouse (pressionar o botão. int x. por poder ser executado em qualquer plataforma. Veja o que acontece quando a barra de espaço é pressionada.

} public boolean mouseUp(Event event.setText("mouseExit"). coordy. entrada = new Label("Enter").setText("mouseUp"). int x. coordx. add(coordy).valueOf(y)). int cont = 0.valueOf(y)). } public boolean mouseExit(Event event.valueOf(y)). int y) { metodo. coordy.setText(String. int x. coordy. return true. coordx. entrada. public void init() { metodo = new Label("---Metodo---").valueOf(cont)). import java. coordx. } public boolean mouseDown(Event event. coordx.setText(String. add(coordx).valueOf(x)).*. coordy.setText(String. } public boolean mouseEnter(Event event. int y) { metodo.setText(String. return true. } public boolean mouseMove(Event event.Programação Orientada a Objetos // EventosMouse. int x. coordy. coordy.setText("mouseDown").*. coordx. public class EventosMouse extends Applet { Label metodo.setText("mouseMove"). coordx.setText(String. int x. entrada. cont++.setText("mouseEnter"). } } . return true. coordx = new Label("coordx").applet. coordy.valueOf(y)).valueOf(y)).setText(String.setText(String. return true.valueOf(x)). return true.setText(String. coordx.setText("mouseDrag"). int y) { metodo. int x. } public boolean mouseDrag(Event event.valueOf(x)). int x.valueOf(x)).setText(String. add(entrada).setText(String. int y) { metodo.setText(String.valueOf(x)). int y) { metodo.setText(String. add(metodo).valueOf(y)).awt.java import java. return true. coordy = new Label("coordy").setText(String.valueOf(x)). int y) { metodo.

A seguinte expressão deverá ser resolvida: valor1 + valor2 / valor3.Programação Orientada a Objetos Veja o resultado: Exercícios de Revisão 1-Descreva os três argumentos usados com o método drawString(). . Logo após a entrada dos dados o programa deverá mostrar o que foi digitado pelo usuário. A applet deverá mostrar uma interface parecida com a que segue: 6-Escreva uma applet que contenha dois rótulos e dois botões dispostos em duas linhas. 7-O que você por evento? 8-Explique o funcionamento do método mouseEnter(). 3-Como um valor numérico pode ser convertido em String? 4-Implemente uma applet que obtenha do usuário o seu nome e sua idade. Cada linha deve começar com um rótulo seguido de um botão. 2-Descreva o funcionamento do método init(). Veja como deve ficar a interface: 5-Implemente uma applet que obtenha do usuário três valores inteiros. 9-Explique a utilização do método shiftDown().

Sign up to vote on this title
UsefulNot useful