• Nenhum resultado encontrado

Orientação a Objetos

N/A
N/A
Protected

Academic year: 2021

Share "Orientação a Objetos"

Copied!
69
0
0

Texto

(1)

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

(2)

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

(3)

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?

(4)

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?

(5)

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

(6)

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.

(7)

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!

(8)

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.

(9)

CLASSES DE OBJETOS

CLASSES DE OBJETOS

(10)

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.

(11)

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.

(12)

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.

(13)

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

(14)

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

(15)

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) {

}

}

(16)

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;

} }

(17)

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

(18)

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

(19)

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

(20)

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()

(21)

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)

(22)

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

(23)

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

(24)

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

(25)

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.

(26)

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);

} }

(27)

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

(28)

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!

(29)

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;

}

}

(30)

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

(31)

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)

(32)

PALAVRA RESERVADA “This”

O que é PARÂMETRO?

O que é ATRIBUTO?

O que é PARÂMETRO?

PALAVRA RESERVADA “This”

(33)

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.

(34)

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);

}

}

(35)

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)

(36)

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;

}

}

(37)

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;

(38)

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

(39)

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");

(40)

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

(41)

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

(42)

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

(43)

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

(44)

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)

(45)

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"

(46)

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 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

(47)

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

(48)

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)

(49)

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

(50)

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

(51)

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;

(52)

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;

(53)

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);

(54)

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()

(55)

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;

(56)

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.

(57)

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.

(58)

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!

(59)

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

(60)

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++;

} ...

}

(61)

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).

(62)

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

(63)

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.

(64)

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;

....

}

(65)

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;

(66)

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.

(67)

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);

(68)

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

(69)

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;

// Método constante

private final static void main (String args[]) {

..

} ..

}

Referências

Documentos relacionados

For minor hand surgery procedures such as trigger finger re- lease, De Quervain tenosynovitis operation topical and local anaesthesia seemed to be a viable solution, especially in the

“responsabilidade pela solicitação de abertura de processo de flexibilização de jornada de trabalho ao Reitor, nos termos desta Resolução, de forma conjunta ou

• Para a realização de obras em planos horizontais ou verticais ou obras com uma inclinação em uma ou duas direções • Desempenho em obras com visível laser vermelho (NL400)

Por favor apresente a política global em matéria de acessibilidade praticada na sua cidade, referindo, por exemplo: inclusão da acessibilidade numa estratégia ou quadro de

peso (gr) peso (gr) peso (gr) peso (gr) peso (gr) peso (gr) peso (gr) peso (gr) Tabela de Produtos Catalogo de Productos.. Embalagem meramente indicativa. a)medidas según

Dada a plausibilidade prima facie da Prioridade do Conhecimento Definicional, parece que não se poderia reconhecer instâncias de F- dade ou fatos essenciais acerca

O piroxicam deve ser administrado com cautela a pacientes com conhecida ou suspeita de metabolizadores fracos CYP2C9, baseados no histórico prévio/experiência com outros

Os acessos para pedestres e veículos são independentes e ocorrem através de portões metálicos posicionados junto à calçada da Rua João Avelino Pinho Mellão. O controle