• Nenhum resultado encontrado

Curso de Tecnologia em Análise e Desenvolvimento de Sistemas. Desenvolvimento de Software Cliente/Servidor (CMP1119 / CMP1138)

N/A
N/A
Protected

Academic year: 2021

Share "Curso de Tecnologia em Análise e Desenvolvimento de Sistemas. Desenvolvimento de Software Cliente/Servidor (CMP1119 / CMP1138)"

Copied!
15
0
0

Texto

(1)

REVISÃO 01

01. O COMPONENTE JOptionPane

A linguagem Java possui o pacote javax.swing que é uma biblioteca que fornece

diversos componentes gráficos para o desenvolvimento de aplicações desktop. Vamos

conhecer, por enquanto, apenas o componente JOptionPane que é responsável por

apresentar janelas de diálogo, tanto para entrada de dados do tipo String quanto para

apresentar mensagens.

Para utilizar JOptionPane é necessário utilizar uma das seguintes declarações de

import:

import javax.swing.JOptionPane; ou import javax.swing.*;

A segunda opção sobrecarrega, sem necessidade, a aplicação com todos os

componentes da biblioteca.

01.01. JANELA DE DIÁLOGO PARA ENTRADA DE DADOS

Formato:

String variável = JOptionPane.showInputDialog(null,mensagem,título,icone);

Onde:

mensagem = String da mensagem que aparecerá junto à caixa de texto

título = título que aparecerá na barra de titulo da janela

icone = valor inteiro variando de 0 a 3 que apresenta um icone informativo

Observe a figura a seguir.

(2)

Figura 01.01

A figura anterior ilustra duas linhas de código: a primeira declara s como String

e a segunda faz s receber o conteúdo resultante da expressão do lado direito do sinal de

atribuição (sinal de = ). A expressão do lado direito é um JOptionPane com

showInputDialog que corresponde a entrada de dados. Note que a String Digite um

nome é a mensagem que aparece junto à caixa de texto de cada uma das janelas de

exemplo. A String Entrada de Dados é o título de cada uma das janelas. O digito 1, no

final da expressão, é a representação de um dos 4 ícones (de 0 a 3) que podem ser

visualizados na janela de diálogo como ilustra a figura anterior. O conteúdo digitado pelo

usuário na caixa de texto da janela é armazenado na string indicada no lado esquerdo

da atribuição após a confirmação do botão OK.

01.02. JANELA DE DIÁLOGO PARA MENSAGENS

Formato:

JOptionPane.showMessageDialog(null,mensagem,título,icone);

Onde:

mensagem = String da mensagem que será apresentada na janela

título = título que aparecerá na barra de titulo da janela

(3)

Observe a figura a seguir:

A janela da mensagem apresenta apenas o ícone correspondente ao 1 da

expressão do JOptionPane. A mensagem é apresentada em 3 linhas, pois a string s

recebe uma concatenação de conteúdos, conforme está ilustrado no código da figura

anterior.

02. CODIFICAÇÃO DE CLASSES E PACOTES - DICAS

02.1. Sempre mantenha os dados privados. Isso permite evitar modificações indevidas e torna mais fácil detectar erros.

02.2. Sempre inicialize os dados. Evite que o Java determine os valores padronizados para seus dados (String = null, inteiro=zero, boolean=false, objetos=null).

02.3. Nem todos os campos necessitam de métodos acessadores e modificadores 02.4. Faça com que os nomes das suas classes, dos seus atributos e dos seus métodos refletirem suas respectivas responsabilidades.

02.5. Faça com que uma classe tenha forte COESÃO, ou seja, que cumpra o seu verdadeiro papel no sistema. Classes com várias responsabilidades não são desejáveis. 02.6. Crie suas classes em pacotes específicos dentro da aplicação. O nome de um pacote deve ser único. A Sun recomenda que você utilize o seu nome de domínio da Internet ou o nome de domínio da Internet da sua empresa ( que é único ) escrito ao contrário. Em seguida, complemente com um nome de subpacote. Exemplo: com.material_td2.pucgo.util

(4)

Qualquer aplicação orientada a objeto possui, geralmente, um programa principal, através do qual efetua-se a chamada aos demais programas (classes).

Essas chamadas são, na maioria das vezes, instanciações das demais classes.

Considerando que a linguagem de programação seja Java, então o programa principal é o único programa da aplicação que possui o método main.

Dessa forma, o programa principal ficará encarregado de instanciar as demais classes (programas) da aplicação e executá-las.

Cada classe instanciada pela classe principal, por outro lado, executará um método em seu interior que, ao ser finalizado, retornará à linha seguinte no programa principal.

