Buscar

Aula_Revisão_09_09_2021

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
Data da avaliação: 19/09/2021 
Prova Objetiva pelo AVA, sendo verificados os conceitos teóricos 
apresentados e os fundamentos práticos. 
 
Revisão 
O Paradigma da Programação Orientada a Objetos (POO) veio para 
facilitar a vida daqueles que trabalham com desenvolvimento de software, 
pois na POO o difícil não é desenvolver bem um software, mas sim 
desenvolver um software que satisfaça o cliente, ou seja, garantir que o 
que será entregue será realmente o que foi pedido. Uma das 
características da POO é fazer com que o programador pense as coisas 
de forma distintas, transformando-as assim em objeto, aplicando 
propriedades e métodos, reduzindo assim a complexidade no 
desenvolvimento e manutenção de softwares, aumentando a 
produtividade. 
Na OO, objeto é uma abstração dos objetos reais existentes. Em uma sala 
de aula, por exemplo, existem diversos objetos: alunos, cadeiras, mesas, 
lousa etc. Se for necessário manter controle de uma sala de aula, pode 
ser elaborado um software que manipula objetos desse tipo. No dia-a-dia 
vivemos cercados por objetos de diversos tipos e formas. 
POO trabalha utilizando classes, ela é quem dá a vida ao objeto, pois 
nela é que são criadas as funcionalidades através dos métodos, dizendo 
se o objeto vai andar parar rodar, etc., e suas especificidades através dos 
atributos, sua cor, seu nome, etc.. a classe não é o objeto, ela é utilizada 
para construí-lo. 
Podemos verificar que o Objeto é uma abstração de software que pode 
ser algo representado por algo real ou virtual, que é formado por um 
conjunto de propriedades (variáveis) e procedimentos (métodos), onde as 
variáveis possuem um tipo que define os possíveis valores que pode 
representar um número inteiro, real ou string e, os métodos são rotinas 
que, quando executadas realizam algumas tarefas como alterar o 
conteúdo de uma variável do objeto. A classe é a abstração do objeto. 
A abstração consiste em um dos pontos mais importantes dentro de 
qualquer linguagem Orientada a Objetos. A representação de um objeto 
realé como temos que imaginar o que esse objeto irá realizar dentro de 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
nosso sistema. São três pontos que devem ser levados em consideração 
no processo de abstração. 
O primeiro ponto é darmos uma identidade ao objeto que iremos criar. 
Essa identidade deve ser única dentro do sistema para que não haja 
conflito. Na maior parte das linguagens, há o conceito de pacotes (ou 
namespaces). Nessas linguagens, a identidade do objeto não pode ser 
repetida dentro do pacote, e não necessariamente no sistema inteiro. 
A segunda parte diz respeito a características do objeto. Como sabemos, 
no mundo real qualquer objeto possui elementos que o definem. Dentro da 
programação orientada a objetos, essas características são 
nomeadas propriedades. Por exemplo, as propriedades de um objeto 
“Cachorro” poderiam ser “Tamanho”, “Raça” e “Idade”. 
Por fim, a terceira parte é definirmos as ações que o objeto irá executar. 
Essas ações, ou eventos, são chamados métodos. Esses métodos 
podem ser extremamente variáveis, desde “Acender()” em um objeto 
lâmpada até “Latir()” em um objeto cachorro. 
Ao definir uma classe, podem ser criados muitos objetos a partir dela. 
Imagine a classe como o projeto de um veículo criado por uma empresa 
montadora. Depois de definidos todos os aspectos importantes do projeto 
do veículo (partes que o compõem, lista de peças, ações a serem 
executadas sobre o veículo etc.), podem ser criados muitos veículos, 
sempre tendo como base o projeto original. 
Na orientação a objetos também é assim, pois uma vez definidas todas as 
partes que compõem uma classe, isto é, seus atributos (estado) e 
métodos (comportamento), é possível criar objetos que receberão suas 
características. No entanto, apesar de todos os objetos serem criados a 
partir de uma mesma classe, eles podem manter conteúdos individuais em 
suas variáveis, como, por 
exemplo, a cor da lataria, a 
potência do motor etc. Na 
realidade ao programarmos 
um objeto, definindo suas 
características, 
funcionalidades, estamos 
programando uma classe. 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
Dentre alguns recursos aplicados na programação orientada a objeto, 
temos: encapsulamento, herança e polimorfismo. 
Encapsulamento é a limitação imposta a atributos de uma classe, 
restringindo o acesso aos métodos dessa classe através de limitadores de 
acesso, dos quais os mais utilizados são: 
• Público (public) – a classe só é vista pelas demais classes se 
estiverem dentro do mesmo pacote; 
• Protegida (protected) – o acesso se restringe apenas a própria 
classe e suas subclasses; 
• Privado (private) – o acesso só é permitido somente pela própria 
classe. 
O conceito de herança nos permite definir uma nova classe, com base em 
uma já existente. 
A classe criada ( subclasse ou classe derivada ) automaticamente herda 
todas as variáveis e métodos da classe já existente (superclasse). 
O mecanismo de herança permite que a subclasse inclua ou sobre ponha 
novas variáveis e métodos da superclasse. O mecanismo de herança é 
recursivo, permitindo criar-se uma hierarquia de classes, do nível mais 
alto, onde as características herdadas são comuns a todos os objetos 
desta classe até os níveis inferiores, onde estão as especializações das 
classes superiores. As subclasses herdam as características comuns, 
definindo suas propriedades específicas, ou seja, facilita a construção de 
novos objetos a partir de outros já existentes, sem a necessidade de 
reescrevê-lo todo. 
Polimorfismo: A palavra polimorfismo utilizada na biologia para definir 
várias formas de membros de uma mesma espécie. Utilizando essa 
analogia, o mecanismo de polimorfismo utilizado na POO, nos permite 
tratar objetos semelhantes de uma maneira uniforme. Para que o 
polimorfismo seja utilizado, é necessária a aplicação do conceito de 
herança, aplicados somente aos métodos da classe. 
Considere uma classe Veículo com duas classes 
derivadas, Automóvel e Bicicleta: 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
Essas classes têm três métodos, definidos para veículos de forma geral e 
redefinidos mais especificamente para automóveis e bicicletas: 
• checkList(), para verificar o que precisa 
ser analisado no veículo; 
• adjust(), para realizar os reparos e a 
manutenção necessária; e 
• cleanup(), para realizar procedimentos de 
limpeza do veículo. 
A aplicação Oficina define um objeto que recebe 
objetos da classe Veículo. Para cada veículo 
recebido, a oficina executa na sequência os três 
métodos da classe Veículo. No entanto, não há 
como saber no momento da programação se a 
Oficina estará recebendo um automóvel ou uma bicicleta -- assim, o 
momento de decisão sobre qual método será aplicado só ocorrerá durante 
a execução do programa. 
 
