Você está na página 1de 254

Desenvolvimento Orientado a Objetos em Java

Prof. Rmulo Silva

Objetivos do Curso
Apresentar as estruturas sintticas da linguagem Java e respectiva semntica Conhecer as principais bibliotecas e APIs que Java oferece Entender os conceitos e terminologia de orientao a objetos e sua aplicabilidade em Java Conhecer uma ferramenta de desenvolvimento (IDE) utilizada no mercado
Prof. Rmulo Silva

Ementa do Curso
Orientao a Objetos:
Classes e Objetos Herana Polimorfismo Interfaces de objetos Classes Abstratas Agregao e Composio

Linguagem Java:
Tipos Primitivos Controle de fluxo em programas Arrays Escopo e Modularizao Tratamento de excees Colees Interface grfica bsica

Prof. Rmulo Silva

Captulo 1 - Introduo

Prof. Rmulo Silva

Linguagem Java
Criada pela Sun Microsystems em 1995 Independente de sistema operacional e plataformas Orientada a objetos Construes sintticas semelhantes a C++ Portabilidade:
write once, run anywhere

Utiliza Mquina Virtual

Prof. Rmulo Silva

Mquina Virtual
Especificao de uma mquina abstrata implementada em software Traduz o cdigo compilado para a plataforma especfica

Prof. Rmulo Silva

Mquina Virtual
p ro g ra m a
_ _ _ _ _ _ _ _ __ __ __ __ __ __ __ __ ___ ___ ___ ___ ___ ___ ___ ___

f o n t e (. ja v a )
___ ___ ___ ___ ___ ___ ___ ___ __ __ __ __ __ __ __ __

______ ______ ______ ______ ______ ______ ______ ______ __

b y te c o d e ( .c l a s s )
100 101 100 101 101 110 010 10 01 00 01 01 00 10 000 011 111 010 011 101 101 111 101 100 101 110 110 010 000 011 010 010 100 101 101

M q u in a V i r t u a l p / S o l a r is

M q u i n a V i r tu a l p / W in d o w s X P

compilador

M q u i n a V i r tu a l p / L in u x

S o la r is

W in d o w s X P

L in u x

Prof. Rmulo Silva

Linguagem Java
Verso atual: 5.0 (ano base: 2005) No permite aritmtica de ponteiros Possui Garbage Collection (Coleta de lixo) Suporte nativo para criao de programas concorrentes/paralelos (threads) Programao de sistemas distribudos relativamente simples

Prof. Rmulo Silva

Tecnologia Java
Atualmente (ano base: 2005) existe uma srie de produtos/ferramentas para o desenvolvimento de aplicaes. Exs.:
JSP (Java Server Pages) EJB (Enterprise Java Beans) JDBC (Java Database Conectivity) JNDI (Java Naming and Directory Interface)

Prof. Rmulo Silva

Plataforma Java
J2SE (Java 2 Standard Edition): ferramentas e APIs essenciais maioria das aplicaes J2EE (Java 2 Enterprise Editon): ferramentas e APIs para desenvolvimento de aplicaes distribudas J2ME (Java 2 Micro Edition): ferramentas e APIs para desenvolvimento de aplicaes para aparelhos portteis.

Prof. Rmulo Silva

Plataforma Java

Prof. Rmulo Silva

J2SDK
Java 2 System Development Kit:
Ferramentas de linha de comando para compilar, depurar e executar programas compilador (comando javac) depurador (comando jdb)

JRE (Java Runtime Enviroment):


Ambiente que executa os programas

Prof. Rmulo Silva

Ps-instalao
Para execuo das ferramentas via linha de comando, aps a instalao:
criar varivel de ambiente $JAVA_HOME para conter o diretrio de instalao Incluir $JAVA_HOME/bin no PATH do sistema

Prof. Rmulo Silva

Compilao e Execuo
via linha de comando:
Localizao: $JAVA_HOME/bin/ Compilao: Comando javac Execuo: Comando java

usando IDE Eclipse:


Opes de compilao so configuradas dentro da prpria IDE

Prof. Rmulo Silva

Processo de compilao
Arquivos fontes:
extenso .java

Bytecodes: resultado do processo de compilao dos arquivos fontes


Cdigo interpretado pela JVM (Java Virtual Machine)

Arquivos de bytecodes:
extenso .class

Prof. Rmulo Silva

Execuo de Aplicaes
Varivel de ambiente CLASSPATH:
Armazena caminhos dos arquivos de bytecodes (.class) Pode ser sobreposta durante a execuo: java cp c:\dir1;c:\dir2 MinhaAplicacao

Prof. Rmulo Silva

Documentao da API
Distribuda separada do J2SDK, disponvel em formato HTML em http://java.sun.com Exibe a especificao de todas as classes das bibliotecas oferecidas pela linguagem.

Prof. Rmulo Silva

IDEs
Eclipse:
http://www.eclipse.org

Netbeans:
http://www.netbeans.org

JDeveloper
http://www.oracle.com

JBuilder
http://www.borland.com

Prof. Rmulo Silva

Captulo 3 Criando a Primeira Aplicao Java

Prof. Rmulo Silva

