Java e Orientação a Objetos - Conceitos Principais -
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a Objetos em Java
Orientação a Objetos
nHistória da OO
• Evolução a partir da Programação Estruturada
üProgramação sob demanda
üProgramação estruturada
üOrientação a Objetos
Orientação a Objetos
nParadigma Estruturado
• O foco era no processo;
• Os dados + rotinas eram “misturados”, ou seja, eram um conjunto de bibliotecas de funções que iam sendo chamadas em cada unidade (unit) do programa.
Exemplo do paradigma estruturado
Cadastrar
o cliente Efetuar o login
Efetuar pedido Consultar
produtos
Calcular frete
Confirmar
pedido Efetuar
Pagamento Efetuar
compra Acompanhar
Frete Emitir
Nota Fiscal
Confirmar
recebimento Emitir relatório de compras
Orientação a Objetos
n Paradigma da Orientação a Objetos
• O foco é achar as entidades do meu sistema, ou seja, “as coisas” que devemos manipular;
• Essas entidades são elementos do sistema, que fazem algo específico, ou seja,
possuem RESPONSABILIDADES!!!
• Esses elementos >> OBJETOS!!!!
Orientação a Objetos
n No nosso exemplo, se formos pensar OO, devemos descobrir os objetos que precisamos programar e iremos manipular em nosso sistema;
n Quais seriam?
Exemplo do paradigma orientado a objetos
Cadastrar
o Cliente Efetuar o Login
Efetuar Pedido Consultar
Produtos Calcular
Frete
Confirmar
pedido Efetuar
Pagamento Efetuar
Compra Acompanhar
Frete Emitir
Nota Fiscal
Confirmar recebimento
Emitir relatório de compras
Descobrindo os Objetos
n No sistema do exemplo, quais são os objetos?
n Cliente
n Produto
n Pedido
n Compra
n Nota Fiscal
n Pagamento
Como representamos cada objeto?
Quais são os dados de cada um?
O que cada objeto faz ou precisa fazer?
Quais “serviços” cada objeto oferece?
Descobrindo os Objetos
n Cada objeto precisa ser pensado (ou encontrado) como alguém que possua responsabilidades;
• Por exemplo, se tivermos o objeto Produto, ele deverá fazer tudo que se espera de um produto no sistema.
• Devemos então pensar em:
üQuais são os dados de todo produto?
üQuais são as operações que produto precisa para manipular seus dados, ou gerar
informações que um produto precisa?
Orientação a Objetos
n Na Orientação a objetos:
n Os dados de um objeto _ Atributos
n As suas operações _ Métodos
Estrutura de um Objeto
n Atributos
• Cada objeto precisa ser representado no sistema, e será através de seus dados;
• Por exemplo, precisamos saber quais são os dados que cada Produto precisa. Logo,
teremos:
código de identificação, nome, fornecedor, tipo, preço unitário, medida, data de fabricação
• Precisamos definir o tipo de cada atributo
Estrutura de um Objeto
n Métodos
•
Precisamos programar as “responsabilidades” do objeto, ou seja, o que precisamos fazer com cada objeto, quais operações precisamos programar para
“mexer” com um objeto?
•
No caso do Produto, podemos ter:
üExibir seus dados;
üCalcular o imposto, mediante uma taxa;
üVerificar se seu código é válido
üVerificar se já passou da validade, mediante uma data fornecida;
•
Os métodos são implementados como funções do
objeto.
Estrutura de um Objeto
n Métodos – definem o comportamento dos objetos definidos pela classe.
n Para construirmos um método, ele é como uma função em C, podendo ter
parâmetros de entrada e retorno
n
Um método sempre estará manipulando os dados (atributos) da classe a qual pertence!
Estrutura de um Objeto
n Repare que todos os objetos de PRODUTO que eu tiver em meu sistema terá os mesmos atributos e os mesmos métodos;
n O que será diferente são os valores de cada um dos produtos, ou seja, teremos produtos diferentes;
n Mas tudo é PRODUTO!
CLASSES
n Logo, iremos ter vááááários produtos em meu sistema;
n Só que para cria-los, precisamos de
“projetar” como será cada produto;
n Esse “projeto” é a estrutura de um objeto, ou seja, quais são os atributos DE
TODOS os Produtos e quais os métodos que cada um terá.
n Esse projeto do objeto é a CLASSE!
CLASSES DE OBJETOS
n Uma classe é um modelo ou protótipo que define as propriedades (atributos) 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
CLASSES DE OBJETOS
CLASSES DE OBJETOS
CLASSES DE OBJETOS
n Classes X Objetos
Ø Uma classe é um “molde” a partir do qual vários objetos são criados.
ØO que interessa a um software são os objetos!
ØSão eles que se guardam, consultam,
exclui, verifica, agrupa, etc.
Criando Objetos
n Mas para termos objetos, precisamos cria-los a partir de sua classe.
• Para criarmos, precisamos definir “valores”
para cada atributo do objeto e saber que ele terá os métodos implementados na classe
n A operação de criação de objetos chama-se INSTANCIAÇÃO!
Criando 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.
Classes e 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 e 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.
Classes e 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
Java e Orientação a Objetos - Implementação -
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a
Objetos em Java
ORIENTAÇÃO A OBJETOS EM JAVA
n
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”.
REPRESENTAÇÃO DE UMA CLASSE
Atributos
Métodos Classe
REPRESENTAÇÃO DE UMA CLASSE
ESTRUTURA DE UMA CLASSE EM JAVA
class Produto
{
int codigo;
String nome;
Date dataFabricacao;
float preco;
void exibirProduto() {
…
}
float calcularImposto(int taxa) {
…
}
}
CLASSES EM JAVA
n
Declaração:
class Produto{
...
}
n
Propriedades (atributos): dados que as instâncias da classe conterão:
class Produto {
int codigo;
String nome;
Date dataFabricacao;
float preco;
}
CLASSES EM JAVA
Outro exemplo:
class Veiculo {
// Propriedades
float velocidadeMaxima;
float capacidadeTanque, consumo;
protected int potencia, ano;
private String marca, modelo, cor;
public String chassis, placa;
...
// Métodos ...
public float autonomia ( ) {
return capacidadeTanque * consumo;
} }
CLASSE = “Molde de Objetos”
Objeto Carro:
Instância 3 Classe:
Carro Esportivo
Tempo de Execução Tempo de
Compilação
codigo nome
dataFabricacao fabricante
preco
exibirFuncionario() calcularImposto(taxa) verificarValidade(data)
Produto prod1;
prod1
INSTANCIAÇÃO
codigo nome
dataFabricacao fabricante
preco
126798
“Biscoito”
12/05/2010
“Mabel”
3.50 exibirFuncionario() calcularImposto(taxa) verificarValidade(data)
Produto prod1 = new Produto();
prod1
Um objeto de uma classe é criado utilizando-se a palavra new.
Produto prod1 = new Produto()
EXEMPLO DE INSTANCIAÇÃO
Produto prod2 = new Produto()
Produto prod3 = new Produto()
prod1
prod2
prod3
class Aplicacao{
public static void main(String args[]) {
Produto prod1 = new Produto();
Produto prod2 = new Produto();
Produto prod3 = new Produto();
if (prod1.TemEstoque()) prod1.darBaixa();
if(prod2.TemEstoque()) prod2.darBaixa();
}
}
EXEMPLO
Tempo de Execução
Objeto Produto Instancia 1
Objeto Produto Instancia 3
Objeto Produto Instancia 2 Instanciação de
Objetos
REFERÊNCIAS PARA OBJETOS
n Alocação de memória:
Produto p1;
// cria apenas a referência
Produto p1 = new Produto();// 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.
Exemplo Prático
n Classe Retangulo
• Atributos:
üaltura e base
• Métodos:
üexibir()
üexibirArea()
üexibirPerimetro()
n Classe TestaRetangulo
• void main()
REFERÊNCIA PARA OBJETOS
n Alocação de memória
n Cuidado com a cópia de objetos!
Produto 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 (.)
Produto p1 = new Produto();
p1.nome = "Biscoito Croc";
p1.valor = 3.50;
Produto p2 = new Produto();
p2.nome = "Arroz Padua";
p2.valor = 11.70;
p1 = p2;
p1.fabricante = "Mantimentos LTDA";
// p1 e p2 terão o mesmo fabricante, pois p1 e p2 estão na mesma área de memória (p2 foi para p1)
OBTENÇÃO DE VALORES
n Os valores das propriedades podem ser obtidos facilmente
System.out.pritln("Nome de 1 = " + p1.nome);
System.out.pritln("Preco de 2 = " + p2.preco);
Nome de 1 = Biscoito Croc Preco de 2 = 11.70
MÉTODOS
n Implementam as funções de uma
classe (ou seja, seu comportamento)
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 Corpo
Retorno
ASSINATURA DE UM MÉTODO
O tipo de retorno pode ser void
float calcularImposto (int taxa) Tipo de
Retorno Nome Parâmetros
CHAMADAS DE MÉTODOS
n
A troca de mensagens entre os objetos é realizada através da chamada de métodos com passagem de argumentos
n
Exemplo
...
p1.calcularImposto(30);
//Calculou o imposto baseado na taxa de 30%
...
EXEMPLO
class ProgramaPrincipal {
public static void main (String args[]) {
Produto prod;
prod = new Produto(“Feijão”,7.60,…);
}
}
prod.calcularImposto(30); Executando o método
Método main()
class ProgramaPrincipal {
public static void main (String args[])
{
Produto prod;
prod = new Produto(“Feijão”,7.60,…);
} }
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.
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
GLOBAIS X LOCAIS
...
String alunos[]; //global ao método float listaAprovados() {
for (int i = 0; i < alunos.length; i++) { String nome = alunos[i];
System.out.println(i + ": " + nome);
} }
Exercício Prático
Para testar!
n Classe TestaProduto
• void main()
Exercício Prático
q Classe TestaProduto
üCriar 2 objetos produtos e atribuir valores para cada um deles
üCalcular 15% de imposto para cada um deles
üVerifique qual deles possui o maior imposto e deste, mostre seus dados
üDo outro produto (que possui o imposto
menor) aumente em 100,00 seu valor
Java e Orientação a Objetos - Construtores -
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a Objetos em Java
CONSTRUTORES
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)
n
Usados na criação de um objeto através do comando new
n
Possuem o mesmo nome da classe e não
têm tipo de retorno!
CONSTRUTOR PADRÃO
n
A linguagem Java declara um construtor padrão, vazio, que não recebe nenhum parâmetro
Produto p1 = new Produto();
n
Quando declaramos um novo construtor, esse construtor padrão deixa de existir e é substituído pelo novo construtor
class Produto {
int codigo; String nome;
Produto () { }
}
CONSTRUTORES
n
Podem receber parâmetros, que podem servir para inicialização dos atributos da classe
n
Uma classe pode ter vários construtores
class Produto{
int
codigo;String
nome;public
Produto (int cod, String n) {
codigo= cod;
nome
= n;
}
}
CONSTRUTORES
n Deve ser usado no momento da criação do objeto:
Produto p1 = new Produto(1002,”Arroz”);
Produto p2;
p2 = new Produto(2004,”Shampoo”);
Produto p3 = new Produto();
CONSTRUTORES
Construtor
CONSTRUTORES
Chamada ao construtor
PALAVRA RESERVADA “This”
n
As vezes é necessário que o objeto se referencie;
n
Muitas vezes, os nomes dos parâmetros não são claros o bastante para sabermos “o que passar” para o método;
• Logo, procuramos colocar os nomes dos parâmetros iguais aos dos atributos;
n
Existe uma palavra reservada this que
significa uma referência ao próprio objeto,
para diferenciar o que é “do objeto”
(atributo)e
o que não é
(parâmetros, outras variáveis)PALAVRA RESERVADA “This”
O que é PARÂMETRO?
O que é ATRIBUTO?
O que é PARÂMETRO?
PALAVRA RESERVADA “This”
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
n A 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 () { x = 20;
y = 10;
}
Ponto (int x, int y) { this.x = x;
this.y = y;
} }
SOBRECARGA DE CONSTRUTORES
n
A sobrecarga de construtores visa definir formas diferentes de criar um objeto
n
Exemplo:
Ponto p1 = new
Ponto();//p1 está em (20,10)
Ponto p2 = new
Ponto(1,2);//P2 está em (1,2)
SOBRECARGA DE CONSTRUTORES
n
Um construtor pode chamar outro construtor.
n
Isso se chama “encadeamento de construtores”.
n
Para isto é necessário usar a palavra reservada this.
n
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;
}
}
Java e Orientação a Objetos
A API Java
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a Objetos em Java
Classes da API
n Java apresenta várias classes “prontas”
com diversos recursos para serem usados pelos programadores.
n Para isso, você precisa:
• Saber onde encontrar a classe
(pacote Java);
• Conhecer seu conteúdo
(atributos + métodos);
• Descobrir na classe quais métodos possuem o que se deseja;
• Em caso de métodos, conhecer a sua
assinatura, que define como usa-lo;
Acessando a API
n Saber onde achar as classes, basta acessar o JavaDocs!
n JavaDocs é a documentação da API do Java e pode ser acessada de 3
maneiras:
• Diretamente via site do Java
(http://docs.oracle.com/javase/7/docs/api/)
• Pela sua IDE, caso ela tenha instalado o JavaDocs;
• Baixar e instalar localmente em seu computador;
JavaDocs
Descrição da classe
^ Pacotes de classes
^ Classes
Classe String
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 e = ""; // uma string vazia String alo = "Alo Pessoal";
String nova;
nova = "Sou nova";
String nome = new String("Antonio");
Classe String - Métodos importantes
n
String toLowerCase(): retorna a string de chamada toda em minúscula
n
String toUpperCase(): retorna a string de chamada toda em maiúscula
n
boolean endsWith(String s): verifica se a string de chamada termina com a string s
n
String startsWith(String s): verifica se a string de chamada inicia com a string s
n
String replace(char atual, char novo): troca todas as ocorrências de um caracter (atual) por outro
(novo)
Classe String - Métodos importantes
n
int length(): retorna o tamanho da string;
n
String trim(): retorna a string sem espaços em brancos antes e depois da mesma;
n
String substring(int idxInicial, int idxFinal+1):
retorna um pedaço da string de idxInicial até idxFinal
n
boolean contains(String s): verifica se a string de chamada possui a substring s;
n
boolean isEmpty(): retorna se a string está ou não
vazia
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
Outras classes da API
n Outras classes da API são igualmente importantes:
n
Math: operações matemáticas
n
Date e Calendar: manipulação de datas e hora
n
DecimalFormat: formatos de números
n
Scanner: entrada de dados
n
Integer, Float, Double: manipulação de cada
tipo de dados, como objeto
Classe Math
n Pesquisa sobre os métodos dessa classe, particularmente:
• abs()
• sqrt()
• random()
• pow()
• max()
• min()
• round()
Observe suas assinaturas e qual o objetivo
de cada um.
Java e Orientação a Objetos
Entrada de dados
Classe Scanner
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a
Objetos em Java
Entrada de Dados
n O Java possui várias classes para que possamos realizar a entrada de dados de variáveis, tal como fazemos com o comando scanf na linguagem C
n Classes para leitura de dados da API Java.
• DataInputStream (Java 1 e superior)
• Scanner (Java 5).
• Console (Java 6).
Entrada de Dados
n
A classe mais “estável”, mais utilizada e mais fácil de realizarmos a entrada de dados será a classe Scanner!
n
Ela possui vários métodos para entrada de dados, dentre eles:
•
next() ou nextLine(): entrada de string
•
nextInt(): entrada de nº inteiro
•
nextFloat(): entrada de nº float
•
nextDouble(): entrada de nº double
•
nextChar(): entrada de 1 caracter do tipo char
Como utilizarmos a classe Scanner
1. Inicialmente, devemos importar a classe Scanner em nosso arquivo .java para podermos utiliza-la.
import
java.util.Scanner;n Exemplo
import
java.util.Scanner;class Produto {
....
}
Como utilizarmos a classe Scanner
2. Depois, quando precisarmos no código de realizar a entrada de dados, precisamos criar um objeto da classe Scanner
Scanner sc = new Scanner (System.in);
•
O nosso objeto chama-se ‘sc’ (nome da variável)
•
Temos que passar o modo de leitura para o construtor do Scanner
_System.in
•
Isso habilita o Scanner para realizar a leitura via
tela (e não de outro modo, como leitura de
arquivo, de imagem, ou outro qualquer)
Fazendo a leitura via Scanner
3.
Agora só começar a usa-lo!
Exemplo:
int idade;
float salario;
String nome;
Scanner sc = new Scanner(System.in);
println("Digite sua idade: ");
idade = sc.nextInt();
println("Digite seu salário: ");
salario = sc.nextFloat();
println("Digite seu nome: ");
nome = sc.nextLine();
Leitura de Strings
n Há uma diferença importante na leitura de strings entre os métodos next() e nextLine()
n next(): faz a leitura de uma string, porém só atribui até o 1º espaço em branco que encontrar, desconsiderando o resto da string digitada. Exemplo:
String nome;
Scanner sc = new Scanner(System.in);
println("Digite seu nome: ");
nome = sc.next();
Se ele digitou "Pedro da Silva"
Irá atribuir somente "Pedro"
Leitura de Strings
n nextLine(): faz a leitura de uma string, considerando toda a string digitada. Exemplo:
String nome;
Scanner sc = new Scanner(System.in);
println("Digite seu nome: ");
nome = sc.nextLine();
Se ele digitou "Pedro da Silva"
Irá atribuir "Pedro da Silva"
Portanto, é o método mais recomendado para leitura de Strings com Scanner!
Leitura de Strings
n Porém, há um problema ao usar o nextLine() !!!
n Quando há uma digitação de um número anteriormente, o ENTER que você dá para atribuir o valor é capturado pelo netxLine(), impedindo a entrada de dados de sua string.
n Logo, recomendamos usar um nextLine() sozinho antes da atribuição da string na variável:
int idade;
String nome;
println("Digite sua idade: ");
idade = sc.nextInt();
println("Digite seu nome: ");
sc.nextLine();
nome = sc.nextLine();
Digitação de um inteiro antes e usando um nextLine() antes da digitação da string para pegar o ENTER
Digitação de um inteiro antes e usando um nextLine() antes da digitação da string para pegar o ENTER
Java e Orientação a Objetos
Encapsulamento
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a Objetos em Java
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
Exemplo
Exemplo
n Da forma como está, podemos ter acesso direto (público) nos atributos cpfCorrentista e senha;
n Este acesso não poderá ser público,
pois há regras para se atribuir valores a estes atributos, bem como para
recupera-los
Exemplo
n
senha - só poderá atribuir um valor se:
•
Tiver 8 dígitos no mínimo;
•
Tiver pelo menos 1 letra maiúscula e um dígito;
•
A senha nunca poderá ser acessada;
n
cpfCorrentista:
•
Ter somente 11 dígitos;
•
Não possuir pontos nem traço;
•
O código verificador corresponder ao numero digitado;
•
Só será recuperado com os pontos e o traço;
Problemas de acesso
n
Como a senha é pública, podemos:
Conta c1 = new Conta();
c1.senha = "sh1098";
System.out.println("Senha: " + c1.senha);
n
Ou seja, temos acesso direto, sem passar pelas regras para senha:
senha - só poderá atribuir um valor se:
» Tiver 8 dígitos no mínimo;
» Tiver pelo menos 1 letra maiúscula e um dígito;
» A senha nunca poderá ser acessada;
Problemas de acesso
n
Mesma coisa para CPF:
Conta c1 = new Conta();
c1.cpfCorrentista = "passarinho";
System.out.println("CPF: "+ c1.cpfCorrentista);
n
Regras para CPF (violadas):
» Ter somente 11 dígitos;
» Não possuir pontos nem traço;
» O código verificador corresponder ao numero digitado;
» Só será recuperado com os pontos e o traço;
Restringindo o acesso
n
senha - só poderá atribuir um valor se:
•
Tiver 8 dígitos no mínimo;
•
Tiver pelo menos 1 letra maiúscula e um dígito;
•
A senha nunca poderá ser acessada;
n
cpfCorrentista:
•
Ter somente 11 dígitos;
•
Não possuir pontos nem traço;
•
O código verificador corresponder ao numero digitado;
•
Só será recuperado com os pontos e o traço;
class Conta {
privateString numero;
privateString cpfCorrentista;
privateString senha;
...
}
Restringindo o acesso
Acesso privado
n
Desta forma, não se tem mais o acesso DIRETO a senha ou cpf:
Conta c1 = new Conta();
c1.senha = "sh1098";
System.out.println("Senha: " + c1.senha);
c1.cpfCorrentista = "passarinho";
System.out.println("CPF: "+ c1.cpfCorrentista);
Métodos de acesso
n
Para isso, criamos métodos de acesso (accessor methods) para os atributos privados:
n
São os famosos métodos get e set
•
Método Get: para capturar, “pegar ” o valor
•
Método Set: para atribuir um valor ao atributo privado;
Método GET
n
Formato:
tipodoatributo getXxxx () { ...
return valordoatributo;
}
Xxxx: é o nome do atributo, com a primeira letra maiúscula (padrão da OO);
Exemplos:
String getSenha()
int getNumero()
float getSalario()
Método SET
n
Formato:
void setXxxx (tipodoatributo
novoValor){ ...
atributo
= novoValor;
}
Xxxx: é o nome do atributo, com a primeira letra maiúscula (padrão da OO);
Exemplos:
void setSenha(String senha) void setNumero(int numero) void setSalario(float sal)
Aplicando GET/SET
n
No exemplo de ContaBancaria, podemos então fazer os métodos get/set para senha e cpf, colocando então as regras de atribuição e recuperação previstas, implementadas cada um deles;
n
Desta forma, toda vez que se atribuir ou
recuperar os valores, como SEMPRE
passará pelo get/set, serão aplicadas as
regras;
Aplicando GET/SET
n
Para Senha:
String getSenha () {
//regras para preparar a saida da senha
return
this.senha;}
void setSenha (String novaSenha) {
//regras para atribuição
this.senha
= novaSenha;
}
Aplicando GET/SET
n
Para Senha:
String getSenha () {
//regras para preparar a saida da senha
return
this.senha;}
void setSenha (String novaSenha) {
//regras para atribuição
this.senha
= novaSenha;
Podemos optar por não implementar a captura da senha caso de fato não há necessidade de acesso a mesma.
Aplicando GET/SET
n
Para cpfCorrentista:
String getCpfCorrentista() {
//regras para preparar a saida do cpf return this.cpfCorrentista;
}
void setCpfCorrentista(String cpf) {
//regras para atribuição this.cpfCorrentista = cpf;
Usando métodos Get/Set
n
Desta forma, usamos os get/set para acesso à senha ou cpf:
Conta c1 = new Conta();
c1.setSenha("sh1098");
c1.setCpfCorrentista("passarinho");
System.out.println("CPF: "+
c1.getCpfCorrentista());
Observe que os dados passados serão invalidados, pois as regras estão implementadas em cada método e verifica a
integridade dos dados. No caso de dados válidos, serão atribuidos/recuperados de acordo com as mesmas regras.
Classe com Get/Set
Notas Práticas sobre Get/Set
n
Se os atributos estão private e todo acesso agora será feito por get/set, sempre que precisar de pegar os valores dos atributos, mesmo dentro de métodos públicos da classe faça via get !
n
A mesma coisa é para atribuir um valor, mesmo dentro de métodos públicos (sobretudo Construtores), faça via set !
n
Salvo exceções onde, dentro dos métodos públicos da classe você precisa do dado
“bruto”, logo, acessa-se diretamente!
Exercício de Get/Set
n Utilizar os métodos Get/Set no classe Cliente do exercício Aula_Strings.pdf
n Para isso, coloque todos os atributos private e gere todos os get/set para eles na classe;
n Observe e aplique as regras de atribuição/recuperação de algum atributo, caso tenha
Java e Orientação a Objetos
Membros de Classe e Constantes
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a
Objetos em Java
MEMBROS DE CLASSE
n
Pode-se definir numa classe membros que sejam compartilhados por todas instâncias daquela classe.
n
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 ContaBancaria { ..
static float calcEmprestimo(int valor)
{
...
} }
§
Exemplo:
int val = 5000;
float total = Example.calcEmprestimo(val);
System.out.println(“Valor disponivel " + total);
Métodos de Classe
(estáticos)
n Quando o método é de classe (static), a própria classe chama o método;
n Logo, não se pode ter atributos de objetos envolvidos no método;
n Caso tenha, o método É DO OBJETO e não da classe - de todos!
(tirar o static)n São métodos extras, funções úteis que não precisam de ter um objeto para
executa-lo.
Métodos de Classe
(estáticos)
Definindo os membros de classe com static.
Atributos de classe
class Funcionario {
static int codigo;
String nome;
static String cargo;
....
}
Atributos de classe
Funcionario f1 = new Funcionario();
Funcionario f2 = new Funcionario();
f1.codigo = 30;
System.out.println("Codigo = " + f2.codigo);
n >> Codigo = 30; //f1 e f2 tem o mesmo codigo
f2.codigo = 50;
System.out.println("Codigo = " + f1.codigo);
n >> Codigo = 50; //f1 e f2 continuam tendo mesmo codigo
Atributos de Classe
n
Nesse caso, como codigo é static, seu valor é
“compartilhado” a todos os objetos;
n
Logo, não importa qual objeto modifica seu valor, que mudará TODOS os demais.
n
Sendo assim, a própria classe pode acessa-lo, caracterizando a mudança para todos os membros:
Funcionario.codigo = 1467;
Métodos de classe
class Funcionario {
static int codigo;
...
static float fator;
float salario;
public float calcularSalarioLiquido(int taxa) { float sal;
if(taxa < 15)
sal = salario – (salario*0.13f) – (salario*taxa/100);
else
sal = salario – (salario*taxa) + (salario*0.03f);
return sal;
}
public float calcularGratificacao(int numFilhos) { return numFilhos * 50 + (fator * 0.30);
} }
Qual dos métodos seria static?
Métodos de Classe
n
O método de
calcularSalarioLiquido()possui um atributo que é do objeto (salario), o qual cada objeto tem o seu (não é static);
n
Logo, só se pode executa-lo por um objeto, NÃO devendo ser static;
n
O método
calcularGratificacao()não possui atributos de objetos, somente numFilhos ( que é um parametro) e o
fator, que é um atributo de classe(static);
n
Logo, esse método PODERÁ ser static.
Métodos de Classe
Funcionario f1 = new Funcionario();
Funcionario f2 = new Funcionario();
f1.salario = 3000;
f2.salario = 4000;
//cada funcionário tem seu próprio salário float s1 = f1.calcularSalarioLiquido(30);
float s2 = f2.calcularSalarioLiquido(30);
//logo, cada um terá seu próprio salario liq.
System.out.println("Salario Liq. de f1 " + s1);
System.out.println("Salario Liq. de f2 " + s2);
Métodos de Classe
Funcionario f1 = new Funcionario();
Funcionario f2 = new Funcionario();
Funcionario.fator = 200;
//logo o fator 200 é para todos, pois é static
float g1 = f1.calcularGratificacao(50);
float g2 = f2.calcularGratificacao(50);
//TODOS tem a mesma gratificação
System.out.println("Gratificacao de f1 " + g1);
System.out.println("Gratificacao de f2 " + g2);
Métodos de Classe
n
Nesse caso, como calcularGratificacao() é static e não depende de qualquer atributo de objeto, a própria classe pode chama-lo;
float valor = Funcionario.calcularGratificacao(3);
Exercícios
Avaliar e aplicar static na
classe Teclado
CONSTANTES
n Podem ser:
• variáveis (de instância, de classe ou locais)
• métodos
n São declaradas com a palavra reservada final
n Como padrão da OO, são declaradas MAIÚSCULAS.
CONSTANTES
class Teste {
// Variáveis constantes
final int ESQUERDA = 0;final int DIREITA = 0;