Com base nos conceitos de objetos, classes, encapsulamento, herança 
e polimorfismo, que são considerados como o paradigma da POO 
representando uma forma inovadora de pensar e criar novos softwares, 
trazendo inúmeros benefícios e valores agregados no desenvolvimento 
deles, tais como: a reutilização de códigos que reduz o tempo e o risco no 
desenvolvimento, aumentando assim a confiabilidade do software, haja 
vista que, os códigos reutilizados já foram testados, facilita também a 
compreensão da linguagem com desenvolvedor na hora da manutenção 
de softwares complexos. 
Universidade Estadual de Roraima – UERRCiências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 
 
Na OO, objeto é uma abstração dos objetos reais existentes. Em uma sala 
de aula, por exemplo, existem diversos objetos: alunos, cadeiras, mesas, 
lousa etc. Se for necessário manter controle de uma sala de aula, pode 
ser elaborado um software que manipula objetos desse tipo. 
No cotidiano vivemos cercados por objetos de diversos tipos e formas. O 
contato com esses objetos nos leva a identificar suas características 
físicas, sua forma etc. Ao visualizar um objeto qualquer, como uma conta 
bancária, por exemplo, reconhecemos seu número, cliente, saldo, enfim, 
suas diversas propriedades. Outros objetos possuem diferentes 
propriedades. Associado às propriedades do objeto existe outro fator: as 
ações que podem ser realizadas com ele. Voltando ao exemplo da conta 
bancária, ela pode estar bloqueada ou desbloqueada. Existe um 
procedimento para consultar, depositar e sacar. A programação orientada 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
a objetos procura modelar, internamente no computador, a realidade dos 
objetos. 
Apesar de existirem diferentes tipos de objetos, eles compartilham duas 
características principais: todos possuem um estado (conjunto de 
propriedades do objeto) e um comportamento (as ações possíveis sobre o 
objeto). No caso da conta bancária, o estado poderia ser o conjunto de 
propriedades “numero”, “cliente”, “saldo” etc.; já o comportamento poderia 
ser composto por “consultar”, “depositar”, “sacar” etc. Voltando ao estado, 
um objeto conta bancária pode ter um atributo chamado “status” que 
assuma um dos valores seguintes: bloqueada, desbloqueada etc. Em cada 
etapa da vida de um objeto, ele pode assumir um estado diferente. 
Os objetos descritos no item anterior são criados a partir das 
classes. Os objetos são instâncias de classe que permanecem 
em memória e mantêm seus valores de maneira individual. A 
criação de uma classe deve anteceder a de um objeto, uma vez 
que este é criado a partir daquela. Uma classe é um molde, um 
modelo, um protótipo a partir do qual os objetos podem ser 
criados. Ao definir uma classe, podem ser criados muitos objetos 
a partir dela. 
 
