Linguagem de Programação JAVA JB50 Java Básico
Revisão 5.0a 20/04/03 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Conteúdo Introdução breve apresentação gerando aplicações IDE Instalação do J2SDK Compilador javac, JVM O primeiro programa Fundamentos da linguagem Java Estrutura da linguagem Palavras Reservadas Tipos de Dados Variáveis Operadores A classe String A classe StringBuffer Casting Fluxo de Controle Arrays Passagem de Parâmetros A classe Math Wrapper de Classes Conversão de Tipos A referência this Coleções Pacotes Acessibilidade Modificador Static Modificador Final
Programação Orientada a Objetos Classes Objetos Métodos Construtores Atributos e Variáveis Abstração de Dados Relacionamento Herança Associação Navegação Role Names Agregação e Composição Multiplicidade Constraint Encapsulamento Polimorfismo JavaDoc Jar JDB Javap Apêndice Convenção de Código no Java Unicode Notação UML Applets
2 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Objetivo Você está preparado ? Para aprendermos uma nova linguagem de programação é necessário ter alguns conhecimentos como: - Lógica de Programação; - Conhecer um Sistema Operacional, por exemplo, Windows, Unix, Linux ou MacOS; - Saber editar e compilar programas e;
Objetivo deste curso:
Apresentar as características básicas da linguagem Java, assim como, sua estrutura, funcionalidades, métodos, classes, APIs (Application Program Interface) e ferramentas.
Expectativas após o Curso: Ao final deste curso você deverá estar apto a: • Utilizar a linguagem Java para criar aplicações simples; • Conhecer a estrutura da linguagem Java, principais API, sintaxes e declarações. • Descrever e usar as características de linguagem orientada a objetos com Java, tais como: Herança, Abstração de Dados, Encapsulamento e Polimorfismo;
3 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Estrutura do Curso
Introdução
Apresenta arquitetura da linguagem Java
Fundamentos da linguagem
Apresenta comandos e funcionalidades básicas
Programação Orientada a Objetos
Principais aspectos da programação orientada a objetos
Utilitários
Demonstrar os principais utilitários da linguagem Java (Jar, JadaDoc e etc)
4 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Objetivo Por que aprender Java? Gartner diz que 62% usam Java no Brasil Quinta-feira, 04 de outubro de 2001 19h24 SÃO PAULO - Cerca de 62% dos desenvolvedores que atuam nas empresas brasileiras usam a tecnologia Java. É o que revela um recente levantamento realizado pelo instituto Gartner. A pesquisa mostrou ainda que 35% dos pesquisados usam Java há menos de um ano e 33% há menos de dois anos. Segundo a Sun Microsystems, que criou a linguagem, isso indica que as empresas já passaram o período de experimentação e realmente adotaram a tecnologia Java para seus projetos de negócios. A maioria dos entrevistados (80%) apontou como principal razão para o emprego da linguagem Java o fato de ela ser multiplataforma, enquanto 48% citaram ainda a escalabilidade e 25%, a segurança. O estudo mostrou ainda que 60% das pessoas já usaram Java para projetos de Application Development (AD); 22% ainda não usaram, mas planejam usar; e 16% não têm planos de utilizar a linguagem. Vale lembrar que o levantamento "The Gartner Survey on Java Usage in Brazil" foi realizado com 80 profissionais durante a conferência "Economia de TI", em São Paulo, no mês de agosto. Por Alexandrina Macedo, do TCINet
5 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
6 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Uma breve apresentação...
Tecnologia Java : A tecnologia Java oferece um conjunto de soluções para desenvolvimento de aplicações para diversos ambientes: J2SE: Para o desenvolvimento de aplicações Client/Server e Applets. J2EE: Criação de aplicações Web (distribuídas, com volumes de transações seguras) J2ME: Para o desenvolvimento de aplicações para dispositivos móveis, tais como: Celular, PDA, TV set-top boxes, VDA, Smart Cards e etc.
Java
7 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java O que é a linguagem de programação Java? Java é: •Uma linguagem de programação; •Um ambiente de desenvolvimento; •Um ambiente de aplicação; Java é o resultado de uma busca por uma plataforma de programação que pudesse fornecer segurança, portabilidade (independência de sistema operacional) e escalabilidade. Os primeiros objetivos alcançados com o desenvolvimento desta nova linguagem foram: •Orientação a objetos: A linguagem é orientada a objetos a partir de sua arquitetura, permitindo herança, polimorfismo, encapsulamento, abstração de dados, persistência de objetos e reúso de código.; • Independência de plataforma (Portabilidade): Possibilidade do mesmo código fonte ser executado em diversos sistemas operacionais, tais como Solaris, AIX, Linux, MacOS, Win32, PalmOS, OS/390 e etc); • Dinamismo: A natureza dinâmica do Java, sendo uma extensão natural de seu projeto orientado a objetos, permite a extensibilidade durante a execução. • Alto desempenho: Suporte a vários recursos, como multithreading, compilação em Jus-in-time, atomicidade do código e suporte a protocolos de rede (TCP/IP) • Facilidade de manutenção de programas. A linguagem não tem: • Ponteiros do sistema operacional; • Defines; • Sobrecarga de operadores; • Herança múltipla de classes e • Função e/ou procedure. Principias características: • Cargabe Collection (gerenciamento dinâmico da memória); • Java Virtual Machine (JVM); • Código seguro.
8 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Diferenças entre o Java e o C++ Java é sintática e morfologicamente muito parecido com a linguagem C++, entretanto, existem diferenças: •Inexistência de aritméticas de ponteiros (ponteiros são apenas referências); •Arrays são objetos; •Strings são objetos; •Gerenciamento automático de alocação e deslocação de memória (Garbage Collection); •Não há sobrecarga de operadores; •Não há métodos com lista de argumentos de tamanho variável; •Não existem diretivas de pré-compilação (#define, #ifde); •Não existem Templates; •Não existe Herança Múltiplas com classes, apenas com interfaces; •Não existem funções, mas apenas métodos de classes; Necessita de ambiente de execução (runtime), ou seja, a JVM (Java Virtual Machine). Veja abaixo um exemplo de um simples programa escrito em Java e em C++. Java
public class Hello { public static void main (String arg []) { System.out.println("Hello” + “\n”); } }
C++
#include
int main () { cout << “Hello \n" ; return 0; }
9 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Portabilidade: “A independência de plataforma” A linguagem Java é independente de plataforma. Isto significa que o desenvolvedor não terá que se preocupar com particularidades do sistema operacional ou de hardware, focando o seu esforço no código em si. Mas o que isto realmente significa?
? A maioria das linguagens é preciso gerar uma versão para cada plataforma que se deseja utilizar, exigindo em muitos casos, alterações também no código fonte. Em Java o mesmo programa pode ser executado em diferentes plataformas. Veja o exemplo abaixo: public class HelloWorldApp { public static void main (String arg []) { System.out.println("Hello World!"); } }
Compilação: > javac Hello.java Execução: > java Hello
O mesmo código fonte
Hello World
Hello World Hello World
Sistema Operacional e Processadores diferentes
"write once, run anywhere."
10 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Gerando Aplicações Para criar aplicações ou programas na linguagem Java temos que seguir os alguns passos como: Edição, Compilação e Interpretação. A Edição é a criação do programa, que também é chamado de código fonte. Com a compilação é gerado um código intermediário chamado Bytecode, que é um código independente de plataforma. Na Interpretação, a máquina virtual Java ou JVM, analisa e executa cada instrução do código Bytecode.
3 Java myProgram 1
2 Javac myProgram.java
Na linguagem Java a compilação ocorre apenas uma vez e a interpretação ocorre a cada vez que o programa é executado.
11 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Plataforma de Desenvolvimento A popularidade da linguagem Java fez com que muitas empresas desenvolvessem ferramentas para facilitar desenvolvimento de aplicações. Estas ferramentas também são conhecidas como IDE (Ambiente de Desenvolvimento Integrado), que embutem uma série de recursos para dar produtividade. Todavia, cada uma delas tem suas próprias particularidades e algumas características semelhantes. As principais ferramentas do mercado são: Ferramentas
Fabricante
Endereço na Internet (URL)
Consortium
www.eclipse.org/downloads/index.php
Eclipse JBuilder
Borland
JDeveloper (release 2)
Oracle
Sun
www.borland.com/jbuilder/ http://otn.oracle.com/products/jdev/ content.html www.netbeams.org
Dica: na hora de avaliar uma ferramenta IDE, um item que deve ser avaliado é se a ferramenta tem suporte a especificação J2EE.
12 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Instalação do ambiente de desenvolvimento (JDK) O J2SDK é ambiente de desenvolvimento da linguagem Java. Na verdade é conjunto de ferramentas para compilar, depurar, executar e documentar um programa escrito em java. As versões para Solaris, Linux e Windows podem ser obtidas no endereço: www.java.sun.com/j2se (Página oficial da linguagem). Procedimentos de Instalação: Para instalar o J2SDK basta executar o programa de instalação e seguir as instruções. Caso o J2SDK esteja compactado será necessário descompacta-lo primeiro, os formatos mais populares de arquivos compactados são zip (para Windows) e tar (para Unix). Após a instalação é necessário configurar o ambiente: Para Win98 ou ME: Passo 1: No windows: Acrescentar no Autoexec.bat: SET JAVA_HOME=C:\j2sdk1.4.0_01 PATH=%JAVA_HOME%\bin A variável JAVA_HOME deve ter o mesmo nome do diretório onde foi instalado o J2SDK. Passo 2: Classpath O Java defini uma variável de ambiente chamada ClassPath. O Java procura pelas classes e pacotes através desta variável. Ela deve estar presente no arquivo Autoxecec.bat Veja um exemplo: Set classpath=.; C:\j2sdk1.4.0_01\bin;c:\MeusPacotes Faça um teste para verificar se tudo está funcionando adequadamente: 1 - Abra um “prompt” do DOS (janela do DOS) 2 - Digite java e seguida tecle <enter>, deverá ser apresentado uma lista de opções da. 3 - Digite javac e seguida tecle <enter>, deverá ser apresentado uma lista do compilador. Se algum problema foi apresentado, faça uma revisão no passo 1 e 2.
13 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Instalação do ambiente de desenvolvimento (JDK) Para Windows 2000: A partir do Menu iniciar, selecione Configurações, depois selecione Painel de Controle e enfim Sistema. Estando em Sistema seleciona o guia “Avançado” e depois variáveis de ambiente.
Passos 1: 1 - Crie uma nova variável de ambiente chamada “JAVA_HOME” com o seguinte valor C:\j2sdk1.4.0_01 Exemplo: JAVA_HOME = C:\j2sdk1.4.0_01; 2 Edite a variável de ambiente Path e adicione as seguintes informações: PATH=%JAVA_HOME%\bin A variável JAVA_HOME deve ter o mesmo nome do diretório onde foi instalado o J2SDK.
14 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Instalação do ambiente de desenvolvimento (JDK) Para Windows 2000: Passo 2: Classpath O Java defini uma variável de ambiente chamada ClassPath. O Java procura pelas classes e pacotes através desta variável. 1 - Crie ou edite a variável de ambiente chamada CLASSPATH, informa o seguinte valor para ela. classpath=.; C:\j2sdk1.4.0_01\bin; (lugar onde está foi instalado o J2SDK) Como resultado você terá o seguinte: classpath=.;:\j2sdk1.4.0_01\bin; Faça um teste para verificar se tudo está funcionando adequadamente: 1 - Abra um “prompt” do DOS (janela do DOS) 2 - Digite java e seguida tecle <enter>, deverá ser apresentado uma lista de opções da. 3 - Digite javac e seguida tecle <enter>, deverá ser apresentado uma lista do compilador. Se algum problema foi apresentado, faça uma revisão no passo 1 e 2.
15 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Instalação do ambiente de desenvolvimento (JDK) O próximo passo é instalar a documentação, ela geralmente está em arquivo compactado, ao descompacta-la selecionar a unidade de disco, por exemplo: “C:\”, pois, o diretório padrão da documentação (docs) já está definido no arquivo compactado. Caso você tenha instalado o JDK em outro diretório que não seja o padrão, você deverá especificar no momento da instalação. A documentação está no formato HTML, o arquivo principal o index.html.
16 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Instalação do ambiente de desenvolvimento (JDK)
A figura demonstra uma visão do pacote de desenvolvimento J2SDK e também do ambiente de execução (JRE). Ambos são necessários para desenvolver uma aplicação. Para os clientes, os usuários finais, precisam apenas do ambiente de execução JRE. Aplicativos como os Applets executam através do Browser (Internet Explorer ou Netscape) geralmente a VM que está embutida nestes navegadores.
17 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java O Compilador javac Sintaxe: javac [opções] NomedoArquivo.java Veja abaixo a lista dos principais argumentos: Argumento -classpath path
-nowarm
Descrição Localização das classes. Sobrepõe a variável de ambiente Classpath. Determina o caminho onde as classes compiladas são armazenadas Faz a compilação de código em desuso, geralmente de versões anteriores e faz aviso de advertência Gera tabelas de "debugging" que serão usadas pelo pelo deupador JDB. Desabilita as mensagens de advertência
-verbose
Exibe informações adicionais sobre a compilação
-O
Faz otimização do código
-depend
Faz a compilação de todos os arquivos que dependem do arquivo que está sendo compilado. Normalmente somente é compilado o arquivo fonte mais as classes que este invoca.
-d dir -deprecation -g
Exemplos: > javac Hello.java > javac -d . Hello.java > javac -deprecation Hello.java > javac -O -deprecation -verbose Hello.java > javac -O Hello.java
18 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java O Interpretador java Sintaxe: java [opções] NomedoArquivo [lista de Argumentos] Veja abaixo a lista das principais opções: Argumento Descrição -classpath path Localização das classes. Sobrepõe a variável de ambiente Classpath. -help
Exibe a lista de opções disponíveis
-version
Exibe a versão do interpretador
-debug
Inicia o interpretador no modo de "debug", geralmente em conjunto com JDB. Possibilita redefinição de valores de propriedades. Pode ser usado várias vezes. Indica o nome do arquivo (com extensão .jar) que contém a classe a ser executada. Exibe a lista de opções não padronizadas do interpretador
-D propriedade= valor -jar -X -v ou -verbose Lista de Argumentos
Exibe informações extras sobre a execução, tais como, mensagens indicando que uma classe está sendo carregada e etc Define a lista de argumentos que será enviada a aplicação
Alguns Exemplos: > java Hello > javac -version > java -D nome=“Meu Nome” Hello > java -verbose Hello > javac Hello MeuNome
19 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Java Virtual Machine A JVM é parte do ambiente de "runtime" Java e é a responsável pela interpretação dos bytecodes (programa compilado em java), ou seja, a execução do código. A JVM consiste em um conjunto de instruções, conjunto de registradores, a pilha (stack) , garbage-collected heap e a área de memória (armazenamento de métodos). Funcões da JVM: • Carregar de forma segura todas as classes do programa (protegendo contra ataques premeditados, por exemplo, Cavalos de Tróia) • Verificar se os bytecodes aderem às especificações da JVM e se não violam a integridade e segurança da plataforma. • Interpretar o código. Em tempo de execução estes bytecodes são carregados, são verificados através do Bytecode Verifier (uma espécie de vigilante) e somente depois de verificados serão executados.
Programa Fonte Javac <programafonte.java>
Programa Compilado Java <programafonte>
Class Loader J Byte Code Verifier V M Runtime
20 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Garbage Collection Coletor de Lixo: A linguagem Java tem alocação dinâmica de memória em tempo de execução. No C e C++ (e em outras linguagens) o programa desenvolvido é responsável pela alocação e deslocamento da memória. Isto geralmente provoca alguns problemas. Durante o ciclo de execução do programa, o Java verifica se as variáveis de memória estão sendo utilizadas, caso não estejam o Java libera automaticamente esta área para o uso. Veja exemplo abaixo:
import java.util.*; class GarbageExample { private static Vector vetor; public static void main(String args[]) { vetor = new Vector(); for (int a=0; a < 500; a++) vetor.addElement(new StringBuffer("teste")); Runtime rt = Runtime.getRuntime(); System.out.println("Memória Livre: " + rt.freeMemory()); vetor = null; System.gc(); System.out.println("Memória Livre: " + rt.freeMemory()); } }
21 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Escrevendo um pequeno programa 1 - Abra o editor de programas e crie o seguinte programa. public class Hello { public static void main (String arg []) { String s = "world"; System.out.println("Hello " + s); } } 2 - Salvar como: Hello.java Após terminar: 3 - Compile o programa com o seguinte comando: javac Hello.java 4 - Para executar, digite o comando: java Hello Está pronto o primeiro programa em Java. Fácil!
22 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Escrevendo um pequeno programa Dissecando o código
modificador Nome da classe
Classe (corresponde ao arquivo que será gravado do disco)
Tipo de dado
Lista de argumentos public class Hello (o tipo em questão é String) { public static void main (String arg []) Método { String s = "world"; Variável principal System.out.println("Hello " + s); } } método Atributo da Classe System Classe java
Roteiro para criar um programa em Java: 1 - Fazer a assinatura da classe, isto equivale a declaração: public class NomedaClasse { 2 - Declarar as variáveis, também chamadas de fields: int i =0 ; Neste caso não temos nenhum variável de classe ou field 3 - Fazer a assinatura dos métodos: public static void main (String args[]){ 4 - Escrever o corpo do método: String s= “world”; System.out.println(“Hello” + s); 5 - Para encerrar o método, note que o corpo do método está entre chaves “{...}“. } 6 - Para encerrar a classe, segue o mesmo princípio do método. Use chaves “}“. 7 - Salve o arquivo. Observe que o nome do arquivo deve ser o mesmo nome da classe. Hello.java 8 - Compilar o programa. Sintaxe: javac . Javac Hello.java 9 - Agora execute o arquivo. Sintaxe: java Java Hello
23 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Introdução a linguagem Java Escrevendo um pequeno programa
Não deu certo ??? Veja se este pequeno “Checklist” pode ajudar: 1 - Problemas com compilação: Veja o Classpath; 2 - Se o compilador não consegue encontrar o arquivo: Verifique se o nome da classe e o nome do arquivo gravado em disco são correspondentes, lembre-se que o java faz distinção entre maiúscula e minúscula; 3 - Erros de sintaxes: Verifique se os pares chaves estão corretos, ou seja, deve ter um par para classe, outro para cada método e para cada bloco de declarações. Verifique se não há instruções erradas, como string quando o correto é String (é uma classe), system ao invés de System Verifique se há ponto e virgula “;” no final de cada instrução.
24 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
25 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Estrutura da Linguagem Comentários: Temos três tipos permitidos de comentários nos programas feitos em Java: • // comentário de uma única linha • /* comentário de uma ou mais linhas */ • /** comentário de documentação */ (este tipo de comentário é usado pelo utilitário Javadoc, que é responsável por gerar documentação do código Java) Exemplo int x=10; // valor de x /* A variável x é integer */ int x; /** x -- um valor inteiro representa a coordenada x */ int x;
Descrição Comentário de linha Exemplo onde o comentário usa mais que uma linha. Todo o texto entre "/*" e "*/", inclusive, são ignorados pelo compilador
Todo o texto entre o "/**" e "*/", inclusive, são ignorados pelo compilador mas serão usados pelo utilitário javadoc.
Ponto e vírgula, Blocos e o espaço em branco: • No Java, os comandos são terminados com o sinal de ponto e vírgula (;) • Um bloco tem início e fim representados pelo uso das chaves { }; • O uso do espaço em branco permite uma melhor visualização dos comandos e em conseqüência facilita a sua manutenção. Exemplo:
public class TestEstrutura { public void sayHello(String hello) { System.out.println("Hello "); } }
Bloco da Classe
Bloco do Método
Ponto e virgula
26 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Estrutura da Linguagem Identificadores: Que são identificadores ? Identificadores são nomes que damos as classes, aos métodos e as variáveis. Regra: Um identificador deverá ser inicializado com uma letra, sublinhado ( _ ), ou sinal de cifrão ($). Em Java existe uma diferença entre letras maiúsculas e minúsculas. Veja alguns exemplos: Classe é diferente de CLASSE classe é diferente de Classe Exemplos de identificadores:: Alguns identificadores válidos: - identifier - userName - User_name - _sys_var1 - - $change Exemplo: public class PessoaFisica Veja alguns inválidos: - 1nome - \TestClass
- /metodoValidar
--------------------------- Compiler Output --------------------------TestIdentificador.java:3: illegal start of type private 1nome;
Veja o código abaixo onde são apontados os identificadores Identificador (nome da classe)
Classe
public class Hello { public static void main (String arg []) { String s = "world"; Método principal System.out.println("Hello " + s); } }
Identificador (nome do método)
Veja que primeiro foi definido o tipo de dado, String, e depois o nome do Identificador (nome do variável)
27 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Palavras Reservadas Palavras Reservadas abstract boolean break byte case catch char class continue default
do double else extends false final finally float for if
implements import instanceof int interface long native new null package
private protected public return short static strictfp super switch synchronized this
throw throws transient true try void volatile while
As Palavras Reservadas, quer dizer que nenhuma das palavras da lista acima podem ser usadas como identificadores, pois, todas elas foram reservadas para a Linguagem Java. Veja o exemplo abaixo: public class TestPalavraReservada { private int return =1;
Palavra reservada
Palavra reservada public void default(String hello) { System.out.println("Hello "); } } Este programa provocará erros ao ser compilado: --------------------------- Compiler Output --------------------------TestEstrutura.java:3: expected private int return =1; ^ TestEstrutura.java:6: expected public void default(String hello)
28 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Tipos de Dados Existem tipos básicos ou primitivos e os tipo de referência. Sintaxe padrão: <Tipo de dado> <nome da variável>; ou <Tipo de dado> <nome da variável> = valor da variável; <Tipo de dado> <nome da variável> = valor da variável, <nome da variável> = valor da variável... ; Tipo Lógico - boolean: true e false Exemplo: boolean fim = true; Tipo Textual - char e String (String é uma classe) Um caracter simples usa a representação do tipo char. Java usa o sistema de codificação Unicode (Veja Apêndice B). Neste sistema o tipo char representa um caracter de 16-bit. O literal do tipo char pode ser representado com o uso do (‘ ‘). Exemplos: a = ‘b’; ‘\n’ – nova linha ‘\r’ – enter Código de escape ‘\t’ – tabulação ‘\\’ - \ ‘\” ”’ - “” ‘\u????’ – especifica um caracter Unicode o qual é representado na forma Hexadecimal. String (String é uma classe) O tipo String é um tipo referência que é usado para representar uma seqüência de caracteres. Exemplo: String s = “Isto é uma string”, Inteiros – byte, short, int e long Possuem somente a parte inteira, ou seja, não suportam casas decimais. Exemplos: int i1 = 10, int i2 = 11; byte b = 1; O tipo default é int. Quando declaramos uma variável do long é necessário acrescentar um literal L, caso contrário esta poderá ser tratada como int, que poderia provocar problemas. Long L = 10L;
29 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Tipos de Dados Tamanho
Tipo
Faixa
8 bits 16 bits 32 bits 64 bits
byte short int long
-128 a 128 -32.768 a 32.767 -2.147.483.648 a 2.147.483.647 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Ponto Flutuante São os tipos que têm suporte às casas decimais e maior precisão numérica. Existem dois tipos em Java: o float e o double. O valor default é double, ou seja, todo vez que for acrescentado a literal F, no variável tipo float, ela poderá ser interpretada como variável do tipo double Veja alguns exemplos: 3.14 Um ponto flutuante simples; 6.02E23 Um valor de ponto flutuante largo; 2.718F Um valor de ponto flutuante simples; 123.4E+306D Um valor de ponto flutuante usando o tipo double. Exemplos de declarações: float f = 3.1; float div = 2.95F; double d1 = 6.35, d2 = 6.36, d3 = 6.37; double pi = 3.14D Regra: Os tipos float e double quando aparecem no mesmo programa é necessário identificá-los, para que não comprometa a precisão numérica: float f = 3.1F; double d = 6.35; Uma vez não identificado, ao tentar compilar o programa, será emitida uma mensagem de erro. Tamanho
Tipo
Faixa
Precisão
32 bits IEEE 754-1985 64 bits IEEE 754-1985
Float Double
1,4E-45 a 3,4E+38 4,9E-324 a 1,7E+308
7 dígitos 15 dígitos
30 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Inicialização de variáveis As variáveis dentro de um método devem ser inicializadas explicitamente para serem utilizadas. Não é permitido o uso de variáveis indefinidas ou não inicializadas. Exemplo: int i; int a = 2; int c = i + a; Neste caso ocorre erro, pois, o valor de i está indefinido.
public class TestVarInic {
Ocorre erro
public static void main(String[] args) { int age; age = age + 1; System.out.println("The age is " + age); } }
As variáveis ou atributos definidos dentro de uma de classe, são inicializadas através do construtor, que usa valores default. Valores default para boolean é false, para os tipos numéricos é 0 e tipo referencia é null; public class TestVarInicClasse { private static int age; public static void main(String[] args) { System.out.println("The age is " + age); } } Resultado: The age is 0
31 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Armazenamento de variáveis Geralmente as variáveis são armazenadas em memória. A linguagem Java possui dois locais para armazenamento de variáveis de acordo com as características.
Variáveis declaradas dentro de um método
Stack Memory
Objetos com atributos
Heap Memory
Objetos e seus atributos e métodos são armazenados no Heap Memory. A Heap é dinamicamente alocada para os objetos esperarem por valor. Já Stack memory armazena as informações que serão utilizadas por um breve intervalo de tempo,
public class Teste{ public static void main(String args[]){ int valor = 10; byte numbyte = 1; } }
int valor = 10; byte numbyte = 1;
Stack Memory
32 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Criando Objetos Os objetos referências são variáveis que contém uma referência do objeto na memória. Vejamos o exemplo: public class Jogador { private int numero; private String nome; public static void main(String[] args) { Jogador jogador = new Jogador(); jogador.setNumero(10); jogador.setNome("Pele"); System.out.println("O " + jogador.getNome() + " foi um dos melhores camisa " + jogador.getNumero() + " de todos os tempos"); System.out.println("referencia do objeto " + jogador); } public String getNome() { return nome; } public int getNumero() { return numero; } public void setNome(String nome) { this.nome = nome; } public void setNumero(int numero) { this.numero = numero; } } Saída: O Pele foi um dos melhores camisa 10 de todos os tempos referencia do objeto Jogador@ba34f2
Referência do Objeto
33 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Operadores Os operadores na linguagem Java, são muito similares ao estilo e funcionalidade de outras linguagens, como por exemplo o C e o C++. Operadores Lógicos: >
Maior que
<=
Menor que ou igual
==
Igual
<
Menor que
>=
Maior que ou igual
!=
Diferente
!
Not (negação)
&&
And (Short-circuit)
||
OR (Short-circuit)
Exemplos: i > 10; x == y; “Test” != “teste” !y x || y Operadores Matemáticos: +
Adição
*
Multiplicação
++
Incremento
-
Subtração
+
Positivo (unário)
--
Decremento
/
Divisão
-
Negativo (unário)
%
Módulo
Exemplos: int a = 1; int b = a + 1; int c = b - 1; int d = a * b; short s1 = -1; short s2 = 10; short s1++; int c = 4 % 3;
34 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Operadores Outros Operadores: instanceof
Faz a comparação do objeto que está “instanciado” no objeto
new
Este operador é usado para criar novas “instance” de classes
Exemplos: instanceof: Objeto obj = new String(“Teste”); if (obj instanceof String) System.out.println(“verdadeiro”) new: Hello hello = new Hello();
Precedências de Operadores: .[]() ++ - ! ~ instanceof new (type) expressão */% +<< >> >>>
- O type é coerção de tipo
Exemplo: Com a precedência definida pelo Java int c = 4 / 2 + 4; Neste caso, primeiro ocorrerá a divisão e após a soma. Com a precedência definida pelo desenvolvedor int a = 4 / (2 + 4); Já neste caso, primeiro ocorrerá a soma e depois a divisão.
35 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Operadores Operadores Binários: Java fornece extensa capacidade de manipulação de bits. Todos os dados são representados internamente como uma seqüência de bits. Cada bit pode assumir o valor de 0 ou 1. No geral uma seqüência de bits formam um byte, que é a unidade de armazenamento padrão, para uma variável tipo byte. Os tipos de dados são armazenados em quantidade maiores que byte. Os operadores sobre os bits são utilizados para manipular os bits de operandos integrais (isto é aqueles do tipo byte, char, short, int e long). Operador &
|
^
Nome AND
OR
XOR
Descrição Mask Bit 1 1 0 0
Input Bit 1 0 1 0
Output Bit 1 0 0 0
AND = 1 and 1 prouz 1. Qualquer outra combinação produz 0 Exemplo: & 00110011 11110000 ======== 00110000 Mask Bit Input Bit Output Bit 1 1 1 0 1 1 1 0 1 0 0 0 OR = 0 or 0 produz 0. Qualquer outra combinação produz 1 Exemplo: | 00110011 11110000 ======== 11110011 Mask Bit Input Bit Output Bit 1 1 0 1 0 1 0 1 1 0 0 0 XOR = 1 xor 0 ou 0 xor 1 produz 1, qualquer outra combinação produz 0 Exemplo: ^ 00110011 11110000 ======== 11000011
36 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Operadores Operadores Binários: Operador <<
Nome Deslocamento para esquerda
>>
Deslocamento para direita com extensão de sinal
>>>
Deslocamento para direita com extensão de zero Complemento de um
~
Descrição Desloca os bits do primeiro operando para a esquerda pelo número de bits especificado pelo segundo operando; preenche a partir da direita com bits 0. Desloca os bits do primeiro operando para a direita pelo número de bits especificado pelo segundo operando. Se o primeiro operando for negativo, preenche com 1s a partir da esquerda; caso contrário, preenche com 0s a partir da esquerda. Desloca os bits do primeiro operando para a direita pelo número de bits especificado pelo segundo operando; 0s são inseridos a partir da esquerda Para cada número negativo, cada bit de cada número é invertido (zeros são substituídos com um e vice versa). Exemplo: int x = 45 <=> Representação em bits (00101101) ~ x <=> Representação em bits (11010010)
Manipulação de bits e os operadores sobre bits Exemplos de manipulação do bits: Right Shift (>>) 128 >> 1 <=> 128/21 = 64 4 = 16 256 >> 4 <=> 256/2 -256 >> 1 <=> -256/24= -16 Left Shift (<<) 128 << 1 <=> 128 * 21 = 256 16 << 2 <=> 16 * 22 = 64
37 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Operadores Podemos realizar operações de Pré e Pós incremento e de Pré e Pós decremento. Veja os exemplos: x = 10; y= 1+x O valor da variável y é 11 e de x = 11 ou x = 10; y = x++ O valor da variável y é 11 e de x= 11 Pós-incremento: x = 10; ou x = 10;
y = x + 1;
O valor da variável y é 11 e de x = 11
y = x++
O valor da variável y é 10 e de x = 11
Vamos esclarecer antes que haja confusão que para isto precisamos separar a operação y = x++ em duas fases.
Fase 1: y =x Fase 2: x++
Nesta fase o valor de x (10) é atribuído para y, logo y(10) = x(10) Nesta fase o valor de x (10) é incrementado em 1, logo x(11)
Observe que isto ocorre devido a precedência de operadores. Primeiro é feito a atribuição e depois o incremento.
Lista de Exemplos
Operador ++ -+= -= *= /= &= |= ^= %=
Exemplo x++, ++x x--, --x x += y x -= y x *= y x /= y x &= y x |= y x ^= y x %= y
Equivalência x = x + 1 x = x - 1 x = x + y x = x - y x = x * y x = x / y x = x & y x = x | y x = x ^ y x = x % y
38 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java String A classe String Objetos String são sequências de caracteres Unicode Exemplo: String nome = “Meu nome” Principais métodos: Substituição: replace Busca: endWiths, startsWith, indexOf e lastIndexOf Comparações: equals, equalsIgnoreCase e compareTo Outros: substring, toLowerCase, toUpperCase, trim, charAt e length Concatenação: concat e operador + Exemplo: O operador + é utilizado para concatenar objetos do tipo String, produzindo uma nova String: String PrimeiroNome = “Antonio”; String SegundoNome = “Carlos”; String Nome = PrimeiroNome + SegundoNome Exemplo:
public class TestString { public static void main(String arg[]) { String s1 = "Hello"; String s2 = new String("hello"); //equals if (s1.equals(s2)) { System.out.println("São iguais"); } else { System.out.println("São Diferentes"); } //equalsIgnoreCase System.out.println("equalsIgnoreCase"); if (s1.equalsIgnoreCase(s2)) { System.out.println("São iguais"); } else { System.out.println("São Diferentes"); } //Alguns métodos //indexOf, charAt, substring String frase = "Vovo viu a uva"; System.out.println("Posição: " + frase.indexOf('a')); System.out.println("Nova frase: " + frase.substring(0,4)); System.out.println("A letra é: " + frase.charAt(5)); //concat String nome = "James ”, sobrenome = "Gosling "; String nomeCompleto = nome.concat(sobrenome); System.out.println("O nome é: " + nomeCompleto); } }
39 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java StringBuffer Objetos StringBuffer são uma seqüência mutável de caracteres Unicode Construtores: StringBuffer – Cria um buffer vazio StringBuffer(int capacidade) – Cria um buffer com a capacidade especificada StringBuffer(String initialstring) – Cria um buffer contendo uma string informada. Principais métodos: append, insert, delete, ...
Exemplo:
Várias formas de declaração
Usando os métodos para manipular o objeto StringBuffer
public class TestStringBuffer { public static void main(String arg[]) { //new instance StringBuffer b1 = new StringBuffer(); StringBuffer b2, b3; b2 = new StringBuffer(25); b3 = new StringBuffer("Teste, "); /*para exibir o conteúdo é necessário usar o método toString */ System.out.println("b1:" + b1.toString() ); System.out.println("b2:" + b2.toString() ); System.out.println("b3:" + b3.toString() ); b3.append("vamos testar novamente"); System.out.println("b3:" + b3.toString() ); b3.insert(0, "A x B "); System.out.println("b3:" + b3.toString() ); b3.delete(0,4); System.out.println("b3:" + b3.toString() ); b2.append("Teste b2"); System.out.println("b2 Capacidade: " + b2.capacity()); System.out.println("b2 Tamanho: " + b2.length()); b2.append(b3); System.out.println("b2: " + b2.toString() ); System.out.println("b2 tamanho: " + b2.length() ); System.out.println("b2 invertida: " + b2.reverse() ); } }
40 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Casting (coerção de tipos) Casting Exemplo: public class TestCasting { public static void main(String args[]) { //Exemplo 1 byte a = 1; byte b = 3; /*Linha errada, pois a operação adição sofre casting implicita */ //byte c = i + i; //Correção o casting explicito byte c = (byte) (a + b);
O resultante da soma foi promovido para tipo int, quando atribuímos a variável , que é do tipo byte, a operação provoca erro, pois, a faixa de byte é menor que a faixa de int. Uma vez aplicado o casting a operação de soma é realizado e depois é convertida para o tipo byte.
System.out.println(c); //Exemplo 2 Casting implícito: (a + b) int ia = 1; long lb = 3; /* Perda de Precisão - causa erro */ //int ic = ia + lb; //linha errada -> Casting //Correção o casting explicito int ic = ia + (int) lb; System.out.println(ic);
Casting explícito: (byte) (a + b)
} }
41 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle Java como qualquer outra linguagem de programação, suporta instruções e laços para definir o fluxo de controle. Primeiro vamos discutir as instruções condicionais e depois as instruções de laço. Antes, porém, vamos entender a necessidade dos blocos. Um bloco é o conjunto de instruções delimitadas por chaves “{... }”. Exemplo:
{ int i = 10; System.out.println(“Hello”); i++
bloco
} Os blocos povoam métodos, instruções condicionais, laços e etc, ou seja, podemos encontrá-los sempre dentro de um programa Java. Construções condicionais: if (<expressão boolean>) <declarações>... else <declarações>... switch (<expressão>) { case <expressao char-int>: <declarações>... break; case <expressao char-int>: <declarações>... default: <declarações>... } (<expressão boolean>) ? <expressão if-true> : <expressão if-false>
42 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução if Sintaxes: if (expressão boolean) instrução Exemplo: if (x>y) System.out.println(x); if (expressão boolean) { //Bloco de instruções } Exemplo: if (x>y) { System.out.println(x); y++; } if (expressão boolean) { //Bloco de instruções } else { //Bloco de instruções } Exemplo: if (x>y) { System.out.println(x); y++; } else { System.out.println(y); x++; }
Mais de uma instrução é usado a estrutura de bloco
if (expressão boolean) { //Bloco de instruções } else if (expressão boolean) { //Bloco de instruções } else if (expressão boolean) { //Bloco de instruções } else if (expressão boolean) { //Bloco de instruções } else { //Bloco de instruções }
43 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução if Sintaxes: (continuação) Exemplo: if (x>y) { System.out.println(x); y++; } else if (x
sim saldo > 0
if (saldo > 0) { status = “Positivo”; } else { status = “Negativo”; }
status = Positivo
não status = Negativo
Lógica
OU if (saldo > 0) status = “Positivo”; else Código status = “Negativo”;
44 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução if Neste exemplo apresentaremos a instrução if com múltiplas opções. Veja a lógica e também a implementação do código:
saldo médio > 5000
sim
Limite cheque =1000
não saldo médio > 3000 and <=5000
sim
Limite cheque =800
sim
Limite cheque =600
sim
Limite cheque =400
não saldo médio > 2000 and <= 3000
não saldo médio > 1000 and <= 2000
não Limite cheque =0
Lógica
public class ifCompostoExemplo { public static void main(String args[]) { int limitecheque; int saldomedio = 15000; if (saldomedio > 5000) { limitecheque = 1000; } else if (saldomedio > 3000 && saldomedio <= 5000) { limitecheque = 800; } else if (saldomedio > 2000 && saldomedio <= 3000) { limitecheque = 600; } else if (saldomedio > 1000 && saldomedio <= 2000) { limitecheque = 400; } else { limitecheque = 0; } System.out.println("Limite cheque especial..." + limitecheque); } }
Código
45 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução switch Switch é uma alternativa para seleção múltipla de escolha, entretanto, ela tem algumas diferenças da estrutura if - if else. Como, por exemplo, o tipo de dado válido na expressão é somente do tipo char e os tipos inteiros (int, byte, short, long).
Sintaxes: switch (expressao char-integer) { case expressao1: // instruções case expressao2: // instruções case expressao3: // instruções default: // instruções } A instrução switch
Será impresso “abcd”
Exemplo: public class switchSimplesExemplo { public static void main(String args[]) { char opcao = 'a'; String selecao = ""; switch (opcao) { case 'a': selecao += ‘a’; case 'b': selecao += 'b'; case 'c': selecao += 'c'; default: selecao += "d"; } System.out.println(selecao); } }
Após a impressão do valor, achamos mais uma diferença em relação ao if - if else, a instrução Switch executa todas as opções após uma opção válida. Por exemplo, se valor inicial da variável opção for igual ‘c’, teremos o seguinte resultado para a variável selecao = ‘cd’.
46 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos Fundamentosda daLinguagm Linguagem Java Java Fluxo de Controle A instrução switch. Para que a instrução switch execute apenas uma opção, desprezando as demais é necessário incluirmos a instrução break. Bem como o próprio nome da instrução sugere este sai da instrução switch. Sintaxes: switch (expressao char-integer) { case expressao1: // instruções break; case expressao2: // instruções break case expressao3: // instruções break default: // instruções } A instrução switch com a instrução break
Será impresso “b”
public class switchBreakExemplo { public static void main(String args[]) { char opcao = 'b'; String selecao = ""; switch (opcao) { case 'a': selecao += 'a'; break; case 'b': selecao += 'b'; break; case 'c': selecao += 'c'; break; default: selecao += "d"; } System.out.println(selecao); } }
Note que tanto a instrução default quanto a break são opcionais, depende da lógica a utilizada.
47 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução switch. Neste exemplo apresentaremos a instrução switch e a instrução break com múltiplas opções. Veja a lógica e também a implementação do código:
sim case 10
avaliacao = “Excelente”
não sim
avaliacao = “Ótimo”
sim
avaliacao = “Ótimo”
sim
avaliacao = “Ótimo”
case 9
não case 8
não
case 7
não avaliacao = “Regular”
Lógica
public class switchCompostoExemplo { public static void main(String args[]) { String avaliacao =""; int nota = 8; switch (nota) { case 10: avaliacao = "Excelente"; break; case 9: avaliacao = "Ótimo"; break; case 8: avaliacao = "Bom"; break; case 7: avaliacao = "Satisfatório"; break; default: avaliacao = "Regular"; } System.out.println("Avaliação: " + avaliacao); } } Código
48 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle Operador Ternário E por fim o operador ternário, Java, oferece uma maneira simples de avaliar uma expressão lógica e executar uma das duas expressões baseadas no resultado. O operador condicional ternário (?:). É muito parecido com a instrução iif() presente em algumas linguagens, Visual Basic, por exemplo. Sintaxe: (<expressão boolean>) ? <expressão true> : <expressão false> ou variável = (<expressão boolean>) ? <expressão true> : <expressão false> Neste exemplo apresentaremos uma expressão condicional simples. Veja a lógica e implementação do código. Faça uma comparação com a instrução if-else.
sim saldo > 0 não status = Negativo
Lógica
status = Positivo
{ ... Status = (saldo > 0)? ”Positivo”:“Negativo”; ... }
Código
Lembre-se que podemos aninhar operadores e condições, pois, todos suportam a recursividade.
49 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle Laços O que são laços? Laços são repetições de uma ou mais instruções até que uma condição seja satisfeita. A linguagem Java tem dois tipos de laços: os finitos e os infinitos. Para os laços finitos a execução está atrelada a satisfação de uma condição, por exemplo:
não a = 10
a++
sim
Se o valor da variável a não for igual 10. então incrementar um na variável senão imprimir a variável valor
Imprimir a
Isto quer dizer que a instrução de incremento vai repetir dez vezes. Já os infinitos estes executarão sempre, independente de condição.
true
a++
Em Java, temos três instruções que suportam laços ou “loops”. São elas: while, do-while e for. Laços: while () <statements>... do <statements>... while (); for (...; ; <exprs>...) <statements>...
50 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução while. Ela executa uma instrução ou bloco de instruções, enquanto uma determinada condição não for satisfeita. Ela faz a validação antes de executar as instruções.
Sintaxe: while (expressao boolean) instrução java
Este código será executado 10 vezes, ou seja até a condição ser satisfeita
Sintaxe: while (expressao boolean) { //Bloco }
A instrução while
Exemplo: public class whileExemplo2 { public static void main(String args[]) { int d = 10; while (d >= 0) System.out.println("Contagem Regressiva " + d--); } }
Exemplo: public class whileExemplo { public static void main(String args[]) { int d = 1; while (d<= 10) { System.out.println("7 x " + d + " = " + 7*d); d++; } } }
Este código produzirá a Tabuada do 7 Neste exemplo o laço é finito, ou seja, irá executar até a condição estar satisfeita
51 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução while. Os exemplos abaixo demonstram como tornar um laço infinito usando a instrução while, provavelmente isto não deverá acontecer, todavia, pode ser um pequeno erro de lógica, inversão de valores ou uma condição que nunca será satisfeita. Exemplo 1: ... int d = 1; while (d > 0) { System.out.println("7 x " + d + " = " + 7*d); d++; } ... Exemplo 2: ... while (true) { System.out.println(d++); } ....
52 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução while. O exemplo abaixo exibe a lógica e a implementação do código de um laço finito usando a instrução while.
valor < 20
não
Valor++
sim Imprime valor
{ ... while(valor <20) valor++ System.out.println(valor); ... }
Sai do Laço
Lógica
Código
53 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução do-while. Ela tem uma pequena diferença da instrução while, enquanto a instrução while verifica a expressão boolean (lógica) antes e somente depois executa a instrução ou o bloco de instruções, a instrução do-while executa primeiro e depois verifica a condição. Sintaxe: do instrução java while(expressão boolean)
Este código será executado 10 vezes, ou seja até que a condição seja satisfeita
Sintaxe: do { //Bloco } while(expressão boolean)
A instrução do-while primeiro executa as instruções que estão dentro de bloco e depois verifica a expressão boolean
Exemplo: public class dowhileExemplo { public static void main(String args[]) { long d=10; do System.out.println(d++); while (d <=20); } }
Exemplo: public class dowhileExemplo2 { public static void main(String args[]) { int d = 100; do { System.out.println("Faixa " + Math.random()*d); d++; } while (d <=110); } }
54 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução do-while. O exemplo abaixo exibe a lógica e implementação do código de laço finito usando a declaração do-while.
Valor++ não
Imprime valor
Valor < 20
... do { valor++ System.out.println(valor); } while(valor <20) ...
sim Código
Lógica
Agora faça uma comparação entre a instrução while e do-while:
valor < 20
não
Valor++
sim Imprime valor
{ ... while(valor <20) valor++ System.out.println(valor); ... }
Sai do Laço
Lógica
Código
55 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução for A instrução for é a mais popular entre as instruções de laço. A instrução for como as demais instruções de laços repetem uma instrução ou bloco de instruções até que determinada condição seja satisfeita. Sintaxes: for(valor-inicial1, valor-inicial2 ; condição; valor de incremento/decremento) instrução java; for(valor-inicial; condição; valor de incremento/decremento) { //Bloco de instruções } for(;condição; valor de incremento); for(l;; valor de incremento); for(); onde: valor-inicial - valor de inicio (esta variável que pode ser definida dentro do for ou fora). Exemplo: int x; (for x=1;x<10;x++) instrução Java ou (for int x=1;x<10;x++) instrução Java condição: é expressão lógica, Exemplo: (for x=1;x<10;x++) instrução Java valor de incremento: valor que incrementaremos ou decrementaremos (for x=1;x<10;x--) instrução Java
56 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução for Veja abaixo mais exemplos, desta vez, com algumas variações possíveis da instrução for: Sem declarar valor-inicial
Sem condição. A condição está associado a instrução if Sem valor de incremento ou decremento.
For aninhados
Decrementado de dois em dois
public class forExemplo1 { public static void main(String args[]) { int d=170; for(;d <=190; d++) System.out.println("Faixa 180-190 : " + Math.random()*d); for(d=200; ;d++) { System.out.println("Faixa 200-210: " + Math.random()*d); if (d>210) break; } for(d=210; d < 220;) { System.out.println("Faixa 210-220: " + Math.random()*d); d++; } int i=10; for(d=220; d <=230; d++) { System.out.println("Faixa 220-230 " + Math.random()*d); for(; i <=20; i++) System.out.println("Valor de i " + i); } for(i=40; i >= 30; i-=2) { System.out.println("Valor de i 40-30 " + i); } } }
Note que a instrução break pode ser usada para sair de instrução de laço (while, do-while e for).
57 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle A instrução for O exemplo abaixo demonstra a lógica e implementação do código para a instrução for:
i=10 .. for(i=10; i >= 0; i-=2) { System.out.println("Valor de i 10-0 " + i); } ...
sim i >=0 não OU Imprime i
i=i-2
Lógica
.. for(i=10; i >= 0; i-=2) System.out.println("Valor de i 10-0 " + i); ...
Código
Agora faça uma comparação entre a instrução do while, do-while e for. Quem será mais rápido ?
58 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle Label (rótulo) A linguagem Java permite a criação de rótulo (bloco) chamada Label. Este bloco tem um conjunto de instruções que podem ser executadas. Sintaxe: <nome-da-label>: instrução java ou <nome-da-label>: { //Bloco de instruçõe } Exemplo:
public class labelExemplo { public static void main(String args[]) { int d=1; label_one: for(d=1; d <=10; d++) System.out.println("Faixa de 0..10: " +d); label_two: { for(; d <=20; d++) System.out.println("Faixa de 10..20: " +d); }
Veja os labels
} }
59 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Fluxo de Controle Continue Algumas vezes precisamos abandonar a execução de laço ou recomeçar um determinado label. Para parar ou abandonar um “loop” antes do final da execução, usamos o comando break. Para abandonar um “loop” ou label e continuar a execução de um outro label, por exemplo, utilizaremos o comando continue. Este comando similar uma instrução goto Sintaxe: continue; or continue label_name; Exemplo: public class labelExemplo1 { public static void main(String args[]) { label_a: for(int d=1; d <=10; d++) { System.out.println("Faixa A de 0..10: " +d); for(int i=10; i<20;i++) { System.out.println("Resto: " + d%i); if ( (d%i)>0) continue label_a; } } } }
60 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Arrays Os arrays são objetos. Eles devem possuir um tamanho definido no momento de sua declaração, por exemplo: int[ ] arrayInt = new int[5], ou int[ ] arrayInt arrayInt = new int[5] Os elementos de array são acessados pelo índice, que sempre começa com valor 0. Não são permitidos índices inválidos,pois, estes resultam em exceção. ArrayOutOfBoundsException. Os arrays podem receber variáveis do tipo primitivo (int, double, char, boolean, short e etc) ou do tipo referência, objetos, (String, Double, Integer e etc). Quando um Array é redimensionado todos os elementos são perdidos. Exemplo: float ArrayReDim[ ] = new float[5]; ArrayReDim[ ] = new float[15]; Exemplo: Inicialização de Arrays Exemplo 1 String nomes[ ]; nomes = new String[3] names[0] = "Duke"; names[1] = "Jane"; names[2] = "Tarzan"; Exemplo 3 MinhasDatas dates[ ]; dates = new MinhasDatas[2]; dates[0] = new MinhasDatas(22, 7, 2000); dates[1] = new MinhasDatas(01, 4, 1999);
Exemplo 2 String nomes[ ] = {"Duke", "Jane","Tarzan"};
Exemplo 4 MinhasDatas dates[ ] = { new MinhasDatas[2], new MinhasDatas(22, 7, 2000) , new MinhasDatas(01, 4, 1999); }
Arrays Multi-Dimensionais: Declaração correta: double duplaDim [ ] [ ] = new double [4] [ ]; duplaDim [0] = new double [1]; duplaDim [1] = new double [2]; duplaDim [3] = new double [3]; Declaração Incorreta: double duplaDim [ ] [ ] = new double [ ] [4 ];
61 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Arrays Propriedades: Length = retorna a quantidade de elementos de um Array Exemplo: int listaNum = new int[20] for(int i=0; i < listaNum.length; i++ ) { System.out.println(listaNum[i]); } Principais Métodos: arraycopy = faz cópia de array A para o B. Exemplos: public class TestArray1 { public static void main (String args [ ]) { int[] thisArray = {1,2,3,4,5,6,7,8,9,10}; for (int i =0; i < thisArray.length; i++) { System.out.println("Conteúdo" + thisArray[i]); } } }
Declara e atribui os valores para array
Imprime no console os itens do array
Declara e atribui os valores para thisArray Imprime no console os itens do thisArray
public class TestArray2 { public static void main (String args [ ]) { String[] estadosul = new String[3]; estadosul[0]="RS"; estadosul[1]="SC"; estadosul[2]="PR"; for (int i =0; i < estadosul.length; i++) { System.out.println("Conteúdo " + estadosul[i]); } } }
62 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Arrays Método arraycopy: Permite fazer cópias dos dados array de um array para outro. Sintaxe: arraycopy(Object origem, int IndexOrigem, Object destino, int IndexDestino, int tamanho)
Array de origem array1
J A V A L
J A V A
I
Array de destino array2
arraycopy(array1, 0,array2, 0, 4);
public class TestArrayCopy { public static void main(String[] args) { char[] array1 = { 'j', 'a', 'v', 'a', 'l', 'i'}; char[] array2 = new char[4]; System.arraycopy(array1, 0, array2, 0, 4); System.out.println(new String(array2)); } }
63 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Arrays Método Sort Para ordenar um array, usamos o método sort da classe java.util.Arrays Exemplo: import java.util.*; public class TestArraySort { public static void main(String[] args) { int[] numero = {190,90,87,1,50,23,11,5,55,2}; //Antes da ordenação displayElement(numero); //Depois da ordenação Arrays.sort(numero); displayElement(numero); } public static void displayElement(int[] array) { for(int i=0;i < array.length; i++) System.out.println(array[i]); } }
64 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Passagem de Parâmetros Parâmetros de inicialização: Podemos passar parâmetro de inicialização para o método “main” (principal) através da linha de comando. Veja o fragmento de código: ... public static void main(String args[]) { System.out.println(args[0]); } ... Exemplo de Passagem de valores: java NomedaClass Lista de Valores java TestParam 01 02 03 Note que espaço em branco é a separação entre os itens, no exemplo, acima temos três itens passados. Vale lembrar que o tipo de dado destes parâmetros é String, por definição da linguagem. Para passar valores que tem nome composto acrescente aspas. java TestParam “Jose Maria” Maria Joao
65 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java A classe Math A classe Math contém um grupo de funções matemáticas e estatísticas. Principais métodos: Truncar: ceil, floor e round Variação: max, min, e abs() Trigonométricas: sin, cos, tan, asin, acos, atan. toDegrees e toRadians Logaritmo: log e exp Outras: sqrt, pow e random Exemplos: double d = 2; System.out.println(Math.sqrt(d)); Exemplo: public class TestSqrt { public static void main(String arg[]) { double d = 2D; System.out.println("A raiz quadrada de "+ d + " " + Math.sqrt(d)); System.out.println("O valor arrendondado "+ d + " " + Math.round(Math.sqrt(d))); } }
66 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Empacotamento de Classes É possível trabalhar com vários tipos de dados, inteiros, ponto flutuantes, texto, lógico e etc. Todavia em alguns casos há a necessidade de fazer conversão de um tipo de dado para outro. Bem, começaremos com a conversão de tipos primitivos para tipo referência (objetos), esta operação também é chamada de Wrapper Class. Veja abaixo a tabela que associa os tipos. Tipo primitivo boolean
byte
Char
short
int
long
float
double
Boolean
Byte
Character
Short
Integer
Long
Float
Double
Tipo referência
Exemplos: public class TestWrapperClass { public static void main (String args [ ]) { int pInteger = 500; // Tipo primitivo Integer wInteger = new Integer(pInteger); // Wrapper Class int p1 = wInteger.intValue(); //Conversão de valores: String valueStr = "10"; double d1 = Double.valueOf(valueStr).intValue(); //ou double d2 = Double.parseDouble(valueStr); } }
67 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Conversão de Tipos Uma lista de exemplos de conversão de um tipo para outro tipo e por aí vai...
Convertendo dados em Java de um tipo para outro. > Convertendo String em integer: int variavel = 42; String str = Integer.toString(variavel); ou int variavel = 42; String str = "" + variavel; ou int variavel = 42; String str = String.valueOf(variavel); > Convertendo String em Long: long variavel = Long.parseLong(str); ou long variavel = Long.valueOf(str).longValue(); > Convertendo String em Double: double variavel = Double.valueOf(str).doubleValue(); > Convertendo String em Float: float variavel = Float.valueOf(str).floatValue(); > Convertendo Integer em String: String str = “14”; int var = Integer.parseInt(str); ou String str = “14”; int var = Integer.parseInt(str); ou String str = “14”; int var = Integer.valueOf(str).intValue();
68 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Conversão de Tipos Mais exemplos: > Convertendo Integer em código ASCII: char c = 'C'; int i = (int) c; > Convertendo Double em String: String str = Double.toString(i); > Convertendo Long em String: String str = Long.toString(l); > Convertendo Float em String: String str = Float.toString(f); > Convertendo Decimal em Hexadecimal: int i = 12; String hexstr = Integer.toString(i, 16); ou String hexstr = Integer.toHexString(i); > Convertendo Decimal em Binário: int i = 12; String binstr = Integer.toBinaryString(i); > Convertendo Hexadecimal em Integer: int i = Integer.valueOf("B8DA3", 16).intValue(); ou int i = Integer.parseInt("B8DA3", 16); > Convertendo Boolean em Integer: i = (b)?1:0;
69 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos A referência this O Java associa automaticamente a todas as variáveis e métodos referenciados com a palavra reservada this. Em alguns situações torna-se redundante o uso do this. Aplicação: - Impedir ambigüidade de nome de variáveis e - Fazer referência a própria classe Restrição: Não pode ser aplicada a métodos estáticos, por exemplo, o método main. Exemplo: Existem casos em se faz necessário o uso da palavra this. Por exemplo, podemos necessitar chamar apenas uma parte do método passando uma instância do argumento do objeto. (Chamar um classe de forma localizada); Birthday bDay = new Birthday(this); public class PessoaJuridica extends Pessoa { public PessoaJuridica() { super("ACME"); } public static void main(String args[]) { PessoaJuridica pf = new PessoaJuridica(); pf.setIdade(10); System.out.println("idade: " + pf.getIdade()); } public String getNome() { return ""; }; public int getIdade() { return idade; } public void setIdade(int idade) { this.idade = idade; } } Na classe PessoaJuridica, o uso da palavra this é para evitar ambigüidade. Note que no método setIdade, o parâmetro chama-se idade e o atributo também tem o mesmo nome, ou seja, o mesmo identificador, neste caso o this separa o atributo do parâmetro.
70 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Coleções O que são coleções? Coleções (também conhecidas como container) é um simples objeto que pode agrupar múltiplos elementos. Coleções são utilizadas para armazenar, recuperar e manipular dados. Os métodos são responsáveis por realizar as operações. A estrutura das coleções inclui uma variedade de recursos que simplificam o desenvolvimento. Essa é uma implementação da noção de reúso de código. Um exemplo de coleção poderia ser uma lista de nomes e telefones. Hashtable (API: Java.util) A tabela de hash é uma estrutura de dados que permite procurar os itens armazenados em tabela utilizando uma chave associada. O formato padrão de entrada de dados na tabela é chave e valor. Para construir uma tabela de hash em Java, devemos criar um objeto Hashtable, utilizando o construtor Hashtable. Para adicionar elementos na tabela usaremos o método put, put(object key, Object value). Este método é da classe Hashtable. Para recuperar o elemento usado como chave, devemos usar o método get, get(object key). Para remover um elemento usamos o método remove. Exemplo: API
Implementação de tabela Hash e uso dos métodos put e get
import java.util.*; public class TestHashTable { public static void main(String Arg[]) { Hashtable table = new Hashtable(); table.put("1", "Joao"); table.put("2", "Jose"); table.put("3", "Maria"); table.put("4", "Marta"); table.put("5", "Pedro"); table.put("6", "Mateus"); String find = (String) table.get("4"); System.out.println(find); } }
71 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Coleções Enumeration (API: Java.util.Enumeration) Retorna uma enumeração de uma coleção (Tabela Hash, por exemplo) especificada. Principais métodos: hasMoreElements e nextElements. Exemplo: API
Tabela Hash e métodos
import java.util.Enumeration.*; import java.util.*; public class EnumerationExemplo { public static void main(String Arg[]) { Hashtable table = new Hashtable(); table.put("1", "Joao"); table.put("2", "Jose"); table.put("3", "Maria"); table.put("4", "Marta"); table.put("5", "Pedro"); table.put("6", "Mateus"); Enumeration e = table.elements(); while(e.hasMoreElements()){ String valor = (String) e.nextElement(); System.out.println(valor); }
Usando a Interface Enumeration, podemos imprimir todos os valores contidos na tabela Hash } }
import java.util.Iterator.*; ... Iterator i = table.values().iterator(); while(i.hasNext()){ String valor = (String)i.next(); System.out.println(valor); }
Opcionalmente podemos usar Iterator que tem a funcionalidade parecida com Enumeration
72 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Coleções Vector Exemplo:
API
Declaração do Vector Adiciona valores ao Vector. Note que estes valores são do tipo referência, ou seja, objetos Converte um Vector para um array .
import java.util.*; public class TestVector { public static void main(String Arg[]) { Vector v = new Vector(); Integer y; for(int x=0;x<5;x++) { y = new Integer(x); v.addElement(y); } Object[] objArray = v.toArray(); for(int x=0;x<5;x++) { System.out.println(objArray[x]); } } }
Exercício: Use Enumeration para listar todos os elementos de Vector.
73 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Coleções ArrayList ( API: Java.util). ArrayList é array dimensionável da Interface List parecido com Vector. No exemplo abaixo é permitido que os valores sejam duplicados, porém, desordenados. Principais métodos: add, remove, clear, size, isEmpty, get, set, iterator.
Exemplo: API
Declaração do ArrayList Inserção de valores na lista. Veja que estes valores são objetos
import java.util.*; public class ListExemplo { public static void main(String[] args) { List list = new ArrayList(); list.add("um"); list.add(new Integer(4)); list.add("terceiro"); list.add(new Integer(4)); System.out.println(list);
Imprime os valores da lista Vector v = new Vector(); Integer y; for(int x=0;x<5;x++) { y = new Integer(x); v.addElement(y); }
Uma nova coleção
Uma outra construção para a lista, neste caso ela recebe uma coleção como argumento
List listVector = new ArrayList( v ); System.out.println(listVector); }
Imprime todos os valores da lista
}
74 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Coleções HashSet (API: Java.util) A classe HashSet Implementa a interface Set, ela também tem suporte da HashTable. Ela é uma coleção que não pode conter elementos duplicados. Principais métodos: add, clear, remove, size, iterator e isEmpty. Exemplo:
API
Declaração do HashSet Inserção de valores na lista. Veja que estes valores são objetos
Imprime os valores da lista
import java.util.*; //Com ordem e sem repetição public class SetExample { public static void main(String[] args) { Set set = new HashSet(); set.add(”dois"); set.add("3rd"); set.add(new Float(11.1F)); set.add(”quarto"); set.add(new Float(11.1F)); System.out.println(set); } }
75 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Fundamentos da Linguagem Java Coleções
76 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Pacotes Pacotes A linguagem Java é estruturada em pacotes, estes pacotes contém classes que por sua vez contém atributos e métodos. Pacote é forma de organização da linguagem Java, prevenindo de problemas como a repetição de identificadores (nomes) de classes e etc. Podemos usar a estrutura de pacotes para associar classes com semântica semelhante, ou seja, classes que tem objetivo comum. Por exemplo, colocaremos em único pacote todas as classes que se referem a regras de negócios. Exemplo:
Aplicação
Interface de Usuário
Regras de Negócios
Controle
Fisicamente os pacotes tem a estrutura de diretório e subdiretório, isto quer dizer que a Aplicação terá a seguinte formato: Aplicação Regras de Negócios Interface de Usuário Controle
77 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Pacotes Pacotes Import A instrução import faz importação para o arquivo fonte (.java) das classes indicadas, cujo o diretório base deve estar configurado na variável de ambiente: CLASSPATH. Sintaxe: import ; Exemplos: Substituindo os pontos por barras teríamos o caminho import java.awt.Button;
import java/awt/Button; Aqui estaríamos importando somente o objeto Button
import java.awt.*; Neste caso estaríamos importando todos objetos contidos na classe Package Esta instrução deve ser declarada na primeira linha do programa fonte, esta instrução serve para indicar que as classes compiladas fazem parte do conjunto de classes (package), ou sejam um pacote, indicado pela notação path.name (caminho e nome do pacote). Sintaxe: package <path.name>; 1 - Crie um subdiretório, exemplo mkdir mypck. 2 - Dentro deste subdiretório escreva a classe ClassPkg (inclua instrução package na primeira linha. (Veja exemplo ao lado) 3 - No diretório corrente Teste, escreva a classe TestPkg, não esqueça de incluir a instrução “import”. 4 - Faça a compilação a partir do diretório Teste, usando a seguinte linha de comando:
Teste mypck ---------
ClassPck.class
TestPck.class
package mypck; public class ClassPkg { public ClassPkg() { System.out.println("Teste de package..."); } } import mypck.*; public class TestPkg { public static void main(String args[]) { ClassPkg p = new ClassPkg(); } }
java -d . TestPck.java
78 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Acessibilidade Acessibilidade ou Visibilidade Os níveis de controle tem o seguinte papel de tornar um atributo, um método ou classe visível ou não. Exemplo: Se um atributo foi declarado dentro de uma classe chamada TestA e este atributo tem o nível de controle private. Somente esta classe poderá fazer acesso a este atributo, ou seja, somente classe TestA o enxergará, todas as demais, não poderão fazer acesso direto a este atributo. public class TestA { private int a=1; }
public class TestB extends TestA{ private int b=a; }
TestB.java:3: a has private access in TestA private int b=a; ^
Para contornar a situação poderíamos fazer duas coisas, a primeira: alterar o nível de controle do atributo a, na classe TestA, para public, desta forma a classe TestB o enxergaria. Todavia, as boas práticas de programação não recomendam fazer isto. A segunda: é uma maneira mais elegante de resolvemos o problema, podemos criar métodos públicos na classe TestA, por exemplo, getA e setA, aí sim, através destes métodos seria possível manipular o atributo da classe TestA. A linguagem Java tem para os atributos e métodos quatro níveis de controles: public, protected, default e private. Para classes tem dois níveis: public e default (também chamado de pacote ou de friendly). Este níveis de controle são os responsáveis pela acessibilidade ou visibilidade de atributos, e métodos.
79 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Acessibilidade Acessibilidade ou Visibilidade A tabela abaixo demonstra a acessibilidade para cada nível de controle
Modificador
Mesma Classe sim
Mesmo Package sim
Protected
sim
Private Default
Public
SubClasse
Universo
sim
sim
sim
sim
não
sim
não
não
não
sim
sim
não
não
Exemplos: public class
class
protected class
public sublass
public sublass
public sublass
public
default
protected
80 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Características Avançadas Modificador static Exemplo de compartilhamento de variável static. Apesar de ter dois objetos da classe (teste1 e teste2). Quando fazemos a impressão da variável esta tem o valor que atribuído pelo primeiro objeto teste1. Exemplo: public class TestVarStatic { private static int varStatic; private int varNoStatic; public static void main(String[] args) { TestVarStatic teste1 = new TestVarStatic(); System.out.println("static = " + teste1.varStatic); System.out.println("No static = " + teste1.varNoStatic); teste1.varNoStatic++; teste1.varStatic++; TestVarStatic teste2 = new TestVarStatic(); System.out.println("static = " + teste2.varStatic); System.out.println("No static = " + teste2.varNoStatic); } } Teste1: static = 0 No static = 0 teste2: static = 1 No static = 0
81 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Características Avançadas Modificador static Restrições: - Métodos static - não pode ter referência this. - não pode ser substituído ("overridden") por um método não static - pode somente fazer acesso dados static da classe. Ele não pode fazer acesso a não static. - pode somente chamar métodos static. Ele não pode chamar métodos não static Exemplo: public class TestMetodoStatic { private static int valor; public TesteMetodoStatic(){ valor=0; } public static void main(String[] args) { addSoma(2,2); addSoma(3,2); addSoma(4,2); displayTotal(); } public static void addSoma(int a, int b){ valor += (a * b); } public static void displayTotal(){ System.out.println("Total = " + valor); } }
82 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Características Avançadas Modificador Final (constantes) Para declarar uma variável, um ou uma classe como constante usamos o modificador final. Entretanto, o uso deste modificador deve obedecer a certas restrições como: • Uma classe constante não pode ter subclasses; • Um método constante não pode ser sobrescrito; • O valor para variável constante deve ser definido no momento da declaração ou através de um construtor, para variáveis membro, uma vez atribuído o valor, este não mudará mais. Veja o exemplo: public final class TestFinalPai { private final int VALOR; public TestFinalPai(int V) { VALOR = V; } }
Quando compilamos a classe um erro é gerado
public class TestFinalFilho extends TestFinalPai { public TestFinalFilho() { super(10); } public static void main(String args[]) {
} } TestFinalFilho.java:1: cannot inherit from final TestFinalPai public class TestFinalFilho extends TestFinalPai
83 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Características Avançadas Modificador Final (constantes) Veja o exemplo: • TestFinal1: O valor é atribuído através de um construtor, note que a variável é membro da classe. • TestFinal2: O valor é atribuído no método, pois, neste caso a variável é um local
public class TestFinal1 { private final int VALOR; public TestFinal1() { VALOR = 0; } public static void main(String args[]) { TestFinal1 tf= new TestFinal1(); System.out.println(tf.VALOR); } } public class TestFinal2 { public static void main(String args[]) { final int VAL; VAL =0; System.out.println(VAL); } }
Convenção, para variáveis constantes (final), o nome da variável deve ser escrito em maiúsculo.
84 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
85 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Classe
O que é uma Classe? “Uma classe descreve um conjunto de objetos com propriedades e comportamentos semelhantes e com relacionamentos comuns com outros objetos” As classes são a parte mais importante de um sistema orientado a objetos. Usamos as classes para capturar o vocabulário do sistema que está em desenvolvimento. Essas classes podem incluir abstrações que são parte do domínio do problema, assim como as classes que fazem implementação de operações. Podemos usar ainda as classes para representar itens de software, de hardware e até itens que sejam somente conceituais. Exemplo: A classe Pessoa deverá ter atributos e métodos comuns
Nome da Classe Pessoa Nome Idade GetNome GetIdade
Atributos Métodos
O nome da classe deve ser identificador único em conjunto de classes, este nome deve ser substantivo no singular. Exemplo: Produto, Cliente e etc As classes:podem ser concreta ou abstrata Sintaxe: <modificador> class <nome da classe> { [ <declaração de atributos>] [ <declaração de construtores> ] [ <declaração de método>] }
86 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Classe Exemplo: A classe Pessoa. Classe concreta.
public class Pessoa { //Atributos private String nome; private int idade; //métodos public String getNome(){ return nome; } public void setNome(String nome){ this.nome = nome; }
Exemplo de diagrama de classe usando Rational Rose (notação Unified) Pes s oa n o m e : S tri n g i d a d e : In te g e r g e tNo m e () se tNo m e () g e tId a d e () se tId a d e ()
public int getIdade(){ return idade; } public void setIdade(int idade){ this.idade = idade; } }
Classe Concreta: É uma classe que tem assinatura e a implementação de métodos.
87 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Classe Exemplo: A classe Pessoa. Classe Abstrata public abstract class Pessoa { protected String nome; Se uma classe possui um método abstrato a classe também será abstrata.
public abstract String getnome(); public abstract void setnome(String nome); }
Observe que os métodos não implementados. Simplesmente assinados.
Diferenças ente Classe Abstrata e Concreta: Classe Abstrata
Classe Concreta
Os métodos devem ser somente assinados
Os métodos podem ser assinados e implementados
Não pode sofrer “instance”
Poder sofrer “instance”
Relacionamento somente através de herança
Todos os tipos de relacionamentos
Classe Abstrata: Em um relacionamento onde a classe Pai é abstrata e a filha é uma classe concreta esta deve implementar os métodos assinados na classe Pai. Classe Abstrata: Uma classe abstrata pode conter métodos abstratos (aqueles que somente tem a assinatura de métodos sem implementação) e métodos concretos (aqueles que tem assinatura).
88 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Objetos O que são Objetos ? São qualquer coisa na natureza que possua propriedades (características) e comportamentos (operações). Exemplo: uma pessoa, uma cão e etc Orientação a Objetos: O termo orientação a objetos significa organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados. Estrutura de um objeto Objetos combinam propriedades (atributos) e comportamentos (operações). Podemos dizer que objeto é espécie da classe, ou seja, uma “instance” da classe
Exemplos de Objetos: Classe: Cliente e objetos Cliente nome cpf idade
Cliente: clientemulher nome = Marina cpf = 022.200.708-12 idade = 16
Cliente: clientehomem nome = Felipe cpf = 039.217.908-22 idade = 22
89 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Métodos Métodos são os comportamentos de um objeto. A declaração é feita da seguinte forma: < modificador > < tipo de retorno > < nome > ( < lista de argumentos > ) < bloco > < modificador > -> segmento que possui os diferentes tipos de modificações incluíndo public, protected, private e default (neste caso não precisamos declarar o modificador). < tipo de retorno > -> indica o tipo de retorno do método. < nome > -> nome que identifica o método. < lista de argumentos > -> todos os valores que serão passados como argumentos. Exemplos: public void somaDias (int dias) { } private int somaMes(int mês) { } protected String getNome() { } int getAge(double id) { } public class CalculaData { private int day, month, year; public float calcDays(int age ) { return 365.25F * age; } }
método
90 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Métodos Método é a implementação de uma operação. As mensagens identificam os métodos a serem executados no objeto receptor. Para chamar um método de um objeto é necessário enviar uma mensagem para ele. Por definição todas as mensagens tem um tipo de retorno, por este motivo em Java, mesmo que método não retorne nenhum valor será necessário usar o tipo de retorno chamado “void” (retorno vazio). ContaCorrente Conta saldo setDeposito getSaldo setSaque
public class ContaCorrente { private int conta=0; private double saldo=0; public double getSaldo(){ return saldo; } public void setDeposito(int valordeposito) { return saldo +=valordeposito; } public void setSaque(double valorsaque) { return saldo -=valorsaque; } }
91 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientação a Objetos Orientada a Objetos Construtores O que são construtores? Construtores são um tipo especial de método usado para inicializar uma “instance” da classe. Toda a classe Java deve ter um Construtor. Quando não declaramos o “Construtor default”, que é inicializado automaticamente pelo Java. Mas existem casos que se faz necessário a declaração explícita dos construtores. O Construtor não pode ser herdado. Para chamá-lo a partir de uma subclasse usamos a referência super. Para escrever um construtor, devemos seguir algumas regras: 1ª O nome do construtor precisa ser igual ao nome da classe; 2ª Não deve ter tipo de retorno; 3ª Podemos escrever vários construtores para mesma classe. Sintaxe: [ <modificador> ] <nome da classe> ([Lista de argumentos]){ [ <declarações> ] } Exemplo:
public class Mamifero { private int qdepernas; private int idade; public Mamifero(int idade) { this.idade = idade; } //Métodos }
92 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Atributos e variáveis Os atributos são pertencentes a classe, eles podem ser do tipo primitivo ou referência (objetos), os seus modificadores podem ser: public, private, protected ou default. O ciclo de vida destes atributos estão vinculados ao ciclo de vida da classe. Variáveis Locais: São definidas dentro dos métodos. Elas têm o ciclo de vida vinculado ao ciclo do método, também são chamadas de variáveis temporárias Sintaxe: [<modificador>] <nome> [ = ]; Exemplo:
public class Disciplina { private int cargaHoraria; private String nome; public Disciplina(String nome, int cargaHoraria){ this.nome = nome; this.cargaHoraria = calcCargaHoraria(cargaHoraria); } public String getNome(){ return nome; } public int getCargaHoraria(){ return cargaHoraria; } public int calcCargaHoraria(int qdeHoras) { int horasPlanejamento = (int) ( qdeHoras * 0.1); return cargaHoraria = horasPlanejamento + qdeHoras; }
Atributos
Variáveis temporárias
}
93 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Exemplo de Classe
1
Livro Legenda: 1 – Objeto no mundo real 2 – Modelo de implementação da classe Livro 3 – Codificação da classe Livro 3
2 L i vr o is b n t it u lo a u to r
public class Livro extends Object { public Livro() { } private int isbn; private String titulo; private String autor; public int getISBN(){ return isbn; } public void setISBN(int isbn){ this.isbn=isbn; } public String getTitulo(){ return titulo; } public void setTitulo(String titulo){ this.titulo=titulo; } public String getAutor(){ return autor; } public void setAutor(String autor){ this.autor=autor; }
g e t IS B N ( ) s e t IS B N ( ) g e t T it u lo () s e t T it u lo () g e t A u t o r() s e t A u t o r()
} }
Criar o objeto Livro
94 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Abstração de Dados Para discutirmos sobre classes abstratas é necessário falarmos sobre a abstração de dados. O que é abstração? Podemos dizer abstração é generalização. Qual é a função da abstração ? A função da abstração é capturar as propriedades e os comportamentos essenciais, como se fosse uma fatoração, desta forma determina-se o que é importante e o que não é.
Aeronave
Caça
Carga
Mamífero
Passageiros
Vaca
Urso
Cavalo
As classes Aeronave e Mamífero neste caso são abstratas e ambas representam um domínio.
95 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Abstração de Dados Classes Abstratas Uma classe abstrata é uma classe que: • Provê organização • Não possui “instances” • Possui uma ou mais operações (métodos) abstratas
Pessoa
Classe Abstrata
getNome()
Pessoa Física getNome()
Pessoa Jurídica getNome()
Classe concreta Uma operação abstrata só determina a existência de um comportamento não definindo uma implementação. Classes Abstratas - Exemplo:
Funcionário
Analista
Classe Abstrata
Programador
Classe concreta
96 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Abstração de Dados Classes Abstratas Pessoa Classe concreta
Classe Abstrata
getNome()
Pessoa Física getNome()
Pessoa Jurídica getNome()
public class PessoaFisica extends Pessoa { public PessoaFisica(String nome) { super(nome); } public static void main(String args[]) { PessoaFisica pf = new PessoaFisica("Duke"); pf.setIdade(10); System.out.println("idade: " + pf.getIdade()); System.out.println("nome: " + pf.getNome()); } public String getNome() { return nome; } public int getIdade() { return idade; } public void setIdade(int idade) { this.idade = idade; } } 97 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Relacionamento Ao construir as abstrações, descobrimos que são poucas as classes que trabalham sozinhas. Em vez disso, a maioria das classes colaboram com outras classes de várias maneiras. Portanto, quando estamos modelando, devemos identificar as classes, atributos, métodos e relacionamentos. Existem alguns tipos principais de relacionamentos entre classes e objetos: • Herança • Associação • Agregação • Composição Veja a definição de relacionamento:
Um relacionamento é a conexão entre itens. É representado graficamente como um caminho, que tem tipos diferentes de linhas para distinguir os tipos de relacionamentos. Exemplo: Hierarquia de Classes SuperClasse
Pessoa
SubClasses
Terceiro
Professor Autônomo
Aluno
Pessoal Operacional
Funcionário
Professor
Pessoal Administrativo
Relacionamento: 1 - Pessoa é a SuperClasse de Terceiro, Aluno e de Funcionário, estas são subclasse de Pessoa. 2 - Terceiro e Funcionário são SuperClasse de Professor e Pessoal Administrativo e de Professor Autônomo e Pessoal Operacional respectivamente. E estas são subclasse de Terceiro e Funcionário.
98 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Herança Herança é o mecanismo pelo qual elementos mais específicos incorporam a estrutura e comportamento de elementos mais gerais, Uma classe derivada herda a estrutura de dados e métodos de sua classe “base”, mas pode seletivamente: • adicionar novos métodos • estender a estrutura de dados • redefinir a implementação de métodos já existentes Uma classe “pai” proporciona a funcionalidade que é comum a todas as suas classes derivadas, filhas, enquanto que uma classe derivada proporciona a funcionalidade adicional que especializa seu comportamento. Exemplo:
Curso Universitário extends Graduação
Pós-Graduação extends
Especialização
Extensão
Hierarquia de Classes
Podemos dizer que Graduação é tipo de Curso Universitário, assim como Curso de Especialização ou de Extensão.
99 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Herança Exemplo: Implementação- Pessoa, Aluno, Terceiro, Funcionário public abstract class Pessoa { protected String idPessoa; protected int idade; protected String nome; public Pessoa(String nome) { this.nome = nome; } public abstract String getNome(); public void setidPessoa() { } public abstract int getIdade(); public void setIdade(int idade) {} }
public class Terceiro extends Pessoa{ private int codigoTerceiro; public Terceiro(String nome) { super(nome); } public int getIdade() { return 0; } public String getNome() { return ""; }; }
public class Aluno extends Pessoa{ public Aluno(String nome) { super(nome); } public int getIdade() { return 0; } public String getNome() { return ""; }; }
public class Funcionario extends Pessoa{ private int codigofuncionario; public Funcionario(String nome) { super(nome); } public int getIdade() { return 0; } public String getNome() { return ""; }; }
Professor Professor Autônomo
Pessoal Operacional
Pessoal Administrativo
100 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Herança Exemplo de Herança: Implementação: ProfessorAutonomo, PessoalOperacional, Professor e Pessoal Administrativo Pessoa
Terceiro
public class ProfessorAutonomo extends Terceiro{ public ProfessorAutonomo( String nome) { super(nome); } }
public class PessoalOperacional extends Terceiro{ public PessoalOperacional( String nome) { super(nome); } }
Aluno
Funcionário
public class Professor extends Funcionario{ public Professor( String nome) { super(nome); } }
public class PessoalAdministrativo extends Funcionario{ public PessoalAdministrativo( String nome) { super(nome); } }
101 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Simulação de Herança Múltipla Podemos usar Interfaces para simular Herança Múltipla. O que é herança múltipla ? Herança múltipla é quando uma classe tem mais que uma Superclasse associada e que herde as características de todas elas. Veja a figura abaixo: Superclasse
<> Mamífero
Superclasse
Pessoa
Pessoa Física
Pessoa Jurídica
Relacionamento: Pessoa Física é tipo de pessoa, mas também é mamífero. Na linguagem Java: A Herança múltipla é somente permitida por contrato, neste caso a Mamífero é uma Interface, podemos dizer que é tipo especial de classe, que não pode ter métodos implementados, apenas as assinaturas. <> Mamífero Interface: O que é interface ? Podemos dizer que Interface é forma mais pura de abstração. A interface fornece um contrato entre ela a classe cliente, que pode ser classe concreta ou abstrata. Este contrato é garantia que todos os métodos assinados na interface serão implementados na classe cliente. Nota: Na interface também podemos declarar constantes (public static final).
Exemplo de Interface
interface IProduct { String getName (); double getCost (); }
102 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Herança Múltipla Exemplo: Implementação da classe Pessoa, PessoaFisica e PessoaJuridica e a interface Mamifero
public abstract class Pessoa { protected String idPessoa; protected int idade; protected String nome; public Pessoa(String nome) { this.nome = nome; } public abstract String getNome(); public abstract int getIdade(); public void setIdade(int idade){ }
public interface Mamifero { final int qdeOlhos=2; public int getQdePernas();
}
}
extends implements
extends
public class PessoaFisica1 extends Pessoa implements Mamifero { public PessoaFisica (String nome) { super(nome); } public int getQdePernas(){ return 2; } public String getNome(){ return “”; } public int getIdade(){ return 0; } }
public class PessoaJuridica1 extends Pessoa { public PessoaJuridica1(String nome) { super(nome); } public int getIdade() { return 0; } public String getNome() { return ""; }; }
Exercício: 1 - Podemos implementar a herança múltipla na Classe Pessoa? Por que ? 2 - Por que somos obrigado a assinar ou implementar os métodos da Interface Mamifero na classe PessoaFisica
103 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Transformando diagramas UML em código Java Herança Múltipla Simulação de Herança Múltipla Vejamos a codificação Java:
Métodos
public class Cliente { String nome; public String getNome() { return this.nome; } public void setNome(String nome) { this.nome = nome; } }
public class ClientePessoaJuridica extends Cliente { public ClientePessoaJuridica() { System.out.println("Nome: " + getNome()); } }
Atributo
public interface Pessoa { public boolean getDependente(int dependente); }
Assinatura do método
public class ClientePessoaFisica extends Cliente implements Pessoa { public ClientePessoaFisica() { setNome("Duke"); System.out.println("Nome: " + getNome()); System.out.println("Tem dependente: " + getDependente(0)); } public boolean getDependente(int dependente) { return (dependente>0)?true:false; } }
Implementação do método assinado na Interface Pessoa
104 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos A referência super A palavra super é usada para referenciar a super classe (classe pai), na verdade o construtor da classe hierarquicamente superior, podemos usa-lo também para fazer referência aos membros (atributos e métodos), da super classe. Desta forma temos uma extensão do comportamento. Exemplo: public class Empregado { private double salario;
Super classe
public Empregado(){ salario=0.00; } public double getSalario(){ return this.salario; } }
public class Gerente extends Empregado { private double bonus = .15; public Gerente(){ //referência ao Construtor super(); } public double getSalario(){ //referência ao método getSalario return super.getSalario() + (super.getSalario()*this.bonus); } }
Subclasse
105 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Associação Definição de Associação: Um relacionamento estrutural que descreve um conjunto de vínculos, em que o vínculo é uma conexão entre objetos; o relacionamento semântica entre dois ou mais classificadores que envolve as conexões entre seus objetos
Associação classe
classe U s u a ri o
public class Usuario {
S en ha
public class Senha {
public Senha m_Senha;
public Usuario m_Usuario;
Usuario() {
Senha() {
}
}
}
}
106 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Navegação Navegação Seta de navegação indica o direção do relacionamento.
Pedido
*
Pedido tem a responsabilidade de identificar quais são seus itens. Já os itens não tem a responsabilidade de saber a qual pedido que eles pertencem.
ItemPedido
Exemplo do código Java:
public class Pedido { public ItemPedido item[]; public Pedido() { }
public ItemPedido { public ItemPedido() { } }
}
107 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Rolename Definição de Role Name: É um identificador nome do papel da associação, podendo cada ponta ter um nome especifico. public class Empresa { public Pessoa Empregado; Empresa() { } }
P e sso a
+ E m p re g a d o 1
+ E m p re g a d o r
E m p re s a
1 ..*
public class Pessoa { public Empresa Empregador[]; Pessoa() { } }
As role name neste caso são usadas identificadores dos atributos (das classes).
108 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Agregação Definição de Agregação: Um forma especial de associação, que especifica o relacionamento parte-todo entre o agregado (o todo) e o componente (a parte). Veja o exemplo abaixo:
public class Roda { public Pneu pneu; Roda() { } Roda(int aro, String modelo) { pneu = new Pneu(aro,modelo) Roda
}
Todo roda
pneu Pneu
Parte de public class Pneu { public Roda roda; Pneu() { } }
109 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Composição Definição de Composição: Uma forma de agregação com propriedade bem-definida e tempo de via coincidente das partes pelo todo; as partes com multiplicidade não fixada poderão ser criadas após a própria composição, mas, uma vez criadas, vivem e morrem com elas; essas partes também podem ser removidas explicitamente antes da morte do elemento composto.
Cliente
Pedido
Dados do Pedido N• 19069 Cliente 1 – Cliente A Data: 01/01/2002
ItemPedido
Todo
Parte de um todo
Produto
It Descrição Qt Preço -------------------------------01 Produto A 10 12,40 02 Produto B 01 2,40 03 Produto C 11 5,60 04 Produto D 09 2,23
110 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Multiplicidade Definição de Multiplicidade: A especificação de uma faixa de números cardinais, que um conjunto pode assumir.
C lie n t e
P e d id o 1
Dados do Pedido N• 19069 Cliente 1 – Cliente A Data: 01/01/2002
0 ..*
Todo
1 1 ..* It e m P e d i d o
Parte de um todo
* 1 P ro d u to
It Descrição Qt Preço -------------------------------01 Produto A 10 12,40 02 Produto B 01 2,40 03 Produto C 11 5,60 04 Produto D 09 2,23
111 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Exemplo de implementação de Composição e multiplicidade public class Cliente {
public class Pedido {
public Pedido m_Pedido[];
public ItemPedido m_ItemPedido[]; Pedido() {
Cliente() {
}
}
}
}
C lie n t e
P e d id o 1
0 ..*
public class ItemPedido {
1
public Pedido m_Pedido;
1 ..* It e m P e d i d o *
public Produto m_Produto;
1 P ro d u t o
ItemPedido() { } public class Produto {
}
public ItemPedido m_ItemPedido[]; Produto() { } }
112 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Exemplo de modelo de classes
<> Produto
<> Cliente <> Vendedor
QtdeEmEstoque
SituacaoFinanceira
PercentualDeComissao 1
1 é realizada para
1
corresponde
1..*
* <> ItemDeVenda
<> Venda é composta de
é realizada por DataDaVenda *
1
QtdeVendida 1..*
<> VendaAPrazo
<> Prestacao compreende 1
1..*
DataDeVencimento ValorDaPrestacao
113 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Exercício public class NotaFiscal { public NotaFiscalLinha nflinha[] = new NotaFiscalLinha[3]; public static void main(String args[]) { NotaFiscal nf = new NotaFiscal(); nf.nflinha[0] = new NotaFiscalLinha("1010","Teste item 0", 5, 200.53); nf.nflinha[2] = new NotaFiscalLinha("2020","Teste item 1", 15, 50.43); nf.nflinha[1] = new NotaFiscalLinha("3030","Teste item 3", 25, 30.23); double valortotal=0; double quantidadetotal =0; for(int i=0;i< nf.nflinha.length ;i++) { System.out.print(nf.nflinha[i].item + " "); System.out.print(nf.nflinha[i].descricao + " "); System.out.print(nf.nflinha[i].quantidade + " "); System.out.print(nf.nflinha[i].valor + "\n"); quantidadetotal =+ nf.nflinha[i].quantidade; valortotal =+ nf.nflinha[i].valor * quantidadetotal; } System.out.println("Quantidade total..." + quantidadetotal); System.out.println("Valor total........" + valortotal); } }
Complete a classe que falta e faça o diagrama de classe correspondente com seus respectivos relacionamentos.
114 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Encapsulamento É uma proteção adicional dos dados do objeto de possíveis modificações impróprias, forçando o acesso a um nível mais baixo para tratamento do dados. Operações/métodos/interface pública
Dados/Atributos/propriedades privada
public class Empregado { private double double salario; salario; private
Classe Empregado e método getSalario
O atributo salario
O atributo salario somente poderá ter um valor atribuído ou alterado, através de método público.
public Empregado(){ salario=0.00; } public double getSalario(){ return this.salario; } }
Através do método getSalario, que tem modificador public, podemos manipular ou recuperar o valor do atributo salario.
Encapsulamento (“data hiding”) Encapsulamento é definido como uma técnica para minimizar dependências entre “módulos” através da definição de interfaces externas. Também conhecido como: O fenômeno da “caixa preta”
115 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Encapsulamento A interface (pública) de um objeto declara todas as operações permitidas (métodos) public class Empregado { private double salario; public Empregado(){ salario=0.00; } public double getSalario(){ return this.salario; } }
public class Gerente1 extends Empregado { private double bonus = .15; public double getSalario(){ //referência ao método getSalario return super.getSalario() + (super.getSalario()*this.bonus); } } Todo o acesso aos dados do objeto é feito através da chamada a uma operação (método) da sua interface. Encapsulamento - Benefícios - Segurança: Protege os atributos dos objetos de terem seus valores corrompidos por outros objetos. - Independência: “Escondendo” seus atributos, um objeto protege outros objetos de complicações de dependência de sua estrutura interna
116 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Polimorfismo Definição: “Polimorfismo” é uma operação que pode assumir múltiplas formas, a propriedade segundo o qual uma operação pode comportar-se diferentemente em classes diferentes” (Rumbaugh) O polimorfismo é o responsável pela extensibilidade em programação orientada a objetos.
overloading
Polimorfismo
overriding
Overloading: Possibilidade de reúso do nome do método para diferentes implementações, em tempo de execução, a aplicação, escolherá o método adequado para cada chamada, veja o exemplo. TesteSoma
Soma somar(int a, int b) somar(float a, float b) somar(char a, char b) somar(long a, long b))
Para cada tipo de dados existe um método, o reúso do nome do método é permitido, entretanto a lista de argumentos deve ser diferente, veja o exemplo acima: o método somar é definido várias vezes, entretanto com a lista de argumentos diferente, desta forma evitaremos problemas como ambigüidade.
117 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Polimorfismo Overrinding - Exemplo: Empregado setSalario() getSalario()
Engenheiro getSalario()
Gerente getSalario()
Secretária getSalario()
Diretor getSalario() O método setSalario é herdado da Superclasse (Empregado), entretanto para cada cargo (tipo de empregado) ele tem uma implementação diferente. Por exemplo: - Para Engenheiro e Secretária salário = (Dias Trabalhados x Valor hora) - Para Gerente salário = (Dias Trabalhados x Valor hora) + Bônus - Para Diretor salário = (Dias Trabalhados x Valor hora) + Bônus + Participação nos lucros. public class EmpregadoExemplo { private double salario;
}
public void setSalario(int diastrabalhados, double valorhora ){ this.salario = diastrabalhados * public class Engenheiro extends valorhora * 8; EmpregadoExemplo { } public static void main(String args[]) public double getSalario(){ { return this.salario; Engenheiro eng = new Engenheiro(); } eng.setSalario(22, 35.00); System.out.println(eng.getSalario()); } }
118 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Polimorfismo O método setSalario (continuação) public class GerenteExemplo extends EmpregadoExemplo { private double bonus = .15; public static void main(String args[]) { GerenteExemplo g = new GerenteExemplo(); g.setSalario(22, 35.00); System.out.println(g.getSalario()); } public double getSalario(){ return super.getSalario() + (super.getSalario()*this.bonus); } } public class Secretaria extends EmpregadoExemplo { public static void main(String args[]) { Secretaria sec = new Secretaria(); sec.setSalario(22, 35.00); System.out.println(sec.getSalario()); } } public class Diretor extends GerenteExemplo { private double lucros = 1000.00; public static void main(String args[]) { Diretor d = new Diretor(); d.setSalario(22, 35.00); System.out.println(d.getSalario()); } public double getSalario(){ return super.getSalario() + this.lucros; } }
119 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Programação Orientada a Objetos Polimorfismo Overrinding Uma subclasse pode mudar o comportamento herdado da Superclasse, ou seja, um método herdado poderá ser alterado. Veja o exemplo abaixo: Conta Bancária getSaldo()
Conta Corrente getSaldo()
Conta Poupança getSaldo()
Investimentos getSaldo()
O método getSaldo é herdado da Superclasse (Conta Bancária), entretanto para cada tipo de Conta ele tem uma implementação diferente. Por exemplo: - Para apurar o saldo da Conta Corrente saldo atual = (soma dos depósitos + saldo anterior) - saques Para a conta poupança seria saldo atual = (soma dos depósitos + saldo anterior + juros) - saques Para a conta de investimentos seria saldo atual = (soma dos aplicações + saldo anterior + juros) - resgates - ir As subclasse podem modificar o comporamento de método herdado da super classe, entretanto temos que seguir algumas regras: - Manter o mesmo nome do método - Manter o mesmo tipo de retorno - Manter a lista de argumentos.
Exercício: Faça a implementação das classes acima.
120 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
121 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Utilitários JavaDoc (Documentação) Javadoc É uma utilitário do JDK que gera a documentação dos programas java, geralmente em formato HTML. Localização JDK1.X/BIN/Javadoc. Sintaxe padrão: javadoc <arquivofonte.java> Opção -d -sourcepath -public -private
Valor path de saída path
Descrição Diretório onde será gerado os arquivos HTML Especifica o diretório raiz dos fontes ou dos Package Documenta apenas variáveis e métodos públicos Documenta todas as variáveis e métodos
Sintaxe: Javadoc [Opções] package/arquivo < package/arquivo> Exemplo: javadoc M inhasClasses.class Tags para Documentação: Usar: /** e */ Tag
Declaração
@see
Cria um link com outra página HTML Informa quais métodos estão ultrapassados Nome do Autor Documenta o parametro Documenta Exceções
@deprecated @author @param @throws @Exception @return
Documenta o returno (valor e tipo)
Class e Construtor Interface X X
M étodo Atributo X
X
X
X
X
X
X X
X X
X
X
122 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Utilitários JavaDoc (Documentação) Javadoc usage: javadoc [options] [packagenames] [sourcefiles] [classnames] [@files] -overview Read overview documentation from HTML file -public Show only public classes and members -protected Show protected/public classes and members (default) -package Show package/protected/public classes and members -private Show all classes and members -help Display command line options -doclet Generate output via alternate doclet -docletpath <path> Specify where to find doclet class files -1.1 Generate output using JDK 1.1 emulating doclet -sourcepath <pathlist> Specify where to find source files -classpath <pathlist> Specify where to find user class files -bootclasspath <pathlist> Override location of class files loaded by the bootstrap class loader -extdirs Override location of installed extensions -verbose Output messages about what Javadoc is doing -locale Locale to be used, e.g. en_US or en_US_WIN -encoding Source file encoding name -J Pass directly to the runtime system Provided by Standard doclet: -d Destination directory for output files -use Create class and package usage pages -version Include @version paragraphs -author Include @author paragraphs -splitindex Split index into one file per letter -windowtitle Browser window title for the documenation -doctitle Include title for the package index(first) page -header Include header text for each page -footer Include footer text for each page -bottom Include bottom text for each page -link Create links to javadoc output at -linkoffline Link to docs at using package list at -group :.. Group specified packages together in overview page -nodeprecated Do not include @deprecated information -nosince Do not include @since information -nodeprecatedlist Do not generate deprecated list -notree Do not generate class hierarchy -noindex Do not generate index -nohelp Do not generate help link -nonavbar Do not generate navigation bar -serialwarn Generate warning about @serial tag -charset Charset for cross-platform viewing of generated documentation. -helpfile Include file that help link links to -stylesheetfile <path> File to change style of the generated documentation -docencoding Output encoding name
123 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Utilitários JavaDoc (Documentação) Este exemplo exibe como implementar as tags de documentação que serão usados pelo utilitário Javadoc import java.util.List; /** * @author YourName * @version 2.0 */ public class DocExemplo { /** Declaração e atribuição de x. */ private int x; /** * This variable a list of stuff. * @see #getStuff() */ private List stuff; /** * O construtor inicia a variavel x. * @param int x */ public DocExemplo(int x) { this.x = x; } /** * Este método retorna algum valor. * @throws IllegalStateException se nenhum retorno for encontrado * @return A lista de valores */ public List getStuff() throws IllegalStateException { if ( stuff == null ) { throw new java.lang.IllegalStateException("Erro, sem valor"); } return stuff; } }
124 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Utilitários JavaDoc (Documentação) Exemplo: Para gerar a documentação digite o seguinte comando: c:\jdk1.3\bin\javadoc.exe -version -author DocExemplo.java... Depois chame a página principal “index.html” via Browser.
A figura acima é exemplo de documentação gerada pelo Javadoc.
125 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Utilitários Jar (Compactação, Agrupamento e Distribuição) Jar É um utilitário do JDK que faz agrupamento de arquivos em único, um arquivo .jar, geralmente com compressão. Localização JDK1.X/BIN/Jar. É usado também para fazer a distribuição de aplicação. Sintaxe: jar opções [meta-arq] nome-arquivo-destino [nome-arquivo-entrada] Argumento meta-arquivo
arquivo-destino arquivo-entrada Opções c t x x <arquivo> f v m o
Descrição Arquivo que contém as informações sobre o arquivo destino gerado. Este argumento é opcional, entretanto um arquivo meta-arquivo é gerado, default, META-INF/MANIFEST.INF Nome do arquivo jar. A extensão .jar não é automatica, deve ser especificada Nome dos arquivos a serem agrupados e/ou compactados Descrição Cria um novo arquivo Mostra o conteúdo de um arquivo existente Extrai todos os arquivos Extrai o arquivo especificado Indica que a operação (c,t ou x) será executada sobre o arquivo e não sobre a entrada/saída padrão. Mostra o status da operação (verbose) Suprime a geração do meta-arquivo Faz apenas o agrupamento, sem compactação. Deve ser utilizado para arquivos jar na variável de ambiente Classpath
Exemplos: jar cvf Classes.jar ClassA.class ClassB.class ClassC.class Para ver o conteúdo do arquivo jar, gerado: jar tvf Classes.jar Para extrair arquivo: Jar xvf Classes.jar Obs: a opção f é sempre utilizada em operações com arquivos.
Os arquivos Jar podem conter um aplicação inteira, por isso, ele é usado para fazer distribuição de aplicações. Também é bastante usado com componente Javabeans e Applet.
126 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Utilitários JDB (debug) É um utilitário do JDK, para fazer depuração de código. O primeiro passo é escrever um programa em Java e depois aplicar o depurador de código. Principais comandos: run (chama a máquina virtual), cont (continução) e quit ou exit (sai do JDB). Veja o exemplo abaixo: public class Hello { public static void main (String arg []) { String s = "world"; System.out.println("Hello " + arg[0]); } }
Esta classe Java requer um parâmetro que deve ser passando na chamada da classe, se o parâmetro não for informado, isto provocará uma exceção
O próximo passa é abrir uma janela “DOS”, chame o depurador jdb <nomedoprograma> <enter>. Então ferramenta será inicializada, veja abaixo toda a seqüência de depuração.
Por fim a exceção é localizada, ocorrerá na linha 5.
127 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Utilitários Javap (Desmontagem) Javap Faz a desmontagem de código ou descompilação. Sintaxe: javap Lista das principais opções: Argumento Descrição -c Desmonta o código -classpath <pathlist>
Especifica onde encontrar as classes
-help -public
Imprime as mensagens de ajuda Exibe somente as classe e membros públicos
-protected
Exibe somente as classe e membros protegidos
-package
Exibe somente as classe e membros pacotes (default) sem modificador Exibe somente as classe e membros privates
-private -s -verbose
Imprime tipo de assinatura interna Imprime a pilha e detalhes, tais como tamanho e etc. Código fonte
Código fonte, veja exemplo abaixo: public class Hello { public static void main (String arg []) { System.out.println("Hello”); } } Após compilar o programa fonte. Você poderá fazer a desmontagem do arquivo Hello.class. Para desmontar digite o comando: javap Hello Compiled from Hello.java public class Hello extends java.lang.Object { public Hello(); public static void main(java.lang.String[]); }
128 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
129 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Apêndices A - Convenção de Código no Java B - Sistema de Codificação Unicode C - Notação UML D - Applet
130 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Apêndice A Convenção de Código no Java Classe - Os nome da classes devem um substantivo e ter a primeira letra maiúscula o restante em minúsculo. Exemplo: public class Pessoa. No caso de nome composto o primeiro e segundo nome deve começar com letras maiúscula. Exemplo: public class PessoaFisica. Não devemos usar espaço em branco para separa os nomes e nem usar o sublinhado. Interfaces - Seguir as mesmas regras para nome de classe Métodos - Os nomes dos métodos podem ser verbos no infinitivo, devendo ser escrito em letras minúscula. Exemplo: public int calcular. Para nome composto usar a seguinte regra a o primeiro nome em minúsculo e a primeira letra do segundo nome em maiúsculo, veja o exemplo: public int calcularArea Constantes - Nomes de constantes devem escritos em letras maiúsculas. Exemplo: public static final VALOR Atributos e Variáveis - Os nome dos atributos e/ou variáveis devem ser escritos em letras minúsculas. Controles de Estruturas: Através de { } (chaves); *Espaços - Convencionou-se o uso de quatro espaços para indentações; Comentários - Vide o capitulo sobre documentação
Para maiores detalhes veja:http://java.sun.com/docs/books/jls/index.html
131 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Apêndice B Sistema de Codificação Unicode O que é Unicode? Unicode é sistema de codificação que fornece um número único para cada caracter, Não importa a plataforma, não importa o programa, não importa a língua.
Fundamentalmente, os computadores lidam com números. Gravam letras e outros caracteres na memória designando um número para cada um deles. Antes de o Unicode ser inventado, havia centenas de sistemas diferentes de codificação . Nenhum destes sistemas de codificação, no entanto, poderia conter caracteres suficientes: por exemplo, a União Européia por si só requer vários sistemas de codificação diferentes para cobrir todas a línguas. Mesmo para uma única língua como o inglês não havia sistema de codificação adequado para todas as letras, pontuação e símbolos técnicos em uso corrente. Estes sistemas de codificação são também conflitantes entre si. Em outras palavras, dois codificadores podem usar o mesmo número para dois caracteres diferentes ou usar números diferentes para o mesmo caracter. Qualquer computador em particular (especialmente os servidores) precisam suportar muitos codificadores diferentes; ainda assim toda as vezes que se passam dados entre codificadores ou plataformas diferentes, estes dados sempre correm o risco de serem corrompidos. O Unicode está mudando tudo isso! O Unicode fornece um único número para cada caracter, não importa a plataforma, não importa o programa, não importa a língua. O Padrão Unicode tem sido adotado por líderes do setor de informática tais como a Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys e muitos outros. O Unicode é necessário para padrões modernos tais como o XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML, etc. e é a maneira oficial de implementar o ISO/IEC 10646. É suportado por muitos sistemas operacionais, todos os browsers modernos e muitos outros produtos. O surgimento do Padrão Unicode Standard e a disponibilidade de instrumentos para suportá-lo está entre as tendências recentes mais significativas das tecnológicas mundiais de software. Incorporar o Unicode aos servidores de clientes, aplicações de faixas múltiplas e websites oferece uma redução significativa nos custos quando comparado ao uso de conjuntos de caracteres legacy. O Unicode possibilita que um único software ou website seja alvejado através de plataformas, línguas e países múltiplos sem a necessidade de reengenharia. Isto permite com que dados sejam transportados através de muitos sistemas diferentes sem que sejam corrompidos.
Mais informações: www.unicode.org
132 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice C Notação UML SÍMBOLO GRÁFICO
NOME
DIAGRAMAS EM QUE APARECE USUALMENTE
MODELO A QUE PERTENCEM
ASSOCIAÇÂO DE Diagrama de Classes, Diagrama de Componentes. AGREGAÇÃO
Classes de Objetos
Diagrama de Classes, ASSOCIAÇÂO DE COMPOSIÇÃO Diagrama de Componentes.
Classes de Objetos
Diagrama de Casos de Uso, ASSOCIAÇÂO DE Diagrama de Classes, DEPENDÊNCIA Diagrama de Componentes, Diagrama de Implantação. ASSOCIAÇÂO DE GENERALIZAÇÃO
ASSOCIAÇÂO REGULAR
Diagrama de Casos de Uso, Diagrama de Classes. Diagrama de Casos de Uso, Diagrama de Classes, Diagrama de Componentes, Diagrama de Implantação.
Componentes
Componentes
Caso de Uso Classes de Objetos Componentes Componentes Caso de Uso Classes de Objetos Caso de Uso Classes de Objetos Componentes Componentes
ATOR
Diagrama de Casos de Uso, Diagrama de Seqüência.
Caso de Uso
CASO DE USO
Diagrama de Casos de Uso.
Caso de Uso
Caso de Uso
Nome da Classe Atributos
CLASSE
Diagrama de Classes.
Classes de Objetos
Operações
Nome do Componente
COMPONENTE
Diagrama de Componentes
Diagrama de Estados, Nome do Estado
ESTADO
Diagrama de Atividades. Diagrama de Estados,
Componentes
Classes de Objetos Caso de Uso Classes de Objetos
ESTADO FINAL Diagrama de Atividades
Caso de Uso
133 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice C Notação UML ESTADO INICIAL Nome da “Interface”
Classes de Objetos Caso de Uso
<> Nome da “Interface”
ou
Operação1 () Operação2 () Operação3 ()
“INTERFACE”
Diagrama de Componentes
Componentes
INTERVALO DE EXECUÇÃO DE OPERAÇÂO
Diagrama de Seqüência
Caso de Uso
MENSAGEM DE RETORNO
Diagrama de Seqüência
Caso de Uso
Diagrama de Seqüência
Caso de Uso
Diagrama de Seqüência
Caso de Uso
Diagrama de Implantação
Componentes
MENSAGEM E CHAMADA DE OPERAÇÂO “Síncrona” MENSAGEM E CHAMADA DE OPERAÇÃO “Assíncrona” NÓ
NOTA
texto
identificador:Classe
Diagrama de Estados, Diagrama de Atividades.
ou
Nome do Pacote
:Classe
Em qualquer diagrama
Diagrama de Seqüência,
Caso de Uso
Diagrama de Atividades
Caso de Uso
OBJETO
PACOTE
TRANSIÇÃO DE ESTADO
AUTODELEGAÇÃO
Em qualquer diagrama em que é necessário representar um conjunto de coisas que devem estar agrupadas para efeito de uma organização apropriada
Diagrama de Estados,
Classes de Objetos
Diagrama de Atividades
Caso de Uso
Diagrama de Seqüência
Caso de Uso
134 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Applets
135 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice D
Applet O que é um Applet? Applet são pequenos programas Java que são executado através de um browser. Opcionalmente podemos usar o Appleviewer (visualizador de Applet do JDK) para executá-los. Para um browser executar um applet é necessário que ele esteja habilitado para tal tarefa, ou seja tenha uma máquina virtual embutida ou um plug-in. Um applet é carregado por uma página HTML, através de utilização do tag <APPLET>. A figura abaixo exibe as etapas de construção de um Applet. 1 public class Tapplet extends Applet {
4
2 Compilação
}
Código fonte (java)
Bytcode (java)
..
3 Arquivo HTML Principais m étodos: Método Descrição Init() Executado apenas uma vez após a carga do applet pelo browser start() Executado após init() e cada vez que o applet se torna ativo. stop() Final de execução do applet, toda vez o applet for desativado destroy() Executado toda vez que applet for complementamente descartado, utilizado para liberar recursos alocados pelo applet, quando ativo. paint(graphics g) Executado toda vez que o applet for redesenhado, algo similar ao "refresh"
136 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice D
Applet Principais tag HTML: Tag <APPLET CODEBASE= path Code = "NomeClass Applet.class" Width= largura Heigth= alttura Archive="NomeClass Applet.jar" <Param name = "nome" Value = "valor">
Descrição Especifica o endereço URL do diretório onde o arquivo .class pode ser encontrado Especifica o nome da classe que vai ser carregada Especifica a largura do applet (em pixel) Especifica a altura do applet (em pixel) Especifica o nome do arquivo jar onde estão as classes utilizadas pelo Applet. Passagem de parâmetros para Applet. onde name é nome do parâmetro e value o valor. Fecha a tag Applet
Exemplo: O exemplo demonstra um arquivo HTML com tags Applet. A chamada do Applet fica embutido dentro arquivo. Hello Applet <APPLET CODE="Hello.class" WIDTH=300 HEIGHT=300> |
A tag responsável por chamar o Applet
137 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice D
Applet O exemplo mostra um arquivo Java Applet. Note que este arquivo tem alguns métodos diferente dos demais programas Java, por exemplo, a ausência do método main, ao invés disto, esta assinado o init().
API
Os métodos
import java.awt.*; import java.applet.*; public class TestApplet extends Applet { public void init() { System.out.println("Executando o Init"); } public void start() { System.out.println("Executando o Star"); } public void stop() { System.out.println("Executando o Stop"); } public void destroy() { System.out.println("Executando o destroy"); } }
138 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice D
Applet Este é um exemplo completo. São exibidos os código do arquivo Java Applet e do arquivo HTML. Para executar chame através do Browser ou use AppletViewer.
Arquivo: Hello.html Hello <APPLET CODE="Hello.class" WIDTH=100 HEIGHT=100> |
Arquivo: Hello.java import java.awt.Graphics; import java.applet.Applet; public class Hello extends Applet { private int paintCount; public void init() { paintCount = 0; } public void paint(Graphics g){ g.drawString("Hello", 25, 25); ++paintCount; g.drawString("Quantidade de vezes paint: " + paintCount, 25, 50); } }
139 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice D
Applet Este é um exemplo completo. São exibidos os código do arquivo Java Applet e do arquivo HTML. Para executar chame através do Browser ou use AppletViewer. Arquivo: TestApplet2.html Hello <APPLET CODE=" TestApplet2.class" WIDTH=100 HEIGHT=100> |
Arquivo: TestApplet2.java import java.awt.event.*; import java.awt.*; import java.applet.*; public class TestApplet2 extends Applet implements Runnable,ActionListener { TextField b1,b2; String x; Thread k; public void init() { setLayout(new FlowLayout()); b1 = new TextField(10); b2 = new TextField(10); b1.addActionListener(this); b2.addActionListener(this); add(b1); add(b2); k = new Thread(this); k.start(); }
140 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice D
Applet Exemplo: continuação..
Arquivo: TestApplet2.java public void paint(Graphics g) { if ( x != null) g.drawString(x,50,50); } public void run() { int cont = 0; while(true) { cont = cont + 1; b1.setText(""+cont);} } public void stop() { k.stop(); } public void start() { k.resume(); } public void actionPerformed(ActionEvent e) { x = b2.getText(); repaint(); } }
141 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico
Apêndice D
Applet Exemplo: Este outro exemplo demonstra como passar parâmetro para Applet a partir de um arquivo HTML. Arquivo: Parameters.html
Passagem de parâmetros
Arquivo: Parameters.class import java.applet.Applet; import java.awt.Graphics; public class Parameters extends Applet { private String toDisplay; private int speed; public void init() { String pv; pv = getParameter("speed"); if (pv == null){ speed = 10; } else { speed = Integer.parseInt (pv); } toDisplay = "Speed given: " + speed; }
Captura os parâmetros
public void paint(Graphics g) { g.drawString(toDisplay, 25, 25); } }
142 © Copyright e-tecnologia.com, 2002
Linguagem de Programação JAVA JB50 Java Básico Notas
Você encontrou algum problema neste documento avise ao autor:[email protected] Qualquer contribuição será aceita, pois, nosso objetivo é melhorar cada vez mais este trabalho.
Todas as marcas e/ou produtos citados neste trabalho são de uso exclusivo de seus proprietários ou detentores.
143 © Copyright e-tecnologia.com, 2002