Java é - Giuliano Prado

Transcrição

Java é - Giuliano Prado
A Plataforma Java
Programação Orientada a
Objetos em Java
Programação Orientada a Objetos
em Java
Prof. Giuliano Prado de Morais Giglio, M.Sc.
[email protected]
http://www.giulianoprado.xpg.com.br
OBJETIVOS DO CURSO
n
Fornecer uma visão geral da linguagem Java e
apresentar suas potencialidades.
n
Capacitar os alunos a trabalhar com a
linguagem de programação Java.
n
Introduzir as principais fundamentos de
implementação de aplicações gráficas Java
com pacote Swing.
ORGANIZAÇÃO DO CURSO
ü Introdução a linguagem JAVA;
ü Estrutura da Linguagem;
ü Java e Orientação a Objetos;
ü Classes
§
§
§
§
§
Objetos (Instanciação)
Atributos
Métodos
Encapsulamento;
Sobrecarga;
ü Herança e Polimorfismo;
ü Coleção de Objetos;
ü Classes especiais da API Java
A Plataforma Java
Programação Orientada a
Objetos em Java
Introdução a Linguagem Java
Prof. Giuliano Prado de Morais Giglio, M.Sc.
CONCEITOS DO JAVA
Java é:
– Uma Linguagem de Programação
– Um Ambiente de Desenvlvimento
– Um Ambiente de Aplicativos
CONCEITOS DO JAVA
J2SE
– Contém as classes principais da plataforma
Java, e é chamado às vezes de Core Java
Plataform.
n J2EE
– É um conjunto de tecnologias que fornecem
APIs e um ambiente para desenvolvimento e
execução de aplicações coorporativas.
n J2ME
– É o Java para pequenos dispositivos, desde
palms até celulares.
n
INTRODUÇÃO AO JAVA
n
Vantagens de Java como Linguagem
de Programação:
vOrientada a Objetos (O.O)
vcódigo sem bugs: mais fácil em Java que em
C++
vdesalocação manual de memória não existe
vindependência de plataforma!
JAVA
n
Simples
ü Sintaxe similar a C / C++
ü Não possui os recursos “perigosos”, desnecessários
ou pouco usados:
ü Aritmética de ponteiros (*--pt = vet+5)
ü Estruturas (struct)
ü Definição de tipos (typedef)
ü Pré-processamento (#define)
ü Liberação explícita de memória (free)
ü Eliminação de 50% dos erros mais comuns
ü Interpretadores pequenos (256 Kb)
COLETOR DE LIXO
n
A Linguagem Java realiza a liberação de
memória, que antes era responsabilidade
do programador.
JAVA
n Orientada
a Objetos
Utiliza tecnologia de objetos similar a de
C++, com alguns acréscimos e
simplificações.
JAVA
n Distribuída
Implementa os protocolos da arquitetura
TCP/IP, tais como: HTTP, SMTP, TCP,
UDP, RTP, FTP, etc.
JAVA
n Robusta
üPossui checagem em tempo de
compilação e execução.
üGerenciamento automático de memória
(“garbage collector” ).
üAusência de recursos “perigosos”.
üExtensiva verificação do código
JAVA
n Robusta
üO fonte é compilado para um código
intermediário (“bytecode”).
üO interpretador funciona como uma
Máquina Virtual Java (JVM).
INDEPENDÊNCIA DE
PLATAFORMA
JAVA
n Interpretada
Os bytecodes são executados por um
interpretador (JVM) embora existam
opções de compilação.
JVM - JAVA VIRTUAL
MACHINE
n
Cabe ao interpretador Java de cada plataforma
de hardware específica assegurar a execução
do código compilado para a JVM.
AMBIENTE DE
PROGRAMAÇÃO JAVA
n
Java 2 Standard Developers Kit (J2SDK)
JVM mais todas as APIs, compilador e
ferramentas (tudo o que você precisa
para escrever programas Java)
JVM mais as APIs (tudo o que você
precisa para executar programas Java)
Documentação das APIs (Application Programming Interface)
AMBIENTE DE
PROGRAMAÇÃO JAVA
n Java
2 Standard Developers Kit
(J2SDK)
ØDisponível para download no Site Java da
Sun (java.sun.com)
ØVersão atual (J2SDK 1.6.23)
ØPrincipais aplicativos:
§ javac (compilador)
§ java (interpretador)
§ applet viewer (visualizador de Applets)
AMBIENTE DE
PROGRAMAÇÃO JAVA
n Documentação
das APIs (Application
Programming Interface)
ØDescreve quais são as classes definidas
pela linguagem, o que fazem e como elas
devem ser usadas nos programas.
ØDisponível para download ou on-line no
Site Java da Sun
(http://java.sun.com/docs/index.html)
AMBIENTE DE
PROGRAMAÇÃO JAVA
n Existem
editores (IDEs) específicos
para o desenvolvimento de Aplicativos
Java
vSUN NetBeans
vEclipse
vBorland JBuilder
vJCreator
vBlueJ
INSTALAÇÃO
n
n
n
n
Fazer o download do J2SDK.
Instalar o arquivo jdk-6u23-windows-i586.exe
Somente após o passo seguinte que poderá ser
instalado a IDE de sua preferência (JCreator)
Recomendado incluir as seguintes variáveis de
ambiente, porém, não obrigatório:
Ø JAVA_HOME: apontará para o diretório onde o J2SDK foi
instalado = C:\Arquivos programas\Java\jdk1.6.23
Ø CLASSPATH:responsável por definir um caminho de pesquisa para as
classes do J2SE = ;.JAVA_HOME
Ø PATH: responsável por definir um caminho de pesquisa para arquivos
executáveis. Se está variável não for configurada, o processo de compilação
dos programas feitos em Java somente poderá ser executado dentro da
pasta “lib” do diretório de instalação do J2SE 6.0 JDK = C:\Arquivos
programas\Java\jdk1.6.23\bin
PRIMEIRO PROGRAMA
JAVA
Digite o programa “Teste.java”apresentado
abaixo, utilizando o Bloco de Notas
/*** Primeiro Programa Java ***/
class Teste
{
public static void main(String arg[])
{
System.out.println(“Teste em Java”);
}
}
PRIMEIRO PROGRAMA
JAVA
Hello.java
PRIMEIRO PROGRAMA
JAVA
n Compilar
o Programa
javac Hello.java
n Se
o programa foi compilado
corretamente, um novo arquivo
(Hello.class) será criado.
n Interpretar
o programa
java HelloWorldApp
AMBIENTE DE
PROGRAMAÇÃO JAVA
ANATOMIA DO
PROGRAMA
n Comentários
n Os
comentários em Java seguem a
mesma sintaxe de c.
Ø /* texto */
Ø // texto
Ø /*** Primeiro Programa Java ***/
n O compilador ignora estas linhas
ANATOMIA DO
PROGRAMA
n Definição
de Classe
n É a unidade básica para uma
linguagem OO como Java
n class nome {
...
}
n class é a palavra reservada que marca
o início da declaração de uma classe.
ANATOMIA DO
PROGRAMA
n Delimitação
Ø um
de Blocos
bloco está sempre entre chaves { }
Ø Em Java as instruções terminam em
ponto-e-vírgula (;)
ANATOMIA DO
PROGRAMA
Método main
n Toda aplicação java, exceto Applets e
Servlets, deve possuir o método main.
public static void main (String args[ ]){
System.out.println("Teste em Java!");
}
n O método main indica o início de
execução de qualquer programa Java.
ANATOMIA DO
PROGRAMA
Ø
Ø
Ø
Ø
Ø
Argumentos do Método main
public - é um qualificador do método que
indica que este é acessível externamente
a esta classe.
static - é um outro qualificador que
especifica o método como sendo um
método de classe.
void - indica que não existe retorno a este
método.
main - é o nome do método.
String args[ ] - Armazena valores
passados por linha de comando.
ANATOMIA DO
PROGRAMA
n System.out.println(“Hello
World!”)
üEscreve na tela o conteúdo nos
parêntesis.
üChamada do método println para o
atributo out da classe System.
üO argumento (“...”) é do tipo String.
ANATOMIA DO
PROGRAMA
n System.out.println(sequência
escape)
§
§
§
§
§
\n (nova linha)
\t (tabulação horizontal)
\r (retorno de carro)
\\ (barra invertida)
\” (aspas duplas)
de
DETALHES
IMPORTANTES
n Programa
fonte tem extensão ‘.java’
n Programa compilado tem extensão
‘.class’
n A linguagem é “case-sensitive”, letras
maiúsculas são diferentes de letras
minúsculas
n Cada programa é uma classe
DETALHES
IMPORTANTES
n
n
n
n
n
Nome da classe no programa tem que ser
igual ao nome do arquivo físico ‘.java’
Sintaxe similar a linguagem C/C++
As classes podem estar agrupadas em
package
Package é um subdiretório. Exemplo:
java.awt, java.math
As classes podem ser compactadas (zip
ou jar)
ESTRUTURAS DE
PROGRAMAÇÃO
n Identificadores
ØNomeiam variáveis, funções, classes e
objetos
ØPodem conter letras e/ou dígitos, “_” e “$”
ØNão podem ser iniciados por dígito
ØNão podem ser palavras reservadas
ØNão tem tamanho máximo
ESTRUTURAS DE
PROGRAMAÇÃO
VÁLIDOS
n Nome
n NumDepen
n total_geral
n NOME
INVÁLIDOS
n 1prova
n total geral
ESTRUTURAS DE
PROGRAMAÇÃO
ESTRUTURAS DE
PROGRAMAÇÃO
n
Texto
char:
char representa um caracter Unicode de 16
bits (exemplos: ‘a’, ‘M’, ‘\t’, ‘\u02B1’)
• \b
• \t
• \n
• \r
• \”
• \’
• \\
• \u001B
–
–
–
–
–
–
–
–
retrocesso
tab
avanço de linha
retorno de carro
aspas
apóstrofo
barra invertida
indica o caracter unicode em hexadecimal
ESTRUTURAS DE
PROGRAMAÇÃO
Texto
n
String: representa uma seqüência de
caracteres
char opcao;
opcao = 'S';
opcao = 'N';
String frase;
frase = “Ordem e Progresso”;
ESTRUTURAS DE
PROGRAMAÇÃO
n Inteiro
byte
8 bits
27…27-1
short
16 bits
215..215-1
int
32 bits
231..231-1
long
64 bits
263..263-1
ESTRUTURAS DE
PROGRAMAÇÃO
n Inteiro
byte index = 50;
short soma = 2000;
int num carros = 5;
long valor = 0XDADAL;
ESTRUTURAS DE
PROGRAMAÇÃO
n Tipos Ponto Flutante
(Real)
• float 32 bits
• double 64 bits
n–
•
•
•
•
Representações:
3.14
6.02E23
2.718F
123.4E+306D
float pi = 3.1415f;
double pi = 3.1415;
ESTRUTURAS DE
PROGRAMAÇÃO
ESTRUTURAS DE
PROGRAMAÇÃO
n Declarações
e atribuições de variáveis
• As declarações podem ser exibidas em
qualquer posição do código-fonte.
int x, y;
float z = 3.144f;
double w = 3.1415;
boolean verdade = true;
char c, d;
c = 'A';
d = '\u0013';
x = 6;
y = 1000;
ESTRUTURAS DE
PROGRAMAÇÃO
n Variáveis
n Inicialização
padrão Java
• variáveis numéricas com zero
• variáveis booleanas com false
• outras variáveis com null
OPERADORES
n Lógicos
• Comparação de valor: = = , !=, !, > e >
• Junção de expressões: &, &&, |, ||
• Comparação de objetos: instanceof()
OPERADORES
n Aritméticos
•
•
•
•
•
Soma ( + )
Subtração ( - )
Multiplicação ( * )
Divisão ( / )
Resto ( % )
OPERADORES
n Considere
um operador @ qualquer
n Expressões do tipo X = X @ Z podem
ser substituídas por X @= Z
x=x+3
x += 3
x=x*(9+y)
x *= ( 9 + y )
OPERADORES
n Atenção
(programadores C/C++):
• O operador + não é apenas aritmético (por
ex. pode ser utilizado para inicialização e
concatenação de strings)
• Existe o tipo booleano, logo os operadores
relacionais e lógicos NÃO geram inteiros
• Não há conversões automáticas (por ex.
real para inteiro)
OPERADORES
n Atenção
•
•
•
•
(programadores C/C++):
int i, j;
float r;
i = r / j; // ERADO!
i = (int) r / j; // OK!
CONTROLE DE FLUXO
n
Estrutura de Decisão - If / Else
if (expressão booleana)
{ instrução ou bloco de comandos }
else
{ instrução ou bloco de comandos }
if (cont >= 0)
{
System.out.Println(“Erro !!!”);
}
else
{
System.out.println(“Ok !”);
}
CONTROLE DE FLUXO
n
Estrutura de Decisão - switch
switch (expressão short, int, byte ou char)
{
case expressão2:
comandos;
break;
case expressão3:
comandos;
break;
default:
comandos;
break;
}
CONTROLE DE FLUXO
n
Estrutura de Decisão - switch
switch (opcao)
{
case 0:
valor = a + b; break;
case 2:
valor = (a * b) - c; break;
default:
valor = a; break;
}
n
n
A instrução break (opcional) impede que o
fluxo de execução continue pelas opções
seguintes
A cláusula default é opcional
CONTROLE DE FLUXO
n Estrutura de
Repetição – for
for (expr_inicial; expr_booleana; expr_increm)
{ bloco de comandos }
for (int x=0; x<10; x++)
{
System.out.println(" Valor do X : " + x);
}
CONTROLE DE FLUXO
n Estrutura de
Repetição - while
while (expr_booleana)
{ bloco de comandos }
int cont = 0
while (cont < 100)
{
System.out.println(" contando " + cont);
cont++;
}
CONTROLE DE FLUXO
n Estrutura de
Repetição - do while
do
{ bloco de comandos }
while (expr_booleana)
int x = 0;
do {
x++;
} while (x <10);
VETORES(Arrays)
n
n
n
n
n
n
Declaração
Podem ser declarados arrays de quaisquer
dos tipos através dos símbolos “[” e “]”.
A declaração não cria o array, isto é, não
aloca memória. Isso é feito pela instrução
new (arrays são objetos em Java).
char s[ ]; // declaração
s = new char[3]; // Criação
s[0] = ‘A’; s[1] = ‘B’; s[2] = ‘C’; // atribuição
VETORES(Arrays)
n Declaração
• Os colchetes podem ser usados antes
ou depois da variável.
• Exemplo:
üchar s[ ];
üchar [ ]s;
VETORES(Arrays)
n
Declarando, criando e iniciando um array
char s[ ] = {'A', 'B', 'C'};
// declaração, criação e incialização
n
Em Java array é um objeto, mesmo quando é
composto por tipos primitivos. Apenas a
declaração não cria o objeto, sendo necessário o
uso da palavra reservada new.
int p[ ] = new int[5];
p[0] = 25;
p[1] = 32;
VETORES(Arrays)
n
Alocação de Memória
n
Quando um array é criado, todos os
seus elementos são inicializados.
VETORES(Arrays)
n
Arrays não podem ser dimensionados na
definição:
int vector[5]; //ERRADO!
n Arrays
não podem ser utilizados sem
a criação:
int vector[];
vector[0] = 4; //ERRADO!
VETORES(Arrays)
n Para
determinarmos o seu tamanho
podemos usar o método length:
int lista [] = new int [10];
for (int j = 0; j < lista.length; j++)
{
System.out.println(lista[j]);
}
VETORES(Matrizes)
n Multi-dimensionais
int lista [] = new int [10];
int matriz [][] = new int
[4][5];
matriz [0][0] = 300;
matriz [1][3] = 600;
For “aprimorado”
n Esse
for permite percorrer um array ou
um enum (ou ainda uma Collection –
que só veremos láááá na frente) de
forma mais simples
n Definimos o tipo que é retornado pelo
array ou pelo enum, e pegamos a lista a
percorrer
Pra usar o for com array
public class TestaFor {
public static void main(String args[]) {
int a[] = {4,5,6,3,4,2,1};
for (int i : a) {
System.out.println(i);
}
}
}
A Plataforma Java
Programação Orientada a
Objetos em Java
Java e Orientação a Objetos
- Conceitos Principais Prof. Giuliano Prado de Morais Giglio, M.Sc.
Orientação a Objetos
n História da OO
• Programação sob demanda
• Programação estruturada
• Orientação a Objetos
n Diversos avanços foram realizados na
área acadêmica ainda na década de 70
n A partir da década de 80 começou a ser
adotada tomando seu espaço nos anos 90
Orientação a Objetos
n
O paradigma estruturado trata de funções
e procedimentos aplicados a dados
n O paradigma orientado a objetos trata de
dados e comportamentos
Paradigma
Estruturado
Paradigma
OO
dados
funções
funções
dados
Orientação a Objetos
PCuidado
! Orientação a Objetos não
elimina a programação estruturada.
Dentro dos métodos (que definem o
comportamento de um objeto) usamos a
programação estruturada.
Orientação a Objetos
n
Classes e Objetos – constituem a unidade
de representação de dados para esse
paradigma. E mantém uma relação muito
próxima entre si.
n Podemos pensar na Classe como a forma
da peça ou do bolo, e nos objetos como
peças prontas feitas de matéria prima.
Orientação a Objetos
Orientação a Objetos
n
Classes definem novos tipos de dados, tal
como structs de C ou registers de Pascal.
n A partir de novos tipos de dados torna-se
mais fácil organizar a aplicação em
questão.
n Um objeto é uma instância de uma classe,
ou seja, um exemplar do conjunto de
objetos que seguem os moldes daquela
classe
Orientação a Objetos
n
Atributos – são os “campos” que contém
as informações daquela classe. Ao
conjunto de atributos preenchidos de um
objeto damos o nome de “estado do
objeto”
n Existem atributos de classe e atributos de
instância.
Orientação a Objetos
n
Métodos – definem o comportamento dos
objetos definidos pela classe.
n Por comportamento entendemos o
conjunto de reações ou atividades que os
objetos podem desempenhar.
n Exemplo: Classe Avião, método decolar,
método pousar, etc...
n Métodos podem ter parâmetros de
entrada e retorno
A Plataforma Java
Programação Orientada a
Objetos em Java
Java e Orientação a Objetos
- Implementação Prof. Giuliano Prado de Morais Giglio, M.Sc.
DEFINIÇÃO DE UM
OBJETO
n
Um objeto pode ser descrito por um
conjunto de atributos (propriedades) e seu
comportamento:
DEFINIÇÃO DE UM
OBJETO
n
Um cachorro possui um estado (nome, cor,
raça) e um comportamento (latindo,
mordendo, lambendo).
ATRIBUTOS
COMPORTAMENTO
Pluto
Dourado
Vira-latas
Descansando
Uivando
CLASSES DE OBJETOS
n “Grupo
de objetos com os mesmos
atributos e o mesmo comportamento
pertencem à mesma classe.”
CLASSES DE OBJETOS
n Uma
classe é um modelo ou protótipo
que define as propriedades e métodos
(comportamento) comuns a um
conjunto de objetos.
n Classes
são “moldes” que definem as
variáveis e os métodos comuns a todos
os objetos de um determinado tipo.
CLASSES DE OBJETOS
n No
mundo real existem vários
objetos do mesmo tipo. Por exemplo,
a sua bicicleta é uma das milhares
que existem no mundo.
n Usando a terminologia de orientação
a objetos, o objeto sua bicicleta é
uma instância da classe de objetos
bicicleta.
CLASSES DE OBJETOS
n Classes
X Objetos
Ø Uma classe é um “molde” a partir do
qual vários objetos são criados.
ORIENTAÇÃO A
OBJETOS EM JAVA
Programas em Java provavelmente irão
criar diversos objetos de diversos tipos
de classes.
n Os objetos interagem entre si através
da troca de mensagens.
n Após o objeto ter realizado o trabalho
proposto, o mesmo é eliminado através
da “coleta automática de lixo”.
n
REPRESENTAÇÃO DE
UMA CLASSE
Classe
Atributos
Métodos
ESTRUTURA DE UMA
CLASSE EM JAVA
class BirthDate
{
int daya;
int month;
int year;
int getDay()
{
…
REFERÊNCIA A UMA
CLASSE EM JAVA
BirthDate myBirthDate;
CLASSES EM JAVA
Declaração:
class Ponto {
...
}
n Propriedades: dados que as instâncias da
classe conterão:
class Ponto {
float x, y;
}
n
CLASSES EM JAVA
class Veiculo {
// Propriedades
private float velocidadeMaxima;
protected float capacidadeTanque, consumo;
protected int potencia, ano;
protected String marca, modelo, cor;
public String chassis, placa;
...
// Métodos
...
public float autonomia ( ) {
return capacidadeTanque * consumo;
}
}
CLASSE = “Molde de Objetos”
Tempo de
Compilação
Tempo de Execução
Classe:
Carro
Esportivo
Objeto Carro:
Instância 3
CRIAÇÃO DE OBJETOS
(INSTANCIAÇÃO)
n
Um objeto de uma classe é criado
utilizando-se a palavra new.
Date mayBirthDate = new Date();
EXEMPLO
REFERÊNCIAS PARA
OBJETOS
n Alocação
de memória:
Ponto p1;
// cria apenas a referência
Ponto p1 = new Ponto();
// aloca memória e atribui
// endereço à referência
DIFERENÇA COM TIPOS
PRIMITIVOS
n Quando
se declara variáveis de
qualquer tipo primitivo (int, float, char,
etc.), o espaço na memória é alocado
como parte da operação.
n A declaração de uma variável de classe
não aloca memória, somente quando a
instrução new é chamada.
DIFERENÇA COM TIPOS
PRIMITIVOS
REFERÊNCIA PARA
OBJETOS
n Alocação
de memória
Ponto p2 = p1;
// cria outra referência
// para o mesmo objeto
ATRIBUIÇÃO DE
VALORES
n
As propriedades dos objetos podem ser manipuladas
diretamente pelo operador de ponto (.)
Ponto p1 =
p1.x = 1;
p1.y = 2;
//
Ponto p2 =
p2.x = 3;
p2.y = 4;
//
new Ponto();
p1 representa o ponto (1,2)
new Ponto();
p2 representa o ponto (3,4)
p1 = p2;
p1.x = 10;
// p1 representa o ponto (10,4)
// p2 representa o ponto (10,4)
OBTENÇÃO DE
VALORES
n Os
valores das propriedades podem ser
obtidos facilmente
System.out.pritln("p1.x = " + p1.x + ".");
System.out.pritln("p2.x = " + p2.x + ".");
// p1.x = 10.
// p2.x = 10.
MÉTODOS
n
n
Definem o comportamento da classe.
Declaração:
class Ponto {
int x, y;
void mover (int dx, int dy)
x += dx;
y += dy;
}
}
MÉTODOS
n Implementam
as funções de uma
classe
n Possuem sintaxe semelhante à sintaxe
de definição das funções de um
programa procedural
n Determinam o comportamento da
classe e a troca de mensagens com
outras classes
MÉTODOS
ASSINATURA DE UM
MÉTODO
O tipo de retorno pode ser void
CHAMADAS DE
MÉTODOS
n
n
A troca de mensagens entre os objetos é
realizada através da chamada de métodos
com passagem de argumentos
Exemplo
...
p1.mover(10,l0);
//Deslocou p1 dez unidades, nos dois
eixos.
...
EXEMPLO
class ProgramaPrincipal
{
public static void main (String args[])
{
Funcionario func;
func = new Funcionario(“Juca”,102);
}
MÉTODO “Main”
class ProgramaPrincipal {
public static void main (String args[])
{
Funcionario func;
func = new Funcionario(“Juca”,102);
}
}
PALAVRA RESERVADA “This”
n
n
As vezes é necessário que o objeto se
referencie.
Existe uma palavra reservada this que
significa uma referência ao próprio objeto
class Ponto {
int x, y;
void mover (int x, int y) {
this.x = x;
this.y = y;
}
}
PALAVRA RESERVADA “This”
n
Quando o método é chamado, a palavra-chave
‘this’ refere-se ao objeto classStartDate
PASSAGEM DE
ARGUMENTOS
n Tipos
de argumentos
n Objetos → passagem por referência.
• Originais são sujeitos a alterações dentro
do método.
n Tipos
primitivos → passagem por valor.
• Originais não são sujeitos a alterações
dentro do método.
PASSAGEM DE
ARGUMENTOS
n
Tipos de argumentos
class Ponto {
public int x, y;
Ponto (int x, int y) {
this.x = x;
this.y = y;
}
public void teste (Ponto pt, int i) {
pt.x = 3;
pt.y = 4;
i = 1;
}
PASSAGEM DE
ARGUMENTOS
n
Tipos de argumentos
...
public static void main (String args[])
{
Ponto ponto = new Ponto(1,2);
int i = 2;
// Antes, ponto=(1,2) e i = 2.
ponto.teste(ponto,i);
// Depois, ponto=(3,4) e i = 1.
}
}
VARIÁVEIS LOCAIS
n
Além das propriedades de um objeto, podem
ser definidos outros tipos de variável, locais a
um método ou a um bloco de operações.
float calculaMedia(float p1, float p2)
{
float media = (p1 + p2)/2;
return media;
}
VARIÁVEIS LOCAIS
...
String alunos[];
float listaAprovados() {
for (int i = 0; i < alunos.length;i++) {
String nome = alunos[i];
System.out.println(i + ": " + nome);
}
}
CONSTRUTORES
n
n
n
Devemos usar construtores quando
queremos definir o estado inicial de objetos
de uma classe (atribuir valores aos atributos
de um objeto no momento de sua criação,
por exemplo)
Usados na criação de um objeto através do
comando new
Possuem o mesmo nome da classe e não
têm tipo de retorno!
CONSTRUTOR PADRÃO
n
n
A linguagem Java declara um construtor
padrão, vazio, que não recebe nenhum
parâmetro
Ponto p1 = new Ponto();
Quando declaramos um novo construtor,
esse construtor padrão deixa de existir e é
substituído pelo novo construtor
class Ponto {
int x; int y;
Ponto () {
}
}
CONSTRUTORES
n
n
Podem receber parâmetros, que podem
servir para inicialização dos atributos da
classe
Uma classe pode ter vários construtores
class Ponto {
int x;
int y;
Ponto (int x, int y) {
this.x = x;
this.y = y;
}
}
CONSTRUTORES
n Deve
ser usado no momento da criação
do objeto:
Ponto p1 = new Ponto(1,2);
Ponto p2;
p2 = new Ponto(3,4);
Ponto p3 = new Ponto();
CONSTRUTORES
CONSTRUTORES
STRINGS
n Uma
string não é um tipo primitivo, é
uma classe pré-definida do Java. São
seqüências de caracteres.
n Pode ser criado com ou sem a palavra
new.
String
String
String
nova =
String
e = ""; // uma string vazia
alo = "Alo Pessoal";
nova;
"Sou nova";
nome = new String("Antonio");
STRINGS
n Operações
com String new.
// Concatenação
String nova = alo + ", tudo Ok ? ";
// Edição
String substr = alo.substring(0,3); //
"Alo"
// Verificando tamanho
int tam = alo.length(); // tamanho = 11
MEMBROS DE CLASSE
n
n
Pode-se definir numa classe membros que
sejam compartilhados por todas instâncias
daquela classe.
Esses membros são chamados de “membros
de classe”. Podem ser:
• propriedades (variáveis)
• métodos
n
Todo membro de classe deve usar o
qualificador static.
VARIÁVEIS DE CLASSE
n
Exemplo:
class Pessoa {
static int numPessoas = 0;
int id;
Pessoa () {
id = numPessoas;
numPessoas++;
}
...
}
VARIÁVEIS DE CLASSE
VARIÁVEIS DE CLASSE
n
Exemplo:
Pessoa joao = new Pessoa ();
// joao.id = 0;
// joao.numPessoas = 1;
Pessoa ana = new Pessoa();
// ana.id = 1;
// ana.numPessoas = 2;
n
Fazer este exemplo, imprimindo (id) e
(numPessoas).
VARIÁVEIS DE CLASSE
n Os
membros de classe podem ser
acessados diretamente, sem
necessidade da existência de um
objeto.
Pessoa.numPessoas = 100;
// Próxima pessoa criada será 101
ESCOPO DE VARIÁVEIS
n Ao
utilizar o nome de uma variável
dentro de um método, Java procurará a
sua definição na seguinte ordem:
bloco
bloco mais externo
método
variável de instância ou classe
super-classe
MÉTODOS DE CLASSE
class Example {
..
static int multiply10(int value) {
..
}
}
§
Exemplo:
int value = "100";
int new_value = Example.multiply10(value);
System.out.println("n.v = " + new_value);
CONSTANTES
n Podem
ser:
• variáveis (de instância, de classe ou
locais)
• métodos
n São
declaradas com a palavra
reservada final
CONSTANTES
class Teste {
// Variáveis constantes
final int ESQUERDA = 0;
final int DIREITA = 0;
// Método constante
private final static void main
(String args[]) {
..
}
..
}
ENCAPSULAMENTO
n Através
dos métodos podemos atingir
uma das principais características da
orientação a objetos. O encapsulamento,
que é a capacidade de esconder do
mundo exterior as estruturas internas de
uma classe.
n O encapsulamento define que os atributos
só são acessados através de métodos o
que evita o acoplamento
ENCAPSULAMENTO
nÉ
a forma de restringir o acesso aos
métodos e propriedades de uma classe.
n Protege os dados de um objeto contra
uma modificação imprópria.
n É necessário definir o controle de
acesso aos métodos e propriedades de
uma classe, de forma que não se
interfira no seu funcionamento.
CONTROLE DE ACESSO
n Os
membros de uma classe podem ser
protegidos de acessos indevidos
n Métodos de acesso: public e private
• public: membros podem ser acessados
livremente
• private: membros só podem ser
acessados pela própria classe (necessário
definir os accessor methods - get e set)
CONTROLE DE ACESSO
n
Exemplo
class Pessoa {
private nome;
private idade;
public obs;
Pessoa (String nome, int idade){
this.nome = nome;
}
public imprimeNome() {
System.out.println(“Nome: ” + nome);
}
}
CONTROLE DE ACESSO
n
Exemplo
Pessoa p1 = new Pessoa("Joao",10);
p1.nome = "Raul";//ERRO DE COMPILAÇÃO!
p1.obs = "bom garoto"; //OK!
p1.imprimeNome(); //OK!
// Nome: Joao
SOBRECARGA DE
MÉTODOS
n Sobrecarregar
um método significa
definir dois ou mais métodos com o
mesmo nome, porém com assinaturas
diferentes.
n Assinatura
diferente pode ser: tipo de
retorno, número ou tipos de parâmetros
diferentes.
SOBRECARGA DE
MÉTODOS
nA
sobrecarga pode ser feita igualmente
aos métodos construtores
n Uma
boa prática é usar a sobrecarga,
somente, em métodos que possuam a
mesma funcionalidade.
SOBRECARGA DE
MÉTODOS
n
Exemplo
SOBRECARGA DE
MÉTODOS
n
Exemplo
class Ponto {
...
void mover (int dx, int dy) {
x += dx;
y += dy;
}
void mover (int raio, float ang) {
raio*Math.cos(ang);
raio*Math.sen(ang);
}
}
SOBRECARGA DE
CONSTRUTORES
n
Exemplo
class Ponto {
int x;
int y;
Ponto () {
}
Ponto (int x, int y) {
this.x = x;
this.y = y;
}
...
}
SOBRECARGA DE
CONSTRUTORES
n
n
A sobrecarga de construtores visa definir
formas diferentes de criar um objeto
Exemplo:
Ponto p1 = new Ponto();
//p1 está em (0,0)
Ponto p2 = new Ponto(1,2);
//P2 está em (1,2)
SOBRECARGA DE
CONSTRUTORES
n
n
n
n
Um construtor pode chamar outro
construtor.
Isso se chama “encadeamento de
construtores”.
Para isto é necessário usar a palavra
reservada this.
Uma chamada a outro construtor deverá
ser a primeira linha do construtor!
SOBRECARGA DE
CONSTRUTORES
n
Exemplo:
class Ponto {
int x=0;
int y=0;
Ponto () {
this(0,0);
}
Ponto (int x, int y) {
this.y=y;
}
}
O QUE É HERANÇA?
O QUE É HERANÇA?
n Herança
é um mecanismo que permite
a uma classe herdar todo o
comportamento e os atributos de outra
classe.
n Uma classe que herda de outra classe
é chamada subclasse e a classe que
fornece a herança é chamada
superclasse.
O QUE É HERANÇA?
n
n
n
n
A classe A é a superclasse de B
A classe B é uma subclasse de A
A classe B é a superclasse de C, D e E
As classes C, D e E são subclasses de B
HERANÇA
n
As superclasses definem atributos e métodos
genéricos que são herdados pelas classes
derivadas.
n
Um método herdado de uma superclasse pode
ser redefinido pela classe derivada, mantendo o
mesmo nome mas agindo de forma diferente.
n
Normalmente os atributos de um objeto só
podem ser consultados ou modificados através
dos seus métodos (accessor methods).
HERANÇA EM JAVA
n
Java adota o modelo de árvore
n
A classe Object é a raiz da hierarquia de
classes à qual todas as classes existentes
pertencem;
n
Quando não declaramos que uma classe
estende outra, ela, implicitamente, estende
Object
HERANÇA EM JAVA
n
Uma classe Java estende apenas uma
outra classe (herança simples ou única)
n
Para criar uma sub-classe, usamos a
palavra reservada extends
HERANÇA EM JAVA
n
Como os métodos são organizados em
uma hierarquia de classes:
HERANÇA EM JAVA
n
Funcionamento quando uma subclasse
define um método que possui o mesmo
nome, tipo de retorno e argumentos que
um método definido em uma superclasse.
HERANÇA EM JAVA
EXEMPLO DE HERANÇA
EM JAVA
SOBRECARGA E
ANULAÇÃO
n
Sobrecarga de Métodos (overloading)
• Definir mais de um método com mesmo nome
mas com assinaturas (parâmetros) diferentes.
n
Anulação de Métodos (overriding)
• Definir um novo método com mesmo nome e
assinatura de outro de uma superclasse.
n
Métodos final não podem ser sobrepostos.
EXEMPLO DE SOBRECARGA E
ANULAÇÃO
THIS e SUPER
n
Usados quando for necessário referenciar
explicitamente a instância (this) ou a
superclasse (super).
CONTROLE DE ACESSO:
‘PROTECTED’
Java permite declararmos um membro
(método ou atributo) que, embora não seja
acessível por outras classes, é herdado
por suas sub-classes
n Para isso usamos o modificador de
controle de acesso protected
n
RESUMO DE VISIBILIDADE
n
Resumindo:
• private: membros que são vistos só pela própria
classe e não são herdados por nenhuma outra
• public: membros são vistos e herdados por qualquer
classe
• protected: membros que são vistos pelas classes do
pacote e herdados por qualquer outra classe
• package: membros que são vistos e herdados pelas
classes do pacote
ESPECIALIZAÇÃO X
EXTENSÃO
Uma classe pode herdar de outra para
especializá-la redefinindo métodos, sem
ampliar sua interface
n Uma classe pode herdar de outra para
estendê-la declarando novos métodos e,
dessa forma, ampliando sua interface.
n As duas coisas podem acontecer
simultaneamente
n
POLIMORFISMO
n Polimorfismo – as definições clássicas (e
confusas) de polimorfismo são:
A - “Capacidade que uma operação [método]
assumir mais de uma implementação em
classes diferentes”
e
B - “Capacidade de um determinado atributo
referenciar objetos de diferentes tipos,
assumindo assim várias formas”
POLIMORFISMO
nA
situação “A” significa que se
considerarmos uma hierarquia de classes
as diferentes subclasses podem redefinir
um determinado método da classe pai (ou
base).
n A situação “B” significa que podemos ter
um atributo (ou variável) definido como do
tipo base, mas referenciando objetos das
subclasses.
POLIMORFISMO
n
A importância do polimorfismo está no fato
de que, em determinadas circunstâncias,
podemos ter um atributo (ou variável) do
tipo base referenciado objetos das classes
derivadas [B] e executaremos um método
definido na classe base porém redefinido
nas subclasses [A].
POLIMORFISMO
n
É a capacidade de um objeto tomar várias
formas
n
A capacidade polimórfica decorre
diretamente do mecanismo de herança
n
Ao estendermos ou especializarmos uma
classe, não perdemos compatibilidade
com a superclasse
POLIMORFISMO
n
Exemplo
• Veículo é uma superclasse
n
Automóvel é subclasse de veículo
• class Veiculo{...}
• class Automovel extends Veiculo {...}
n
Sempre que precisarmos de um Veículo,
podemos usar um Automóvel, ou um
Caminhão, ou Ônibus em seu lugar
POLIMORFISMO
n
Podemos criar um vetor de Veículos. Este
poderá conter Automóveis:
Veiculo [ ]veiculos = new Veiculo[5];
Veiculos[0] = new Veiculo();
Veiculos[1] = new Automovel(“JKL5098”);
POLIMORFISMO
n
Exemplo:
– public class Employee {}
– public class Manager extends Employee
– { private String department;}
– Employee e = new Manager(); (OK)
– e.department = “Financeiro”; (ERRADO)
POLIMORFISMO
n
Polimorfismo é o nome formal para o fato
de que, quando precisamos de um objeto
de determinado tipo, podemos usar uma
versão mais especializada dele. Esse fato
pode ser bem entendido analisando-se a
árvore de hierarquia de classes.
OPERADOR ‘INSTANCEOF’
n
Java mantém informações de tipo em
tempo de execução e nos permite
consultá-las através do comando
instanceof
Veiculo vc = new Veiculo( );
boolean b = vc instanceof Automovel;
// b = false
OPERADOR ‘INSTANCEOF’
n
Utilizado para saber o real tipo do objeto
usado.
CONVERSÃO DE TIPOS
n
Exemplos:
STRING ⇒ VALOR NUMÉRICO
String str = "34";
int num_int = Integer.parseInt(str);
float num_float = Float.parseFloat(str);
double num_double = Double.parseDouble(str);
VALOR NUMÉRICO ⇒ STRING
String valor_str =
Integer.toString(num_int);
Float.toString(num_float);
Double.toString(num_double);
CLASSES ABSTRATAS
n
Ao criarmos uma classe para ser
estendida, às vezes, codificamos alguns
métodos para os quais não sabemos dar
uma implementação, ou seja, um método
que só subclasses saberão implementar.
n
Uma classe deste tipo não pode ser
instanciada pois sua funcionalidade está
incompleta. Tal classe é dita abstrata.
CLASSES ABSTRATAS
EM JAVA
n
Java suporta o conceito de classes
abstratas: podemos declarar uma classe
abstrata usando o modificador abstract.
n
Métodos podem ser declarados abstratos
para que suas implementações sejam
adiadas para as subclasses. Da mesma
forma, usamos o modificador abstract e
omitimos a implementação desse método.
CLASSES ABSTRATAS
EM JAVA
INTERFACES
Java não permite herança múltipla com
herança de código
n Java implementa o conceito de interface
n É possível herdar múltiplas interfaces
n Em Java, uma classe estende uma outra
classe e implementa zero ou mais
interfaces
n Para implementar uma interface em uma
classe, usamos a palavra implements
n
INTERFACES
INTERFACES
n
Uma vez que uma interface não possui
implementação, devemos notar que:
• seus campos devem ser públicos, estáticos e
constantes
• seus métodos devem ser públicos e abstratos
n
Como esses qualificadores são fixos, não
precisamos declara-los (note o exemplo
anterior)
Enumerações
n enum
• Permitem criar um novo tipo de dado
parecido com um primitivo que recebe um
conjunto de constantes ordenadas e
separadas por “,”
• Exemplo
üenum Meses { Jan, Fev, Mar, Abr, Mai, Jun,
Jul, Ago, Set, Out, Nov, Dez };
Enumerações
n “Tá,
mas... Pra que eu quero isso ??”
n Enumerações simplificam o trabalho de
criar certos domínios que não precisam
estar em banco de dados, como por
exemplo constantes que definem
mensagens do sistema, status de
objetos, entre outros.
Enumerações
n Quando
usamos enumerações não
precisamos comparar com números
inteiros, o próprio nome da constante
definida é utilizado.
n Exemplo:
• if ( mes == Meses.Jan) ...
Enumerações
n Mas
não é só isso ! Em Java você
ainda recebe uma incrível forma de
criar enumerações com objetos ! É isso
mesmo! Com direito a atributos e
métodos!
n Ligando agora você ainda recebe esse
incrível kit compilador, ele até flutua na
água !
Enumerações
public enum Mes {
Jan(“Janeiro”, “01”), Fev(“Fevereiro”, “02”),
Mar(“Março” , “03”), Abr(“Abril”, “04”),
Mai(“Maio”, “05”), Jun(“Junho”, “06”);
private final String nome;
private final String numero;
Mes(String n, String num) {
nome = n;
numero = num;
}
public String getNome() { return nome; }
public String getNumero() { return numero; }
}
Enumerações
public class TestaMes {
public static void main(String args[]) {
for (Mes m : Mes.values()) {
System.out.println(m + “ ” +
m.getNome() + “ ” +
m.getNumero());
}
}
}
n Mas que for é esse ??
Collections
nÉ
um conjunto de classes e interfaces
do pacote java.util que fornecem
inúmeras facilidades para trabalhar com
coleções de objetos
n Existem vários algoritmos de ordenação
e detalhes no uso de Collections.
Vamos ver as principais características
para o uso de coleções.
Collections
n Collections
é uma interface que conta
com os seguintes métodos :
• isEmpty() – indica se a coleção está vazia
• contains(Object o) – true/false para o caso
da coleção conter o objeto
• iterator() – retorna o objeto para iteração
pela coleção
Collections –
percorrendo
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class TesteCollections {
public static void main(String[] args) {
ArrayList a = new ArrayList();
percorre(a);
}
private static void percorre(Collection c) {
Iterator i = c.iterator();
while(i.hasNext()) {
System.out.println(i.next());
}
}
}
Collections – ArrayList
n Permite
a criação de um “Array” que
funciona como uma lista. A grande
vantagem é que pode aumentar o
tamanho de forma automática, não é
estático como os arrays tradicionais.
n Além disso, é recomendado para
criarmos uma Lista de objetos de um
determinado tipo.
Collections – ArrayList
n
Principais métodos:
• add(Object o) – adiciona o objeto passado
• add(int i, Object o) – adiciona o objeto na posição
indicada.
• clear() – limpa o arraylist
• get(int i) – retorna o objeto na posição passada
• remove(int i) – remove o objeto na posição
indicada
• size() – retorna o tamanho do arraylist
ArrayList - Exemplo
List<Funcionario> list = new ArrayList <Funcionario>( );
list.add(new Funcionario(nome,endereco,telefone,estado) );
Funcionario f;
for (int i = 0; i < list.size(); i++)
{
f = list.get(i);
f.aumentarSalario(30);
}
Collections – HashMap
n
n
n
Permite criar um hash onde teremos pares
de chave/valor.
Podemos incluir objetos com suas chaves e
as chaves não serão repetidas. Além disso
aceita null como chave.
Permite retornar um iterator para
percorrermos tanto chaves quanto valores.
Collections – HashMap
n
Principais métodos:
• containsKey(Object o) – verifica se o objeto
passado é uma chave
• containsValue(Object o) – verifica se o objeto
passado é um valor
• get(Object key) – retorna o valor da chave
passada
• put(Object key, Object val) – insere na chave key
o valor val.
• values() – retorna uma Collection com os valores
• keySet() – retorna um Set com as chaves (permite
o iterator)
Collections –
percorrendo
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
public class TesteHashMap {
public static void main(String[] args) {
HashMap hm = new HashMap();
hm.put("primeiro", 1);
hm.put("segundo", 2);
System.out.println("containsKey(primeiro)" + hm.containsKey("primeiro"));
System.out.println("containsValue(segundo)" + hm.containsValue("segundo"));
System.out.println("get(primeiro)" + hm.get("primeiro"));
System.out.println("put(terceiro, 3)" + hm.put("terceiro",3));
Collection c = hm.values();
percorre(c);
Collection c2 = hm.keySet();
percorre(c2);
}
private static void percorre(Collection c) {
Iterator i = c.iterator();
while(i.hasNext()) System.out.println(i.next());
}
}
Tratamento de
Exceções
O tratamento de exceções é uma
importante etapa do desenvolvimento de
software.
n Em outras linguagens esse mecanismo é
complexo e/ou confuso.
n Em Java usamos um bloco try/catch que
“tenta” executar um conjunto de instruções
e caso aconteça uma exceção ele a
“pega” e provê o tratamento adequado.
n
Tratamento de
Exceções
Os blocos try/catch são complementados
pelos blocos finally (que são opcionais).
n Blocos finally são *sempre* executados,
somente uma instrução System.exit() pode
impedir um bloco finally de executar.
n Usamos blocos finally para executar
instruções de “limpeza” tal como fechar
statements, resultsets e conexões a
banco.
n
Tratamento de
Exceções
public int getInteiro()
{
int i = 0;
try {
String str = JOptionPane.showInputDialog
(“digite um numero”);
i = Integer.parseInt(str);
} catch (NumberFormatException e) {
System.out.println(“string nao pode ser convertida”);
i = -1;
} finally {
System.out.println(“esta e a ultima parte”);
}
return i;
}
Java – Datas
n
Usamos as seguintes classes:
• Calendar
• Date
• DateFormat
n
As datas são contadas a partir de January 1,
1970 00:00:00.000 GMT (Gregorian)
baseado no padrão POSIX
n
Procurem na Internet – problemas com o ano
2038...
Java – Datas
n
A classe Calendar não pode ser
instanciada diretamente, para isso
usamos o método getInstance() como a
seguir :
Calendar c = Calendar.getInstance();
n
Com esta instancia em mãos temos a
representação do instante em que o
código foi executado e podemos
referenciar data e hora
Java – Datas
n
Uma atividade comum é usar o método
getTimeInMillis() para recuperar o instante
atual em milissegundos para contabilizar
quanto tempo uma certa atividade tomou:
long l = c.getTimeInMillis();
n
Se fizermos isso antes e depois de uma
determinada tarefa, podemos subtrair os
tempos obtidos, mas medir uma única
instrução pode não gerar diferença.
Java – Datas
n Na
classe Calendar ficam definidas
várias
constantes
que
permitem
acessar as informações relativas a dia,
mês, ano, hora, minutos, segundos
entre outros.
Calendar
public static void main (String args[])
{
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.DAY_OF_MONTH));
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.println(c.get(Calendar.DAY_OF_YEAR));
System.out.println(c.get(Calendar.HOUR));
System.out.println(c.get(Calendar.HOUR_OF_DAY));
System.out.println(c.get(Calendar.MINUTE));
System.out.println(c.get(Calendar.MILLISECOND));
System.out.println(c.get(Calendar.MONTH));
System.out.println(c.get(Calendar.SECOND));
System.out.println(c.get(Calendar.WEEK_OF_MONTH));
System.out.println(c.get(Calendar.WEEK_OF_YEAR));
System.out.println(c.get(Calendar.YEAR));
}
Java – DateFormater
n Para
formatar uma String como Date ou
converter um Date para String usamos
a classe DateFormater.
DateFormater
public static void main (String args[])
{
Calendar c = Calendar.getInstance();
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);
// podemos usar FULL, LONG, MEDIUM ou SHORT
System.out.println(df.format(c.getTime()));
try {
df = DateFormat.getDateInstance(DateFormat.SHORT);
c.setTime(df.parse("05/05/2007"));
c.set(Calendar.HOUR,13); c.set(Calendar.MINUTE,15);
df = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(df.format(c.getTime()));
System.out.println(df.parse("05/05/2006"));
df = DateFormat.getTimeInstance(DateFormat.SHORT);
System.out.println(df.format(c.getTime()));
System.out.println(df.parse("10:10 pm"));
df = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT);
System.out.println(df.format(c.getTime()));
System.out.println(df.parse("05/05/2006 10:34 am"));
} catch (ParseException e) {
e.printStackTrace();
}
}
Exercício
n Escreva
um programa que receba uma
data
de
nascimento
(formato
americano) através de um JOptionPane
e calcule a idade em segundos.

Documentos relacionados