A criação de uma classe Conta para 
representar os dados de uma conta 
bancária. Nesse exemplo definimos três 
atributos para a classe Conta, mas não 
definimos métodos. 
Já vimos que quando criamos uma classe em Java precisamos declarar 
os atributos e métodos da classe. Para declarar um atributo, utilizamos a 
seguinte sintaxe: 
Sintaxe: 
 
<qualificador> <tipo do atributo> <nome do atributo> 
 
Como funciona? 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 
O qualificador de acesso determinará a visibilidade do atributo. É 
opcional e, se não for informado, por padrão o atributo será protegido 
(protected). Não se preocupe com isso agora. Voltaremos a falar sobre 
os qualificadores quando estudarmos encapsulamento. 
O tipo do atributo é um tipo primitivo ou classe que define o atributo. 
O nome do atributo é nome que identifica o atributo. 
Há um padrão entre os programadores de sempre iniciarem os nomes de 
atributos com letras minúsculas. Caso queiramos definir vários atributos 
de mesmo tipo podemos colocar os vários nomes separados por vírgula. 
 
Exemplos: 
 
String nome, endereço; 
 
Para declararmos um método, utilizamos a seguinte sintaxe: 
 
<qualificador> <tipo de retorno> <nome do método>(<lista de 
argumentos>){ 
 <corpo do método> 
} 
 
Como Funciona? 
O qualificador de acesso determinará a visibilidade do atributo. É 
opcional e, se não for informado, por padrão o atributo será protegido 
(protected). Não se preocupe com isso agora. Voltaremos a falar sobre 
os qualificadores quando estudarmos encapsulamento. 
O tipo do atributo é um tipo primitivo ou classe que define o retorno a ser 
dado pelo método. 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
O nome do método é nome que define o método. 
O lista de argumentos pode existir ou não argumentos, se existir 
Argumentos estes são variáveis especificadas entre parênteses na 
invocação (chamada) de um método. 
 
O corpo do método é o código que define o método faz. 
 
A seguir segue um material do site Devmedia, para um resumo geral dos 
conceitos apresentado de forma prática. 
Link: Principais conceitos da Programação Orientada a Objetos 
(devmedia.com.br) 
Classe e Objeto 
Uma classe é uma forma de definir um tipo de dado em 
uma linguagem orientada a objeto. Ela é formada por dados e 
comportamentos. 
Para definir os dados são utilizados os atributos, e para definir o 
comportamento são utilizados métodos. Depois que uma classe é 
definida podem ser criados diferentes objetos que utilizam a classe. 
A Listagem 1 mostra a definição da classe Empresa, que tem os 
atributos nome, endereço, CNPJ, data de fundação, faturamento, e 
também o método imprimir, que apenas mostra os dados da empresa. 
package com.devmedia.model; 
 
import java.util.Date; 
 
public class Empresa { 
 
 private String nome; 
https://www.devmedia.com.br/principais-conceitos-da-programacao-orientada-a-objetos/32285
https://www.devmedia.com.br/principais-conceitos-da-programacao-orientada-a-objetos/32285
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 private String cnpj; 
 private String endereco; 
 private Date dataFundacao; 
 private float faturamento; 
 
 public void imprimir() { 
 System.out.println("Nome: " + nome); 
 System.out.println("CNPJ: " + cnpj); 
 System.out.println("Endereço: " + endereco); 
 System.out.println("Data de Fundação: " + dataFundacao); 
 
 } 
 