Observe na figura a seguir a instanciação das classes ProgramaA e ProgramaB. Foram criados objetos para cada um dessas classes no código do ProgramaPrincipal.

Figura 03.01

Assim, suponha que você deseja criar um programa que apresente o nome e os telefones de uma determinada pessoa, sendo que uma pessoa poderá ter nenhum, um ou vários telefones.

Para essa hipotética solução, você deverá criar uma classe principal (que denominaremos de Principal), uma classe Pessoa e uma classe Fones.

A classe Pessoa armazenará os dados de uma determinada pessoa em um determinado momento no programa.

(5)

Como uma Pessoa poderá possuir um, nenhum ou mais de um telefone, teremos que incluir um atributo na classe pessoa de tal forma que esse atributo deverá ser uma lista específica de telefones, que denominaremos de listaFones.

Assim, esse atributo deverá ser uma coleção que deve comportar o tipo Fones.

Lembrando que uma coleção (ArrayList, Vector, List e outros) armazena objetos e possui métodos como add (adiciona elementos na lista), remove (remove certo elemento da lista), size (que retorna a quantidade de elementos da coleção) e outros, para manipular os seus elementos.

Observe a representação do diagrama de classes correspondente.

Figura 03.02

O diagrama da anterior destaca alguns relacionamentos entre as classes.

Observe que a classe Pessoa se relaciona com a classe Fones através de uma linha contínua que representa uma ligação denominada de associação.

Esse é um exemplo de um, entre vários, relacionamentos que podemos ter entre duas ou mais classes.

No referido diagrama a classe Pessoa se relaciona com a classe Fones de tal forma que uma pessoa poderá ter nenhum ou vários telefones.

Isso é indicado no relacionamento através da multiplicidade 0..* (ao lado da classe Pessoa). Além disso, nesse caso, esse relacionamento, denominado de “associação”, possui uma seta apontando para a classe Fones, indicando que só a classe Pessoa “enxerga” a classe Fones. Como regra geral, uma associação entre duas classes exige que uma classe encapsule uma instância da outra classe e vice-versa.

Como a classe Pessoa possui uma associação que aponta para a classe Fones, então apenas a classe Pessoa terá como atributo uma instância da classe Fones.

(6)

Esse atributo, no entanto será uma coleção de telefones, visto que uma pessoa poderá ter nenhum ou vários telefones.

Dessa forma, a classe Pessoa possui o atributo listaFones<Fones> do tipo Vector, que, nesse caso, é uma coleção de objetos do tipo Fones.

Então, de acordo com a figura 03.02, temos os seguintes trechos de código para cada uma das classes do diagrama:

Código da classe Fones.java

(7)

A classe Pessoa possui o atributo listaFones do tipo Vector, que corresponde ao relacionamento entre as classes Pessoa e Fones.

Código da classe Principal.java

Observe que as outras duas classes (Pessoa e Fones) foram instanciadas dentro do programa principal.

Observe que foi criada a variável aux, do tipo Vector, para armazenar as instâncias dos telefones de uma pessoa.

Essa variável, posteriormente, na linha 19, é armazenada no atributo listaFones da class Pessoa. Observe atentamente o método mostraPessoas. Qualquer dúvida em relação código desse método, procure o professor.

Como explicado anteriormente, as classes Pessoa e Fones são denominadas de beans, que são classes que possuem um método construtor vazio e os métodos getXxx e setXxx (denominados de métodos getters e setters).

O Xxx no nome representa o nome de cada atributo da classe correspondente.

Um método getXxx (denominado de método acessador) retorna o valor do atributo correspondente.

Um método setXxx (denominado de método modificador) atribui ou altera o conteúdo do atributo correspondente.

(8)

Considerando que a classe Pessoa, do exemplo anterior, possui os atributos cpf, nome e listaFones, então ela tem os seguintes métodos getters/setters:

getCpf(), setCpf(), getNome(), setNome(), getListaFones() e setListaFones().

A utilização dos métodos getXxx e setXxx não é um padrão. É apenas uma recomendação dos profissionais da Sun/Oracle para facilitar o uso de certos frameworks. A classe Pessoa é considerada um Bean.

04. PROCESSANDO INFORMAÇÕES DE ARQUIVOS

Vamos considerar que você necessite ler informações de um arquivo na linguagem Java. Para isso, necessita-se de utilizar o import das seguintes bibliotecas do Java:

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

As duas primeiras se relacionam com preparação e leitura de arquivos e a terceira importação permite tratar exceções através de try/catch.