Primeira Aplicao
Arquivo fonte: PrimeiraAplicacao.java
public class PrimeiraAplicacao { // este metodo eh o ponto de entrada do programa public static void main(String args[]){ System.out.println("Minha primeira aplicao em Java"); } }

Prof. Rmulo Silva

Elementos do programa
Nome da classe Comentrio de linha public class PrimeiraAplicacao { // este metodo eh o ponto de entrada do programa public static void main(String args[]){ System.out.println("Minha primeira aplicao em Java"); } }

Chamada do mtodo println do objeto out da classe System

Nome do mtodo

Prof. Rmulo Silva

O mtodo main
Define o ponto de incio de execuo da aplicao (programa principal) Deve ter sempre a assinatura:
public static void main(String args[])

O parmetro args serve para passar argumentos via linha comando, capturados como strings.
Ex.: java MinhaAplicacao arg1 arg2

void indica que um mtodo sem retorno


Prof. Rmulo Silva

Padres de Codificao
Importante: Java case sensitive Padres para nomeao de classes, variveis e mtodos
Facilitam a legibilidade do cdigo Melhoram a manutenibilidade

Idia bsica: a forma de escrever o nome identifica a sua categoria (classe, mtodo, varivel, constante, ...)

Prof. Rmulo Silva

Padres de Codificao
Nome de classe: apenas a letra inicial maiscula de cada palavra
Ex:. PrimeiraAplicacao System

Nome de mtodo: letras minsculas e inicial maiscula a partir da segunda palavra:


println main getValor
Prof. Rmulo Silva

Padres de codificao
Arquivos fontes:
Um arquivo fonte contm a definio de uma nica classe Nome do arquivo igual o nome da classe Extenso .java

Aps a compilao:
gerado um arquivo .class para cada .java correspondente.

Prof. Rmulo Silva

Exerccio

1- Faa um outro programa, criando uma classe chamada SegundaAplicacao, que imprima as seguintes mensagens na tela: Segunda Aplicao em Java, Imprimindo 3 mensagens e Fim do Programa.

Prof. Rmulo Silva

Captulo 4 Tipos Primitivos

Prof. Rmulo Silva

Declarao de variveis
Sintaxe: tipo da varivel seguido pelo nome da varivel.
int quantidade;

Tipo da varivel

Nome da varivel

String nome;

Prof. Rmulo Silva

Hibridismo
Java uma linguagem hbrida:
Nem tudo objeto

Classificaes dos tipos:


Primitivos ou bsicos: tm tamanho fixo e NO so objetos Ex.: valores numricos, caracteres, booleanos Complexos (ou objetos): criados a partir da definio de uma classe

Prof. Rmulo Silva

Tipos Primitivos
Tipo Tamanho ------16 bits 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Valor Mnimo ------Unicode 0 -128 -215 -231 -263 IEEE 754 IEEE 754 Valor Mximo -----Unicode 216 - 1 +127 +215 1 +231 1 +263 -1 IEEE 754 IEEE 754

boolean char byte short int long float double

Prof. Rmulo Silva

Tipos Primitivos
Exemplos:
int i = 10; boolean cancelado = false; char ch1 = 'a'; char ch2 = '\u0041'; // caracter a em Unicode float f = 5.7F;

Prof. Rmulo Silva

Variveis Numricas
Operadores de
Incremento: ++ e += Decremento: -- e -=

Exs.:
int i = 5; i++; // incrementa i de 1, equivale a i = i + 1 System.out.println(i); // ira imprimir o valor 6 int j = 5; j--; // decrementa i de 1, equivale a j = j - 1 System.out.println(j); // ira imprimir o valor 4 int k = 5; k+=3; // incrementa i de 3, equivale a k = k + 3 System.out.println(k); // ira imprimir o valor 8

Prof. Rmulo Silva

Pr-incremento e PsDecremento
int i = 5; int j = i++; System.out.println(i); // ira imprimir o valor 6 System.out.println(j); // ira imprimir o valor 5 int k = ++i; System.out.println(i); // ira imprimir o valor 7 System.out.println(k); // ira imprimir o valor 7

Prof. Rmulo Silva

Expresses Numricas
O resultado de expresses numricas automaticamente convertido para o tipo com a maior quantidade de bits. Ex.:
A soma de um inteiro e um ponto flutuante convertida para ponto flutuante
int i = 5; float x = 3; float y; y = x + i; x + i convertido para float antes da atribuio a y

Prof. Rmulo Silva

Casting
Converso explcita de um tipo para outro Tipos primitivos
Utilizado quando se quer converter para um tipo que usa um nmero menor de bits para representar o nmero

Ex.:
double e = 2.718; int y = (int) e; // ir truncar (y = 2)

Prof. Rmulo Silva

Ponto Flutuante
Literais de ponto flutuante so default considerados do tipo double.
Colocar F no fim do nmero quando desejar que sejam considerados do tipo float

Ex.:
float numeroPI = 3.14F;

Literal interpretado como do tipo float

Prof. Rmulo Silva

Importante

Strings em Java so objetos e no tipos primitivos !!!

Prof. Rmulo Silva

Exerccios
1- Faa um programa para calcular a o permetro e a rea de crculo de raio de 3 cm. (dados : Permetro = 2R e rea = R2).

Prof. Rmulo Silva

Exerccios
2- Quais os valores de i, k e z em cada uma das mensagens de impresso e porque?

Prof. Rmulo Silva

Exerccios
3- Altere o programa do exerccio 1 para imprimir o valor inteiro do permetro e da rea do crculo, alm do resultado em ponto flutuante

Prof. Rmulo Silva

Captulo 5 Controle de Fluxo

Prof. Rmulo Silva

Comando if
Sintaxe:
if(expresso-booleana) bloco1 else bloco2

O bloco else opcional

Prof. Rmulo Silva

Comando if
int x = 2; int y = 5; int z; if(x < y) { System.out.println("x menor que y"); z = x; } else { System.out.println("x maior que y "); z = y; } expresso booleana bloco de comandos

Prof. Rmulo Silva

Expresso booleana
Operadores de comparao:
==, !=, >, >=, <, <=

Conectores lgicos:
&& (AND) || (OR) ! (NOT)

Prof. Rmulo Silva

Expresso booleana
Observao:
No confundir o operador de atribuio (=) com o operador de comparao de igualdade (==)

Prof. Rmulo Silva

Comando for
Sintaxe:
for(inicializao;expressobooleana;incremento) bloco-de-comandos
inicializao incremento

Ex.:
for(int i = 0; i < 10; i++) { System.out.println("O valor de i: " + i); }
Prof. Rmulo Silva

Comando while
Sintaxe:
while(expresso-booleana) Bloco-de-comandos

Ex.:
int i = 0; while(i < 10) { System.out.println("O valor de i: " + i); }

Prof. Rmulo Silva

Comando do-while
Sintaxe:
do bloco-de-comandos while(expresso booleana)

Ex.: int i = 0; do { System.out.println("O valor de i: " + i); } while(i < 10)


Prof. Rmulo Silva

Comando switch
Sintaxe:
switch(expresso-inteira) { case VALOR1: bloco-de-comandos1 break; case VALOR2: bloco-de-comandos2 break; ... case VALOR-N: bloco-de-comandosN break; default: bloco-de-comandos-default }

Prof. Rmulo Silva

Comando switch
Ex.:
int opcaoMenu; ... switch(opcaoMenu) { case 1: System.out.println("escolheu a opcao 1"); break; case 2: System.out.println("escolheu a opcao 2"); break; case 3: System.out.println("escolheu a opcao 3"); break; default: System.out.println("escolheu outra opcao "); Prof. Rmulo Silva }

Comando switch
possvel ter um nico bloco de comandos para vrios cases. Ex.:
int opcaoMenu; ... switch(opcaoMenu) { case 1: System.out.println("escolheu a opcao 1"); break; case 2: case 3: System.out.println("opces 2 e 3 retiradas"); break; default: System.out.println("escolheu outra opcao"); }

Prof. Rmulo Silva

Comando break
Tambm pode ser usado para forar a sada de loops Ex.: int x = 0; for(int i = 0; i < 10; i++) { x = x + i; if(x > 15) break; }
Prof. Rmulo Silva

Comando continue
Salta para o fim do bloco do loop e fora o teste novamente. Ex.:
int i = 0; while(i < 10) { if(i == 5) { Salta os comandos abaixo i++; continue; } System.out.println(i); i++; }
Prof. Rmulo Silva

Observaes
Evite usar break e continue dentro de loops
Comprometem a legibilidade do cdigo

Para criar um loop for infinito semelhante a C:


for(;;){ System.out.println("Est em loop infinito"); }

Prof. Rmulo Silva

Exerccios
1 - Faa um programa que imprima os nmeros de 1 a 100 inclusive. 2 - Faa um programa que imprima o fatorial de 1 a 10 inclusive. 3 - Altere o programa do exerccio 1 para imprimir uma mensagem na tela quando o nmero for mltiplo de 3 ou mltiplo de 5. 4 - Faa um programa que calcule o resto da diviso por 9 dos nmeros de 1 a 100, e imprima o prprio resto da diviso quando ele for igual a 2, 3, 5 ou 7. Para os outros valores imprima o dobro do resto
Prof. Rmulo Silva

Captulo 6 Classes e Objetos

Prof. Rmulo Silva

Paradigma
Um paradigma de programao um modelo de construo de programas
Forma de abstrao

Orientao a objetos:
um paradigma de programao A soluo do problema corresponde a interaes de objetos criados em tempo de execuo

Prof. Rmulo Silva

OO e Java
Compreender as estruturas sintticas parte fundamental para construo de sistemas OO, porm no suficiente O entendimento dos conceitos de OO que permitem construir bons sistemas:
Manutenibilidade Reusabilidade Flexibilidade

Prof. Rmulo Silva

Objetos
Conceitos que possuem:
Identidade Estado Comportamento

Em Java:
Identidade: endereo do objeto na memria Estado: valores armazenados no objeto Comportamento: operaes aplicveis sobre o objeto

Prof. Rmulo Silva

Classes
A classe uma especificao das caractersticas de objetos:
Definio das variveis dos objetos e das operaes que as manipulam

Classes no existem em tempo de execuo no contexto do programa, apenas seus objetos. Analogia:
Planta de um edifcio (especificao da classe) O edifcio construdo (objeto)
Prof. Rmulo Silva

Terminologia OO
Dados dos objetos:
Variveis de instncia ou atributos

Operaes:
Mtodos ou mensagens

Membros:
Usado indistintamente para atributos e mtodos

Prof. Rmulo Silva

Estrutura de uma classe


class NomeClasse { atributos construtores metodos }

Os membros de uma classe podem vir em qualquer ordem


Seguir uma ordem facilita a legibilidade do cdigo
Prof. Rmulo Silva

Ex. de classe
class MensagemTela { String mensagem;

varivel de instncia (atributo)

public MensagemTela(String msg) { mensagem = msg; }

construtor

public void imprime() { mtodo System.out.println(mensagem); } public static void main(String args[]) { MensagemTela msg = new MensagemTela(Hello World"); msg.imprime(); criao de objeto } chamada de mtodo }

Prof. Rmulo Silva

Construtores
Definem como construir um objeto da classe Devem ter o mesmo nome da classe No devem indicar retorno, pois retornam implicitamente um objeto da prpria classe Criao de objeto (instanciao)
Invocao do construtor usando o operador new
Prof. Rmulo Silva

Mtodos
Definem as operaes vlidas para o objeto (comportamento) Sintaxe:
visibilidade tipo-retorno nome-mtodo(lista-parmetros) { corpo-do-mtodo }

Sintaxe da chamada (invocao):


objeto.nome-mtodo(lista-parmetros); p/ mtodos void XXX x = objeto.nome-mtodo(lista-parmetros); p/ mtodos com retorno

Prof. Rmulo Silva

Classes Pr-definidas
Em Java existem vrias classes prdefinidas que compem a API da linguagem. Exs.:
System Object String

Prof. Rmulo Silva

Classes x Tipo Primitivo


Em uma linguagem OO pura (ex.: Smalltalk), tudo objeto. Java linguagem hbrida:
Valores de tipos primitivos (valores numricos, booleanos, bytes) no so objetos

Na prtica:
A alocao de memria para objetos/tipos privimitos diferente Tipo primitivo: variveis armazenam o prprio valor Tipo objeto: variveis armazenam o endereo do objeto na memria (referncia)
Prof. Rmulo Silva

Memria Tipo Primitivo

M e m r ia x y 2

int x = 2; int y = x;

Prof. Rmulo Silva

Memria Tipo Objeto


MensagemTela msg1 = new MensagemTela("AAA"); MensagemTela msg2 = new MensagemTela("BBB");
Memria

AAA msg1

msg2

BBB

Prof. Rmulo Silva

Memria Tipo Objeto


MensagemTela msg1 = new MensagemTela("AAA"); MensagemTela msg2 = new MensagemTela("BBB");

msg1 = msg2;

M e m ria

A A A m sg1

m sg2

B B B

Prof. Rmulo Silva

Comparao de objetos
O operador == compara valores de referncias e no valores armazenados nos objetos
MensagemTela msg1 = new MensagemTela("AAA"); MensagemTela msg2 = new MensagemTela("AAA");
M e m ria

A A A m sg1

objetos diferentes

m sg2

A A A "

Prof. Rmulo Silva

null
Variveis de tipo objeto no inicializadas tem valor null A chamada de um mtodo sobre uma varivel que tem valor null ocasiona o lanamento da exceo NullPointerException Ex.:
MensagemTela msg1; msg1.imprime();
varivel com valor null

Prof. Rmulo Silva

Exerccios
1 - Implementar a classe Pessoa com os seguintes
atributos: nome, idade e endereo. Crie um mtodo chamado imprime que imprima os dados da pessoa.

2 - Implemente uma classe Livro com os seguintes


atributos: titulo e autor. Crie um mtodo que imprima os dados do livro.

3 - Altere a classe definida no exerccio para incluir o


atributo editora e um mtodo que permita alterar a editora de um livro
Prof. Rmulo Silva

Captulo 7 Arrays

Prof. Rmulo Silva

Arrays
Estrutura semelhante a vetores e matrizes em Matemtica Ex.:
tipo dos elementos

int[] x = new int[5]; x[0] = 20; nmero de elementos x[1] = 30; x[2] = 40; x[3] = 50; x[4] = 60;
Prof. Rmulo Silva

Arrays
Sempre comeam do ndice 0 uma referncia para elementos (tipos primitivos ou objetos)
Alocao da quantidade de elementos: operador new

A tentativa de acessar um ndice invlido ocasiona o lanamento da exceo ArrayIndexOutOfBoundsException


Prof. Rmulo Silva

Arrays
Podem ser inicializados com literais diretamente: int[] meuArray = { 10, 20, 30 }; No possvel alterar a quantidade de elementos aps a inicializao

Prof. Rmulo Silva

Arrays
Arrays sem inicializao dos elementos:
Tipos numricos: elementos tm valor 0 (zero) Tipo booleano: elementos tm valor false Tipos objetos: elementos tm valor null

Prof. Rmulo Silva

Arrays de objetos
tipo dos elementos alocao do nmero de elementos

MensagemTela[] meuArray = new MensagemTela[3]; meuArray[0] = new MensagemTela("AAA"); meuArray[1] = new MensagemTela("BBB"); meuArray[2] = new MensagemTela("CCC");

inicializao do elemento da posio 2

Prof. Rmulo Silva

Nmero de elementos
O nmero de elementos pode ser obtido acessando-se a propriedade length
int[] meuArrayInt = new int[7]; ... for(int i = 0; i < meuArrayInt.length; i++){ System.out.println(meuArrayInt[i]); }
nmero de elementos

Prof. Rmulo Silva

Arrays Multidimensionais
linhas

int[][] mat mat[0][0] = mat[0][1] = mat[1][0] = mat[1][1] =

= new int[2][2]; 50; 60; colunas 70; 80;

Prof. Rmulo Silva

Arrays Multidimensionais
Em Java, matrizes so na verdade arrays de arrays.
dimenso no inicializada

int[][] mat = new int[2][]; mat[0] = new int[3]; mat[1] = new int[4];
3 elementos na linha 0 4 elementos na linha 1

System.out.println(mat[1].length);

Prof. Rmulo Silva

Arrays Multimensionais
Inicializao usando literais:
int[][] mat = { {10,20}, {30,40,50}, {60,70} };

A classe System possui o mtodo arrayCopy para copiar elementos de um array para outro. quantidade de elementos
int[] origem = {20,30,40}; int[] destino = new int[10]; System.arraycopy(origem,0,destino,3,2); posio de incio da cpia a serem copiados

Prof. Rmulo Silva

Arrays - varredura
Utilizando a propriedade length:
int[] meuArray = {10,20,30}; for(int i = 0; i < meuArray.length; i++){ System.out.println(meuArray[i]); }

Prof. Rmulo Silva

Arrays - varredura
Utilizando enhanced-for (vlido somente na verso 5.0):
No precisa testar a propriedade length int[] meuArray = {10,20,30}; for(int x: meuArray) { System.out.println(x); }

Prof. Rmulo Silva

Exerccios
1- Crie uma classe Matriz de inteiros, cujo construtor recebe como parmetro o nmero de linhas e colunas, e inicializa um array bidimensional com as dimenses correspondentes aos parmetros passados. Crie mtodos para atribuir e retornar valor de um elemento e outro para imprimir todos os elementos da matriz. Defina o mtodo main para testar a classe construda. 2 - Crie um array de 5 elementos da classe Pessoa, incialize-os e use um enhanced-for para varrer e imprimir os elementos.

Prof. Rmulo Silva

Exerccios
3 - Crie um classe chamada TrianguloPascal cujo construtor receba como parmetro o nmero linhas e crie um array bidimensional que os nmeros do Tringulo de Pascal at atingir o nmero de linhas informado. Abaixo mostrado o Tringulo de Pascal para 5 linhas.
1 1 1 1 1 1 2 1 3 3 1 4 6 4 1

Prof. Rmulo Silva

Captulo 8 Orientao a Objetos

Prof. Rmulo Silva

Orientao a Objetos
possvel escrever programas em Java sem utilizar os recursos OO, porm so:
difceis de dar manuteno difceis de reutilizar Perdem os benefcios de OO

Prof. Rmulo Silva

Tipo Abstrato de Dados


Um tipo caracterizado pelas operaes que voc pode aplicar sobre ele:
Ex.: Operaes aritmticas (+,-,*,/) sobre tipos numricos Operao de concatenao (+) sobre strings

As linguagens de programao fornecem ao programador meios de definir novos tipos a partir dos existentes

Prof. Rmulo Silva

Linguagens OO
Os principais mecanismos (tcnicas) para definio de novos tipos das linguagens OO, incluindo Java, so:
Herana Sobreposio (overrinding) Sobrecarga (overloading) Polimorfismo

Prof. Rmulo Silva

Herana
Chamada de generalizao/especializao Define uma classe como uma extenso (especializao) de outra definida previamente Efeito:
A classe derivada (especializada) herda todos os atributos e mtodos definidos na classe genrica

Prof. Rmulo Silva

Herana - exemplo
class Pessoa { String nome; int idade; construtor atributos parmetros

public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; } public void incrementaIdade() { idade++; } } referncia para o objeto sendo criado mtodo

Prof. Rmulo Silva

Herana - exemplo
classe derivada (subclasse)
class Aluno extends Pessoa {

classe base (superclasse)

construtor
String matricula; public Aluno(String nome, int idade, String matricula){ super(nome,idade); this.matricula = matricula; } public String getMatricula() { chamada para o return matricula; construtor da superclasse } }

Prof. Rmulo Silva

Herana notao UML


Aluno uma especializao de Pessoa Pessoa uma generalizao para Aluno Todo Aluno uma Pessoa
Pessoa
nome idade incrementaIdade(): void

superclasse

Aluno
matricula getMatricula(): int

subclasse

Prof. Rmulo Silva

Herana notao UML


Pessoa
nome idade incrementaIdade(): void

atributos e mtodo herdados pela classe Aluno atributo exclusivo da classe Aluno

Aluno
matricula getMatricula(): int

mtodo vlido somente para Aluno

Prof. Rmulo Silva

Herana - exemplo
O mtodo incrementaIdade() vlido para objetos do tipo Aluno:
Aluno meuAluno = new Aluno("Joao", 20, "12345-X"); meuAluno.incrementaIdade(); mtodo herdado da classe Pessoa

Variveis do tipo Pessoa podem armazenar referncias para objetos do tipo Aluno
Pessoa p = new Aluno("Joao", 20, "12345-X"); p.incrementaIdade();

Prof. Rmulo Silva

Herana outro exemplo


Veiculo

Automovel

Motocicleta

Palio

Corsa

Veiculo superclasse de Automovel e Motocicleta Todo Automovel um Veiculo Toda Motocicleta um Veiculo Todo Palio um Automovel Todo Corsa um Automovel

Prof. Rmulo Silva

Herana
As classes derivadas so um subtipo da classe base:
Relao um

Aplicao da herana:
Reuso de cdigo (implementao)

Deve ser empregada com critrio, pois um relacionamento esttico entre classes
Todos os objetos so afetados

Prof. Rmulo Silva

Herana - Object
Todas as classes que no especificam uma superclasse so derivadas da classe prdefinida Object Object a raiz da hierarquia de herana
superclasse de todas as classes no sistema

Prof. Rmulo Silva

Herana Mltipla
Herana mltipla:
Capacidade de uma classe ter mais de uma classe base
A B
C derivada das classes A e B

Prof. Rmulo Silva

Herana - observaes
Java NO permite herana mltipla de classes, como ocorrem em outras linguagens, como em C++.
Evitar ambigidade
A
m (): v o id

B
m (): v o id

C objC = new C(); objC.m();

chamada ambgua

Prof. Rmulo Silva

Referncias
Chamada de mtodos da subclasse usando variveis do tipo da superclasse so invlidos, mesmo que armazenam referncia para objeto da subclasse. Ex.:
Pessoa p = new Aluno("Joao", 20, "12345-X"); String matricula = p.getMatricula();

chamada invlida (erro de compilao)

Prof. Rmulo Silva

Casting
A chamada de um mtodo da subclasse usando uma referncia de objeto da superclasse possvel usando casting Ex.:
Pessoa p = new Aluno("Joao", 20, "12345-X"); String matricula = ((Aluno)p).getMatricula();

casting

Prof. Rmulo Silva

ClassCastException
Um casting invlido ocasiona o lanamento da exceo ClassCastException Ex.:
Pessoa p = new Pessoa("Maria", 30); String matricula = ((Aluno)p).getMatricula();

erro em tempo de execuo

Prof. Rmulo Silva

instanceof
O operador instanceof permite testar se uma varivel uma referncia para um tipo especfico
Usado para evitar castings invlidos
Pessoa p; ... if(p instanceof Aluno) { String matricula = ((Aluno)p).getMatricula(); }

Prof. Rmulo Silva

Assinatura de um mtodo
o que diferencia um mtodo de outro do ponto de vista da chamada (invocao):
Nome do mtodo Quantidade, tipo e ordem dos parmetros
class Veiculo { String placa; int velocidade; public Veiculo(String placa){ this.placa = placa; } assinatura

public void setVelocidade(int veloc){ velocidade = veloc; } }

Prof. Rmulo Silva

Sobreposio (overrinding)
a sobrescrita de um mtodo herdado til quando a classe derivada precisa especializar ou alterar algum comportamento definido na superclasse. A assinatura do mtodo sobrescrito deve ser idntica a do mtodo definido na classe base

Prof. Rmulo Silva

Sobreposio
Pessoa

Aluno

Funcionario getSalario(): float

Professor getSalario(): float

Diretor getSalario(): float

mtodos sobrepem o mtodo definido na classe Funcionario

Prof. Rmulo Silva

Sobreposio - exemplo
class Funcionario extends Pessoa { float salarioBase; public Funcionario(String nome, int idade, float salarioBase) { super(nome,idade); this.salarioBase = salarioBase; } salrio do funcionrio = salrio base public float getSalario() { return salarioBase; } }

Prof. Rmulo Silva

Sobreposio - exemplo
class Professor extends Funcionario { boolean temAbono; public Professor(String nome, int idade, float salarioBase, boolean temAbono) { super(nome,idade,salarioBase); mtodo sobrescrito this.temAbono = temAbono; } public float getSalario() { if(temAbono) return super.getSalario() + 200;//abono fixo. else return super.getSalario();// sem abono } } chama o mtodo definido na superclasse

Prof. Rmulo Silva

Sobreposio - exemplo
Funcionario f1 = new Funcionario("Joao",20,300); float salarioF1 = f1.getSalario(); // R$ 300,00 executa mtodo definido na classe Funcionario Professor f2 = new Professor("Joao",20,300, true); float salarioF2 = f2.getSalario(); //R$ 500,00

executa mtodo definido na classe Professor

Prof. Rmulo Silva

Sobreposio
O mtodo invocado de acordo com o tipo real do objeto, e no de acordo com o tipo da varivel declarada.
Funcionario f = new Professor("Joao",20,300, true); float salario = f.getSalario(); //R$ 500,00

executa mtodo definido na classe Professor

Prof. Rmulo Silva

Sobrecarga (overloading)
a definio de mtodos que possuem o mesmo nome, porm com assinaturas diferentes
Quantidade de parmetros diferentes Ordem dos parmetros Tipo dos parmetros

Tipo de retorno de todos os mtodos devem ser iguais.


Tipo de retorno no faz parte da assinatura

Prof. Rmulo Silva

Sobrecarga (overloading)
til quando:
Se quer definir valores defaults para um ou mais parmetros Se deseja disponibilizar um mtodo que faa a mesma tarefa, porm de forma diferente

Tambm pode ser aplicada aos construtores

Prof. Rmulo Silva

Sobrecarga exemplo
class Professor extends Funcionario { ... assinatura public float getSalario() { if(temAbono) return super.getSalario() + 200;//abono fixo. else return super.getSalario();//sem abono } public float getSalario(float horas) { return 20*horas; } ... }
assinatura

Prof. Rmulo Silva

Sobrecarga - exemplo
Professor prof = new Professor("Jose", 20,300,true ); ... float sal1 = prof1.getSalario(); //ir retornar R$500 ... executa a definio de getSalario() sem parmetro

float sal2 = prof1.getSalario(30);//ir retornar R$600 executa a definio de getSalario() com parmetro do tipo float

Prof. Rmulo Silva

Sobrecarga de construtores
class Professor extends Funcionario { boolean temAbono; public Professor(String nome, int idade, float salarioBase, boolean temAbono) { super(nome,idade,salarioBase); this.temAbono = temAbono; } public Professor(String nome, int idade, float salarioBase) { super(nome,idade,salarioBase); this.temAbono = false; } ... }

Construtor com 4 parmetros

Construtor com 3 parmetros

Prof. Rmulo Silva

Polimorfimos
Poli = muitos, morfismo = forma

Capacidade de um objeto de um tipo substituir um objeto de outro tipo

Prof. Rmulo Silva

Polimorfismo
Capacidade de cada subclasse ter implementaes diferentes para o mesmo mtodo
Utilizao de sobreposio

A verso (implementao) do mtodo a ser chamada ser determinada apenas em tempo de execuo
late binding run-time binding dynamic binding
Prof. Rmulo Silva

Polimorfismo - exemplo
Pessoa

Verses do mtodo getSalario()


Aluno Funcionario getSalario(): float

Professor getSalario(): float

Diretor getSalario(): float

Prof. Rmulo Silva

Polimorfismo - exemplo
class ImpostoRenda { ... public void calculaImpostoRenda(Funcionario f){ ... float sal = f.getSalario(); ... pode armazernar referncia } de Funcionario, Professor ou Diretor ... } verso a ser chamada ser determinada em tempo de execuo

Prof. Rmulo Silva

Exerccios
1 - Crie uma classe Veiculo que tenha os atributos ano,
modelo, cor, placa e valor de mercado; e mtodos que retornam os valores dos atributos e um que imprime as informaes do veiculo na tela. Crie as subclasses Automovel e Motocicleta de Veiculo. Para automveis h um atributo que armazena a quantidade de portas.

2 - Altere as classes anteriores acrescentando um mtodo


calcularIPVA que retorna o valor do IPVA de acordo com as seguintes regras:
IPVA = 2% do valor de mercado do veculo Se o automvel tem mais de 10 anos, ele isento do IPVA Se a motocicleta tem mais de 7 anos, ela isenta do IPVA

Prof. Rmulo Silva

Exerccios
3 - Escreva uma classe que represente um ponto de coordenadas x e y. 4 - Escreva uma classe que represente um pixel: um ponto que possui uma cor. 5 - Escreva uma classe que represente um crculo usando um ponto e um raio. Crie um mtodo que calcule a rea do crculo. 6 - Crie uma classe Conta com os atributos nmero e saldo; e os mtodos que permitam fazer o saque, depsito, e um para imprimir os dados da conta.
Prof. Rmulo Silva

Captulo 9 Pacotes, Modificadores de Acesso e Membros estticos

Prof. Rmulo Silva

Modularidade e Reutilizao
Uma classe tem granularidade muito fina para reutilizao em sistemas complexos, com milhares de linhas de cdigo Sistemas complexos precisam ser modularizados para facilitar a manuteno Soluo em Java: uso de pacotes.

Prof. Rmulo Silva

Pacotes
Um pacote um agrupamento de classes que formam um mdulo de um sistema Sintaxe:
package nomedopacote;

Conveno de nomeao:
Em letras minsculas Agregar ao nome do pacote o domnio da empresa (Internet) de trs para frente Exs: package org.eclipse.core.runtime; package com.sun.java.swing;
Prof. Rmulo Silva

Pacote
Declarao de pacote deve vir antes da declarao da classe Ex.: package class ... }

com.b3informatica.biblioteca;

Livro {

Prof. Rmulo Silva

Pacotes - observaes
Toda classe deve pertencer a um nico pacote Java cria o pacote default para classes que no declaram pacote Nome completo da classe: nomedopacote.NomedaClasse
package class ... } com.b3informatica.biblioteca; Livro {

com.b3informatica.biblioteca.Livro

Prof. Rmulo Silva

Pacotes - observaes
Classes com mesmo nome em pacotes diferentes so consideradas classes distintas
package com.empresa.biblioteca;

class Livro { ... } com.empresa.biblioteca.Livro

package

com.b3informatica.biblioteca;

class Livro { ... } com.b3informatica.biblioteca;

Prof. Rmulo Silva

Reutilizao de pacotes
Para usar classes de um pacote deve-se import-la Sintaxe:
import nomedopacote.NomedaClasse;

Declarao de import deve antes da definio da classe cliente, aps a declarao do pacote.
package com.empresa.informatica; import java.io.FileInputStream; class Livro { ... } classe importada

Prof. Rmulo Silva

Reutilizao de pacotes
Quando se deseja utilizar vrias classes do mesmo pacote, pode-se usar * (asterisco) no lugar do nome da classe para importar todas as classes do pacote:
package com.empresa.informatica; import java.io.*; class Livro { ... }
importa todas as classes do pacote java.io

Prof. Rmulo Silva

Pacotes observaes
A escolha de quais classes devem pertencer a um determinado pacote em funo dos critrios de modularizao do sistema Em geral, agrupa-se classes que tratem do mesmo assunto (domnio de aplicao)
Ex.: package com.empresa.contabilidade;

Prof. Rmulo Silva

Modificadores de Visibilidade
Definem o escopo de atributos, mtodos e classes
Onde eles so visveis (referenciveis)

Sintaxe:
modificador-visibilidade atributo; modificador tipo-retorno nomeMetodo (listaparmetros) { Corpo-metodo }

Prof. Rmulo Silva

Modificadores de Visibilidade - exemplo


class Livro { private String titulo; private String autor; modificadores dos atributos ... public String getTitulo() { return titulo; } } modificador de mtodo

Prof. Rmulo Silva

Modificadores de Visiblidade
Modificadores para atributos e mtodos:
private: visveis apenas dentro da classe proprietria protected: visveis dentro da classe proprietria e suas subclasses (classes derivadas) public: visveis a todas as classes

Atributos e mtodos que no declaram modificadores de visibilidade, tem escopo package, isto , so visveis a todas classes do mesmo pacote
Prof. Rmulo Silva

Modificadores de Visiblidade
Somente o modificador public vlido para classes Classes sem declarao de modificador tem escopo package, isto , so visveis a apenas classes do mesmo pacote
package com.empresa.biblioteca; import java.io.*; public class Livro { // classe pode ser referenciada em outros pacotes ... }

Prof. Rmulo Silva

Modificadores de visibilidade - observaes


Os modificadores de visibilidade junto com a declarao de pacotes definem o encapsulamento dos objetos. Encapsulamento um dos grandes benefcios de OO:
as classes expem o mnimo de informao para as classes clientes permite alteraes na implementao sem afetar as classes clientes minimizar dependncias
Prof. Rmulo Silva

Membros estticos
Atributos e mtodos estticos so nicos por classe, compartilhado por todos os objetos da classe A alocao de memria para os atributos feita durante a carga da classe, antes mesmo de ser criada qualquer instncia Os membros estticos devem ser referenciados usando o nome da classe ao invs de variveis de tipo objeto.
Prof. Rmulo Silva

Membros estticos
public class ContaInstancia { private static int nroInstancias; public ContaInstancia() { nroInstancias++; } chamada de mtodo esttico

public static void imprimeNroInstancias() { System.out.println("Nro de Instncias:"+ nroInstancias); } public static void main(String[] args) { ContaInstancia c1 = new ContaInstancia(); ContaInstancia c2 = new ContaInstancia(); ContaInstancia c3 = new ContaInstancia(); ContaInstancia.imprimeNroInstancias(); } }

Prof. Rmulo Silva

Membros estticos observaes


Na terminologia de Orientao a Objetos, atributos e mtodos estticos so chamados de variveis de classe e mtodos de classe, respectivamente. Porque o mtodo main esttico:
Para ser executado sem que haja nenhuma instncia criada

Prof. Rmulo Silva

Variveis de classe
Podem ser inicializadas na prpria declarao ou dentro de um bloco static:
public class ContaInstancia { private static int nroInstancias = 0; ...

ou
public class ContaInstancia { private static int nroInstancias; static { nroInstancias = 0; } ...

Prof. Rmulo Silva

Membros final
A palavra final indica que o membro no pode ser alterado, aps ser inicializado. Mtodo: no pode ser sobreposto nas subclasses Atributo: ao lado de static, ser tratado como uma constante Classe: no permite criao de classes derivadas.

Prof. Rmulo Silva

Membros final - exemplo


A classe pr-definida java.lang.Math define as constantes matemticas PI e E da seguinte forma:
public static final double PI = 3.141592653589793; public static final double E = 2.718281828459045;

Prof. Rmulo Silva

Exerccios
1 - Em geral, as classes definem a visibilidade de suas variveis de instncia como private, e os mtodos que manipulam as variveis como public. Qual a vantagem de assim proceder? 2 - Crie um mtodo esttico para a classe Conta do captulo anterior que faa uma transferncia de valor entre duas contas. 3 - O construtor da classe padro java.lang.Math tem visibilidade private e todos os demais mtodos so estticos. Qual a razo disto? 4 - Em orientao a objetos, comum encontrar situaes onde preciso garantir a existncia de uma nica instncia de uma determinada classe. Como possvel garantir isso usando modificadores de acesso? Prof. Rmulo Silva

Captulo 10 Classes Abstratas e Interfaces

Prof. Rmulo Silva

Problema
Como fornecer uma implementao para o mtodo da classe Figura abaixo???
Figura desenha()

Circulo desenha()

Quadrado desenha()

Triangulo desenha()

Prof. Rmulo Silva

Soluo: Mtodos Abstratos


Mtodo abstrato:
Um mtodo que conhecemos sua interface (assinatura), mas no se sabe como implement-lo. A implementao ser fornecida por subclasses utilizando sobreposio

Sintaxe:
Visibilidade abstract tipo-retorno nomeMetodo(lista-parametros);

Classes que possuem um mtodo abstrato devem ser declaradas como abstratas
Prof. Rmulo Silva

Classes e Mtodos Abstratos - exemplo


public abstract class Figura { ... public abstract void desenha(); }

mtodo sem implementao

Prof. Rmulo Silva

Classes Abstratas observaes


Uma classe abstrata no pode ser instanciada
Compilador no pode garantir que existe uma implementao para cada mtodo

... Figura f = new Figura(); f.desenha(); ...


erro de compilao

Prof. Rmulo Silva

Interfaces
Uma interface uma coleo de assinaturas de mtodos, que em conjunto definem um contrato entre uma classe utilitria e suas clientes.
Mtodos no tm implementao

Sintaxe:
interface NomeInterface { assinaturasMetodos }

Prof. Rmulo Silva

Interfaces - exemplo
interface Conjunto { void addElemento(Object elem); void removeElemento(Object elem); Object getElemento(int pos); } Conveno de nomeao: a mesma para classes
Alguns programadores gostam de incluir um I maisculo no incio para facilitar a identificao em outros pontos do cdigo interface IConjunto { ...}
Prof. Rmulo Silva

Interfaces
Vrias classes podem fornecer implementaes diferentes para a mesma interface til para promover o desacoplamento entre especificao/implementao Permite a troca de uma implementao sem afetar as classes clientes.

Prof. Rmulo Silva

Interfaces - exemplo
package com.empresa.Conjuntos; import java.util.Vector; public class MeuConjunto implements Conjunto { private Vector elementos; public MeuConjunto() { elementos = new Vector(); } public void addElemento(Object x) { implementao if(!elementos.contains(x)) de interface elementos.addElement(x); } public void removeElemento(Object x) { boolean achou = elementos.removeElement(x); } public Object getElemento(int pos) { return elementos.elementAt(pos); } }

Prof. Rmulo Silva

Interfaces - observaes
Na terminologia OO, diz-se que uma classe implementa ou assume uma interface Uma classe, mesmo que no declare implementaes de interfaces, possui uma interface implcita:
Formada pelas assinaturas do mtodos pblicos

Prof. Rmulo Silva

Interfaces notao UML


<<interface>>

Conjunto addElemento(Object x): void removeElemento(Object x): void getElemento(int pos): Object

MeuConjunto

Prof. Rmulo Silva

Interfaces
Mais de uma classe pode implementar a mesma interface
<<interface>>

Conjunto addElemento(Object x): void removeElemento(Object x): void getElemento(int pos): Object

MeuConjunto

ConjuntoTamFixo

Prof. Rmulo Silva

Interfaces
O uso de interface aumenta a flexibilidade do cdigo:
amplia a capacidade de polimorfismo objetos que tm a mesma interface podem ser usados indistintamente em relao aos mtodos que compem a interface

Podem ser usadas em declaraes de atributos, variveis locais ou parmetros de mtodos

Prof. Rmulo Silva

Interfaces
<<interface>>

addElemento(Object x): void Polimorfismo: removeElemento(Object x): void getElemento(int pos): Object ... Conjunto conj; ConjuntoTamFixo MeuConjunto ... String str = "um elemento"; conj.addElemento(str); ...

Conjunto

vlido para objetos da classe Conjunto e ConjuntoTamFixo

Prof. Rmulo Silva

Interfaces - herana
Uma interface pode estender outras interfaces, herdando as assinaturas dos mtodos Ao contrrio de classes, pode ocorrer herana mltipla
No h ambigidade, pois no h implementaes reais de mtodos, apenas assinaturas

Prof. Rmulo Silva

Herana de Interfaces exemplo


interface A { void metodoA(int x); } interface B { int metodoB(); } interface C extends A, B { void metodoC(); } public class X implements A { ... public void metodoA(int x) { ... } } public class Y implements C { ... public void metodoA(int x) { ... } public int metodoB() { ... } public void metodoC() { ... } }

interface C herda as assinaturas definidas em A e B

Prof. Rmulo Silva

Interfaces - observaes
Se uma classe que assume uma interface no prov implementao para algum mtodo da interface, ela deve ser obrigatoriamente declarada como abstract Uma mesma classe pode assumir mais de uma interface simultaneamente.

Prof. Rmulo Silva

Interfaces - exemplo
interface A { void metodoA(int x); } interface B { int metodoB(); } interface C extends A, B { void metodoC(); } class Z implements A, B { ... public void metodoA(int x) { ... } public int metodoB() { ... } }

Prof. Rmulo Silva

Interfaces - observaes
Princpio de OO para reutilizao/substituio de componentes:
Programar mais para interfaces que para implementaes concretas Acoplamentos fracos

No momento de projetar as classes, procurar pensar mais em termos de interfaces (contrato dos mtodos)

Prof. Rmulo Silva

Exerccios
1 - Defina uma interface Node que represente um elemento de uma lista e que especifique uma assinatura de mtodo void imprime(). Defina uma classe Lista que implementa uma lista de nodes, com os mtodos:
boolean isVazia(): retorna true se a lista est vazia void addNode(Node x): adiciona um elemento na lista void imprime(): imprime todos os elementos da lista.

O construtor da lista deve receber o nmero mximo de elementos como parmetro. Crie duas classes, por exemplo: Pessoa e Livro, que implementem a interface Node e crie instncias para testar a classe Lista.

Prof. Rmulo Silva

Exerccios
2 - Crie um esqueleto de programa para fazer o tratamento de transaes bancrias. Cada transao tem um cdigo e um nmero especfico de campos. As transaes so enviadas para o servidor como um string, porm cada transao sabe como gerar o string da forma como o servidor espera. Fornea uma soluo usando os recursos de classes abstratas e interfaces.

Prof. Rmulo Silva

Captulo 11 Tratamento de Excees

Prof. Rmulo Silva

Tipos de Erros
Erros de lgica de programao:
Diviso por zero

Erros relacionados ao ambiente de execuo, contudo contornveis:


Indisponibilidade de rede

Erros incontornveis:
Falta de memria, erro interno da JVM
Prof. Rmulo Silva

Tratamento de Excees
Em Java, uma exceo um tipo especial de objeto, lanado quando ocorre um erro. O objeto lanado pode ser capturado e tratado de maneira simples e elegante.

Prof. Rmulo Silva

Tratamento de Excees
Sintaxe:
try { // bloco de comandos ... } catch(TipoExcecao1 e) { // bloco de tratamento da exceo 1 ... } catch(TipoExcecao2 e) { // bloco de tratamento da exceo 2 ... } ... catch(TipoExcecaoN e) { // bloco de tratamento da exceo N ... }

Prof. Rmulo Silva

Excees pr-definidas
ArrayIndexOutOfBoundsException:
Lanada quando referenciada uma posio invlida de um array

NullPointerException:
Lanada quando se tenta invocar um mtodo usando uma referncia nula.

FileNotFoundException:
Lanada quando se tenta ler um arquivo inexistente

Prof. Rmulo Silva

Tipos de Excees
Checked:
Tratamento obrigatrio (exigido pelo compilador) Ex.: FileNotFoundException

Unchecked:
Tratamento opcional Ex.: ArrayIndexOutOfBoundsException

Excees definidas pelo programador devem ser do tipo checked


Prof. Rmulo Silva

Definio de Excees
So classes que estendem a classe prdefinida java.lang.Exception
public class ConfiguracaoException extends Exception { public ConfiguracaoException(String nome) { super("A Config. "+ nome + invlida"); } }

Prof. Rmulo Silva

Lanamento de excees
Para lanar usa-se a palavra reservada throw (sem s):
... Configuracao c = arq.LeConfiguracao(); if(c.getNumConfiguracao() < 0) { throw new ConfiguracaoException(arq.getNome()); } ...
lana uma exceo

Prof. Rmulo Silva

Lanamento de excees
O lanamento de exceo interrompe o fluxo normal do programa, subindo de escopo at encontrar um bloco catch apropriado. A ocorrncia de excees do tipo unchecked, quando no tratadas ocasionam a queda da aplicao.

Prof. Rmulo Silva

Lanamento de excees
Mtodos que no tratam excees do tipo checked devem declarar na sua assinatura o lanamento das excees
clusula throws (com s) Responsabilidade de tratamento fica para a classe cliente

Prof. Rmulo Silva

Clusula throws
public class Aplicacao { ... public void setConfiguracao(Arquivo arq) throws ConfiguracaoException { Configuracao c = arq.LeConfiguracao(); if(c.getNumConfiguracao() < 0) { throw new ConfiguracaoException(arq.getNome()); } ... delega tratamento } para a classe cliente

Prof. Rmulo Silva

Clusula throws
Um mtodo pode lanar mais de uma exceo Sintaxe:
public tipo-retorno nomeMetodo(listaparametros) throws TipoExcecao1, TipoExcecao2, ..., TipoExcecaoN { // corpo do mtodo ... }

Prof. Rmulo Silva

finally
Bloco opcional usado junto a um bloco trycatch
O contedo do bloco executado independentemente se ocorre exceo ou no Se ocorre exceo, executado aps o bloco catch da exceo lanada.

Prof. Rmulo Silva

finally
try { ... } catch(TipoExcecao1 e) { ... } ... catch(TipoExcecaoN e) { ... } finally { //bloco sempre executado ... }

Prof. Rmulo Silva

Exerccios
1 - Crie uma exceo ListaCheiaException e altere o mtodo void addNode(Node x) da classe Lista proposta no exerccio 1 do captulo 10 para lan-la quando houver a tentativa de inserir um n na lista que j tenha atingindo o tamanho mximo. Faa um teste onde ocorra o lanamento da exceo. 2 - Crie uma exceo ExecucaoTransacaoException e remodele a aplicao de transaes bancrias, proposta no exerccio 2 do captulo 10 , para que quando o servidor retorne erros da execuo da transao, seja lanada uma exceo apropriada.

Prof. Rmulo Silva

Captulo 12 Collections

Prof. Rmulo Silva

Estruturas de Dados
A maioria das aplicaes precisam de estruturas de dados que armazenem colees de objetos:
Listas, pilhas, filas, rvores binrias, tabelas hash, etc.

O pacote java.util define uma srie de classes e interfaces para implementao e tratamento de colees.
Collections Framework

Prof. Rmulo Silva

Interface java.util.Collection
boolean add(Object) void clear() boolean contains(Object) boolean isEmpty() Iterator iterator() boolean remove(Object) int size()

Prof. Rmulo Silva

Interfaces do pacote java.util


<<interface>>

java.util.Collection

<<interface>>

<<interface>>

java.util.List

java.util.Set

List:
Seqncia definida Elementos indexados

Set:
Seqncia arbitrria No h elementos repetidos
Prof. Rmulo Silva

classe ArrayList
Implementa a interface java.util.List usando um array interno. ArrayList lista = new ArrayList(); lista.add("elem1"); lista.add("elem2"); lista.add("elem3");

Prof. Rmulo Silva

classe LinkedList
Implementa uma lista, com mtodos adicionais para insero/remoo de elementos no incio e no fim da lista
LinkedList lista = new LinkedList(); lista.addFirst("elem1"); lista.addLast("elem2"); lista.addFirst("elem3");

Prof. Rmulo Silva

Exerccios
1 - Crie uma exceo ListaCheiaException e altere o mtodo void addNode(Node x) da classe Lista proposta no exerccio 1 do captulo 10 para lan-la quando houver a tentativa de inserir um n na lista que j tenha atingindo o tamanho mximo. Faa um teste onde ocorra o lanamento da exceo. 2 - Crie uma exceo ExecucaoTransacaoException e remodele a aplicao de transaes bancrias, proposta no exerccio 2 do captulo 10 , para que quando o servidor retorne erros da execuo da transao, seja lanada uma exceo apropriada.

Prof. Rmulo Silva

Captulo 13 Pacote Padro, Entrada e Sada

Prof. Rmulo Silva

Pacote Padro java.lang


No precisa fazer import para usar usas classes (importado automaticamente) Principais classes:
Object System String Thread Wrappers (Integer, Long, Float, Boolean, ...) Excees (Exception, NullPointerException, ...) Interfaces (Comparable)
Prof. Rmulo Silva

java.lang.Object
Raiz da hierarquia de classes do sistema Principais mtodos:
boolean equals(Object): retorna true se duas referncias de objetos so iguais (apontam para o mesmo objeto) String toString(): transforma uma referncia de objeto para String. Class getClass(): retorna um objeto representado a classe do objeto (metaclasse)

Prof. Rmulo Silva

java.lang.System
Atributos estticos que representam o sistema
System.in : entrada padro do sistema System.out : sada padro do sistema System.err : sada padro de erro

Principais mtodos:
String getProperty(String p): retorna valores de propriedades do sistema (verso da mquina virtual, separador de arquivo, sistema operacional) void exit(int codigoSaida)
Prof. Rmulo Silva

java.lang.Math
Prov constantes matemticas (PI e E), mtodos estticos para clculo de funes matemticas Principais mtodos:
double pow(double a, double b) double sqrt(double a) long round(double a) int round(float a) double random()

Prof. Rmulo Silva

java.lang.String
Implementa um objeto que armazena uma cadeia de caracteres Principais mtodos:
char charAt(int pos) byte[] getBytes() int length() String substring(int indiceInicio, int indiceFim) String valueOf(int) : converte um inteiro para string

Prof. Rmulo Silva

java.lang.String comparao
Cuidado!!: variveis inicializadas com literais de String iguais apontam para um mesmo objeto
String str1 = "azul"; Ir retornar true String str2 = "azul"; if(str1 == str2) { //compara referncias str1 e str2 System.out.println(objetos iguais"); } else { System.out.println(objetos diferentes"); }

Prof. Rmulo Silva

java.lang.String comparao
Variveis inicializadas usando os construtores da classe String nunca apontam para um mesmo objeto
String str1 = new String("azul"); String str2 = new String("azul"); if(str1 == str2){ //compara referncias str1 e str2 System.out.println("objetos iguais"); } Ir retornar false else { System.out.println("objetos diferentes"); }

Prof. Rmulo Silva

java.lang.String comparao
Para evitar confuso nas comparaes de strings, use sempre o mtodo equals. Mtodo equals da classe String:
Sobreposto de Object Retorna true se duas strings contm a mesma seqncia de caracteres

Prof. Rmulo Silva

java.lang.String comparao
String str1 = new String("azul"); String str2 = new String("azul"); if(str1.equals(str2)){ //compara contedo de str1 e str2 System.out.println("strings iguais"); } Ir retornar true else { System.out.println("strings diferentes"); }

Prof. Rmulo Silva

Pacote java.io
Define vrias interfaces e classes para tratamento de entrada e sada Classe java.io.File:
Usada para representar o sistema de arquivos Mtodos para testar existncia de arquivos, listar diretrios, verificar permisses, etc. A existncia de um objeto File no implica na existncia real do arquivo

Prof. Rmulo Silva

java.io.File
Principais mtodos:
boolean exists() boolean isFile() boolean isDirectory() String[] list() String getAbsolutePath() boolean createNewFile() boolean mkdir()

Prof. Rmulo Silva

java.io.File - exemplo
... File f = new File("c:\\temp"); if(f.isDirectory()) { String[] arqs = f.list(); ...

Prof. Rmulo Silva

Fluxos de Entrada e Sada


Em Java, toda operao de entrada/sada necessita da criao de fluxos (streams) O pacote java.io define dois grupos de classes de streams:
Streams de caracteres Streams de bytes

Prof. Rmulo Silva

Streams de bytes
InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream
OutputStream ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream

Prof. Rmulo Silva

Streams de Caracteres
Reader BufferedReader InputStreamReader FileReader
Writer BufferedWriter OutputStreamWriter FileWriter

Prof. Rmulo Silva

Streams de bytes
InputStream
Classe genrica (abstrata) Principais subclasses: FileInputStream e BufferedInputStream Mtodos principais: int read() : l um byte int read(byte[] buffer): coloca os bytes lidos no array do parmetro e retorna a quantidade de bytes lidos void close(): fecha o stream

Prof. Rmulo Silva

java.io.FileInputStream
File f = new File("c:\\arquivo.txt"); try { FileInputStream in = new FileInputStream(f); //cria stream byte[] buf = new byte[1024]; int qtdBytesLidos = in.read(buf); //le stream while(qtdBytesLidos != -1) { String dados = new String(buf); System.out.println(dados); in.read(buf); } -1 indica fim de arquivo in.close(); //fecha stream } catch(FileNotFoundException e){ System.out.println("No encontrou arquivo"); } catch(IOException e){ System.out.println("Erro na leitura"); }

Prof. Rmulo Silva

Stream de bytes
OutputStream
Classe genrica (abstrata) Principais subclasses: FileOutputStream e BufferedOutputStream Principais mtodos: void write(int b) void write(byte[] buffer) close() flush()

Prof. Rmulo Silva

Streams de Caracteres
Reader
Classe genrica (abstrata) Principais subclasses: BufferedReader e InputStreamReader int read() : l um caracter int read(char[] buffer) : coloca caracteres lidos no array passado como parmetro e retorna a quantidade de caracteres lidos close() : fecha o stream

Prof. Rmulo Silva

Streams de Caracteres
Writer
Classe genrica (abstrata) Principais subclasses: BufferedWriter e OutputStreamWriter Principais mtodos: void write(int c) void write(char[] buffer) close() flush()

Prof. Rmulo Silva

Leitura/Escrita de arquivos texto


Leitura: usar FileReader dentro de um BufferedReader
Leitura bufferizada

Escrita: usar FileWriter dentro de um BufferedWriter


Escrita bufferizada

Prof. Rmulo Silva

Leitura de Arquivos texto exemplo


File f = new File("c:\\arquivo.txt"); try { BufferedReader in = new BufferedReader( new FileReader(f)); //cria o stream String linha = in.readLine(); //le uma linha do arquivo texto while(linha != null) { System.out.println(linha); linha = in.readLine(); } in.close(); //fecha o stream } catch(FileNotFoundException e){ System.out.println("No encontrou arquivo"); } catch(IOException e){ System.out.println("Erro na leitura"); }

Prof. Rmulo Silva

Escrita de arquivos texto exemplo


File f = new File("c:\\arquivo.txt"); try { BufferedWriter out = new BufferedWriter( new FileWriter(f)); //cria o stream String linha = "linha para o arquivo"; out.write(linha); //escreve a linha no stream out.close(); //fecha o stream } catch(FileNotFoundException e){ System.out.println("No encontrou arquivo"); } catch(IOException e){ System.out.println("Erro na leitura"); }

Prof. Rmulo Silva

Leitura do teclado
System.in : um objeto esttico do tipo InputStream que representa a entrada padro (teclado) Para ler no formato de strings ao invs de bytes: embrulhar o objeto System.in dentro BufferedReader com InputStreamReader
Mtodo String readLine(): retorna uma string com a linha lida

Para ler nmeros: usar classes Wrappers para converter a string lida para nmero
Prof. Rmulo Silva

Leitura do teclado - exemplo


try { BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in)); //cria o stream System.out.println("Digite um numero inteiro"); String linha = entrada.readLine(); int numero = Integer.parseInt(linha); System.out.println(numero); } catch(IOException e){ System.out.println("Erro na leitura"); }

Prof. Rmulo Silva

Exerccios
1- Crie uma classe nomeada ListaInteiros, que implemente uma lista de inteiros, usando o tipo primitivo int. Teste a classe criada. 2 - Faa um programa que leia um arquivo texto e imprima o seu contedo na console.

Prof. Rmulo Silva

Exerccios
3 - Implemente uma agenda em um arquivo texto, onde cada registro contenha as seguintes informaes separadas por 2 pontos: nome, data de nascimento, endereo, telefone, e-mail. Crie uma classe para representar os registros, com um atributo para cada campo correspondente; e faa a leitura do arquivo carregando os registros em uma lista e imprimindo-os em seguida. Sugesto: utilize a classe java.util.StringTokenizer.

Prof. Rmulo Silva

Captulo 14 Interfaces Grficas de Usurio AWT e Swing

Prof. Rmulo Silva

Abstract Window Toolkit AWT


Lanada no Java 1.0 Oferece componentes grficos como botes, janelas, campos de texto, etc. A distribuio de componentes na tela determinada por gerenciadores de leiaute A interao entre usurio e aplicao baseada em eventos
Modelo de eventos foi reformulado no Java 1.1

Aparncia e comportamento dependente de plataforma Classes e interfaces dos pacotes java.awt e java.awt.event
Prof. Rmulo Silva

Swing
Lanado na verso 1.2 Conhecido como JFC (Java Foundation Classes) Fornece interface mais rica que AWT Menos dependente de plataforma Utiliza e expande os tipos de eventos e gerenciadores de leiaute definidos no AWT Hoje, usa-se sempre que possvel Swing e no mais objetos do AWT

Prof. Rmulo Silva

Swing
java.awt.Container so objetos continers: usado para incluir outros objetos grficos javax.swing.JComponent a superclasse da maioria de componentes grficos do ja v a .la n g .O b je c t Swing.
ja v a .a w t.C o m p o n e n t

ja v a .a w t.C o n ta in e r

ja v a x .s w in g .J C o m p o n e n t

Prof. Rmulo Silva

javax.swing.JComponent
Alugns mtodos:
void void void void void setPreferredSize(Dimension d) setEnabled(boolean b) setForeground(Color c) setBackground(Color c) setFont(Font c)

Prof. Rmulo Silva

Swing - Componentes
Principais componentes:
JLabel JTextField JButton JRadioButton JCheckBox JComboBox JList JPanel

Prof. Rmulo Silva

Swing - Componentes

Prof. Rmulo Silva

Swing - continers
Todas as aplicaes grficas devem utilizar um dos seguintes continers para conter os demais objetos grficos:
javax.swing.JFrame: usado para conter objetos grficos do Swing. JApplet: usado para conter objetos grficos do Swing para rodar dentro de browsers

JPanel: continer de propsito geral para leiaute em camadas


Prof. Rmulo Silva

Swing - continers
Os objetos grficos no so adicionados diretamente em JFrame ou JApplet
necessrio adicionar os componentes no continer opaco (independente de plataforma) implementado no JFrame ou JApplet: Para obter o continer opaco: JFrame fr = new JFrame(); Container c = fr.getContentPane(); Ou JApplet applet = new JApplet(); Container c = applet.getContentPane();
Prof. Rmulo Silva

Swing - exemplo
import java.awt.*; import javax.swing.*;

Inclui pacotes de objetos AWT e Swing

public class MinhaAplicacao extends JFrame { public MinhaAplicacao() { super("Ttulo da Minha Aplicacao"); Container c = this.getContentPane(); //obtem o continer interno do JFrame c.setLayout(new FlowLayout()); //configura leiaute do JFrame JLabel rotuloNome = new JLabel("Nome"); //cria rtulo JTextField txtNome = new JTextField("valor inicial do campo"); c.add(rotuloNome); //adciona rtulo no continer interno do JFrame c.add(txtNome); JLabel rotuloEndereco = new JLabel("Endereco"); JTextField txtEndereco = new JTextField("valor inicial"); c.add(rotuloEndereco); c.add(txtEndereco); setSize(500,300); //configura tamanho inicial para o JFrame setVisible(true); // coloca o JFrame visvel } public static void main(String[] args) { MinhaAplicacao aplic = new MinhaAplicacao(); //cria um JFrame } }

Criao da aplicao

Prof. Rmulo Silva

Swing - exemplo

Prof. Rmulo Silva

Swing Gerenciadores de Leiaute


Implementam um algoritmo de posicionamento e redimensionamento de objetos adicionados a um continer Principais gerenciadores de leiaute:
FlowLayout BorderLayout GridLayout

Prof. Rmulo Silva

FlowLayout
o leiaute mais simples Posiciona os componentes em seqncia, um ao lado do outro. O componentes so, por default, posicionados justificados no centro. Leiaute default para JPanel

Prof. Rmulo Silva

FlowLayout
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TesteFlowLayout extends Jframe { public TesteFlowLayout(){ super("Teste de FlowLayout"); Container c = getContentPane(); c.setLayout(new FlowLayout()); c.add(new JLabel("Nome")); c.add(new JTextField("Joao da Silva")); c.add(new JButton("Confirma")); setSize(300,100); setVisible(true); } public static void main(String[] args) { TesteFlowLayout fr = new TesteFlowLayout(); } }

Prof. Rmulo Silva

BorderLayout
Implementa um leiaute geogrfico, dividindo o continer em 5 regies: NORTH, SOUTH, WEST, EAST e CENTER Default para JFrame e JApplet Objetos so adicionados nas regies.
NORTH WEST EAST CENTER

SOUTH

Prof. Rmulo Silva

BorderLayout - exemplo
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TesteBorderLayout extends JFrame { public TesteBorderLayout(){ super("Teste de BorderLayout"); Container c = getContentPane(); c.setLayout(new BorderLayout()); JTextArea area = new JTextArea(); area.setText("linha1/nlinha2/nlinha3"); c.add(new JLabel("Nome"), BorderLayout.WEST); c.add(new JTextField("Joao da Silva"), BorderLayout.EAST); c.add(new JButton("Confirma"), BorderLayout.SOUTH); c.add(new JTextArea("linha1\nlinha2\nlinha3"), BorderLayout.CENTER); setSize(400,120); setVisible(true); } public static void main(String[] args) { TesteBorderLayout fr = new TesteBorderLayout(); } }

Prof. Rmulo Silva

BorderLayout - regras
NORTH e SOUTH tm prioridade no uso da largura e altura limitada pelo preferredSize do componente WEST e EAST tem altura limitada pela existncia ou no de componentes no NORTH e SOUTH e largura limitada pelo preferredSize do componente CENTER ignora preferredSize e ocupa todo o espao que puder, mas limitado pela existncia de objetos em NORTH, SOUTH, WEST e EAST Aceita somente um objeto por regio
Prof. Rmulo Silva

GridLayout
Posiciona os componentes em uma forma de tabela com linhas e colunas. Cada clula aceita somente um objeto Clulas no preenchidas ficaro em branco Componente adicionado a uma clula ocupa toda a clula Ignora o preferredSize dos objetos

Prof. Rmulo Silva

GridLayout - exemplo
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TesteGridLayout extends JFrame { public TesteGridLayout(){ super("Teste de GridLayout"); Container c = getContentPane(); c.setLayout(new GridLayout(3,2)); c.add(new JLabel("Nome")); c.add(new JTextField("Joao da Silva")); c.add(new JCheckBox("Funcionario", true)); c.add(new JCheckBox("Estrangeiro")); c.add(new JButton("Confirma")); c.add(new JButton("Cancela")); setSize(300,130); setVisible(true); } public static void main(String[] args) { TesteGridLayout fr = new TesteGridLayout(); } }

Prof. Rmulo Silva

Swing composio de leiautes


Quando necessrio acrescentar mais de um componente na mesma clula ou regio:
Cria-se um continer de propsito geral (JPanel) com o leiaute apropriado Adiciona-se os objetos ao JPanel criado Adiciona o JPanel na clula ou regio

A construo de GUIs faz-se combinando componentes, continers e leiautes adequados.

Prof. Rmulo Silva

Combinao de Leiautes exemplo


import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TestaCombinacaoLeiaute extends JFrame { public TestaCombinacaoLeiaute(){ super("Teste de BorderLayout"); Container c = getContentPane(); c.setLayout(new BorderLayout()); JTextArea area = new JTextArea(); area.setText("linha1/nlinha2/nlinha3"); c.add(new JLabel("Nome"), BorderLayout.WEST); c.add(new JTextField("Joao da Silva"), BorderLayout.EAST); JPanel painelBotoes = new JPanel(); Composio painelBotoes.setLayout(new FlowLayout()); painelBotoes.add(new JButton("Confirma")); de leiautes painelBotoes.add(new JButton("Cancela")); c.add(painelBotoes , BorderLayout.SOUTH); c.add(new JTextArea("linha1\nlinha2\nlinha3"), BorderLayout.CENTER); setSize(400,120); setVisible(true); } ...

Prof. Rmulo Silva

Swing mais Leiautes


BoxLayout GridBagLayout CardLayout

Prof. Rmulo Silva

Swing - Eventos
Definidos nos pacotes java.awt.event e javax.swing.event
java.lang.Object

java.util.EventObject

java.awt.AWTEvent

ActionEvent

ItemEvent

ComponentEvent

AdjustmentEvent

ContainerEvent

FocusEvent

InputEvent

PainEvent

WindowEvent

KeyEvent

MouseEvent

Prof. Rmulo Silva

Swing - Eventos
Gerados automaticamente pela JVM (mquina virtual) durante a interao do usurio com os objetos grficos da aplicao Tratamento de eventos feito atravs da criao de classes:
Devem implementar interfaces pr-definidas (listeners) para o tipo de evento especfico Utilizao do padro de projetos Observer

Prof. Rmulo Silva

Swing - Listeners
So interfaces que devem ser implementadas por classes que tratam os eventos
< < in te r fa c e > >

ja v a . u t il. E v e n t L is t e n e r

< < in t e r f a c e > >

A c t i o n L is t e n e r
< < in te rfa c e > >

A d ju s t m e n t L is t e n e r
< < in te rfa c e > >

C o m p o n e n t L is t e n e r
< < in te rfa c e > >

C o n t a in e r L is t e n e r
< < in te rfa c e > >

F o c u s L is t e n e r
< < in t e r f a c e > >

I t e m L is t e n e r
< < in te rfa c e > >

K e y L is t e n e r
< < in te rfa c e > >

M o u s e L is t e n e r
< < in te rfa c e > >

W in d o w L is t e n e r

Prof. Rmulo Silva

Swing Tratamento de Eventos


Passos:
1. Criar objetos grficos (botes, janelas, campos de texto, caixas de seleo, etc.) 2. Criar classes que implementam os listeners para o eventos desejados. 3. Criar objetos das classes listeners e registr-los junto ao objeto grfico correspondente.

Prof. Rmulo Silva

Tratamento de Eventos exemplo


import java.awt.*; import javax.swing.*; public class TesteTratamentoEventos extends JFrame { public TesteTratamentoEventos() { super("Teste de Tratamento de Eventos"); Container c = this.getContentPane(); c.setLayout(new FlowLayout()); c.add(new JLabel("Nome")); JTextField txtNome = new JTextField("valor inicial"); txtNome.setPreferredSize(new Dimension(100,20)); JButton btnAlteraNome = new JButton("Altera"); TratadorEventoBotao t = new TratadorEventoBotao(txtNome); btnAlteraNome.addActionListener(t); c.add(txtNome); c.add(btnAlteraNome); setSize(new Dimension(300,150)); Cria e registra listener setVisible(true); do boto } ...

Prof. Rmulo Silva

Tratamento de Eventos exemplo (listener)


import java.awt.event.*; import javax.swing.JTextField; public class TratadorEventoBotao implements ActionListener { JTextField txtCampo; Mtodo chamado automaticamente na gerao de um evento do tipo ActionEvent

public TratadorEventoBotao(JTextField txtCampo){ this.txtCampo = txtCampo; } public void actionPerformed(ActionEvent e){ String dadosCampo = txtCampo.getText(); txtCampo.setText(dadosCampo.toUpperCase()); //coloca em maiusculo } }

Prof. Rmulo Silva

Tratamento de Eventos possibilidades


Uma mesma classe pode implementar o tratamento de vrios tipos de eventos
Implementa os mtodos definidos em cada interface Listener
public class XXX implements ActionListener, KeyListener { public void actionPerformed(ActionEvent e){ ... } public void keyPressed(KeyEvent e){ ... } public void keyTyped(KeyEvent e) { ... } public void keyReleased(KeyEvent e){ ... } }

mtodo de ActionListener

mtodos de KeyListener

Prof. Rmulo Silva

Tratamento de Eventos possibilidades


Um mesmo objeto pode tratar o mesmo tipo de evento para vrios objetos grficos
public class XXX implements ActionListener { ... public void actionPerformed(ActionEvent e){ Object obj = e.getSource(); if(obj == btn1) { ... } if(obj == btn2){ ... } ... } }

Retorna o objeto que gerou o evento Faz o tratamento especfico para cada objeto

Prof. Rmulo Silva

Principais eventos, Listeners e seus mtodos

Prof. Rmulo Silva

Applets
Uma aplicao que roda dentro de um browser Cria-se uma classe que derive JApplet para conter os objetos grficos Adio de objetos grficos semelhante utilizada com Jframes Deve-se sobrepor os mtodos:
void void void void init(): inicializao de componentes do applet start(): o que fazer quando o applet iniciar stop(): o que fazer antes de parar destroy(): o que fazer quando o applet terminar

Prof. Rmulo Silva

Applet ciclo de vida

Prof. Rmulo Silva

Applet - exemplo
import javax.swing.*; import java.awt.*; public class TesteApplet extends JApplet { public TesteApplet(){ } Chamado automaticamente pelo browser

public void init() { Container c = this.getContentPane(); c.setLayout(new FlowLayout()); c.add(new JLabel("Nome")); c.add(new JTextField("Joao da Silva")); setSize(300,130); } }

Prof. Rmulo Silva

Applets - observaes
Um Applet possui vrias restries por razes de segurana:
No pode ler/escrever arquivos na mquina cliente No pode iniciar a execuo de um programa na mquina cliente No tem acesso a maior parte das propriedades do sistema.

Essas restries s podem ser alteradas com permisso do cliente

Prof. Rmulo Silva

Exerccios
1- Faa um programa utilizando os componentes Swing e gerenciadores de leiaute adequados para obter-se uma tela como abaixo:

Prof. Rmulo Silva

Exerccios
2- Implemente o tratamento de eventos para os botes da seguinte forma:
Ao pressionar Copiar, o contedo do JTextField adicionado ao JTextPane Ao pressionar Limpar, o contedo do JTextField limpado Ao pressionar sair, a aplicao termina a execuo

Prof. Rmulo Silva

Exerccios
3-Altere o programa do exerccio anterior para que seja exibida uma tela como abaixo:
Na rea indicada da figura devem ser exibidos os formulrios 1 e 2 conforme se pressiona os botes esquerda. O formulrio 1 deve ser exatamente a tela mostrada no exerccio 1. O formulrio 2 deve ser conforme a apresentao abaixo. (Sugesto: pesquise sobre o gerenciador de leiaute CardLayout).
Formulrio 1 rea de exibio de Formulrios Formulrio 2

Prof. Rmulo Silva