 public String getNome() { 
 return nome; 
 } 
 public void setNome(String nome) { 
 this.nome = nome; 
 } 
 public String getCnpj() { 
 return cnpj; 
 } 
 public void setCnpj(String cnpj) { 
 this.cnpj = cnpj; 
 } 
 public String getEndereco() { 
 return endereco; 
 } 
 public void setEndereco(String endereco) { 
 this.endereco = endereco; 
 } 
 public Date getDataFundacao() { 
 return dataFundacao; 
 } 
 public void setDataFundacao(Date dataFundacao) { 
 this.dataFundacao = dataFundacao; 
 } 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 public float getFaturamento() { 
 return faturamento; 
 } 
 public void setFaturamento(float faturamento) { 
 this.faturamento = faturamento; 
 } 
 
} 
Listagem 1. Classe Empresa 
Com a classe definida, podem ser criados diversos objetos do tipo 
Empresa, por isso a Listagem 2 mostra como criar esses objetos, 
bastando declarar uma variável com o tipo Empresa e com a palavra 
reservada new criar um novo objeto. Depois podemos definir os dados 
para os atributos da classe Empresa e, por fim, chamar o método 
definido. 
package com.devmedia.main; 
 
import java.util.Date; 
 
import com.devmedia.model.Empresa; 
 
public class Main { 
 
 public static void main(String[] args) { 
 
 Empresa empresa1 = new Empresa(); 
 empresa1.setNome("Loja 1"); 
 empresa1.setCnpj("12343232"); 
 empresa1.setDataFundacao(new Date()); 
 empresa1.setEndereco("Rua abc,100"); 
 empresa1.setFaturamento(50000); 
empresa1.imprimir(); 
 
 Empresa empresa2 = new Empresa(); 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 empresa2.setNome("Loja 2"); 
 empresa2.setCnpj("12354432"); 
 empresa2.setDataFundacao(new Date()); 
 empresa2.setEndereco("Rua abc, 200"); 
 empresa2.setFaturamento(50000); 
empresa2.imprimir(); 
 
Empresa empresa3 = new Empresa(); 
 empresa3.setNome("Posto de Gasolina"); 
 empresa3.setCnpj("12345434"); 
 empresa3.setEndereco("Rua afd, 500"); 
 empresa3.setFaturamento(10000); 
 empresa3.setDataFundacao(new Date()); 
 empresa3.imprimir(); 
 
 } 
 
} 
Listagem 2. Definição dos objetos do tipo Empresa 
Saiba mais: Cursos de Engenharia de Software 
Encapsulamento 
O conceito do encapsulamento consiste em “esconder” os atributos da 
classe de quem for utilizá-la. Isso se deve por dois motivos principais. 
Um é para que alguém que for usar a classe não a use de forma errada 
como, por exemplo, em uma classe que tem um método de divisão 
entre dois atributos da classe - se o programador java não conhecer a 
https://www.devmedia.com.br/cursos/engenharia-de-software
https://www.devmedia.com.br/guia/programador-java/37809
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
implementação interna da classe, ele pode colocar o valor zero no 
atributo do dividendo, mas se a classe estiver corretamente 
encapsulada podemos impedir que o programador faça isso. Esse tipo 
de implementação é feito via os métodos get e set. A Listagem 3 mostra 
o código da classe Divisao citada como exemplo. 
package com.devmedia.model; 
 
public class Divisao { 
 
 private int num1; 
 private int num2; 
 
 public void divisao() { 
 System.out.println("A divisao e: " + (num1 / num2)); 
 } 
 
 public int getNum1() { 
 return num1; 
 } 
 
 public void setNum1(int num1) { 
 this.num1 = num1; 
 } 
 
 public int getNum2() { 
 return num2; 
 } 
 
 public void setNum2(int num2) { 
 if (num2 == 0) { 
 num2 = 1; 
 } else { 
 this.num2 = num2; 
 } 
 } 
 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
} 
Listagem 3. Classe Divisao 
O outro motivo é de manter todo o código de uma determinada classe 
encapsulada dentro dela mesmo como, por exemplo, se existe uma 
classe Conta, talvez seja melhor não permitir que um programador 
acesse o atributo saldo diretamente, nem mesmo com os 
métodos get e set, mas somente por operações, como saque, depósito e 
saldo. A Listagem 4 mostra a implementação da classe Conta, onde só 
é possível acessar a atributo saldo pelas operações disponibilizadas na 
classe e os outros atributos podem ser acessados via métodos get e set. 
package com.devmedia.model; 
 