Um bloco try permite ao programador executar instruções. Caso ocorra algum erro, este será desviado para o bloco catch. Por enquanto, você não precisa entender detalhes de try/catch. Isso será visto posteriormente.

Vamos ver um exemplo na prática.

Abra o Eclipse e crie o projeto Java denominado de Arquivo01. Em seguida, crie o pacote controle.

Em seguida, crie a classe Java Principal.java dentro do pacote controle. Com isso, sua aplicação terá a seguinte estrutura:

(9)

Como já citado anteriormente, é salutar utilizar pacotes em uma aplicação. Cada pacote deve armazenar classes que possuem uma mesma finalidade dentro da aplicação.

Nesse exemplo, criamos apenas o pacote controle que possui o programa Principal. Para essa aplicação utilizaremos apenas esse pacote.

Em seguida, utilize o bloco de notas e crie um arquivo com o nome MeuArquivo.txt e insira as seguintes linhas nesse arquivo:

linha 01 linha 02 linha 03 Fim.

Grave esse arquivo na unidade c do seu computador.

Abra o arquivo Principal.java e digite as seguintes linhas nessa classe.

Observe que o programa utiliza try/catch que permitem o tratamento de erros. O bloco try se inicia na linha 13 e termina na linha 20.

O bloco catch inicia na linha 22 e termina na linha 23.

Caso ocorra algum erro dentro do bloco try, ocorrerá um desvio para o bloco catch que, no exemplo, não possui nenhuma instrução.

Não se preocupe com os detalhes de try/catch ainda. Posteriormente explicaremos essas estruturas com mais detalhes.

(10)

Salve a aplicação e execute-a. Será apresentada uma tela de mensagem semelhante à indicada a seguir.

Figura 04.02

Observe a saída das informações.

Analise o código e procure compreendê-lo conforme o resultado de saída apresentado pelo JOptionPane.

Exercício sobre leitura em arquivo texto e complementos. (O Enunciado será apresentado pelo professor)

05.

VALIDAÇÃO DE DADOS

05.01. Introdução

Qualquer Interface Gráfica do Usuário (GUI) necessita de validações. Considere, por exemplo, uma interface de entrada de dados com o JOptionPane. Neste caso, o usuário irá digitar em uma caixa de texto alguma informação. No entanto, essa caixa de texto aceita qualquer tipo de caractere, visto que ela aceita conteúdo String. Assim, se o usuário for solicitado a digitar uma data, esta deve ser verificada pela aplicação, pois o usuário poderá digitar uma data inválida como 30/02/2013. Neste caso, o programador deverá estabelecer validação específica para esse tipo de digitação. O mesmo poderá ocorrer se o usuário for solicitado para informar apenas dígitos de um CPF. Neste caso, o programador deverá criar uma validação para verificar se o usuário informou só dígitos para o CPF.

Portanto, uma GUI permite facilidades de interação entre o usuário e o sistema. Por outro lado, uma GUI necessita de validações específicas para garantir que o usuário informe dados corretos para que permitam uma atualização confiável no banco de dados.

05.02. Exceções – Uma noção

Uma exceção é uma indicação de um problema que ocorre durante a execução de um programa. Lançar uma exceção é uma maneira eficaz para indicar que não é capaz de atender a

(11)

uma solicitação de um programa. O não tratamento de uma exceção fará com que o programa termine imediatamente.

Uma exceção verificada é uma subclasse da classe Exception.

Para se capturar uma exceção em um método deve-se utilizar uma instrução try combinada com catch, no seguinte formato:

