1006 Programacao Orientada A Objetos Unopar
1006 Programacao Orientada A Objetos Unopar
orientada a
objetos
Programação orientada a
objetos
Adriano Sepe
Roque Maitino Neto
© 2017 por Editora e Distribuidora Educacional S.A.
Todos os direitos reservados. Nenhuma parte desta publicação poderá ser reproduzida ou transmitida de qualquer
modo ou por qualquer outro meio, eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo
de sistema de armazenamento e transmissão de informação, sem prévia autorização, por escrito, da Editora e
Distribuidora Educacional S.A.
Presidente
Rodrigo Galindo
Conselho Acadêmico
Alberto S. Santana
Ana Lucia Jankovic Barduchi
Camila Cardoso Rotella
Cristiane Lisandra Danna
Danielly Nunes Andrade Noé
Emanuel Santana
Grasiele Aparecida Lourenço
Lidiane Cristina Vivaldini Olo
Paulo Heraldo Costa do Valle
Thatiane Cristina dos Santos de Carvalho Ribeiro
Revisão Técnica
Ruy Flávio de Oliveira
Editorial
Adilson Braga Fontes
André Augusto de Andrade Ramos
Cristiane Lisandra Danna
Diogo Ribeiro Garcia
Emanuel Santana
Erick Silva Griep
Lidiane Cristina Vivaldini Olo
Sepe, Adriano
S479p Programação orientada a objetos / Adriano Sepe, Roque
Maitino Neto. – Londrina : Editora e Distribuidora Educacional
S.A., 2017.
176 p.
ISBN 978-85-8482-915-6
2017
Editora e Distribuidora Educacional S.A.
Avenida Paris, 675 – Parque Residencial João Piza
CEP: 86041-100 — Londrina — PR
e-mail: editora.educacional@kroton.com.br
Homepage: http://www.kroton.com.br/
Sumário
Unidade 1 | Problemas no desenvolvimento de software 7
Seção 1 - Modelos 61
1.1 | Conceito 61
1.2 | Exemplificando 62
Bons estudos!
Unidade 1
Problemas no
desenvolvimento de software
Adriano Sepe
Objetivos de aprendizagem
• Entender problemas existentes no processo de
desenvolvimento de software.
Arte do desenvolvimento
Introdução à seção
• signed
• unsigned
• long
• short
void main() {
unsigned char a = 1;
while (a > 0) {
printf("%d\n", a);
// Incrementa a variável a em 1
a++;
d) O percentual de homens.
#define _CRT_SECURE_NO_WARNINGS
#define QTD_PESQ 2
#include <stdio.h>
// primários
struct {
char sexo;
float altura;
char cor_olhos;
int idade;
} typedef Habitante;
Habitante populacao_pesquisa[QTD_PESQ];
int sm_idade_cast160 = 0;
int ct_idade_cast160 = 0;
int maior_idade = 0;
int ct_fem_20_45 = 0;
scanf("%f", &populacao_pesquisa[i].altura);
printf("Idade: ");
scanf("%d", &populacao_pesquisa[i].idade);
if (populacao_pesquisa[i].cor_olhos == 'C'
sm_idade_cast160 += populacao_
pesquisa[i].idade;
ct_idade_cast160++;
maior_idade = populacao_pesquisa[i].
idade;
if (populacao_pesquisa[i].sexo == 'F'
|| (populacao_pesquisa[i].cor_olhos == 'V'
ct_fem_20_45++;
if (populacao_pesquisa[i].sexo == 'M') {
ct_homens++;
if (ct_idade_cast160 == 0) {
printf("\t-Objetivo 1: 0\n");
} else {
printf("\t-Objetivo 1: %.2f\n",
(sm_idade_cast160 / (float)ct_idade_cast160));
return 0;
}
Fonte: elaborado pelo autor.
Atividades de aprendizagem
1. Os tipos de dados complexos são assim chamados porque:
a) Dificultam o desenvolvimento.
b) Devem ser utilizados em algoritmos complexos.
c) Permitem representar dados não atendidos pelos tipos primitivos.
d) Estão disponíveis apenas em linguagens de baixo nível.
e) Geram restrições relacionadas à plataforma de execução.
Limitações em evidência
Introdução à seção
scanf("%f", &populacao_pesquisa[i].altura);
printf("Idade: ");
scanf("%d", &populacao_pesquisa[i].idade);
if (populacao_pesquisa[i].cor_olhos == 'C'
*sm_idade_cast160 += populacao_
pesquisa[i].idade;
(*ct_idade_cast160)++;
*maior_idade = populacao_pesquisa[i].
idade;
if (atende_objetivo3(&populacao_pesquisa[i])) {
(*ct_fem_20_45)++;
if (populacao_pesquisa[i].sexo == 'M') {
(*ct_homens)++;
if (hab->sexo == 'F'
return 1;
return 0;
if (populacao_pesquisa[i].cor_olhos == 'C'
*sm_idade_cast160 += populacao_
pesquisa[i].idade;
*maior_idade = populacao_pesquisa[i].
idade;
if (atende_objetivo3(&populacao_pesquisa[i])) {
(*ct_fem_20_45)++;
if (populacao_pesquisa[i].sexo == 'M') {
(*ct_homens)++;
int main() {
Habitante populacao_pesquisa[QTD_PESQ];
int sm_idade_cast160 = 0;
int ct_idade_cast160 = 0;
int maior_idade = 0;
int ct_fem_20_45 = 0;
int ct_homens = 0;
executa_leitura(populacao_pesquisa);
executa_processamento(populacao_pesquisa,
&ct_fem_20_45, &ct_homens);
printf("\t-Objetivo 1: 0\n");
} else {
printf("\t-Objetivo 1: %.2f\n",
(sm_idade_cast160 / (float)ct_idade_cast160));
return 0;
return 1;
return 0;
return 1;
return 0;
if (hab->sexo == 'F'
return 1;
return 0;
}
Fonte: elaborado pelo autor.
if (atende_objetivo1(&populacao_pesquisa[i])) {
*sm_idade_cast160 += populacao_
pesquisa[i].idade;
(*ct_idade_cast160)++;
if (atende_objetivo2(&populacao_pesquisa[i],
maior_idade)) {
*maior_idade = populacao_pesquisa[i].
idade;
if (atende_objetivo3(&populacao_pesquisa[i])) {
(*ct_fem_20_45)++;
if (atende_objetivo4(&populacao_pesquisa[i])) {
(*ct_homens)++;
if (eh_fem(hab)
return 1;
return 0;
Atividades de aprendizagem
1. “Software tornou-se profundamente incorporado em praticamente
todos os aspectos de nossas vidas e, consequentemente, o número de
pessoas interessadas nos recursos e nas funções oferecidas por uma
************************
struct {
char sexo;
float altura;
char cor_olhos;
int idade;
} typedef Habitante;
************************
Habitante ************************
char sexo;
float altura;
int idade;
int eh_masc() {
int eh_fem() {
************************
Fonte: elaborado pelo autor.
Habitante {
char sexo;
float altura;
int idade;
int eh_masc() {
int eh_fem() {
Atividades de aprendizagem
1. Qual termo abaixo melhor define o objetivo da linguagem proposta?
a) Recursividade.
b) Organização.
c) Separar.
d) Unificar.
e) Otimizar.
Introdução à programação
orientada a objetos
Objetivos de aprendizagem
O objetivo desta unidade é proporcionar a você a
compreensão do paradigma de orientação a objetos,
passando pela conceituação e caracterização de modelos
e pela abordagem de abstração, herança, polimorfismo e
encapsulamento, itens fundamentais em nosso contexto
e cujo entendimento permitirá, no futuro, a construção
de programas bem modularizados e com o máximo de
aproveitamento de código.
Seção 1 | Modelos
Nesta seção será apresentado o conceito de modelo e as características
que o tornam a base para o estudo futuro de classes, métodos e objetos.
Por meio de exemplo baseado no cotidiano, será explicada a separação
entre dados e operações, características típicas de um modelo. Por
fim, a seção aborda as diferentes descrições de um mesmo modelo,
dependendo do contexto em que ele está inserido.
Boa leitura!
Modelos
Introdução à seção
1.1 Conceito
O programa de computador é o meio pelo qual um computador
executa cálculos e funções. Ele é escrito com o uso de comandos,
operadores, variáveis e alguns outros recursos que, dispostos
corretamente, formam uma linguagem de programação. O que de
melhor um computador faz é receber, processar e disponibilizar
nomes, valores, fórmulas e textos que, de forma genérica,
chamamos de dados. Tudo isso, é claro, por meio de um programa.
1.2 Exemplificando
Os modelos geralmente agregam dados e as operações que se
aplicam a eles. Para entendermos melhor esse conceito, devemos
passar pelo exemplo que segue, adaptado de Santos (2003).
Gerente
O consumo
Cliente se confirma e
é anotado na
serve informa a
comanda
conta
Comanda da sobremesa
Mesa número ___
Possui outra
comanda?
Bolo (pedaço)
Torta (pedaço)
Brigadeiro (unidade)
Gelatina (unidade)
1
Em alguns modelos, isso é possível pelo acionamento e desligamento da lâmpada
via interruptor em menos de um segundo.
2
Operação desnecessária na vida real, mas necessária durante a modelagem.
Atividades de aprendizagem
1.
A programação orientada a objetos separa claramente a
noção de o que é feito de como é feito. O que é descrito
como um conjunto de métodos e suas semânticas
associadas. O como de um objeto é definido pela sua
classe, que define a implementação dos métodos que o
objeto suporta. (ARNOLD; GOSLING; HOLMES, 2007, p.
62)
2.
Programas processam dados: valores em uma conta
bancária, caracteres entradas por um teclado, pontos
em uma imagem, valores numéricos para cálculos. O
paradigma de programação orientada a objetos considera
que os dados a serem processados e os mecanismos de
processamento destes dados devem ser considerados em
conjunto. (SANTOS, 2003, p. 1)
2.1 Conceito
Programação Orientada a Objetos é um paradigma de
programação de computadores onde se usam classes e objetos,
criados a partir de modelos usados para representar e processar
dados (SANTOS, 2003, p. 4).
Atividades de aprendizagem
1.
Em Programação Orientada a Objetos, os dados
pertencentes aos modelos são representados por tipos
de dados nativos, ou seja, que são característicos da
linguagem de programação. Dados também podem ser
representados por modelos já existentes na linguagem ou
por outros modelos criados pelo programador. (SANTOS,
2003, p. 4)
2.
Com o polimorfismo podemos projetar e implementar
sistemas que são facilmente extensíveis – novas classes
podem ser adicionadas a partes gerais do programa
com pouca ou nenhuma modificação, contanto que as
novas classes façam parte da hierarquia de herança que o
programa processa genericamente (DEITEL, 2003, p. 336).
Fique ligado
Nesta unidade, estudamos:
• Conceito de modelo.
• Agrupamento de dados e operações em um modelo.
• Exemplos de modelos.
• Especialização de modelos, conforme o contexto.
• Conceito do paradigma de orientação a objetos.
• Conceitos e exemplos de abstração, herança, polimorfismo
e encapsulamento.
2.
Imagine uma forma (molde) de bonecos de gessos.
Pois bem, essa é nossa classe ou tipo, ou seja, define o
formato, tamanho e diversos outros aspectos dos objetos
fabricados, no caso, os bonecos de gesso. Percebeu a
diferença? A classe é um molde para os objetos. Quando
se diz: “Instância de uma classe ou tipo”, nada mais é do
que o objeto dessa classe ou tipo. (SANTIAGO, 2017, [s.p.])
5.
Objetos são instâncias de classes que determinam
qual informação um objeto contém e como ele pode
manipulá-la. Um programa desenvolvido com uma
linguagem de programação orientada a objetos manipula
estruturas de dados através dos objetos da mesma forma
que um programa em linguagem tradicional utiliza
variáveis. (DAVID, 2017, [s.p.])
Classes e objetos
Adriano Sepe
Objetivos de aprendizagem
Compreender como os conceitos abordados na
introdução de programação orientada a objetos são
aplicados a uma linguagem de programação moderna e
elegante. Apresentaremos passo a passo como criamos um
projeto dentro da ferramenta Visual Studio, e a partir disso,
desenvolveremos uma versão de um aplicativo demonstrativo,
utilizando programação estruturada, por fim utilizaremos a
abordagem orientada a objetos.
U3 - Classes e objetos 81
82 U3 - Classes e objetos
Seção 1
1.1 Definições
U3 - Classes e objetos 83
1.2 Introduzindo uma dinâmica
84 U3 - Classes e objetos
1.3 Projeto estruturado
U3 - Classes e objetos 85
namespace Estoque
class Program
struct Produto {
86 U3 - Classes e objetos
public double ValorUnitario;
Console.WriteLine("Obtendo Estoque...");
U3 - Classes e objetos 87
// Interage com o usuário indicando um novo produto
Console.Write("Código: ");
estoque[i].Codigo = Convert.ToInt32(Console.ReadLine());
Console.Write("Descrição: ");
estoque[i].Descricao = Console.ReadLine();
estoque[i].ValorUnitario = Convert.ToDouble(Console.
ReadLine());
estoque[i].QtdeEstoque = Convert.ToDouble(Console.
ReadLine());
Console.Clear();
}
Fonte: elaborado pelo autor.
88 U3 - Classes e objetos
Como podemos observar, a saída padrão se dá através das
instruções Console.Write ou Console.WriteLine, já na entrada
utilizamos apenas o Console.ReadLine. Outro ponto que vale
o destaque está no fato da sintaxe baseada em ponto, isso é
conceitual e faz parte das características da linguagem no aspecto
léxico. Observa-se que tanto a leitura quanto a escrita partem de
um ponto em comum, o Console. Este, por sua vez, representa
a aplicação. Assim, semanticamente devemos compreender
que a leitura de uma linha de dados (ReadLine) será feita através
do Console (tela), já a escrita (Write ou WriteLine) será feita no
Console, dessa forma ambas as ações partem de um mesmo
contexto, o Console. Isso é um prenúncio da organização que
obtemos através da orientação a objetos, mas deixamos isso para
depois. Uma palavra reservada nova, chamada static, define o
contexto em que o bloco de código será executado, isso também
será abordado mais à frente, considere apenas que haverá escopos
diferentes para execução de um bloco, perceba que para esse
projeto estruturado sempre utilizaremos o contexto estático.
Console.Write("Código: ");
U3 - Classes e objetos 89
// Controlará o localização de algum produto
int encontrou = 0;
if (estoque[i].Codigo == codigo)
encontrou++;
Console.Write("Descrição: ");
estoque[i].Descricao = Console.ReadLine();
estoque[i].ValorUnitario = Convert.ToDouble(Console.
ReadLine());
estoque[i].QtdeEstoque = Convert.ToDouble(Console.
ReadLine());
90 U3 - Classes e objetos
// Se encontrou for igual a zero, então não foi localização
nenhum produto
if (encontrou == 0)
Console.ReadKey();
}
Fonte: elaborado pelo autor.
U3 - Classes e objetos 91
Console.WriteLine("Listando produtos...");
Console.Write("Letra: ");
// caracter informado
int encontrou = 0;
if (estoque[i].Descricao[0] == letra)
encontrou++;
92 U3 - Classes e objetos
Console.WriteLine("Descrição: {0}", estoque[i].Descricao);
if (encontrou == 0)
Console.ReadKey();
}
Fonte: elaborado pelo autor.
U3 - Classes e objetos 93
Nossa última rotina relativa às funcionalidades requeridas no
enunciado deverá apresentar os produtos com baixa em estoque,
então nesse caso não haverá a interação do usuário, apenas a
saída do programa baseado nos dados já alimentados, o estoque,
bem como a quantidade mínima, que neste caso foi fixada em 5.
Esse algoritmo será construído baseado no acesso aos produtos
através de parâmetro, aqui chamamos de “estoque”, na sequência
através de um laço avaliará produto por produto, e caso o critério
de filtro seja atendido, quantidade inferior a 5, então apresentará
os detalhes do produto com baixa em estoque. Vejamos o código
desenvolvido para isso:
Console.WriteLine("Analisando estoque...");
int encontrou = 0;
if (estoque[i].QtdeEstoque < 5)
encontrou++;
94 U3 - Classes e objetos
Console.WriteLine("Mercadoria {0} (Qtde: {1})", estoque[i].
Codigo, estoque[i].QtdeEstoque);
if (encontrou == 0)
Console.ReadKey();
}
Fonte: elaborado pelo autor.
U3 - Classes e objetos 95
em um menu apresentado, inclusive a opção que permitirá finalizar
a aplicação. Vejamos como isso poderia ser feito!
ExecutaLeitura(estoque);
Console.Clear();
do
Console.WriteLine("[A]lterar Produto");
Console.WriteLine("[E]stoque Baixo");
Console.WriteLine("[S]air");
96 U3 - Classes e objetos
// Solicita a opção desejada
// para maiusculo
var op = Console.ReadLine().ToUpper();
Console.Clear();
switch (op)
case "A":
Alterar(estoque);
break;
case "L":
ListaProdutos(estoque);
break;
case "E":
ListarEstoqueBaixo(estoque);
break;
case "S":
sair = true;
break;
default:
U3 - Classes e objetos 97
// Interage com o usuário
Console.WriteLine("Opção inválida!");
Console.ReadKey();
break;
Console.Clear();
} while (!sair);
Console.WriteLine("Aplicativo finalizado...");
}
Fonte: elaborado pelo autor.
using System;
using System.Linq;
namespace Estoque
struct Produto
98 U3 - Classes e objetos
{
class Program
}
Fonte: elaborado pelo autor.
U3 - Classes e objetos 99
Utilizamos alguns recursos que são exclusivos da linguagem
C#, recursos como Console e Convert não devem ser focados,
pois como foi comentado, são exclusivos da linguagem. Deve-se
perceber a mudança na forma de nomear as variáveis e parâmetros,
isso se considerarmos o código desenvolvido na Unidade 1 e agora
nesta unidade, isso é sem dúvida um ponto de confusão para
quando iniciamos em uma tecnologia. Essas variações podem ter
origem na linguagem, vamos entender como a sintaxe de escrita,
ou então por convenções, que são nada mais que combinados
entre os profissionais de uma tecnologia. Colocando de uma
outra forma, seriam as regras de criação de código que um grande
número de profissionais adota, sem que isso seja uma regra
imposta pela sintaxe da linguagem.
Atividades de aprendizagem
1. Quando desejamos enviar uma mensagem para a saída padrão
(Monitor) a partir de uma aplicação do tipo “Console Application”,
podemos utilizar quais opções?
a) As ações Read e ReadLine da estrutura Console.
b) As ações Write e WriteLine da estrutura Screen.
c) As ações Write e WriteLine da estrutura Console.
d) Utilizando a função printf.
e) Utilizando o fluxo de saída cout.
Base conceitual
Introdução à seção
2.1 Classes
class MinhaClasse
class MinhaClasse
int atributo1;
int atrinuto2;
class Tablet
string marca;
string modelo;
string cor;
string arquitetura;
string processador;
int memoriaRam;
int armazenamentoInterno;
int maximoExpansao;
string sistemaOperacional;
double tamanhoTela;
2.3 Objetos
class Tablet
class Program
tb1.cor = "Branco";
tb1.marca = "Samsung";
class Tablet
// Atributo(s) (Características)
string marca;
void LigaDesliga()
if (ligado)
ligado = false;
Console.WriteLine("Desligado");
else
ligado = true;
Console.WriteLine("Ligado");
// Atributo(s) (Características)
if (ligado)
ligado = false;
Console.WriteLine("Desligado");
else
ligado = true;
samsung.marca = "Samsung";
samsung.LigaDesliga();
// Atributo(s) (Características)
marca = novaMarca;
return marca;
}
Fonte: elaborado pelo autor.
tb1.AlterarMarca("Samsung");
tb1.LigaDesliga();
if (samsung.EstaLigado())
else
Sobrecarga de métodos
// Atributo(s) (Características)
versao = novaVersao;
sistemaOperaciona = novoSO;
...
public Tablet()
versao = 1;
...
// Atributo(s) (Características)
public Tablet()
versao = 1;
sistemaOperaciona = pSO;
versao = pVersao;
...
class Program
...
}
Fonte:elaborado pelo autor.
class Program
tb1.Atualizar("Android", 12);
...
// Atributo(s) (Características)
...
AndroidUltimaVersao = 15;
AndroidUltimaVersao++;
...
Tablet.IncrementaAndroidUltimaVersao();
...
_codigo = codigo;
return _codigo;
return _descricao;
_descricao = descricao;
_valorUnitario = valorUnitario;
_qtdeEstoque = qtdeEstoque;
Console.Clear();
return Console.ReadLine().ToUpper();
Console.ReadKey();
Console.WriteLine(mensagem);
return Console.ReadLine();
return LerString(mensagem).First();
return Convert.ToDouble(LerString(mensagem));
Classe Menu
_tela = tela;
do {
_tela.Show("OPÇÕES DISPONÍVEÍS
*******");
_tela.Show("[E]stoque Baixo");
_tela.Show("[S]air");
var op = _tela.RequisitarLetra();
Console.Clear();
switch (op) {
case "A":
case "L":
case "E":
case "S":
return op;
default:
_ t e l a . S h o w ( " O p ç ã o
inválida!");
_tela.EsperarTecla();
break;
_tela.Limpar();
public Estoque() {
_itens[_conta++] = novo;
if (produto.RecuperaCodigo() == codigo) {
return produto;
return null;
if (produto.RecuperaDescricao()[0] ==
letra) {
temp.Add(produto);
return temp.ToArray();
if (produto.EstoqueBaixo()) {
temp.Add(produto);
return temp.ToArray();
class Program {
produto.AlterarDescricao(tela.
LerString("Descrição"));
produto.AlterarValorUnitario(tela.LerDouble("Valor
Unitário"));
produto.AlterarQtdeEstoque(tela.LerDouble("Qtde
Estoque"));
tela.Show("Obtendo Estoque...");
ExecutaLeitura(tela, produto);
estoque.Adicionar(produto);
tela.Limpar();
tela.Show("Alterando produto...");
Produto p = estoque.Localiza(codigo);
ExecutaLeitura(tela, p);
else {
tela.Show("Nenhum produto
encontrado.");
tela.EsperarTecla();
tela.Show("Listando produtos...");
if (localizados.Length != 0) {
t e l a . S h o w ( p r o d u t o .
Apresentacao2());
else {
tela.Show("Nenhum produto
tela.EsperarTecla();
tela.Show("Analisando estoque...");
if (localizados.Length != 0) {
t e l a . S h o w ( p r o d u t o .
Apresentacao1());
else {
tela.EsperarTecla();
ExecutaLeitura(tela, estoque);
do {
switch (opcao) {
case "A":
Alterar(tela, estoque);
break;
case "L":
L i s t a r P r o d u t o s ( t e l a ,
estoque);
break;
case "E":
ListarEstoqueBaixo(tela,
estoque);
break;
case "S":
sair = true;
break;
tela.Limpar();
} while (!sair);
Atividades de aprendizagem
1. A identificação das classes, atributos e métodos está principalmente
relacionada a qual fator?
a) Características da linguagem.
b) Arquitetura da tecnologia.
c) Preceitos da técnica utilizada.
d) Capacidade de abstração.
e) Complexidade do algoritmo.
Fique ligado
Nesta unidade, estudamos:
• Conceitos de orientação a objetos.
• Classe.
• Atributos.
• Objetos.
• Métodos.
• Modificadores de visibilidade.
• Parâmetros em métodos.
• Sobrecarga de métodos.
• Métodos construtores.
• Membros da classe.
• Desenvolvimento estruturado na prática.
• Desenvolvimento orientado a objetos na prática.
Tipo Membro
A - Método Construtor A – Acelerar
B – Método da Instância B – GerarNumeroChassi
C – Variável da Instância C – Cor
D - Método da Classe D – Carro
a) A – D; B – A; C – C; D – B.
b) A – B; B – A; C – C; D – D.
c) A – D; B – A; C – D; D – C.
d) A – D; B – C; C – A; D – B.
e) A – A; B – D; C – C; D – B.
Tipo Membro
A – Método Construtor A – Define um comportamento relacionado ao
indivíduo.
B – Método da Instância B – Define um comportamento relacionado ao
coletivo.
C – Variável da Instância C – Define uma característica do indivíduo.
D – Método da Classe D – Permite inicializar uma instância no momento
da sua criação.
a) A – D; B – A; C – C; D – B.
b) A – B; B – A; C – C; D – D.
c) A – D; B – A; C – D; D – C.
d) A – D; B – C; C – A; D – B.
e) A – A; B – D; C – C; D – B.
Herança e polimorfismo
Objetivos de aprendizagem
Esta unidade tem como objetivo a apresentação dos
recursos de herança e polimorfismo, próprios do paradigma
de orientação a objetos. O estudo destes temas possibilitará
a criação de programas reutilizáveis e apropriados para
aumentarem de escala.
Seção 1 | Herança
Seção 2 | Polimorfismo
Nesta seção serão abordados os conceitos básicos de polimorfismo e
os benefícios que ele poderá trazer ao código. Será apresentado exemplo
de um método que assumirá diversas formas, dependendo da necessidade
da aplicação. Por fim, será abordada a palavra reservada super, como meio
de acesso a métodos de uma superclasse.
Introdução à unidade
Caro aluno, seja bem-vindo à quarta unidade do nosso livro
didático!
Boa leitura!
public double x, y;
inferiorEsquerdo.x = 0.0;
inferiorEsquerdo.y = 0.0;
superiorDireito.x = 1280.0;
superiorDireito.y = 1024.0;
pontoCentral.x = 640.0;
pontoCentral.y = 512.0;
Cor cor;
super.limpa();
cor = null;
}
Fonte: Adaptado de: Arnold; Gosling; Holmes (2007, p. 49).
String nome;
String cpf;
double salário;
}
Fonte: <https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-
polimorfismo/#repetindo-cdigo>. Acesso em: 28 fev. 2017.
String nome;
String cpf;
double salario;
int senha;
int numeroDeFuncionariosGerenciados;
if (this.senha == senha) {
System.out.println("Acesso Permitido!");
return true;
} else {
System.out.println("Acesso Negado!");
return false;
// outros métodos
Fonte: <https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-
polimorfismo/#repetindo-cdigo>. Acesso em: 28 fev. 2017.
int senha;
if (this.senha == senha) {
System.out.println("Acesso Permitido!");
return true;
} else {
System.out.println("Acesso Negado!");
return false;
Fonte: <https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-
polimorfismo/#repetindo-cdigo>. Acesso em: 28 fev. 2017.
Atividades de aprendizagem
1. "A extensão de classes pode ser usada para diversos objetivos. É mais
comumente usada para especialização – em que a classe estendida
define novos comportamentos e assim se torna uma versão especializada
da superclasse. A extensão de classe pode envolver apenas a alteração
de um método herdado, talvez para torná-lo mais eficiente" (ARNOLD;
GOSLING; HOLMES, 2007, p. 92).
Assinale a alternativa que contém a sentença que melhor define herança
em nosso contexto.
a) Reutilização de código por meio da supressão de métodos e atributos
repetidos.
b) Passagem automática de atributos para classes mãe.
c) Extensão de métodos e atributos de uma classe.
d) Reutilização de código por meio de classes abstratas.
e) Representação de modelos com os mesmos métodos e atributos.
true, true, true);
imprime (a1);
imprime (a2);
imprime (a3);
imprime (a5);
System.out.print (a);
System.out.println("Valor: "+a.quantoCusta());
System.out.println(a.quantasPrestações() +"
prestações de "+ (a.quantoCusta() / a.quantasPrestações()));
Atividades de aprendizagem
1. "Você poderá escrever códigos realmente flexíveis. Códigos que serão
mais claros (mais eficientes e simples). Códigos que não serão apenas
mais fáceis de desenvolver, mas também muito mais fáceis de estender,
de maneira que você nunca imaginou no momento em que originalmente
os escreveu" (SIERRA; BATES, 2005, p. 135).
Assinale a alternativa que contém a sentença que caracteriza corretamente
o que se obtém ao se utilizar o recurso do polimorfismo.
a) Com o polimorfismo – e apenas com ele – é possível implementar o
conceito de herança.
b) Com o polimorfismo – e apenas com ele – é possível escrever código
com boa legibilidade.
c) Apenas o polimorfismo impede que uma referência e um objeto sejam
distintos, o que provocaria erro de compilação.
d) Com o polimorfismo é possível escrever um código que não precisa
ser alterado quando novos tipos de subclasse forem introduzidos no
programa.
e) Com o polimorfismo – e somente com ele – é possível implementar
herança e criar código com boa legibilidade no mesmo programa.
Fique ligado
Nesta unidade, estudamos:
- Conceito de herança.
- Aplicações de herança em Java.
- Exemplos de herança.
- Delegação (ou composição).
- Conceito e utilização de polimorfismo.
- Acesso a métodos das superclasses.
Animal
comida
limites
localização
fazerBarulho()
comer()
dormir()
circular()
fazerBarulho()
comer()
dormir()
circular()
Canino
circular()
Lobo
fazerBarulho()
comer()
Com a criação de um objeto de Lobo (por exemplo, Lobo l = new Lobo()),
as chamadas l.fazerBarulho(), l.circular(), l.comer() e l.dormir() executarão
os métodos contidos, respectivamente, nas classes:
a) Lobo, Lobo, Canino, Aninal.
b) Animal, Lobo, Canino, Canino.
c) Animal, Canino, Animal, Animal.
d) Lobo, Canino, Lobo, Animal.
e) Lobo, Animal, Lobo, Animal.
5. Considere as duas classes que seguem. Elas foram criadas para a mesma
aplicação Java e servem para modelar um funcionário de regime integral e
um funcionário horista.
CAELUM. Apostila Java e orientação a objetos. Ite Caellum, 2011. Disponível em:
<https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-
e-polimorfismo/#repetindo-cdigo>. Acesso em: 28 fev. 2017.
DEITEL, H. M. Java: como programar. 6. ed. São Paulo: Pearson Education do Brasil,
2005.
SIERRA, Kathy; BATES, Bert. Use a cabeça: Java. 2. ed. Rio de Janeiro: Alta Books,
2005.