public class Conta { 
 
 private String agencia; 
 private String numero; 
 private float saldo; 
 
 public void saque(float valor) { 
 if (saldo < valor) { 
 System.out.println("O saldo é insuficiente!"); 
 } else { 
 saldo -= valor; 
 } 
 } 
 
 public String getAgencia() { 
 return agencia; 
 } 
 
 public void setAgencia(String agencia) { 
 this.agencia = agencia; 
 } 
 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 public String getNumero() { 
 return numero; 
 } 
 
 public void setNumero(String numero) { 
 this.numero = numero; 
 } 
 
 public void deposito(float valor) { 
 saldo += valor; 
 } 
 
 public void saldo() { 
 System.out.println("O saldo é: " + saldo); 
 } 
 
} 
Listagem 4. Classe Conta 
Associação de Classes 
A associação de classes indica quando uma classe tem um tipo de 
relacionamento "tem um" com outra classe como, por exemplo, uma 
pessoa tem um carro e isso indica que a classe Pessoa tem uma 
associação com a classe Carro. Esse tipo de relacionamento entre 
classes é importante, porque define como as classes interagem entre 
elas nas aplicações. 
A Listagem 5 mostra como implementar uma associação um para um. 
A associação é feita entre as classes Pessoa e Carro. A classe Carro tem os 
atributos modelo, placa, ano e valor; e a classe Pessoa tem os 
atributos nome, endereço, telefone e dataNascimento. Além disso, ela tem um 
relacionamento com a classe Carro. 
package com.devmedia.model; 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 
public class Carro { 
 
 private String modelo; 
 private String placa; 
 private int ano; 
 private float valor; 
 
 public String getModelo() { 
 return modelo; 
 } 
 
 public void setModelo(String modelo) { 
 this.modelo = modelo; 
 } 
 
 public String getPlaca() { 
 return placa; 
 } 
 
 public void setPlaca(String placa) { 
 this.placa = placa; 
 } 
 
 public int getAno() { 
 return ano; 
 } 
 
 public void setAno(int ano) { 
 this.ano = ano; 
 } 
 
 public float getValor() { 
 return valor; 
 } 
 
 public void setValor(float valor) { 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 this.valor = valor; 
 } 
 
} 
 
package com.devmedia.model; 
 
import java.util.Date; 
 
public class Pessoa { 
 
 private String nome; 
 private String endereco; 
 private String telefone; 
 private Date dataNascimento; 
 
 // Relacionamento com a classe Carro 
 private Carro carro; 
 
 public String getNome() { 
 return nome; 
 } 
 
 public void setNome(String nome) { 
 this.nome = nome; 
 } 
 
 public String getEndereco() { 
 return endereco; 
 } 
 
 public void setEndereco(String endereco) { 
 this.endereco = endereco; 
 } 
 
 public String getTelefone() { 
 return telefone; 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 } 
 
 public void setTelefone(String telefone) { 
 this.telefone = telefone; 
 } 
 
 public Date getDataNascimento() { 
 return dataNascimento; 
 } 
 
 public void setDataNascimento(Date dataNascimento) { 
 this.dataNascimento = dataNascimento; 
 } 
 
 public Carro getCarro() { 
 return carro; 
 } 
 
 public void setCarro(Carro carro) { 
 this.carro = carro; 
 } 
 
} 
Listagem 5. Associação entre as classes Pessoa e Carro 
Além do relacionamento um para um, também existem o 
relacionamento um para N e N para N. Esses relacionamentos são 
modelados com um vetor de objetos de uma classe para outro como, 
por exemplo, se uma pessoa pode ter mais de um carro, é necessário 
mapear esse relacionamento com uma lista de carros na classe Pessoa. 
A Listagem 6 mostra a alteração necessária na classe Pessoa, mas na 
classeCarro não é necessária nenhuma alteração. 
package com.devmedia.model; 
 
import java.util.ArrayList; 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
import java.util.Date; 
import java.util.List; 
 
public class Pessoa { 
 
