Tópicos de Programação
Técnico de Informática
3º. Módulo
Profa. Madalena Pereira da Silva
[email protected]
Roteiro das Aulas



Apresentar o plano de Ensino
Revisar Conceitos disciplina de Programação
Orientada a Objetos

Classes, objetos, atributos, métodos, construtor,
atributos e métodos de classe, encapsulamento
Praticar
CRÉDITOS
Boa parte do conteúdo dos slides foram retirados do material do professor
Carlos Andrés Ferrero, conforme indicado nas referências.
Visão Geral da Disciplina
Visão Geral da Disciplina
Classes
Classe
l
l
l
É uma estrutura que abstrai
um conjunto de objetos com
características similares.
Uma classe define o
comportamento de seus
objetos através de métodos e
os estados possíveis destes
objetos através de atributos
Na classe concreta é um
modelo, com atributos e
métodos, usados para criar
objetos
Objetos
Objetos
l
l
Qualquer entidade do
mundo real que pode
ser representada no
mundo computacional.
Os
objetos
serão
modelados de acordo
com o contexto da
aplicação
Atributos
São características que qualificam um objeto.
São as variáveis da classe a qual o objeto pertence
l
l
Atributos
Métodos
l
l
l
Modelam o comportamento (ações) dos objetos.
São funções que acessam e manipulam os atributos dos objetos
Os objetos se comunicam entre si através dos métodos
Atributos
Métodos
Classes, objetos, atributos, métodos
Atributos
Métodos
Classes, objetos, atributos, métodos
Classes, objetos, atributos, métodos
Classe, objetos, atributos e métodos
Exemplo para o contexto de sistemas de
controle de manutenção de veículos
Associação
-
Definição:
-
-
Denota a relação entre os objetos
Tipos:
-
Agregação
Composição
Agregação
-
Definição:
l
l
É um tipo de associação em que duas classes de
existência independente possuem uma relação
todo-parte.
Por exemplo, um time (todo) está constituído por
atletas (parte). Mesmo que o time pare de existir,
o atleta ainda poderá existir na aplicação.
Composição
l
l
Associação de duas classes em que a destruição
do todo implica na destruição da parte.
Por exemplo, um pedido (todo) está constituído por
itens do pedido (parte). Esses itens só fazem
sentido em um pedido específico, quando o pedido
é eliminado, os itens também serão
Associação
E quando se
programa em Java
qual a diferença de
agregação e
composição
Associação
A diferença entre composição e
agregação tem relação com a
existência dos objetos. Essa
diferença não é tratada pelas
linguagens de programação que
seguem o paradigma orientado
a objetos (pelo menos não as
convencionais: java, c#, c++).
Associação
Java não possui uma forma
declarativa para
implementar agregações
nem associações.
Java apenas cria
associações unidirecionais
através de referências
Exemplo
No caso do sistema de bancário, uma
Conta tem uma propriedade do tipo
Cliente e a referência de conta para
cliente, mas não de cliente para conta
Associação
-
No caso do sistema de manutenção de
automóveis, para relacionar/vincular o proprietário
com o veículo é preciso de dois objetos, um que
represente o cliente e o outro que represente o
veículo. Desta forma, duas classes devem ser
criadas (cliente e veículo).
Associação
public class Cliente{
private String nome;
private String telefone;
private String endereco;
}
Associação
unidirecional
public class Veiculo{
private String marca;
private String modelo;
private int ano;
private String chassi;
private Cliente cliente;
}
Para expressar o relacionamento entre Cliente e Veículo podemos
adicionar um atributo do tipo Cliente na classe Veículo
EXEMPLO DE IMPLEMENTAÇÃO DE AGREGAÇÃO EM JAVA
EXEMPLO DE IMPLEMENTAÇÃO DE AGREGAÇÃO EM JAVA
EXEMPLO DE IMPLEMENTAÇÃO DE COMPOSIÇÃO EM JAVA
EXEMPLO DE IMPLEMENTAÇÃO DE COMPOSIÇAÕ EM JAVA
Construtores
- Usado para instanciar/criar objetos
- Ao instanciar um objeto de uma classe e mandar
imprimir o valor de alguns dos atributos, estes
apresentarão o seu valor padrão.
public class Veiculo {
String marca, modelo, cor;
int ano;
int velocidade;
}
public class TesteVeiculo {
public static void main(String[] args) {
Veiculo v = new Veiculo();
//imprimirá valor 0
System.out.println(v.velocidade);
}
}
Construtores
Após a
instanciação, os
valores dos
atributos podem
ser alterados,
antes da
impressão.
l
public class TesteVeiculo {
public static void main(String[] args) {
Veiculo v1 = new Veiculo();
Veiculo v2 = new Veiculo();
v1.marca = "Ford";
v1.modelo = "Focus";
v1.cor = "Prata";
v1.ano = 2011;
v1.velocidade = 100;
}
}
System.out.println(v1.marca);
System.out.println(v1.modelo);
System.out.println(v1.cor);
System.out.println(v1.ano);
System.out.println(v1.velocidade);
Construtores
É possível
definir quais
atributos
devem ser
informados na
instanciação do
objeto.
public class Veiculo {
String marca, modelo, cor;
int ano;
int velocidade;
}
public Veiculo (String marca, String modelo, String cor,
int ano, int velocidade) {
this.marca = marca;
this.modelo = modelo;
this.cor = cor;
this.ano = ano;
this.velocidade = velocidade;
}
Neste caso, o objeto do tipo Veiculo só pode ser instanciado se TODOS os parâmetros
da classe (marca, modelo, cor, ano, velocidade) forem informados
Construtores
É possível
definir quais
atributos
devem ser
informados na
instanciação do
objeto.
public class Veiculo {
String marca, modelo, cor;
int ano;
int velocidade;
}
public Veiculo (String modelo, String cor, int ano) {
this.modelo = modelo;
this.cor = cor;
this.ano = ano;
this.marca= null;
this.velocidade= 0;
}
Neste caso, o objeto do tipo Veiculo pode ser instanciado apenas com o valor de
ALGUNS atributos, sendo eles, modelo, cor e ano.
Os atributos não definidos como parâmetros receberão valores padrão.
public class Veiculo {
String marca, modelo, cor;
int ano, velocidade;
Construtores
public Veiculo (String marca, String modelo, String cor, int ano
int velocidade) {
this.marca = marca;
this.modelo = modelo;
this.cor = cor;
this.ano = ano;
this.velocidade = velocidade;
}
É possível definir
vários
construtores na
mesma classe
public Veiculo (String modelo, String cor, int ano) {
this.modelo = modelo;
this.cor = cor;
this.ano = ano;
}
}
public Veiculo (int ano, int velocidade) {
this.ano= ano;
this.velocidade = velocidade;
}
Os atributos não definidos como parâmetros receberão valores padrão.
Construtores
Por que quando
não criamos
construtores, Java
permite a
instanciação de
objetos?
Construtores
Porque por padrão, para
toda classe concreta criada
em Java, é criado
automaticamente um
construtor padrão (sem
passagem de parâmetro), o
qual todos os atributos são
inicializados com valor
padrão.
Exercícios
1. Dadas as seguintes classes:
l
l
l
Acrescente um construtor na classe Agencia
para receber o número como parâmetro.
Compilar TesteAgencia.
l
Porque ocorreu esse erro de compilação?
Resolva.
Exercícios
2. Cria a classe Conta, conforme abaixo
Exercícios
3. Acrescente o atributo Agencia na classe
Conta e altere os três métodos construtores da
classe Conta de forma que seja obrigatório
informar a Agencia ao criar uma instância de
Conta.
Exercícios
4. Implemente todas as operações do diagrama
a seguir.
Exercícios
5. Continue a implementação do item anterior
incrementando com novos métodos de Agencia
Atributos e Métodos de Classes
Problema
Supondo que o banco paga um valor de vale
refeição igual para todos os funcionários. O sistema
precisa guardar esse valor em algum lugar, ou seja, na
classe Funcionario.
Atributos e Métodos de Classes
Problema
Ao instanciar vários objetos da classe Funcionario
Qual é o problema desta abordagem?
Como o atributo valeRefeicaoDiario é de instância, cada objeto criado a partir da classe
Funcionario terá o seu próprio atributo valeRefeicaoDiario. Observe que não faz sentido ter
esse valor repetido em todos os objetos, já que o valor é único para todos os funcionários.
Atributos e Métodos de Classes
Solução
Como esse atributo é comum a todos os objetos da
classe Funcionário deve-se declará-lo como estático.
Atributos e Métodos de Classes
Ainda é possível definir métodos de classe, para manipular os
próprios atributos de classe
Embora seja possível acessar atributos e métodos de classe
por meio de uma instância, o correto é acessá-lo usando a
classe.
Encapsulamento
A partir da seguinte classe
l
l
Várias classes que instanciem objetos da
classe Funcionário poderão manipular o
atributo “salario” de diferentes formas.
Como cada classe poderá manipular de uma
forma específica dizemos que o controle sobre
esse atributo é descentralizado
Encapsulamento
Atributos privados
O encapsulamento permite centralizar o controle de
acesso e alteração de atributos, declarando os
atributos como privados da classe.
Nesta abordagem também necessitamos criar métodos
para alterar os dados, como por exemplo,
aumentaSalario.
Encapsulamento
l
l
Dessa forma, só poderemos alterar o atributo salário
por qualquer classe externa à classe Funcionário
usando o método aumentaSalario.
Isso facilita, principalmente, a manutenção do
sistema e a detecção de erros.
Encapsulamento
Métodos privados:
l
l
Usados
geralmente
por
métodos públicos e que não
fazem
sentido
estarem
acessíveis por outras classes.
Por exemplo, um método para
descontar uma tarifa pelas
operações de saque e depósito
poderia ser implementada
Encapsulamento
Perguntas
1) Para acender uma “boca” do fogão a gás, você pressiona o
botão/chave correspondente ou “ergue/balança” o botijão de gás
(para perceber o volume/peso do gás)?
2) Para desligar o notebook, você usa o botão ou desmonta o
aparelho até retirar a bateria?
l)
Observe que o encapsulamento oculta detalhes da
implementação e provê integridade dos dados. No
entanto,
é
necessário
criar
métodos
para
acessar/alterar os dados.
Encapsulamento
Métodos de Alteração e de Acesso
l
Para cada variável de instância tem-se um método
SET e um GET, usados para permitir a alteração e o
acesso aos valores dos atributos
Exercícios
6. Retorne ao exercício 5 da aula passada e:
a) Implemente os conceitos de encapsulamento.
b) Implemente o atributo estático privado de
tarifaOperacao, com seus respectivos métodos
estáticos sets e gets, bem como o método privado
que desconta o valor dessa taxa nas operações
dos métodos “saca” e “deposito”.
Referências Bibliográficas
l
FERRERO, C. A. Notas de Aulas de TOP:
Aula03_RevisãoPOO. Disponível em
https://sites.google.com/site/anfer86/disciplinas/2015-1-poo
.
l
Treinamentos K19. Orientação a Objetos em Java. 2012.
Disponível em: http://
www.k19.com.br/downloads/apostilas/java/k19-k11-orienta
cao-a-objetos-em-java2012
l
ASCENCIO, A. F.; CAMPOS, E. A. V. Fundamentos da
Programação de Computadores, 3. ed., São Paulo:
PearsonEducationdo Brasil, 2012.
Download

Classe - Docente - IFSC Campus Lages