24
Métodos Métodos Estáticos Estáticos Pacotes Pacotes Manipulação de Manipulação de Data e Hora Data e Hora Professor: Armando Professor: Armando Hage Hage Fundamentos em Java Fundamentos em Java

Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Embed Size (px)

Citation preview

Page 1: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Métodos EstáticosMétodos Estáticos PacotesPacotes Manipulação de Manipulação de Data e HoraData e Hora

Professor: Armando HageProfessor: Armando Hage

Fundamentos em JavaFundamentos em Java

Page 2: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Métodos e Campos Métodos e Campos StaticStatic(estáticos)(estáticos)

As classes podem ter tanto campos estáticos quanto As classes podem ter tanto campos estáticos quanto métodos estáticos. Os campos estáticos não mudam de métodos estáticos. Os campos estáticos não mudam de uma instância de classe e outra,nem os métodos uma instância de classe e outra,nem os métodos estáticos de uma classe operam em uma instância.estáticos de uma classe operam em uma instância.

Os métodos Os métodos staticstatic só podem ser chamar outros métodos só podem ser chamar outros métodos staticstatic diretamente e não podem se referir a diretamente e não podem se referir a thisthis ou ou supersuper de nenhuma maneira.de nenhuma maneira.

Declarando uma variável static, você estará criando uma Declarando uma variável static, você estará criando uma variável global.variável global.

Ex.: Métodos: double x = Console.readDouble();Ex.: Métodos: double x = Console.readDouble();

double x = Math.pow(3,0.1);double x = Math.pow(3,0.1);

Campos:Math.PI Campos:Math.PI System.out System.out

Page 3: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Pacotes São recipientes para classes usados com a São recipientes para classes usados com a

finalidade de manter o espaço do nome de classe finalidade de manter o espaço do nome de classe compartimentalizado.compartimentalizado.

Os pacotes são armazenados de maneira Os pacotes são armazenados de maneira hierárquica e são importados explicitamente para hierárquica e são importados explicitamente para novas definições de classe.novas definições de classe.

São convenientes para organizar o trabalho e São convenientes para organizar o trabalho e separá-lo de bibliotecas outras bibliotecas.separá-lo de bibliotecas outras bibliotecas.

A biblioteca padrão Java é distribuída em A biblioteca padrão Java é distribuída em inúmeros pacotes.Ex.: java.lang, inúmeros pacotes.Ex.: java.lang, java.util,java.net, e vários outros.java.util,java.net, e vários outros.

Um motivo para se usar pacotes é garantir e Um motivo para se usar pacotes é garantir e exclusividade dos nomes dos pacotes.exclusividade dos nomes dos pacotes.

Page 4: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Pacotes As classe públicas de um pacote podem ser

acessadas de duas maneiras.Fornecendo o nome completo do pacote.Java.util.Date d =new Date()

Usando a palavra importimport para referenciar a classe do pacote sem informar nomes completos.import java.util.Date;Date d=new Date();

Pode-se importar um pacote inteiro usando-se o *.import java.util.*;

Page 5: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Definindo um Pacote package NomeDoModulo;package NomeDoModulo; Indica ao compilador que as classes Indica ao compilador que as classes

declaradas no arquivo pertencem ao módulo declaradas no arquivo pertencem ao módulo NomeDoModulo.NomeDoModulo. As classes de um módulo podem ser declaradas As classes de um módulo podem ser declaradas

em mais de um arquivo.em mais de um arquivo. Todas as classes (arquivos “.class”) de um Todas as classes (arquivos “.class”) de um

pacote devem estar agrupadas em um diretório pacote devem estar agrupadas em um diretório com mesmo nome do módulo.com mesmo nome do módulo.

Importando classes de um pacote...Importando classes de um pacote... import NomeDoPacote.NomeDaClasseimport NomeDoPacote.NomeDaClasse import NomeDoPacote.*import NomeDoPacote.*

Page 6: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Exemplos em Java int i = corejava.Console.readInt()corejava.Console.readInt(); java.util.GregorianCalendarjava.util.GregorianCalendar hoje = new

java.util.GregorianCalendarjava.util.GregorianCalendar; Forma mais simples:

import corejava.*; import java.util.*; import java.corejava.Console;

É mais simples importar todas as classe de um pacote. Não ocorre perda de tempo na compilação ou aumento no tamanho do arquivo.

Page 7: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Criando um Pacote Desenvolva uma classe chamada Console.java que