 private String nome; 
 private String endereco; 
 private String telefone; 
 private Date dataNascimento; 
 
 // Relacionamento com a classe Carro 
 private List<Carro> carros = new ArrayList<Carro>(); 
 
 public String getNome() { 
 return nome; 
 } 
 
 public void setNome(String nome) { 
 this.nome = nome; 
 } 
 
 public String getEndereco() { 
 return endereco; 
 } 
 
 public void setEndereco(String endereco) { 
 this.endereco = endereco; 
 } 
 
 public String getTelefone() { 
 return telefone; 
 } 
 
 public void setTelefone(String telefone) { 
 this.telefone = telefone; 
 } 
 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 public Date getDataNascimento() { 
 return dataNascimento; 
 } 
 
 public void setDataNascimento(Date dataNascimento) { 
 this.dataNascimento = dataNascimento; 
 } 
 
 public List<Carro> getCarros() { 
 return carros; 
 } 
 
 public void setCarros(List<Carro> carros) { 
 this.carros = carros; 
 } 
 
} 
Listagem 6. Classe Pessoa com relacionamento um para N 
Herança 
A herança é um tipo de relacionamento que define que uma classe "é 
um" de outra classe como, por exemplo, a classe Funcionario que é uma 
Pessoa, assim um Funcionário tem um relacionamento de herança 
com a classe Pessoa. Em algumas linguagens, como C, é possível fazer 
herança múltipla, isto é, uma classe pode herdar de diversas outras 
classes, mas em Java isso não é permitido, pois cada classe pode 
herdar de apenas outra classe. 
A Listagem 7 mostra como implementar a herança entre classes: a 
classe Pessoa definida será utilizada como base para as outras classes. 
Será definida a classe Funcionario, com os atributos salario e matricula, e 
a classe Aluno com os atributos registroAcademico e curso. Como é 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
possível observar, para implementar herança em Java usaremos a 
palavra reservada extends. 
package com.devmedia.model; 
 
public class Funcionario extends Pessoa { 
 
 private float salario; 
 private String matricula; 
 
 public float getSalario() { 
 return salario; 
 } 
 
 public void setSalario(float salario) { 
 this.salario = salario; 
 } 
 
 public String getMatricula() { 
 return matricula; 
 } 
 
 public void setMatricula(String matricula) { 
 this.matricula = matricula; 
 } 
 
} 
 
package com.devmedia.model; 
 
public class Aluno extends Pessoa { 
 
 private String registroAcademico; 
 private String curso; 
 private float mensalidade; 
 
 public String getRegistroAcademico() { 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 return registroAcademico; 
 } 
 
 public void setRegistroAcademico(String registroAcademico) { 
 this.registroAcademico = registroAcademico; 
 } 
 
 public String getCurso() { 
 return curso; 
 } 
 
 public void setCurso(String curso) { 
 this.curso = curso; 
 } 
 
 public float getMensalidade() { 
 return mensalidade; 
 } 
 
 public void setMensalidade(float mensalidade) { 
 this.mensalidade = mensalidade; 
 } 
 
} 
Listagem 7. Classes Funcionario e Aluno, filhas da classe Pessoa 
Sobre a herança em Java é importante saber que existem quatro tipos 
de acesso aos atributos: 
1. public: que permite que métodos e atributos sejam acessados 
diretamente de qualquer classe; 
2. private: que permite que métodos e atributos sejam acessados 
apenas dentro da classe; 
3. protected: que permite que métodos e atributos sejam acessados 
apenas dentro da própria classe e em classes filhas; 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
4. tipo de acesso padrão, que permite que métodos e atributos 
sejam acessadas por qualquer classes que esteja no mesmo 
pacote. 
Como usamos a classe Pessoa com herança, uma possibilidade é 
mudar o tipo de acesso dos atributos da classe Pessoa para protegido. 
A Listagem 8 mostra a alteração feita. 
package com.devmedia.model; 
 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 
 
public class Pessoa { 
 
 protected String nome; 
 protected String endereco; 
 protected String telefone; 
 protected Date dataNascimento; 
 
 // Relacionamento com a classe Carro 
 protected List<Carro> carros = new ArrayList<Carro>(); 
 
 public String getNome() { 
 return nome; 
 } 
 
 public void setNome(String nome) { 
 this.nome = nome; 
 } 
 
 public String getEndereco() { 
 return endereco; 
 } 
 