try{

//instruções que serão verificadas }

catch(Exception e1) {

//informe e se recupere da exceção }

finally{...}

Quando ocorre uma exceção dentro do bloco try, a execução é então executada dentro do bloco catch correspondente, pois pode-se ter mais de um catch. Depois que o fluxo é completado pelo catch, o controle não retorna para a instrução que causou a exceção. Nesse caso, o controle continua abaixo do último catch. Além do catch há também o bloco finally, que é opcional. Se esse bloco for usado, ele será executado, ocorrendo ou não uma exceção. Em resumo, temos:

try: é usado para um bloco de código no qual possa ocorrer alguma exceção. catch: serve para tratar o possível erro.

finally:sempre será executado depois de try/catch.

Assim, try/catch servem para informar à Java Virtual Machine o que fazer quando uma exceção ocorrer. Os blocos catch devem aparecer após o try, sendo que entre esses blocos não deve possuir nenhuma instrução.

Como pode ocorrer a utilização de diversos blocos catch e como todas as exceções são vinculadas à classe Exception, deve-se, caso ocorra necessidade, inserir uma exceção geral no último catch, deixando as especificas antes desta.

Exemplo:

try{...}

(12)

catch(ArithmeticException e2){...} catch(NullPointerException e3){...} ...

O trecho anterior destaca algumas exceções, como NumberFormatException (trata formatação de números), NullPointerException (erro de referência a uma instância inexistente) e ArithmeticException(erros em processamentos aritméticos) e outros.

05.03. Validando dados numéricos

Ao receber a entrada de uma string via JOptionPane deve-se efetuar a conversão da string para um valor numérico (int, float, etc.) dentro de try/catch, tratando a exceção de forma correta.

05.04. Gerando números randômicos

A geração de números em Java ás vezes se torna importante, como é caso de se criar valores para testes em um programa ou, até mesmo, criar cartelas para mega-sena. Em Java, a geração de números ocorre através da classe Random que, naturalmente, gera números fracionários entre 0 e 1.Se você desejar gerar números inteiros deverá utilizar alguma operação sobre o número para conseguir o resultado desejado.

(13)

Para gerar números utiliza-se da classe Random que faz parte do pacote Math. Para referenciar Random, basta utilizar Math.Random. No trecho de código anterior, a linha 11 destaca a geração de um número randômico que é armazenado na variável double d.

Nesse caso, será gerado um número fracionário entre 0 e 1. Na linha 15 temos a seguinte instrução:

int i = (int) (Math.Random()*10) + 1;

Neste caso, um número randômico será gerado. Em seguida, será multiplicado por 10 e adicionado a 1 e convertido para inteiro. Esse é um exemplo de geração de números irão variar entre 1 e 10. Visto que:

a)se for gerado um 0.0 * 10 = 0, adicionado a 1 implicará no resultado 1. b)se for gerado um 0.9... * 10 = 9, adicionado a 1 implicará no resultado 10.

A linha 19 gerará números entre 50 e 149. Caso você deseje gerar números em intervalos específicos deverá analisar a expressão correta que proporcionará os resultados desejados.

(14)

Com isso você poderá gerar, além de números, uma sequência de letras ou de outros caracteres, bastando para isso utilizar o código ASCII.

Como o homem utiliza muitos símbolos (letras, dígitos, ponto, chaves, colchetes,

parênteses e diversos outros) foi necessário criar um padrão de codificação desses

símbolos e caracteres para o computador. Então, foi criado o PADRÃO ASCII (ou TABELA

ASCII). Essa tabela apresenta uma relação de 256 símbolos que são utilizados por

computadores e outros dispositivos eletrônicos, como é ilustrado a seguir:

Note que cada símbolo possui um código que varia de 0 a 255. O termo ASCII é o

acrônimo de

“American Standard Code for Information Interchange”, que, em português,

significa "Código Padrão Americano para o Intercâmbio de Informação".

(15)

Nota: Em relação à randomização, há a opção de se utilizar a classe Random existente em java.util:

Random a = new Random(); int numero = a.nextInt(10);

Neste caso, deve-se instanciar a classe Random. Enquanto que Math.Random() acessa diretamente esse recurso sem necessitar de instanciação.

Referências

Documentos relacionados

forficata recém-colhidas foram tratadas com escarificação mecânica, imersão em ácido sulfúrico concentrado durante 5 e 10 minutos, sementes armazenadas na geladeira (3 ± 1

The efficiency of extraction of phenolic compounds with water was demonstrated once more by the fact that the aqueous extract, under the same conditions of concentration and reaction

Para a liga 30%Fe65Nb70%Cu foi possível observar uma distribuição de partículas de Fe65Nb ao longo de toda a matriz de Cu e não foi possível notar o processo difusão entre

Esta pesquisa tem como finalidade analisar como a cultura popular esta sendo trabalhada na formação profissional de Educação Física no Brasil, a partir de uma pesquisa

Dando continuadad a los cambios políticos que ocurrierón en Venezuela a partir de 1999. El Plan de Desarrollo Económico y Social de la Nación 2007-2013 contiene

Para atingir este fim, foram adotados diversos métodos: busca bibliográfica sobre os conceitos envolvidos na relação do desenvolvimento de software com

Em relação ao perfil dos pesquisados, verifica-se que os respondentes são pessoas altamente qualificadas (60,8% tem formação lato sensu/MBA) e que esse não é

Fita 1 Lado A - O entrevistado faz um resumo sobre o histórico da relação entre sua família e a região na qual está localizada a Fazenda Santo Inácio; diz que a Fazenda