Este documento fornece uma introdução aos conceitos fundamentais de programação orientada a objetos. Discute os conceitos de modelo, classe, objeto e estrutura de uma classe, incluindo campos, construtores e métodos. Fornece exemplos de como esses conceitos se aplicam na modelagem do mundo real.
1. 1
ProgramaProgramaçção IIão II
Profº Alcides Xavier Benicasa
alcides@ufs.br
Universidade Federal de Sergipe
Departamento de Sistemas de Informação / Itabaiana
Página inicial do grupo: http://groups.google.com.br/group/ufs-nsi-progii
Endereço de e-mail do grupo: ufs-nsi-progii@googlegroups.com
Página do Professor: https://sites.google.com/site/ufsprofalcidesbenicasa
UFS – Programação II / 2 de 53
Unidades de Ensino
Introdução à Programação Orientada a Objetos
Unidades de Ensino
Introdução à Programação Orientada a Objetos
I - Introdução
Conceitos Fundamentais de Programação
Orientada a Objetos
Modelos
Classes
Objetos
Estrutura de uma Classe
2. 2
UFS – Programação II / 3 de 53
Roteiro
Conceitos Fundamentais de Programação Orientada a Objetos
Roteiro
Conceitos Fundamentais de Programação Orientada a Objetos
Modelos
Classes
Objetos
Estrutura de uma Classe
• Campos / Construtores
• Métodos
• Campos / Parâmetros / Variáveis Locais
Modelos
“Eu não aceitaria participar de
nenhum clube que me aceitasse
como membro”.
Groucho Marx,
The Groucho Letter
apud Savitch.
ProgramaProgramaçção Orientada a Objetosão Orientada a Objetos
3. 3
UFS – Programação II / 5 de 53
O que são Modelos?O que são Modelos?
Modelos são representações simplificadas de:
Objetos
Pessoas
Itens
Tarefas
Processos
Conceitos
idéias, etc.
Usados comumente por pessoas no seu dia-a-dia,
independentemente de uso de computadores
UFS – Programação II / 6 de 53
Modelo - Restaurante Caseiro HipotéticoModelo - Restaurante Caseiro Hipotético
Mesa 1
Cerveja
Refrig. Lata
Refrig. 600ml
Refrig. 2lt.
Sobremesa
Kg refeição
Mesa 2
Cerveja
Refrig. Lata
Refrig. 600ml
Refrig. 2lt.
Sobremesa
Kg refeição
Mesa 3
Cerveja
Refrig. Lata
Refrig. 600ml
Refrig. 2lt.
Sobremesa
Kg refeição
Mesa 4
Cerveja
Refrig. Lata
Refrig. 600ml
Refrig. 2lt.
Sobremesa
Kg refeição
Mesa 5
Cerveja
Refrig. Lata
Refrig. 600ml
Refrig. 2lt.
Sobremesa
Kg refeição
Mesa 6
Cerveja
Refrig. Lata
Refrig. 600ml
Refrig. 2lt.
Sobremesa
Kg refeição
Dados, informações relevantes
Operações ou procedimentos
4. 4
UFS – Programação II / 7 de 53
Modelo - Restaurante Caseiro HipotéticoModelo - Restaurante Caseiro Hipotético
Modelo
Restaurante Caseiro
Dados
quantidadeDoItem, etc.
Operações
adicionaItem
apresentaConta
UFS – Programação II / 8 de 53
Modelo: PessoaModelo: Pessoa
Pessoa como Empregado de Empresa
DADOS: nome, cargo, salário e horasTrabalhadas.
OP: calculaSalário e aumentaSalario.
Pessoa como Paciente de uma Clínica Médica
DADOS: nome, sexo, idade, altura, peso e
historicoConsulta.
OP: verificaObesidade e adicionaInformaçãoHistórico.
Pessoa como Contato Comercial
DADOS: nome, telefone, cargo e empresa.
OP: mostraTelefone e trabalhaEmEmpresa.
5. 5
Classes
ProgramaProgramaçção Orientada a Objetosão Orientada a Objetos
UFS – Programação II / 10 de 53
Programação Orientada a ObjetosProgramação Orientada a Objetos
Paradigma de programação de computadores onde se usam
classes e objetos, criados a partir dos modelos descritos
anteriormente, para representar e processar dados usando
programas de computadores.
Dados
• Representados por tipos de dados característicos da linguagem de
programação, podendo também ser representados por outros
modelos.
Operações
• Representadas pelo processamento dos dados.
6. 6
UFS – Programação II / 11 de 53
Programação Orientada a ObjetosProgramação Orientada a Objetos
Um programa orientado a objetos é estruturado como uma
comunidade de objetos que interagem entre si.
Cada objeto tem um papel a cumprir.
Cada objeto oferece um serviço ou realiza uma ação que é
usada por outros membros da comunidade.
Ex.: um computador e seus componentes (teclado, mouse,
vídeo, cpu, etc.)
UFS – Programação II / 12 de 53
Programação Orientação a ObjetosProgramação Orientação a Objetos
ClasseClasse
ObjetoObjeto
Mensagem
instância ou exemplarinstância ou exemplar
tipo ou moldetipo ou molde
comunicacomunicaçção entre objetosão entre objetos
7. 7
UFS – Programação II / 13 de 53
Programação Orientação a ObjetosProgramação Orientação a Objetos
Mundo realMundoMundo realreal
ModeloModeloModelo
CasaCasaCasa
ElenElenElen
AutomóvelAutomAutomóóvelvel
MaçãsMaMaççãsãs
CasaCasaCasa
ElenElenElen
AutomóvelAutomAutomóóvelvel
MaçãsMaMaççãsãs
mora namoramora nana
dirigedirigedirige
comecomecome
UFS – Programação II / 14 de 53
Programação Orientação a ObjetosProgramação Orientação a Objetos
operaoperaççõesões
estrutura de dadosestrutura de dados
objetoobjeto
8. 8
UFS – Programação II / 15 de 53
Programação Orientação a ObjetosProgramação Orientação a Objetos
Pessoas Livro Automóvel
Tangíveis
Incidente
Competição
Transação
Interação
Projeto Conserto
Saque Venda
UFS – Programação II / 16 de 53
ClassesClasses
Uma classe é uma “fôrmafôrma” para produzir
objetos.
Determina um conjunto de objetos com:
propriedades semelhantes
comportamentos semelhantes
relacionamentos comuns com outrosrelacionamentos comuns com outros
objetosobjetos..
9. 9
UFS – Programação II / 17 de 53
ClassesClasses
Veículos
PassageirosEsporte PasseioUtilitário
EspecializaçãoGeneralização
Objetos
ProgramaProgramaçção Orientada a Objetosão Orientada a Objetos
10. 10
UFS – Programação II / 19 de 53
Classe e ObjetoClasse e Objeto
Um objeto pode ser descrito por um
conjunto de atributos e comportamentos
Um objeto pode ser descrito por um
conjunto de atributos e comportamentos
ATRIBUTOSATRIBUTOS
Motor
Cor
Potência
Rodas
COMPORTAMENTOSCOMPORTAMENTOS
Avançar
Retroceder
Parar
Abastecer
UFS – Programação II / 20 de 53
Objeto: exemploObjeto: exemplo
Um carro possui características (motor,
cor,etc.) e comportamento (avançando,
retrocedendo, etc.).
Um carro possui características (motor,
cor,etc.) e comportamento (avançando,
retrocedendo, etc.).
ATRIBUTOSATRIBUTOS
5.1
Vermelha
COMPORTAMENTOSCOMPORTAMENTOS
Abastecendo
11. 11
UFS – Programação II / 21 de 53
Estrutura de uma Classe em JAVAEstrutura de uma Classe em JAVA
CIRCULO
Raio
X
y
public class Circulo
{
public float raio;
public float x;
public float y;
}
UFS – Programação II / 22 de 53
Tempo de ExecuçãoTempo de Execução
CLASSE = “Molde de Objetos”CLASSE = “Molde de Objetos”
Tempo de
Compilaç
ão
CLASSE
CIRCULO
Tempo de
Compilaç
ão
CLASSE
CIRCULO
12. 12
UFS – Programação II / 23 de 53
CRIAÇÃO DE OBJETOS (instanciação)CRIAÇÃO DE OBJETOS (instanciação)
Um objeto de uma classe é criado
utilizando-se a palavra new.
Um objeto de uma classe é criado
utilizando-se a palavra new.
UFS – Programação II / 24 de 53
Dois objetos circleDois objetos circle
é instância de...
é instância de...
13. 13
Estrutura de uma Classe / Campos / Construtores
ProgramaProgramaçção Orientada a Objetosão Orientada a Objetos
UFS – Programação II / 26 de 53
Estrutura de uma classe básicaEstrutura de uma classe básica
public class NomeDaClasse
{
Campos
Construtores
Métodos
}
O conteúdo de uma classe
14. 14
UFS – Programação II / 27 de 53
CamposCampos
Campos armazenam
valores para um objeto.
Eles também são
conhecidos como
variáveis de instâncias.
Campos definem o
estado de um objeto.
São definidos fora dos
métodos
public class Lampada
{
private String estado;
private int nVidaUtil;
//construtor e métodos omitidos
}
private String estado;;
Nome da
variável
Modificador de
Visibilidade
Tipo
UFS – Programação II / 28 de 53
AtribuiçãoAtribuição
Valores são armazenados em campos (e outras
variáveis) via instruções de atribuição:
variável = expressão;
•estado = NovoEstado;
•nVidaUtil++;
Uma variável armazena um único valor,
portanto, qualquer valor anterior é perdido.
15. 15
UFS – Programação II / 29 de 53
ConstrutoresConstrutores
Construtores inicializam
um objeto.
Eles têm o mesmo
nome das suas classes.
Eles armazenam
valores iniciais nos
campos.
Eles freqüentemente
recebem valores de
parâmetros externos
nesses campos.
public class Lampada
{
private String estado;
private int nVidaUtil;
public Lampada()
{
estado = "desligada";
}
public Lampada(String NovoEstado)
{
estado = NovoEstado;
}
//métodos omitidos
}
UFS – Programação II / 30 de 53
Transmitindo dados via parâmetrosTransmitindo dados via parâmetros
CONSTRUTOR
public Lampada(String NovoEstado)
{
estado = NovoEstado;
}
Lampada lampada1 = new Lampada(“ligada”);
16. 16
Métodos
ProgramaProgramaçção Orientada a Objetosão Orientada a Objetos
UFS – Programação II / 32 de 53
Métodos de AcessoMétodos de Acesso
Métodos implementam o comportamento dos objetos.
Métodos de acesso fornecem informações sobre um objeto.
Métodos têm uma estrutura que consiste em um cabeçalho e um
corpo.
O cabeçalho define a assinatura do método.
public String getEstado()
O corpo engloba as instruções do método.
17. 17
UFS – Programação II / 33 de 53
Métodos de AcessoMétodos de Acesso
public String getEstado()
{
return estado;
}
Tipo de Retorno
Nome do Método Lista de
Parâmetros
(vazia)
Início e Fim do corpo do Método (bloco)
Instrução de
Retorno
Modificador de
Visibilidade
UFS – Programação II / 34 de 53
Métodos ModificadoresMétodos Modificadores
Eles têm uma estrutura de método semelhante:
cabeçalho e corpo.
Muito utilizado para modificar o estado de um objeto.
Alcançados por meio da modificação do valor de um
ou mais campos.
Geralmente contêm instruções de atribuição.
Geralmente recebem parâmetros.
18. 18
UFS – Programação II / 35 de 53
Métodos ModificadoresMétodos Modificadores
public void setEstado(String nEstado){
{
estado = nEstado;
}
Tipo de Retorno
(void)
Nome do Método
Parâmetro(s)
Campo sendo
Alterado
Modificador de
Visibilidade
UFS – Programação II / 36 de 53
MétodosMétodos
Nome do Método
é um Identificador válido da linguagem;
Parâmetros
lista de argumentos que serão passados como parâmetros para o método. A
sintaxe dos argumentos é a de declaração de variáveis;
Tipo de Retorno
indica o tipo do valor retornado pelo método;
return
palavra reservada que indica o valor que será devolvido para o programa;
Modificadores
elementos que caracterizam o método quanto à visibilidade (escopo)
19. 19
UFS – Programação II / 37 de 53
Chamadas de métodoChamadas de método
Chamadas de método interno
Os métodos podem chamar outros métodos da
mesma classe como parte de sua implementação.
Isso é denominado chamada de método interno.
public void economizaEnergia(){
Apagar();
}
public void Apagar(){
estado = "desligada";
}
UFS – Programação II / 38 de 53
Chamadas de métodoChamadas de método
Chamadas de método externo
Os métodos podem chamar métodos de outros objetos
utilizando a notação de ponto. Isso é denominado chamada de
método externo.
A sintaxe de uma chamada de método externo é
• objeto.nomeDoMétodo(listadeparâmetros)
class Lampada_Principal
{
public static void main(String args[])
{
Lampada L1 = new Lampada("ligada");
System.out.print("nLampada 1 Estado ("+ L1.getEstado() +")");
L1.economizaEnergia();
System.out.print("nLampada 1 Estado ("+ L1.getEstado() +")");
}
}
20. 20
Campos / Parâmetros / Variáveis Locais
ProgramaProgramaçção Orientada a Objetosão Orientada a Objetos
UFS – Programação II / 40 de 53
VariáveisVariáveis
Campos são um tipo de variável
armazenam valores por toda a vida de um objeto; e
são acessíveis por meio da classe.
porém são definidos fora dos métodos
Métodos podem incluir variáveis de vida mais curta
existem apenas enquanto o método está em execução
são acessíveis de dentro do método
São definidas dentro de um método
public class Lampada
{
private String estado;
private int nVidaUtil;
//construtor e métodos omitidos
}
21. 21
UFS – Programação II / 41 de 53
Variáveis LocaisVariáveis Locais
Variável declarada e utilizada dentro de um único
método.
Seu tempo de vida está limitado ao método.
public int ReiniciaVidaUtil()
{
int nVidaUtilUtilizada = nVidaUtil;
nVidaUtil = 0;
return nVidaUtilUtilizada;
}
UFS – Programação II / 42 de 53
Campos / Parâmetros e Variáveis Locais
Considerações
Campos / Parâmetros e Variáveis Locais
Considerações
Todos os três tipo são capazes de
armazenas um valor que é apropriado para
seu tipo definido.
22. 22
UFS – Programação II / 43 de 53
Campos / Parâmetros e Variáveis Locais
Considerações
Campos / Parâmetros e Variáveis Locais
Considerações
Campos
São definidos fora dos construtores e métodos.
Utilizados para armazenar dados que persistem por toda a vida
de um objeto.
Têm escopo de classe: sua acessibilidade se estende por toda
a classe e podem ser utilizadas em quaisquer dos construtores
ou métodos da classe em que eles estão definidos.
Enquanto forem definidos como private, não podem ser
acessados de fora de sua classe definidora.
UFS – Programação II / 44 de 53
Campos / Parâmetros e Variáveis Locais
Considerações
Campos / Parâmetros e Variáveis Locais
Considerações
Parâmetros
Persistem somente durante o período em que um construtor ou
método executa.
Atuam como posições temporárias, em vez de permanentes, da
memória.
São definidos no cabeçalho de um construtor ou método.
Recebem seus valores fora, sendo inicializados pelos valores
reais de parâmetros.
Escopo é limitado a seu construtor ou ao seu método definidor.
23. 23
UFS – Programação II / 45 de 53
Campos / Parâmetros e Variáveis Locais
Considerações
Campos / Parâmetros e Variáveis Locais
Considerações
Variáveis Locais
Definidas dentro do corpo de um construtor ou método.
Podem ser inicializadas e utilizadas somente dentro do corpo
de seu construtor ou método definidor.
Devem ser inicializadas antes de serem utilizadas em um
expressão – elas não recebem um valor-padrão.
Têm escopo que é limitado no bloco em que elas são definidas.
Não são acessíveis em nenhum lugar fora desse bloco.
Outro Exemplo...
24. 24
UFS – Programação II / 47 de 53
EXEMPLO – Circulo.javaEXEMPLO – Circulo.java
public class Circulo {
public float raio; //atributo raio do círculo
public float x; //posições em coordenadas cartesianas
public float y;
}
UFS – Programação II / 48 de 53
EXEMPLO – Principal.javaEXEMPLO – Principal.java
public class Principal {
public static void main(String args[]) {
Circulo umcirc;
umcirc= new Circulo(); //alocação dessa variável
System.out.println( "("+ umcirc.x +","+ umcirc.y +","+ umcirc.raio +") ");
umcirc.x=umcirc.x+17;
System.out.println( "("+ umcirc.x +","+ umcirc.y +","+ umcirc.raio +") ");
}
}
public class Principal {
public static void main(String args[]) {
Circulo umcirc;
umcirc= new Circulo(); //alocação dessa variável
System.out.println( "("+ umcirc.x +","+ umcirc.y +","+ umcirc.raio +") ");
umcirc.x=umcirc.x+17;
System.out.println( "("+ umcirc.x +","+ umcirc.y +","+ umcirc.raio +") ");
}
}
25. 25
UFS – Programação II / 49 de 53
EXEMPLO – Principal.javaEXEMPLO – Principal.java
class Circulo {
public float raio; //atributo raio do círculo
public float x; //posições em coordenadas cartesianas
public float y;
}
public class Principal {
public static void main(String args[]) {
Circulo umcirc;
umcirc= new Circulo(); //alocação dessa variável
System.out.println( "("+ umcirc.x +","+ umcirc.y +","+ umcirc.raio +") ");
umcirc.x=umcirc.x+17;
System.out.println( "("+ umcirc.x +","+ umcirc.y +","+ umcirc.raio +") ");
}
}
class Circulo {
public float raio; //atributo raio do círculo
public float x; //posições em coordenadas cartesianas
public float y;
}
public class Principal {
public static void main(String args[]) {
Circulo umcirc;
umcirc= new Circulo(); //alocação dessa variável
System.out.println( "("+ umcirc.x +","+ umcirc.y +","+ umcirc.raio +") ");
umcirc.x=umcirc.x+17;
System.out.println( "("+ umcirc.x +","+ umcirc.y +","+ umcirc.raio +") ");
}
}
UFS – Programação II / 50 de 53
EXERCÍCIOSEXERCÍCIOS
1. Repita o mesmo exemplo só que agora mova o círculo alterando as
componentes x e y. Coloque o círculo na posição (1.0,1.0), através de
atribuições do tipo acirc.x=1.0; . Acompanhe todas as modificações do
objeto imprimindo seus atributos na tela.
2. Simplifique o programa anterior retirando o atributo raio. Você pode
dar o nome de Ponto ou Ponto_geometrico para esta classe. Não se
esqueça de compilar, use o compilador como ferramenta para verificar
se você aprendeu corretamente a sintaxe da linguagem.
3. Reescreva a classe Circulo para trabalhar com atributos do tipo int.
1. Repita o mesmo exemplo só que agora mova o círculo alterando as
componentes x e y. Coloque o círculo na posição (1.0,1.0), através de
atribuições do tipo acirc.x=1.0; . Acompanhe todas as modificações do
objeto imprimindo seus atributos na tela.
2. Simplifique o programa anterior retirando o atributo raio. Você pode
dar o nome de Ponto ou Ponto_geometrico para esta classe. Não se
esqueça de compilar, use o compilador como ferramenta para verificar
se você aprendeu corretamente a sintaxe da linguagem.
3. Reescreva a classe Circulo para trabalhar com atributos do tipo int.
26. 26
UFS – Programação II / 51 de 53
EXERCÍCIOSEXERCÍCIOS
4. Seguindo a abstração de que as pessoas possuem as características
nome, endereço, telefone e idade, defina em Java a classe e
atributos necessários para a instanciação de duas pessoas.
4. Seguindo a abstração de que as pessoas possuem as características
nome, endereço, telefone e idade, defina em Java a classe e
atributos necessários para a instanciação de duas pessoas.
UFS – Programação II / 52 de 53
Bibliografia BásicaBibliografia Básica
DEITEL E DEITEL. Java: como programar. Makron
Books. 2ª. Edição.
27. 27
UFS – Programação II / 53 de 53
Bibliografia ComplementarBibliografia Complementar
BARNES, D.J.; KÖLLING, M. Programação orientada a
objetos com Java: Uma Introdução Prática Utilizando o
Blue J. São Paulo: Editora Pearson, 2004.
PUGA, Sandra; RISSETI, Gerson. Lógica de
Programação e Estrutura de Dados, com aplicações
Java. São Paulo: Pearson Prentice Hall, 2003.
SANTOS, Rafael. Introdução à Programação Orientada
a Objetos usando Java. Rio de Janeiro: Elsevier, 2003.