 public void setEndereco(String endereco) { 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 this.endereco = endereco; 
 } 
 
 public String getTelefone() { 
 return telefone; 
 } 
 
 public void setTelefone(String telefone) { 
 this.telefone = telefone; 
 } 
 
 public Date getDataNascimento() { 
 return dataNascimento; 
 } 
 
 public void setDataNascimento(Date dataNascimento) { 
 this.dataNascimento = dataNascimento; 
 } 
 
 public List<Carro> getCarros() { 
 return carros; 
 } 
 
 public void setCarros(List<Carro> carros) { 
 this.carros = carros; 
 } 
 
} 
Listagem 8. Classe Pessoa com os atributos protegidos 
Saiba mais: Os pilares da Programação Orientada a Objetos 
https://www.devmedia.com.br/os-pilares-da-programacao-orientada-a-objetos/38384
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
Polimorfismo 
O Polimorfismo é a possibilidade de em uma hierarquia de classes 
implementar métodos com a mesma assinatura e, assim, implementar 
um mesmo código que funcione para qualquer classe dessa hierarquia 
sem a necessidade de implementações específicas para cada classe. O 
principal objetivo do polimorfismo é diminuir a quantidade de código 
escrito, aumentando a clareza e a facilidade de manutenção. 
A Listagem 9 mostra um exemplo de polimorfismo, onde a classe 
Conta tem um método saque que apenas permite o saque caso o 
cliente tenha saldo em sua conta. A classe ContaEspecial, que é filha da 
classe Conta, permite que o cliente faça um saque caso tenha saldo ou 
tenha ainda limite no cheque especial, e a classe ContaPoupanca permite 
que o cliente faça um saque caso ainda tenha saldo na conta corrente 
ou saldo na conta poupança. 
package com.devmedia.model; 
 
public class Conta { 
 
 protected String agencia; 
 protected String numero; 
 protected float saldo; 
 
 public void saque(float valor) { 
 if (saldo < valor) { 
 System.out.println("Osaldo é insuficiente!"); 
 } else { 
 saldo -= valor; 
System.out.println("Saque efetuado com sucesso!"); 
 
 } 
 } 
 
 public String getAgencia() { 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 return agencia; 
 } 
 
 public void setAgencia(String agencia) { 
 this.agencia = agencia; 
 } 
 
 public String getNumero() { 
 return numero; 
 } 
 
 public void setNumero(String numero) { 
 this.numero = numero; 
 } 
 
 public void deposito(float valor) { 
 saldo += valor; 
 } 
 
 public void saldo() { 
 System.out.println("O saldo é: " + saldo); 
 } 
 
} 
 
package com.devmedia.model; 
 
public class ContaEspecial extends Conta { 
 
 private float limite; 
 
 public void saque(float valor) { 
 if (saldo + limite < valor) { 
 System.out.println("O saldo é insuficiente!"); 
 } else { 
 saldo -= valor; 
System.out.println("Saque efetuado com sucesso!"); 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 
 } 
 } 
 
 public float getLimite() { 
 return limite; 
 } 
 
 public void setLimite(float limite) { 
 this.limite = limite; 
 } 
 
} 
 
package com.devmedia.model; 
 
public class ContaPoupanca extends Conta { 
 
 private float saldoPoupanca; 
 
 public void saque(float valor) { 
 if (saldo + saldoPoupanca < valor) { 
 System.out.println("O saldo é insuficiente!"); 
 } else { 
 if (saldo < valor) { 
 valor -= saldo; 
 saldo = 0; 
 saldoPoupanca -= valor; 
 } else { 
 saldo -= valor; 
 } 
System.out.println("Saque efetuado com sucesso!"); 
 } 
 } 
 
 public void depositoPoupanca(float valor) { 
 saldoPoupanca += valor; 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 } 
 
 private float getSaldoPoupanca() { 
 return saldoPoupanca; 
 } 
 
 private void setSaldoPoupanca(float saldoPoupanca) { 
 this.saldoPoupanca = saldoPoupanca; 
 } 
 
} 
Listagem 9. Hierarquia de classes Conta 
A Listagem 10 mostra o uso das classes, apesar de serem definidos 
objetos dos três tipos de classes. O método fazSaque pode ser utilizado 
para qualquer um dos tipos de conta, não dependendo do tipo que é 
passado como parâmetro para ele, e isso é possível graças ao 
polimorfismo, pois o método saque das três classes tem a mesma 
assinatura e em tempo de execução a JVM sabe o método saque de qual 
classe executar. 
package com.devmedia.main; 
 
