Em Java, a declaração de novas classes é feita através da construção class.
class Pessoa{
}
class Pessoa {
private String nome;
public String getNome() {
return this.nome;
}
public void setNome(String nomeP) {
this.nome = nomeP;
}
}
Estrutura Geral de Classe Java
Estrutura Geral de Classe Java
[package pacote;]
[import bibliotecas;]
[modificador] class NomeClasse {
[modificador] [tipo] nomeAtributo;
[modificador] [tipoRetorno] nomeMetodo ( [parametros] ) {
// corpo do metodo
}
}
Estrutura Geral de Classe Java
A palavra-chave “package”:
package pacote;
public class Classe{
...
}
A declaração “package” permite ao compilador conhecer em qual pacote as classes ou
interfaces incluídas devem ser definidas.
É a primeira declaração permitida no código fonte Java.
Estrutura Geral de Classe Java
A palavra-chave “import”:
import java.util.ArrayList;
public class Classe{
ArrayList lista;
...
}
Organização dos Arquivos:
java.util.Vector = ...\java\util\Vector.java
javax.swing.JFrame = ...\javax\swing\JFrame.java
javax.swing.* = ...\javax\swing\*.*
A declaração “import” permite especificar quais classes de outros pacotes
iremos ter visibilidade.
Logo após a declaração “package” podem vir uma ou mais declarações “import”.
Atributos
Java é uma linguagem fortemente tipada, isto é, toda a variável possui
um tipo que não pode ser alterado
Variáveis são sempre declaradas dentro de blocos
Podem ser declaradas em qualquer ponto do programa
Definicão:
[modificador] [tipo] nomeAtributo;
Tipos podem ser primitivos ou referência a objetos.
Exemplo:
int idade;
Atributos
São exemplos de atributos válidos:
AvgTemp count a4 $test this_is_ok
São exemplos de atributos inválidos:
2cont high-temp not/ok
Métodos
Um método em Java é equivalente a uma função, subrotina ou procedimento em outras
linguagens de programação. Não existe em Java o conceito de métodos globais, portanto
todos os métodos pertencem a uma classe.
[modificador] [tipoRetorno] nomeMetodo ( [parametros] ) {
// corpo do metodo
}
Comentários
Palavras Reservadas
Java Keywords
Tamanhos dos Tipos
Tipo
Precisão (bit)
boolean
1
byte
8
int
32
short
16
long
64
float
32
double
64
char
16
Operadores Aritméticos
Operador
Resultado
+
Adição
-
Subtração
*
Multiplicação
/
Divisão
%
Módulo
Resultado de Operações Aritméticas
Operadores
Resultado
Pelo menos um operando é long e nenhum é float ou double
long
Nenhum operando é float, double ou long
int
Pelo menos um operando é double
double
Pelo menos um operando é float, nenhum é double
float
Operadores Unários
Operador
Resultado
++
Incremento
--
Decremento
+
Indica que o valor é positivo
-
Indica que o valor é negativo
!
Inverte o valor de um boleano
~
Inverte um padrão de bits
()
Organiza a precedência em uma operação
Operadores Relacionais
Operador
Resultado
==
Igual a
!=
Diferente de
>
Maior que
<
Menor que
>=
Maior que ou igual a
<=
Menor que ou igual a
instanceof
instância de
Operadores Lógicos
Operador
Resultado
&&
AND
||
OR
&
Bitwise AND
|
Bitwise OR
Comando de atribuição
identificador = valor
Exemplo:
x = 10;
x = y = 15;
Operação com atribuição
Operador
Resultado
Exemplo
Operação Equivalente
+=
Adição com atribuição
x += y
x = x + y
-=
Subtração com atribuição
x -= y
x = x - y
*=
Multiplicação com atribuição
x *= y
x = x * y
/=
Divisão com atribuição
x /= y
x = x / y
%=
Módulo com atribuição
x %= y
x = x % y
Operador Ternário
expr1 ? expr2 : expr3
Exemplo:
razao = denom == 0 ? 0 : num / denom;
O operador “?” não é propriamente um comando, mas um operador que realiza avaliação
seletiva de seus operandos mediante o valor de uma expressão booleana semelhante a do
comando if-else. Se esta expressão for true, então um primeiro operando é avaliado;
se for false, então o segundo operando é avaliado.
Orientação a objetos é uma maneira de programar que ajuda na organização e resolve
muitos problemas enfrentados pela programação procedural, como a distribuição e/ou replicação
da lógica em diversos pontos do código fonte.
A OO busca uma solução ideal para concentrar todas características e responsabilidades
em um único lugar (classe) e não espalhadas no código.
Orientação a Objetos (OO)
Orientação a objetos vai ajudar em:
Se organizar e escrever menos
Concentrar as responsabilidades nos pontos certos
Flexibilizar sua aplicação, encapsulando a lógica de negócios.
Outra enorme vantagem é o polimorfismo das referências,
que veremos posteriormente.
Criando um tipo
Pode-se considerar a entidade Conta como importante dentro de um
sistema bancário.
Para esse sistema, é importante:
número da conta,
tipo de conta,
nome do cliente,
saldo,
limite
E a conta poderia fazer:
sacar ou depositar uma quantidade x,
imprimir o nome do dono da conta,
devolver o saldo atual,
transferir uma quantidade x para outra conta,
retornar o tipo de conta (corrente, poupança, etc.)
Mas dessa especificação, não se pode acessar saldo de ninguém, é preciso primeiro
criar uma conta específica para depois solicitar algo dela.
Criando um Tipo
Com isso, definimos a classe (especificação):
A qual pode criar objetos reais (contas de verdade) que podem de armazenar valores:
Definição de Classe
Vem da taxonomia da biologia
Representa que todas as entidades de uma mesma classe compartilham uma série de atributos e comportamentos
Nem todas as entidades de uma classe são iguais, podem variar os valores de atributos e como realizam os comportamentos
Exemplo:
Não se pode fazer com que um Carro ande, é preciso primeiro construir um carro específico (instanciar) para depois da construção solicitar que ele ande.
Uma receita de bolo não é comestível, é uma especificação. O que se come é o quando essa receita é executada criando o bolo a partir das instruções.
Pergunta: A planta de uma casa é uma classe ou um objeto? Por quê?
Um classe em Java
Revendo a conta anterior:
class Conta {
int numero;
String nome;
double saldo;
double limite;
// ..
}
Por enquanto, declara-se o que toda conta deve ter – os atributos que toda conta que, quando criada, vai ter.
Repare que as variáveis foram declaradas fora do main, dentro do escopo da classe, sendo assim chamada de variável de objeto, ou atributo.
Criação de Objetos como Atributos de Classe
Criação e Uso de Objetos
Digamos que uma classe chamada Programa.java deve utilizar a conta criada
Para usar, é necessário criar (construir, instanciar) e, para isso, basta usar a palavra chave new com os parênteses (mais tarde falaremos disso)
class Programa {
public static void main(String[] args) {
new Conta();
}
}
Esse código cria a conta, mas não é possível a acessar depois disso, portanto precisamos de um objeto para a referenciar:
class Programa {
public static void main(String[] args) {
Conta minhaConta;
minhaConta = new Conta();
//E agora se pode utilizar as variáveis:
minhaConta.nome = "Rodrigo";
minhaConta.saldo = 1000.0;
System.out.println("Saldo atual: " + minhaConta.saldo);
}
}
Métodos
Métodos
Métodos são utilizados para definir os comportamentos (funções) de uma classe – o que ela faz!
Exemplo: como é realizado o saque?
class Conta {
int numero;
String nome;
double saldo;
double limite;
void saca(double quantidade) {
double novoSaldo =
this.saldo - quantidade;
this.saldo = novoSaldo;
}
}
Atente para:
A palavra void diz que quando invocar o método, nada será retornado a quem pediu
Quando alguém solicitar um saque, é necessário informar a quantidade como um argumento do método
Pode-se declarar dentro do método outras variáveis, como novoSaldo que só existe dentro do método
A palavra this é usada para referenciar o atributo da classe.
Neste caso, o saque pode estourar o valor limite fixado pelo banco.
Para mandar uma mensagem ao objeto e pedir que ele execute um método, usamos o ponto (invocação do método):
class SacaEDepositaTest {
public static void main(String[] args) {
// criando a conta
Conta minhaConta;
minhaConta = new Conta();
// alterando os valores de minhaConta
minhaConta.nome = "Rodrigo";
minhaConta.saldo = 1000;
minhaConta.saca(200); // saca 200 reais
minhaConta.deposita(500); //deposita 500 reais
System.out.println(minhaConta.saldo);
}
}
Qual é o resultado da execução do código acima?
1300.0
Métodos
Um método sempre tem que retornar alguma coisa, nem que essa coisa seja nada (void). Observe
o retorno dos métodos
class SacaEDeposita {
public static void main(String[] args) {
// criando a conta
Conta minhaConta = new Conta();
minhaConta.saldo = 1000;
System.out.println(minhaConta.saca(2000));
}
}
Quando declaramos uma variável para associar a um objeto, na verdade, essa variável não guarda o objeto, e sim uma maneira de acessá-lo, chamada de referência.
É por esse motivo que, diferente dos tipos primitivos como int e long, precisamos dar new depois de declarada a variável:
É correto dizer que minhaConta se refere a um objeto e não que é um objeto.
Lembre-se, uma variável nunca é um objeto
public static void main(String args[]) {
Conta minhaConta;
minhaConta = new Conta();
Conta minhaContaDosSonhos;
minhaContaDosSonhos = new Conta();
}
Objetos e Referências
Objetos e Referências
Objetos e Referências
Método transfere()
Como realizar uma trasferência?
Criando um método transfere(Conta conta1, Conta conta2, double valor)?
Essa é uma solução procedural. Ao chamar o método transfere, já existe um objeto do tipo Conta (o this), portanto o método recebe apenas um parâmetro do tipo Conta, a Conta destino (além do valor)
public class Conta {
int numero;
String nome;
double saldo;
double limite;
boolean saca(double valor) {
if (this.saldo < valor) {
return false;
} else {
this.saldo = this.saldo - valor;
return true;
}
}
void deposita(double quantidade) {
this.saldo += quantidade;
}
boolean transfere(Conta destino, double valor) {
boolean retirou = this.saca(valor);
if (retirou == false) {
// não foi possível sacar
return false;
} else {
destino.deposita(valor);
return true;
}
}
}
Método transfere()
Para realizar a transferência:
class Programa {
public static void main(String[] args) {
// criando a conta
Conta minhaConta;
minhaConta = new Conta();
minhaConta.nome="Rodrigo";
minhaConta.saldo=1000;
Conta outraConta = new Conta();
outraConta.nome="Rodrigo";
outraConta.saldo=1000;
//minhaConta transfere para outraConta 100 reais
minhaConta.transfere(outraConta, 100);
System.out.println("Saldo da Minha Conta = "+minhaConta.saldo);
System.out.println("Saldo da Outra Conta = "+outraConta.saldo);
}
}
//Saldo da Minha Conta = 900.0
//Saldo da Outra Conta = 1100.0