Objetos e Classes
Curso de Especialização em Engenharia de Software Prof. Dr. Bruno J. T. Fernandes
Decomposição Funcional
Comece com o problema geral eDecomposição Funcional
Implemente as funções de mais baixo nível e combine-as para obter o programa completo
Decomposição Funcional
Foco nas funções Dados são considerados posteriormente
Dados são passados de uma função para outra como numa linha de produção
Difícil manutenção
Programação Estrutura x Orientada a
Objetos
Estruturada
Funções para resolver um problema
Primeiro decidir como manipular os dados
Estruturas para armazenar os dados
Decidir quais melhores estruturas para representar
os dados
Orientada a Objetos
Definição das estruturas de dados Definição das operações
Orientação a Objetos
Foco nos dados primeiro
Estruturação do programa é baseada na representação
de objetos do mundo real (estados + comportamento)
Olhar tudo como se fosse objeto
Modelar primeiro os dados depois operações Os dados são encapsulados nos objetos
A estrutura de dados só precisa ser compreendida pelo
objeto ao qual os dados pertencem
A mudança na estrutura de um objeto deve impactar
somente na sua lógica interna
Cada objeto é o responsável por garantir a integridade
duracaoDisco
parar() avancar() voltar()
tempoDecorrido horaAtual tipoSistema
alterarHora() tocar()
carregarDisco()
Orientação a Objetos
O objeto é uma estrutura complexa que
possui dados e operações (encapsulamento)
Os dados, inclusive, podem ser outros objetos
(atributos)
As operações manifestam o comportamento de
Objeto Conta Bancária
Número Saldo 21.342-7 875,32 creditar debitarEstado do Objeto Conta
creditar(20.00) Número Saldo 21.342-7 875,32 creditar debitar Número Saldo 21.342-7 895,32 creditar debitarO que é uma classe?
Abstração que define características comuns entre objetos
Classes e Objetos
Classe é um conceito de Orientação a
Objetos que agrupa categorias com
características semelhantes. Uma classe define um tipo.
Classes servem como “moldes” ou
“formas” para criação de objetos
Objetos são “instâncias” de uma
determinada classe, compõe-se e comporta-se de acordo com uma
determinada classe. São estruturas complexas que possuem:
Igualdade x Identidade
Dois objetos são idênticos quando eles são o mesmo
Dois são iguais quando eles têm o mesmo conteúdo
Instanciação
Reserva um espaço na memória para
armazenar os atributos de um novo objeto
Associa um conjunto de comportamentos com o objeto
Refere-se a criação de um objeto em tempo de execução
Relacionamento entre classes
Tipos de relacionamento:
Usa, Inclusão (contém), É Um (herança)
Relacionamento de Inclusão:
Acontece quando uma classe possui como
atributo um objeto de outra classe
Ex: um cliente possui um endereco
Endereco
Definindo classes em Java
public class Conta{ Atributos Construtores Métodos } class NomeDaClasse { atributo1; atributo2; método1() { Corpo do método1 } método2() { Corpo do método2 } }
modificador class Nome { CORPO }
modificador pode ser
Padrão de nome de classe
Nome de classe deve começar com letra
maiúscula
Ex: Conta, Cliente, Banco, Endereco
Nomes compostos não são separados por
_. A primeira letra da palavra seguinte é maiúscula.
Ex: PessoaJuridica, PessoaFisica
Evite abreviações no nome e use nomes
com alguma relação mnemônica com o que a classe modela.
Declaração de atributos
modificadores podem ser:
De visibilidade/acesso:
public, protected, “default”, private
De escopo:
static
De definição de constantes:
final
private String numero ;
Padrão de nome de atributo
Nomes de atributos devem começar com
letra minúscula
Ex: int ano;
Nomes compostos não são separados por
_. A primeira letra da palavra seguinte é maiúscula.
Ex: int anoDePublicacao;
Evite abreviações e use nomes com
alguma relação mnemônica com o que o atributo modela.
Exemplos
private String numero; double saldo;
protected String nome, sobrenome; public valorInicial;
Acesso a atributos com this
Atributos em um objeto podem ser acessados com o modificador this.
public class Ponto { private double x; private double y;
void calcularProduto() {
double produto = this.x * this.y; }
Métodos
Métodos são operações que realizam
ações e modificam os valores dos atributos do objeto responsável pela sua execução
public class Conta {
private String numero; private double saldo;
void creditar(double valor) { saldo = saldo + valor;
}
... }
Declaração de métodos
modificadores podem ser:
public, protected, “friendly”, private, static, final Assinatura de um método:
É o que identifica um método
Composta por nome, lista de parâmetros
(quantidade, tipo, ordem)
private double obterRendimento(String numConta, int mes); modificadores tipo de retorno nome ( parâmetros ) ;
Padrão de nome de métodos
Segue o mesmo padrão para nomes de atributos:
Inicia com minúscula e segue a regra da
palavra composta
Normalmente nomes de métodos usam verbos no infinitivo:
Métodos e tipo de retorno
O tipo de retorno de um método pode
ser qualquer tipo válido em Java:
Tipo Primitivo:
int, double, char, long, boolean
Tipo Referenciado:
Qualquer tipo que não é primitivo Conta, String, Date, Cliente
Métodos que retornam valores devem
fazê-lo com o comando return;
Métodos que não retornam valores
Métodos e tipo de retorno
public class Conta {
private String numero; private double saldo; String getNumero() { return numero; } double getSaldo() { return saldo; } void setSaldo(double s){ saldo = s; } ...
Mais sobre métodos
public class Conta { ...
void debitar(double valor) { saldo = saldo - valor;
} }
Por quê o debitar não tem como parâmetro o número da conta?
O corpo do método
O corpo do método contém os comandos
que determinam as ações do método
Esses comandos podem
realizar simples atualizações dos atributos de
um objeto
retornar valores
executar ações mais complexas como chamar
Boas práticas
Declare sempre atributos como private, há
menos que se tenha fortes razões para não fazê-lo
Para permitir acesso de leitura a um
atributo x, crie um método público getX que devolve o atributo
Para permitir acesso de escrita a um
atributo x crie um método público setX que modifica o valor do atributo x
Chamada de métodos
Os objetos se comunicam para realizar
tarefas
Parâmetros são passados por “cópia”
A comunicação é feita através da chamada
de métodos variável contendo referência para objeto conta.creditar(45.30) nome do método a ser executado operador de chamada de método
Criação de objetos
Objetos precisam ser criados antes de serem utilizados
A criação é feita com o operador new
Aloca um objeto na memória do tipo de uma
classe e devolve o endereço para ser armazenado na variável.
Conta c = new Conta()
Construtores
Além de métodos e atributos, uma classe pode
conter construtores
Construtores definem como os atributos
de um objeto devem ser inicializados
São semelhantes a métodos, mas não têm tipo de
retorno
nome da classe ( parâmetros )
corpo do construtor
{
}
modificador
public Navio(String umNome, int umNumero) { nome = umNome;
numCabines = umNumero; }
Construtor default
Caso não seja definido um construtor, um
construtor default é fornecido implicitamente
O construtor default inicializa os atributos
com seus valores default
O construtor default não tem parâmetros:
public Conta() { }
Outros construtores
Uma classe pode ter mais de um
construtor
Se diferenciam pela lista de parâmetros
Quando é definido um construtor com
parâmetros, o construtor default não é mais geradopublic class Conta { public Conta(String numeroConta,
double saldoInicial){ numero = numeroConta;
saldo = saldoInicial; }
Boa prática
A cada classe implementada, crie um
construtor que recebe parâmetros e preenche todos os atributos com estes parâmetros.
null indica uma referência nula. Indica que o atributo
não faz referência a um objeto
Valores default para atributos
0 para byte,short,int,long,float, double. ‘\u0000’ para char
false para boolean
null para tipos referência (Strings, arrays,
Referências
Objetos são manipulados através de referências c == null Conta c = null; c = new Conta(“1287”,0); c.getSaldo(); c
chama o método getSaldo() do objeto referenciado pela variável c
Aliasing
Mais de uma variável pode armazenar a
mesma referência para um dado objeto (aliasing)
Conta a = new Conta(“123-4”,340.0); Conta b; b = a; b.creditar(100); System.out.println(a.getSaldo()); a e b passam a referenciar a mesma conta
qualquer efeito via b é refletido via a
Métodos deprecated
São métodos que apresentam algum
problema, bug ou efeito colateral
Indicados em tempo de compilação
Corrigidos nas versões mais novas de Java Podem ser utilizados normalmente
Ex:
Component.show() foi substituído por