import javax.swing.JOptionPane; 
 
import com.devmedia.model.Conta; 
import com.devmedia.model.ContaEspecial; 
import com.devmedia.model.ContaPoupanca; 
 
public class MainConta { 
 
 public static void main(String [] args) { 
 
 Conta conta = new Conta(); 
 conta.setAgencia("1234"); 
 conta.setNumero("1244"); 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 conta.deposito(3000); 
 
 ContaPoupanca contaPoupanca = new ContaPoupanca(); 
 contaPoupanca.setAgencia("3456"); 
 contaPoupanca.setNumero("1234"); 
 contaPoupanca.deposito(3000); 
 contaPoupanca.depositoPoupanca(1000); 
 
 ContaEspecial contaEspecial = new ContaEspecial(); 
 contaEspecial.setAgencia("3432"); 
 contaEspecial.setLimite(1000); 
 contaEspecial.setNumero("1434"); 
 contaEspecial.deposito(3000); 
 
 fazSaque(conta); 
 fazSaque(contaPoupanca); 
 fazSaque(contaEspecial); 
 
 } 
 
 public static void fazSaque(Conta conta) { 
 
 float valor = 
 Float.parseFloat( 
 JOptionPane.showInputDialog("Digite o valor do 
saque") 
 ); 
 conta.saque(valor); 
 conta.saldo(); 
 } 
 
} 
Listagem 10. Utilização das classes conta 
 
 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 
Exemplo prático 
 
 Lâmpada e Interruptor 
 
 
 
public class Lampada { 
 
 private int potencia; 
 private String tipo; 
 private boolean acesa; 
 
 public Lampada(String tipo){ 
 this.tipo = tipo; 
 } 
 
 public int getPotencia() { 
 return potencia; 
 } 
 public void setPotencia(int potencia) { 
 this.potencia = potencia; 
 } 
 public String getTipo() { 
 return tipo; 
 } 
 public void setTipo(String tipo) { 
 this.tipo = tipo; 
 } 
 public boolean isAcesa() { 
 return acesa; 
 } 
 public void setAcesa(boolean acesa) { 
 this.acesa = acesa; 
 } 
 
 
 public void apagar() { 
 System.out.println("Apagando"); 
 this.acesa = false; 
 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 } 
 
 public void acender() { 
 System.out.println("Acendendo lampada"); 
 this.acesa = true; 
 
 } 
 
 @Override 
 public String toString() { 
 return "Lampada [potencia=" + potencia + ", tipo=" + 
tipo + ", acesa=" + acesa + "]"; 
 } 
 
} 
 
 
public class Interruptor { 
 
 private Lampada conectada; 
 private boolean ligado; 
 
 public Interruptor() { 
 
 } 
 
 public Interruptor(Lampada conectada) { 
 this.conectar(conectada); 
 } 
 
 public void conectar(Lampada l) { 
 this.conectada = l; 
 } 
 
 public void ligar() { 
 System.out.println("Ligando interruptor"); 
 if (!this.ligado) { 
 this.ligado = true; 
 if (conectada != null) { 
 conectada.acender(); 
 } 
 } 
 } 
Universidade Estadual de Roraima – UERR 
Ciências da Computação 
Programação Orientada a Objetos 
Francisco Carlos L Pereira 
Aula 09/09/2021 
 
 
 public void desligar() { 
 System.out.println("Desligando interruptor"); 
 if (this.ligado) { 
 this.ligado = false; 
 if (conectada != null) { 
 conectada.apagar(); 
 } 
 } 
 
 } 
 
 @Override 
 public String toString() { 
 return "Interruptor [conectada=" + conectada + "]"; 
 } 
 
} 
 
public class Principal { 
 
 public static void main(String args[]){ 
 Lampada lampada1 = new Lampada("Incandescente"); 
 lampada1.setPotencia(40); 
 System.out.println(lampada1); 
 Interruptor i1 = new Interruptor(); 
 i1.conectar(lampada1); 
 System.out.println(i1); 
 i1.ligar(); 
 System.out.println(lampada1); 
 i1.desligar(); 
 System.out.println(lampada1); 
 
 } 
}

Continue navegando