Programação Java - Orientação Objetos

Propaganda
Programação Java
- Classes, Objetos, Atributos e Métodos Marco Fagundes
[email protected]
© 2007 Marco Fagundes - [email protected]
1
Tópicos
Programação Orientada a Objetos
Classes e Objetos
Definindo e Instanciando Classes
Atributos
Métodos
Exercício
Leitura Recomendada
© 2007 Marco Fagundes - [email protected]
2
Classes e Objetos
Uma
classe de objetos descreve um grupo
de objetos com:
Propriedades (atributos) e comportamentos (métodos)
semelhantes
Relacionamentos comuns com outros objetos
Classificação
Instanciação
Objetos/Instâncias
© 2007 Marco Fagundes - [email protected]
Aeronave
capacidade
prefixo
...
decolar
manter
pousar
...
3
Classes e Objetos
Banco
Conta Corrente
numero
cc001
cc002
$
Abstração
$
$
saldo
10,00
20,00
Objeto Conta Corrente
depositar
depositar ()
()
numero
001
© 2007 Marco Fagundes - [email protected]
saldo
10,00
4
Especificando Classes
Classe define um tipo abstrato de dados (TAD)
dentro de um domínio específico de aplicação
Por exemplo:
Em um sistema bancário podem-se ter as seguintes
classes: Cliente, Conta Corrente, Conta Poupança
Especificação
ContaCorrente
Implementação em Java
public class ContaCorrente{
...
}
© 2007 Marco Fagundes - [email protected]
5
Definindo e Instanciando Classes
Java considera uma classe vazia como válida.
Por exemplo:
ContaCorrente
class ContaCorrente{
}
Para instanciar a classe definida deve-se:
1. Declarar uma variável do tipo da classe
ContaCorrente cl;
2. Usar o operador new para criar o objeto
cl = new ContaCorrente ();
© 2007 Marco Fagundes - [email protected]
6
Utilizando o Tipo Abstrato de Dados
Para ilustrar o uso do TAD (classe) serão
usadas 2 classes
Classe do TAD
Classe aplicativo (método main)
public class ContaCorrente{
...
}
public class TestaContaCorrente{
public static void main(String[] args){
...
}
}
© 2007 Marco Fagundes - [email protected]
7
Lab1 - Definindo Abstrações
Construa uma classe ContaCorrente.
Construa uma classe TestaContaCorrente para
criar um objeto do tipo ContaCorrente.
Compile e execute o programa.
© 2007 Marco Fagundes - [email protected]
8
Atributos
© 2007 Marco Fagundes - [email protected]
9
Atributos
Uma classe contém atributos e métodos
Atributos são variáveis membro que armazenam
informações de estado/propriedades do objeto
ContaCorrente
numero: String
saldo: double
Atributos
Atributos ou
ou variáveis
variáveis
membro
membro ou
ou variáveis
variáveis
de
de instância
instância
public class ContaCorrente{
String numero;
double saldo;
}
© 2007 Marco Fagundes - [email protected]
10
Acessando Membros de Objetos
Uma vez criado o objeto seus atributos e métodos
podem ser acessados através do operador “.”
(<objeto>.<membro>)
Por exemplo:
c1.numConta = “001”; //Acessando atributos
c1.depositar(); //Acessando métodos
É importante destacar que o acesso a atributos
é somente para ilustração, pois os atributos
devem estar protegidos (a ser visto em tópicos
posteriores - Encapsulamento)
© 2007 Marco Fagundes - [email protected]
11
Acessando Atributos
1.public class TestaContaCorrente{
2. public static void main(String[] args){
3. ContaCorrente c = new ContaCorrente();
4. c.numero = “001”;
5. c.saldo = 10.0;
6. System.out.println(c.numero+“\t”+c.saldo);
7. }
8. }
Variável de
Referência
cc
linha 3
numero = null
saldo = 0.0
linhas 4 e 5
cc
© 2007 Marco Fagundes - [email protected]
numero = "001"
saldo = 10.0
12
Lab2 - Especificando Atributos
Acrescente à classe ContaCorrente (criada no
Lab1) os atributos numero e saldo.
Na classe aplicativo crie um objeto do tipo
ContaCorrente e atribua valores a seus atributos.
Exiba o conteúdo do objetos criado.
© 2007 Marco Fagundes - [email protected]
13
Modelo de Referência a Objetos
© 2007 Marco Fagundes - [email protected]
14
Modelo de Referência a Objetos
ContaCorrente c1 = new ContaCorrente();
c1.numero = "001”;
c1
c1
numero = ”001"
Variável de
Referência
Memó
Mem
Memó
ria
Memóória
© 2007 Marco Fagundes - [email protected]
15
Modelo de Referência a Objetos
ContaCorrente c1 = new ContaCorrente();
c1.numero = "001”;
ContaCorrente c2 = new ContaCorrente();
c2.numero = "001”;
c1 == c2 ??
c1.equals(c2) ??
c1
c1
Variáveis de
Referência
numero=”001"
c2
c2
numero=”001"
Memó
Mem
Memó
ria
Memóória
© 2007 Marco Fagundes - [email protected]
16
Modelo de Referência a Objetos
Continuando o exemplo anterior observe a instrução
c1 = c2;//atribuição
Destruído
pelo GC
c1==c2 ??
c1.equals(c2) ??
c1
c1
numero = ”001"
Variáveis de
Referência
c2
c2
numero = ”001"
Memó
Mem
Memó
ria
Memóória
Aliasing
© 2007 Marco Fagundes - [email protected]
17
Métodos
© 2007 Marco Fagundes - [email protected]
18
Métodos
Implementam as operações que agem sobre os
atributos do objeto
São definidos da seguinte forma:
<modificador_acesso><tipo_retorno> <nome><parâmetros>
public boolean sacar(double pVal){
return (saldo >= pVal);
}
© 2007 Marco Fagundes - [email protected]
19
Métodos
Caso o método não retorne valor utiliza-se a
keyword “void”
public void depositar(double pValor){
saldo += pValor; //saldo = saldo + pValor;
}
© 2007 Marco Fagundes - [email protected]
20
Métodos - Exemplo
ContaCorrente
numero: String
saldo: double
depositar(x)
class ContaCorrente{
String numero;
double saldo;
...
public void depositar(double pVal){
saldo += pVal;
} }
class TestaContaCorrente{
public static void main(String[] args){
ContaCorrente c = new ContaCorrente();
c.numero = “001”;
c.saldo = 10;
System.out.println(c.numero + “\t” +c.saldo);
c.depositar(50);
System.out.println(c.numero + “\t” +c.saldo);
} }
© 2007 Marco Fagundes - [email protected]
21
Métodos - Escopo de Variáveis
Variáveis de instância: global à classe
Variáveis locais: residem no bloco em que
foram definidas
class ContaCorrente{
String numero;
void impNumero(){
System.out.println(numero);
}
}
Variável
Variável local
local
variável
variável de
de
instância
instância
class ContaCorrente {
String numero;
void impNumero(){
String num;
System.out.println(num);
}
}
Erro
Erro !!!
!!!
Variáveis de instância são inicializadas implicitamente,
enquanto as variáveis locais devem ser inicializadas
explicitamente
© 2007 Marco Fagundes - [email protected]
22
Lab3 - Implementando Métodos
Implemente os métodos depositar e sacar na classe conta
corrente.
O método “depositar” recebe o valor a ser depositado
como argumento e o adiciona ao saldo
O método “sacar” recebe o valor a ser sacado como
argumento, verifica se o saldo é suficiente para a
operação
Caso positivo debita o valor do saldo e retorna uma
string informando ao usuário que o saque foi
efetuado com sucesso.
Caso negativo retorna uma string informando que o
saldo é insuficiente para a operação.
© 2007 Marco Fagundes - [email protected]
23
Lab3 - Implementando Métodos
Na classe aplicativo:
crie um objeto do tipo conta informando número e saldo
Exiba o número da conta e o saldo do cliente
Efetue um depósito passando como argumento um
valor(em hardCode)
Exiba novamente o saldo da conta para confirmar se o
depósito foi efetuado
Efetue um saque passando como argumento um
valor(em hardCode).
Caso o saque seja efetuado com sucesso, exiba o novo
saldo. Caso contrário exiba o saldo corrente.
© 2007 Marco Fagundes - [email protected]
24
Exercício 1
Construa uma aplicação que permita ao usuário
informar dados de 3 candidatos.
Crie uma abstração para representar os candidatos,
com as propriedades: número e nome.
Na classe aplicativo, deve-se listar os dados dos 3
candidatos.
© 2007 Marco Fagundes - [email protected]
25
Exercício2
Estenda o exercício anterior para permitir a realização
de uma eleição entre os 3 candidatos cadastrados
Para isso considere o seguinte:
Os números 00 e 99 correspondem aos candidatos
branco e nulo.
Caso o eleitor digite um número inválido seu voto será
nulo
Caso o eleitor não informe nenhum número seu voto
será branco
Caso seja informado (-1) para o número do candidato a
eleição termina
Deve-se acrescentar uma propriedade no candidato que
armazene seu total de votos
© 2007 Marco Fagundes - [email protected]
26
Exercício2
Ao término da eleição deve-se exibir:
Total de Comparecimento.
Qual candidato foi eleito (mostrar: número, nome e
total de votos).
Total de Branco e Nulos.
© 2007 Marco Fagundes - [email protected]
27
Relação entre Classes
© 2007 Marco Fagundes - [email protected]
28
Associação
Refere-se ao modo como objetos interagem
Objetos estão associados quando um “usa” os
serviços ou operações de outro
Conta
possui
num: String *
public class Conta{
private String num;
private Cliente correntista;
}
© 2007 Marco Fagundes - [email protected]
Cliente
1 cpf: String
public class Cliente{
private String cpf;
...;
}
29
Pontos Principais
Dois passos são envolvidos na criação de uma
instância da classe
1º Passo: Criação da referência para o objeto
ContaCorrente c1;
2º Passo: Criação da instância da classe (objeto)
c1 = new ContaCorrente();
Uma vez criado o objeto os atributos e métodos da
classe podem ser acessados usando o operador “.”
O acesso direto aos atributos foi utilizado somente
para facilitar a ilustração de conceitos, pois eles
devem estar protegidos. (a ser visto na próxima aula)
© 2007 Marco Fagundes - [email protected]
30
Leitura Recomendada
Tutorial
Sun: Learning the Java Language
Lesson: Object-Oriented Programming Concepts
http://java.sun.com/docs/books/tutorial/java/concepts/
index.html
Lesson: Classes and Objects
http://java.sun.com/docs/books/tutorial/java/javaOO/i
ndex.html
© 2007 Marco Fagundes - [email protected]
31
Download