deverá pertencer a um pacote chamado package console, responsável pela entrada de dados via cia console.

Crie um novo pacote chamado meupacote, contendo três classes(Ponto.javaPonto.java,Equacao.javaEquacao.java,Triangulo.javaTriangulo.java), contendo as definições de atributos e métodos de cada uma das classe.

Faça uma classe que acesse as classe contidas em cada uma dos pacotes.

Page 8: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Exemplo package Consolepackage Console;//Definição de um pacote;//Definição de um pacote

import java.io.*;import java.io.*;

import java.lang.*;import java.lang.*;

public final class Console{public final class Console{

//Le somente valores reais//Le somente valores reais

public static double leDouble(){public static double leDouble(){

try{BufferedReader entra=new BufferedReader(new try{BufferedReader entra=new BufferedReader(new InputStreamReader(System.in));InputStreamReader(System.in));

String s = entra.readLine();String s = entra.readLine();

return Double.parseDouble(s);return Double.parseDouble(s);

}catch(IOException e){}catch(IOException e){

System.out.println("Erro na entrada"); ...System.out.println("Erro na entrada"); ...

Page 9: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Exemplo(Ponto.java)(Ponto.java)

package geopackage geo;;

public class Pontopublic class Ponto

{float x,y;{float x,y;

public Ponto(float ax,float ay)public Ponto(float ax,float ay)

{this.x=ax;this.y=ay;{this.x=ax;this.y=ay;

}}

public float retornaXpublic float retornaX

............

package geo;package geo;

import java.io.*;import java.io.*;

public class Equacao{public class Equacao{

double a,b,c;double a,b,c;

//Construtor default//Construtor default

Equacao(){}Equacao(){}

//Construtor e seus parametros//Construtor e seus parametros

Equacao(double a,double b,double c){Equacao(double a,double b,double c){

this.a=a;this.b=b;this.c=c;this.a=a;this.b=b;this.c=c;

}}

..........

package geo;

import java.io.*;

import console.*;

public class Triangulo{

double base,altura;double area;

public Triangulo(){}...

Page 10: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Exemploimport java.io.*;import java.io.*;import java.lang.*;import java.lang.*;import console.*;import console.*;import geo.*;import geo.*;

public class Principal{public class Principal{public static void main(String args[])throws public static void main(String args[])throws IOException{IOException{

String continua="SIM";String continua="SIM";int escolha;int escolha;

while(continua.equals("SIM")){while(continua.equals("SIM")){

Page 11: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Como o compilador Localiza os Pacotes

O compilador JDK e a maioria dos outros compiladores Java armazenam os pacotes em subdiretórios do sistema de arquivos ou dentro de arquivos compactados com ZIPs ou JARs.

O caminho para se chegar a um pacote e através da variável de ambiente CLASSPATH. Ex.:Cria um caminho: c:\armando\meuspacotes.

Com os fontes (Ponto.java, Equacao.java, Triangulo.java e Principal.java), no diretório c:\fontes. Já a classe Console poderia ficar em c:\console.

Page 12: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Como o compilador Localiza os Pacotes

Para criar o pacote:Para criar o pacote:c:\console\javac –d c:\armando\meuspacotes Console.javac:\fontes\javac –d c:\armando\meuspacotes Ponto.javac:\fontes\javac –d c:\armando\meuspacotes Equacao.javac:\fontes\javac –d c:\armando\meuspacotes Triangulo.java Com isso os arquivos (Ponto.class, Equacao.class e

Triangulo.class) serão direcionados para:c:\armando\meuspacotes\geoc:\armando\meuspacotes\geo. O arquivo Console.class será

criado em c:\armando\meuspacotes\console classpath=c:\armando\meuspacotes\geo;classpath=c:\armando\meuspacotes\geo; Em c:\fontes, compilar e executar Principal.javaEm c:\fontes, compilar e executar Principal.java Se estiver utilizando uma ferramenta com JBuilder

ou SunOne Studio 4 tudo que é criado automaticamente é definido como um pacote.

Page 13: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Escopo de um pacote publicpublic

Recursos marcados desta forma podem ser utilizados por qualquer classe,sendo ou não do mesmo pacote.Os atributos marcados desta forma são herdados e podem ser acessados pelas subclasses.

privateprivate Visível apenas pelos métodos da classe que o

criou.Não são acessados diretamente por uma subclasse, a não ser indiretamente por um método não-privado.

protecedproteced São visíveis na própria classe, em todas as

subclasses e também nas classes que pertencem ao mesmo pacote.

Page 14: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Escopo de um pacote package

São visíveis na própria classe e por classes definidas no mesmo pacote.Subclasses de classes em outros pacotes não podem acessar estes recursos.Classes pertencentes ao mesmo pacote colaboram para atingir um objetivo, logo devem conhecer os recursos das outras.

Utilização Use public para métodos que devem ser visíveis

por clientes da classe. Use protected para recursos que podem ser

interessantes para quem quer criar subclasses em outros pacotes.

Page 15: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Recomendação para Projeto de Classes

Sempre mantenha os dados privadosSempre mantenha os dados privados Caso não seja obedecido, violará o encapsulamento.

Quando os dados são mantidos privados, as alterações em suas representações não afetam o usuário da classe e o erros são bem mais fáceis de detectar.

Sempre inicialize os dadosSempre inicialize os dados Java não inicializa variáveis locais automaticamente.

Não use tipo básicos em demasia numa classeNão use tipo básicos em demasia numa classe A idéia é substituir os usos relacionados de tipos de

dados básicos por outras classes. Ex.:Em uma classe Cliente os campos:

private String rua; private String cidade; private String estado; private int cep;

Estes campos poderiam forma a classe Endereco.

Page 16: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Recomendação para Projeto de Classes

Nem todos os campos precisam de Nem todos os campos precisam de acessadoresacessadores e e modificadoresmodificadores de campos individuais. de campos individuais.

Use a forma padrão de construção de classesUse a forma padrão de construção de classes Sempre listamos o conteúdo das classes na seguinte

ordem Recursos públicos Recursos de escopo de pacote Recursos privados

Dentro de cada seção: Constantes,construtores, métodos estáticos,variáveis

de instância, variáveis estáticas.

Page 17: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Recomendação para Projeto de Classes

Divida as classe com muitas tarefas Divida uma classe complicada em duas conceitualmente

simples.

Dê nomes às classes e métodos que representam suas tarefas

Assim como as variáveis devem ter nomes representativos, as classes também devem seguir esta metodologia.

O nome da classe deve ser um substantivo(Pedido,Cliente) ou substantivo junto a um adjetivo(PedidoExpresso,EnderecoCobranca).

Com os métodos,siga a convenção dos métodos “acessadores” inicados por getget(getDia,getSaldo) e “modificadores” iniciados por setset(setSalario,setSaldo)

Page 18: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Manipulação de Datas e Hora

A manipulação de data e hora exige a utilização de uma A manipulação de data e hora exige a utilização de uma classe externa da linguagem Java(classe externa da linguagem Java(DateDate).).

Exige a utilização da diretiva Exige a utilização da diretiva importimport. As diretivas import . As diretivas import devem ser inseridas antes da declaração do nome da devem ser inseridas antes da declaração do nome da classe.classe. Sintaxe: import nome-do-pacote ou classeSintaxe: import nome-do-pacote ou classe

Por exemplo se fosse necessário utilizar o pacote externo Por exemplo se fosse necessário utilizar o pacote externo Date, a diretiva seria: import java.util.Date, possibilitando Date, a diretiva seria: import java.util.Date, possibilitando a criação de diversos objetos para a manipulação de data a criação de diversos objetos para a manipulação de data e hora. e hora.

Ex.: Date data; ou Date data=new Date();Ex.: Date data; ou Date data=new Date();

data = new Date;data = new Date;

Page 19: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Métodos para a Manipulação da Data

A classe Date fornece muitos métodos úteis para a obtenção e A classe Date fornece muitos métodos úteis para a obtenção e tratamento com datas e horas. Ex.: Date data=new Date();tratamento com datas e horas. Ex.: Date data=new Date();

data.data.getDate()getDate() – Retorna o dia do mês(1-31) armazenado no – Retorna o dia do mês(1-31) armazenado no objeto data.objeto data.

data.data.getDay()getDay() – Retorna o dia da semana. – Retorna o dia da semana. data.data.getMonth()getMonth() – Retorna o mês. – Retorna o mês. data.data.getYear()getYear() – Retorna o ano de armazenamento no objeto – Retorna o ano de armazenamento no objeto

data.Retorna os dois últimos algarismos referentes ao ano. data.Retorna os dois últimos algarismos referentes ao ano. Datas superiores a 2000 retornam três digitos.Ex.:2000 – 100 , Datas superiores a 2000 retornam três digitos.Ex.:2000 – 100 , 2001- 1012001- 101

datadata.setDate(.setDate(diadia))- difine o dia do mês para - difine o dia do mês para diadia do objeto. do objeto. data.data.setMonth(setMonth(mêsmês)) – Define o mês para o – Define o mês para o mêsmês do objeto data. do objeto data. data.data.setYear(setYear(anoano))- Define o ano para o - Define o ano para o anoano do objeto data. do objeto data. data.data.toGMTString()toGMTString()-Retorna uma string representando o objeto -Retorna uma string representando o objeto

data com GMT, isto é, com a data e hora de Londres.data com GMT, isto é, com a data e hora de Londres.

Page 20: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Métodos para a Manipulação da Hora

Da mesma forma existem métodos para obtenção e Da mesma forma existem métodos para obtenção e tratamento de horas.Ex.: Date data=new Date(“October tratamento de horas.Ex.: Date data=new Date(“October 23,2001,10:42:15”);23,2001,10:42:15”);

data.data.getHours()getHours()- Retorna a hora(0-23) do objeto data.- Retorna a hora(0-23) do objeto data. data.data.getMinutes()getMinutes()-Retorna os minutos(0-59) do objeto -Retorna os minutos(0-59) do objeto

data.data. data.data.getSeconds()getSeconds()-Retorna os segundos(0-59)do -Retorna os segundos(0-59)do

objetos data.objetos data. data.data.getTime()getTime()-Retorna o número de milissegundos -Retorna o número de milissegundos

decorridos desde 1º de janeiro de 1970,00:00:00.Esse decorridos desde 1º de janeiro de 1970,00:00:00.Esse método é geralmente usado para realizar cálculos entre método é geralmente usado para realizar cálculos entre datas.datas.

data.data.getTimezoneoffset()getTimezoneoffset()-Retorna a diferença em -Retorna a diferença em minutos da hora local em GMT.minutos da hora local em GMT.

data.data.parse(parse(stringstring))-Analisa a string e retorna o número-Analisa a string e retorna o número

Page 21: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Métodos para a Manipulação da Hora

data.setHours(horas)-Define a hora do objeto data.

data.setMinutes(minutos)-Define os minutos do objeto data.

data.setSeconds(segundos)-Define os segundos do objetos data.

data.setTime(valor)-Define a hora para valor,que representa o número de milissegundos decorridos desde 1º de janeiro de 1970,00:00:00.

data.toLocalString()-Retorna uma string contendo a data e hora do objeto data,levando em conta o fuso horário corrente.

Page 22: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Exemploimport java.util.Date;

public class objdata{public static void main(String args[]){Date dt = new Date();System.out.println("Hoje e " + dt.toString());System.out.println("O ano e " + dt.getYear());System.out.println("O mês e " + dt.getMonth());System.out.println("O dia e " + dt.getDate());System.out.println("\n Mudança de dia ");

dt = new Date(1997,11,25);

System.out.println("Hoje e " + dt.toString());System.out.println("O ano e " + dt.getYear());System.out.println("O mês e " + dt.getMonth());System.out.println("O dia e " + dt.getDate());}

}

Page 23: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Exemploimport java.util.Date; //importa a classe Dateclass Saudacao{ public static void main (String args[ ]) { Date data = new Date(); // cria e inicializa um objeto data int hora=0,min=0,sec=0; hora=data.getHours(); min=data.getMinutes(); sec=data.getSeconds(); System.out.println("Agora são " + hora + "h:" + min + "m:" + sec +

"s"); if(hora>=0 && hora<6) System.out.println("Boa Madrugada!"); if(hora>=6 && hora<12) System.out.println("Bom Dia!"); if(hora>=12 && hora<18) System.out.println("Boa Tarde!"); if(hora>=18) System.out.println("Boa Noite!"); }}

Page 24: Métodos Estáticos Métodos Estáticos Pacotes Pacotes Manipulação de Data e Hora Manipulação de Data e Hora Professor: Armando Hage Fundamentos em Java

Exercício Crie um programa que simule promoções em

um site de internet.A cada dia da semana ele mostra uma promoção diferente.Por exemplo: se for Domingo-Carro 0Km agora com 10% de desconto, se for Segunda-Aproveite a promoção de laranjas e assim por diante.

Crie um programa que mostre na tela o dia atual no formato,Ex.: Hoje é Sexta-feira, dia 07 de Dezembro de 2002.Você pode utilizar uma estrutura if ou switch-case.

Crie um pacote para suas classes criadas.