Buscar

Programação Orientada a Objetos

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 57 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 57 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 57 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

Programação 
Orientada a Objetos
5
Hoje veremos alguns assuntos introdutórios na nossa disciplina e aproveito para apresentar-lhes 
alguns conceitos que utilizaremos na estrutura de todas as nossas unidades.
Para obter um bom aproveitamento nesta unidade vamos conferir a estrutura desta unidade:
Conteúdo Teórico: neste link você encontrará o material principal de estudos na forma de 
texto escrito.
Atividade de Sistematização: os exercícios disponibilizados são de autocorreção e visam que você 
pratique o que aprendeu na disciplina e que identifique os pontos em que precisa prestar mais 
atenção, ou pedir esclarecimentos a seu tutor. Além disso, as notas atribuídas aos exercícios serão 
parte de sua média final na disciplina.
Atividade de Aprofundamento: é uma atividade dissertativa.
Material Complementar e Referências Bibliográficas: nestes links você poderá ampliar 
seus conhecimentos.
Vídeo Aula: nestes links serão apresentadas algumas ferramentas na prática e também a resolução de 
alguns exercícios de forma prática. 
Lembramos a você da importância de realizar todas as atividades propostas dentro do prazo 
estabelecido para cada Unidade, dessa forma, você evitará que o conteúdo se acumule e que você 
tenha problemas ao final do semestre.
Uma última recomendação, caso tenha problemas para acessar algum item da disciplina, ou 
dúvidas com relação ao conteúdo, não deixe de entrar em contato com seu professor tutor 
através do botão mensagens.
 · Olá alunos(as), sejam bem vindos a disciplina de Programação 
Orientada a Objetos, nesta unidade estudaremos os conceitos 
básicos para a criação e entendimento dos conceitos da orientação. 
Mostraremos a diferença entre programação estruturada e a 
programação orientada a objetos. Essa será uma aula bem teórica 
mas importante para a compreensão das unidades seguintes.
 · Vamos estudar?
Introdução a Programação 
Orientada a Objetos
• Introdução
• Importância do Software
• Por que a Tecnologia de Objetos?
• Conceito da Análise e Projeto Orientado 
a Objetos
• Notação UML para Classe e objetos
7
A metodologia Orientação a Objetos é baseada em “objetos do mundo real”, e por este 
motivo é mais intuitiva ao ser humano, tais como: objetos e atributos, classes e membros, 
estruturas e componentes, ação e reação. Os métodos de desenvolvimento de software anteriores 
ao surgimento desse paradigma organizam a especificação de um sistema de acordo com suas 
funções ou com os dados manipulados. Geralmente, esses métodos apresentam dificuldades na 
transição da representação do sistema em uma fase para outra do processo de desenvolvimento 
(da Análise para o Projeto e, do Projeto para a Implementação). 
Em um sistema orientado a objetos, os dados e todas as operações, que manipulam esses 
dados, são agrupados em uma única estrutura: “as classes”. Desde o início do desenvolvimento 
desses sistemas e, em todas as suas fases, o analista trabalha com o mesmo elemento de 
abstração, os objetos.
Estudo das técnicas de programação utilizando o paradigma da orientação a objetos, bem 
como ferramentas em laboratório para o desenvolvimento de aplicações científicas e comerciais.
Dependência generalizada da vida moderna em sistemas de computação.
O software é parte cada vez maior dos custos e do sucesso desses sistemas. 
Produzir software é uma atividade inerentemente complexa:
 independe de leis físicas, restrições de materiais e processos de manufatura
 Requer métodos disciplinados de desenvolvimento.
Histórico
A orientação a objetos (OO) foi utilizada primeiramente na década de 70.
A Origem na linguagem SIMULA-67 (década de 60 - Noruega), que já implementava alguns 
conceitos da Orientação a Objetos.
SIMULA-68 foi a primeira linguagem a suportar os conceitos da Orientação a Objetos.
Smaltalk, criada pela Xerox, popularizou e incentivou a Orientação a Objetos.
Introdução
Importância do Software
8
Unidade: Introdução a Programação Orientada a Objetos
Outras linguagens de Orientação a Ojbjetos: C++, Object Pascal (Delphi), C#, Java...
Java, de fato, popularizou a Orientação a Objetos.
Programa Estruturada versus Programa Orientado a Objetos
Estruturado:
Ênfase nos procedimentos, implementados em blocos estruturados, com comunicação entre 
procedimentos por passagem de dados
Orientado a objetos:
Dados e procedimentos fazem parte de um só elemento básico (objeto). Os elementos básicos 
comunicam-se entre si, caracterizando a execução do programa à Dados e procedimentos 
agrupados em um só elemento. 
Os principais problemas do software hoje são: 
 Diminuir o custo e o tempo da mudança
 Aumentar a capacidade e facilidade de adaptação
Dados Funções
Prog. Estruturada
Atributos
(dados)
Métodos
(funções)
Prog. O.O
Objeto
Por que a Tecnologia de Objetos?
9
Objetos são especialmente bons para: 
 Reduzir o tempo necessário para adaptar um sistema existente (reação mais rápida à 
mudanças no seu ambiente de negócio)
 Reduzir o esforço, a complexidade e os custos associados à mudança
Orientação a objetos – Fase e responsabilidade
Análise
Projeto
Implementação
Define “o quê”
Define “o como”Fases
Construção do
Software
Análise
• Entender o domínio do problema
• Definir a estrutura estática da aplicação
• Criar vocabulário comum de conceitos
• Apresentar a melhor solução para problema
• Definir a estrutura dinâmica da aplicação
• Fazer especificação 
Projeto
• Construir a aplicação em conformidade com a especificação
• Fazer testes e validações
• Fazer implantação 
Implementação
10
Unidade: Introdução a Programação Orientada a Objetos
A metodologia de Análise e Projeto Orientado a Objetos é um processo que contém suporte 
a notação para definição de software baseado no conceito de objetos que combinam estrutura 
e comportamento na mesma entidade. 
Este processo geralmente não é linear, mas é previsível, cíclico, e passível de teste 
e rastreamento.
A notação OOA&D (Object-oriented Analysis and Design ) é definição visual comum 
que permite as pessoas compartilharem conhecimento sobre sistema - OOA&D consiste em 
três partes:
 Processo (São as atividades)
 Notação (demonstra a interação dos objetos)
 Regras (descreve como o sistema deve trabalhar)
Principais Conceitos 
As duas principais característica da Orientação a objetos são Classes e Objetos
O que é uma classe?
Conceito da Análise e Projeto Orientado a Objetos 
 
 Diálogo com o Autor
 
classe [Do lat. classe.] S. f. 1. Numa série ou num conjunto, grupo ou divisão que apresenta carac-
terísticas semelhantes;.......
21. Inform. Em programação ou modelagem orientada a objetos (v. orientação a objetos), categoria 
descritiva geral, que abrange o conjunto de objetos que compartilham uma ou mais características 
quanto a seus itens de dados e procedimentos associados. 22. Lóg. Agrupamento de objetos que têm 
uma ou mais características em comum.
“Uma classe é uma entidade descreve um conjunto de objetos com propriedades e comportamen-
tos semelhantes e com relacionamentos comuns com outros objetos”
As classes são as partes mais importantes de qualquer sistema orientado a objetos.
Usamos as classes para capturar o vocabulário do sistema que está em desenvolvimento. Essas 
classes podem incluir abstrações que são parte do domínio do problema, assim como as classes que 
fazem uma implementação. Podemos usar ainda as classes para representar itens de software, de 
hardware e até itens que sejam somente conceituais.
11
Contexto: Venda de flores
Chris precisa enviar flores para o amigo Robin que mora em outra cidade… 
Agentes e Comunidades
1. Chris passa uma mensagem para o florista contendo uma requisição (entregar flores para 
Robin em outra cidade).
2. É responsabilidade do florista satisfazer esta requisição.
3. Chris não sabe o método que o florista irá utilizar para entregar flores em outra cidade e 
também desconhece os detalhes desta operação.
 POO é estruturada como uma comunidade de agentes que interagem chamadosde objetos;
 Cada objeto tem um papel a ser executado;
 Cada objeto fornece serviços ou executam ações que podem ser utilizadas por outros 
membros da comunidade. 
FloristaChris
Robin
Objetivo:
Mandar Flores 
para o Robin
Arranjador
Cultivador
Atacadista
Entregador
Objetivo:
Fornecer flores 
“frescas”
Objetivo:
Criar 
Flores
Objetivo: Entregar 
as flores para o 
Robin
Objetivo: Criar o 
arranjo das flores
Objetivo:
Satisfazer o 
Cliente
Figura 1. Venda de Flores, Adaptado de Budd,2002
FloristaChris
Objetivo:
Mandar Flores 
para o Robin
12
Unidade: Introdução a Programação Orientada a Objetos
Mensagens e Métodos
 Uma ação é a transmissão de uma mensagem para um agente (objeto) responsável 
pela ação.
 Quando um objeto aceita a mensagem ele é responsável por tratar a ação.
 Em resposta a esta mensagem o receptor executará algum método para atender a 
solicitação. 
Responsabilidades
 Descreve o comportamento em termos de responsabilidades.
 O conjunto de responsabilidades de um objeto é descrito através e protocolos
Classes e Instâncias
 O Florista é um exemplo de classe, pois representa todos os floristas. O Florista Pitoco, 
e o Bodjo são instâncias desta classe.
 Um outro exemplo de classes e instâncias é forma de gelatina e as gelatinas.
 
 Objetivo: Criar 
Flores
13
A identificação para as classes em UML é um retângulo divido em três partes. Caso não queira 
exibir os detalhes da classe você pode suprimir alguns detalhes como atributo e os métodos, 
conforme mostram as figuras a seguir 
A seção superior é reservada para a identificação da classe. Essa seção é obrigatório o 
preenchimento. O nome da classe deve conter somente letras e palavras concatenadas e a 
primeira letra deve ser escrita em maiúsculo.
Exemplo de nomes:
 Aluno
 Empregado
 Curso
Na segunda seção são exibidos os atributos da classe, esses atributos são variáveis membro 
da classe que podem ser usadas pelos métodos tanto para acesso ou escrita.
O atributo pode ser criado com as seguintes notações:
+ Acesso público, tanto funções membros da classe e funções externas podem ter acesso 
ao atributo público.
- Acesso privado, somente funções membros da classe tem acesso a esses atributos
# Acesso protegido, o atributo também é privado mas as funções membros das classes 
derivadas também tem acesso aos atributos.
Na última seção são exibidos os métodos da classe, ou seja, as funções que a classe possui. 
Os métodos também seguem a mesma notação que os atributos.
+ Acesso público, tanto funções membros da classe e funções externas podem ter acesso 
ao atributo público.
- Acesso privado, somente funções membros da classe tem acesso a esses atributos
# Acesso protegido, o atributo também é privado mas as funções membros das classes 
derivadas também tem acesso aos atributos.
Notação UML para Classe e objetos
Notação UML para classes
5
• Classes x Objetos
• Principais Conceitos 
• Tipos de dados em Java
Lembramos a você da importância de realizar todas as atividades propostas dentro do prazo 
estabelecido para cada Unidade, dessa forma, você evitará que o conteúdo se acumule e 
que você tenha problemas ao final do semestre.
Caso tenha problemas para acessar algum item da disciplina, ou dúvidas com relação ao 
conteúdo, não deixe de entrar em contato com seu professor tutor através do botão mensagens.
Aprenderemos o que é classe e o que é objeto. Veremos 
como trazer o problema do mundo real para o mundo da 
orientação a objetos. 
Aprenderemos o conceito de atributos, “métodos de acesso”, 
“parâmetros” e outros.
Classes x Objetos
• Set e Get 
7
Classes x Objetos
Mecanismo de Trabalho
 
A JVM interpreta os bytecodes gerados pelo compilador.
O objetivo da JVM é permitir que qualquer sistema operacional possa executar uma 
aplicação Java
Classe Java
public class BemVindo {
 public static void main(String args[]) {
 System.out.println(“Bem vindo a Java.”);
 }
}
Atenção
Lembre-se o Java é case sensitive (há diferença entre maiúsculas e minúsculas)
8
Unidade: Classes x Objetos
Programa = Classe
public class BemVindo {
 public static void main(String args[]){
 System.out.println(”Bem vindo”); /* esta linha impirme uma mensagem na tela*/
 }
}
Atenção
Os arquivos Java têm que ter o nome da classe principal. 
No exemplo acima, o nome do arquivo seria Bemvindo.java e depois de compilado ficaria 
Benvindo.class 
Nome da classe = Nome dos Arquivos
public class BemVindo {
 public static void main(String[ ] args){
 System.out.println(”Benvindo”);
 }
}
Método main
public class BemVindo {
 public static void main(String[ ] args){
 System.out.println(”Bemvindo”);
 }
}
9
 
/** Aplicação Hello World */
public class MinhaClasse {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Comentário de bloco
Definição de classe
HelloWorld
Definição de método main()
Declaração de
argumento
Nome do método
Nome da classe
variável local: args
t ipo: String[]
Chamada de método println()
via objeto out accessível
através da classe System
Atribuição de argumento
para o método println()
Ponto-e-vírgula 
é obrigatório no 
final de toda 
instrução
Principais Conceitos 
O que são Objetos?
São quaisquer coisas na natureza que possuam propriedades (características) e 
comportamentos (operações).
Exemplos de Objetos: um bolo, um cachorro, um livro, etc...
Orientação a Objetos: 
O termo orientação a objetos significa organizar o mundo real como uma coleção de objetos 
que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados, 
como exemplo podemos montar os seguintes objetos pessoas e pássaros.
Classe: Pessoa
Propriedades Comportamento
Nome Andar
Profissão Correr
Data de Nascimento Trabalhar
Altura Chorar
Peso Dançar
10
Unidade: Classes x Objetos
Classe: Pássaro
Propriedades Comportamento
Espécie Andar
Cor das penas Correr
Tamanho Voar
Peso Pousar
Estrutura de um objeto
Um objeto tem identificação, dados e comportamento, atributos e métodos.
Podemos dizer que objeto é espécie da classe, ou seja, uma instância da classe.
 
 Cliente: clientemulher 
nome = Fulana 
cpf = 022.200.708-12 
idade = 27 
 
 Cliente: clientehomem 
nome = Ciclano 
cpf = 022.200.708-55 
idade = 32 
 
 
Para finalizarmos as comparações entre Classe e Objetos temos os seguintes exemplos:
Classes Objetos
Funcionário Os funcionarios Pitoco Aguiar e José da Silva
Carro de passeio O astra, vinho, placa CIL 8445
Nota Fiscal A nota fiscal #29470 referente a um computador notbook
 
Em resumo, o objeto é definido pelo conjunto de valores dos seus atributos em determinado 
instante. O comportamento é definido pelo conjunto de métodos. Ao criar uma classe, ela 
passa a ser um tipo abstrato de dados que pode instanciar objetos. Para instanciar objetos 
usamos o operador new.
11
 
 Motor: 2.0 
Cor: Prata 
Marca: Citroen 
Motor: 1.6 
Cor: Vermelha 
Marca: Ford 
Uma coleção de carros pode ser representada por uma classe chamada Carro. Cada carro 
desta coleção é a “instância” (objeto) da classe Carro.
Atributos
Os atributos são as características dos objetos, o estado do objeto equivale aos valores de 
todos os atributos. No caso do exemplo acima os atributos são representado pelo motor, cor e 
marca.
Construindo a classe em Java
Um arquivo em Java precisa de uma classe pública com o mesmo nome do arquivo, abaixo 
um exemplo de como criar o arquivo.
public class <nome_da_classe> {
 <lista de atributos>
 <lista de métodos>
}
Atenção
Por padrão as classes e atributo em java devem seguir algumas regras:
 9 Somente letras, números e underline
 9 Não pode começar por números
 9 Não pode ter espaços em branco
 9 Não pode ser palavra reservada
• Classes: Possuem as iniciais maiúsculas e sem espaços ou caracteres especiais
• Atributos: São sempre em letras minúsculas
12
Unidade: Classes xObjetos
Tipos de dados em Java
Java possui 8 tipos primitivos que podem ser usados como tipos de atributos e que são eles:
• byte - 8 bits 
• short - 16 bits 
• int - 32 bits 
• long - 64 bits 
• float - ponto flutuante de 32 bits 
• double - ponto flutuante de 64 bits 
• char - Unicode de 16 bits
• boolean – true / false 
• String - classe
Vejamos um exemplo de criação da classe carro e a instância da classe.
 
 
Classes: Atributos (Propriedades) + Métodos (Comportamento) 
Método é a implementação de uma operação. Os métodos expressam os comportamentos 
que todos os objetos dessa classe possuem. 
tipo nome (parâmetros) {
 instruções;
 <return resposta>;
}
13
Set e Get 
Servem como métodos de leitura/escrita aos atributos de classes.
Um método de leitura para um atributo deve ser chamado de getXxx (onde Xxx é o nome do 
atributo). Este método não recebe nada como parâmetro, e retorna o mesmo tipo do atributo.
Já um método de gravação deve ser chamado setXxx, não retorna nada (geralmente), e 
recebe como parâmetro o valor que deve ser armazenado no atributo.
Na programação orientada a objetos, os atributos da classe quase nunca estão visíveis para 
os usuários, é necessário criar um método público para que a aplicação possa acessá-lo. Temos 
basicamente 3 modificadores de acesso:
• Private ( - ): é o mais restritivo de todos, atributos e métodos com esse modificador 
são visíveis somente dentro da definição da própria classe, acessando-o diretamente ou 
através de uma instância da mesma classe.
• Protected ( # ): define que atributos e métodos somente podem ser acessados por 
subclasses da classe onde está sendo definido.
• Public ( + ): é o mais abrangente de todos os tipos de acesso, declara que elementos 
que o utilizam são acessíveis de qualquer classe Java.
Vejamos a implementação do código:
 
14
Unidade: Classes x Objetos
Agora os atributos da classe Carro são privados, não é mais possível atribuir informações 
diretamente:
 
 Os métodos também possuem padrão de nomenclatura. Os métodos possuem sempre a 
primeira inicial minúscula e as outras iniciais maiúsculas.
pegarInformacao(), executarComandoInicial()
Os métodos geralmente são ações que podem ser efetuadas entre os atributos do objeto.
Métodos que não retornam valores, apenas executam ações, são do tipo void.
Por exemplo, na classe Carro, podemos criar um método que imprima seus atributos na tela, 
ou como vimos anteriormente, mostre o estado do objeto.
15
 
Métodos - Procedimentos 
Os métodos podem ou não assumir tipos de dados, caso não assumam, são chamados de 
procedimentos, pois executam um conjunto de instruções sem devolverem valor algum a quem 
os chamou. Um método sem tipo recebe em sua definição a palavra-chave void no lugar do tipo.
 
Métodos - Funções 
Quando os métodos assumem algum tipo, eles são chamados de funções e precisam do 
comando return para devolver o valor resultante da execução de suas instruções internas.
 
16
Unidade: Classes x Objetos
Métodos - Parâmetros 
Os métodos podem receber dados para serem utilizados internamente, os quais são chamados 
de parâmetros ou de argumentos.
Quando os parâmetros são passados para os métodos, é criada uma cópia dos valores.
Podemos passar vários parâmetros para os métodos, inclusive de tipos diferentes.
 
5
• Expressões
• Operadores
• Desvio condicional simples
Hoje veremos alguns assuntos introdutórios na nossa disciplina e aproveito para apresentar-
lhes alguns conceitos que utilizaremos na estrutura de todas as nossas unidades.
Para obter um bom aproveitamento nesta unidade vamos conferir a estrutura desta unidade:
Conteúdo Teórico: neste link você encontrará o material principal de estudos na 
forma de texto escrito.
Atividade de Sistematização: os exercícios disponibilizados são de autocorreção e visam que 
você pratique o que aprendeu na disciplina e que identifique os pontos em que precisa 
prestar mais atenção, ou pedir esclarecimentos a seu tutor. Além disso, as notas atribuídas 
aos exercícios serão parte de sua média final na disciplina.
 · Olá turma, está unidade é muito interessante. 
Aprenderemos como inserir uma decisão e deixar que 
o programa tenha alguma possibilidades de execução, 
também veremos como inserir uma estrutura de repetição 
nos métodos das classes criadas. 
 · Vamos praticar?
Métodos + Estruturas de Decisão 
e Repetição
• Desvio condicional composta
• Estrutura de decisão Switch Case
• Estrutura de repetição While
• Estrutura de repetição Do While
• Estrutura de repetição For
6
Unidade: Métodos + Estruturas de Decisão e Repetição
Vimos na unidade anterior como encapsular as informações, vimos também como criar os 
métodos e funções e executá-los. Agora que já sabemos tudo sobre encapsular, métodos e 
funções, vamos aprender a utilizar estruturas de decisão e estruturas de repetidos nos métodos 
do objeto.
Contextualização
Atividade de Aprofundamento: é uma atividade dissertativa.
Material Complementar e Referências Bibliográficas: nestes links você poderá ampliar seus 
conhecimentos.
Vídeo Aula: nestes links serão apresentadas algumas ferramentas na prática e também a 
resolução de alguns exercícios de forma prática. 
Lembramos a você da importância de realizar todas as atividades propostas dentro do prazo 
estabelecido para cada Unidade, dessa forma, você evitará que o conteúdo se acumule e 
que você tenha problemas ao final do semestre.
Uma última recomendação, caso tenha problemas para acessar algum item da disciplina, 
ou dúvidas com relação ao conteúdo, não deixe de entrar em contato com seu professor 
tutor através do botão mensagens.
7
O conceito de expressões está associado a fórmulas matemáticas onde um conjunto de 
variáveis e constantes numéricas se relacionam através de operadores matemáticos formando 
uma expressão e resultando em um valor.
Por exemplo, a fórmula da área do retângulo é A = a x b, está fórmula utiliza duas variáves: 
A, a e b , em que é o lado, b a altura e A que resultará na operação de multiplicação. Em 
informática uma expressão é a combinação de variáveis, constantes e operadores e que quando 
verificadas resultam um valor.
Os operadores são utilizados nas expressões, por exemplo, 3 + 2, os números 3 e 2 são 
relacionados por um operador representado pelo sinal + que significa adição.
Os operadores se classificam em aritméticos, lógicos e literais, essa divisão depende do tipo de 
expressão que os mesmos serão inseridos, existe, ainda, um tipo de operador que é o relacional, 
por meio do qual se compara informações e o resultado é um valor lógico.
Tipos de expressões
Expressões aritméticas resultam um tipo de dado numérico inteiro ou real, somente é 
permitido operador aritmético e variáveis numéricas nessas expressões, vejam a tabela a seguir 
as operações aritméticas:
Expressões
Operadores
8
Unidade: Métodos + Estruturas de Decisão e Repetição
Operadores aritméticos
Operador Operação
+ Adição
- Substração
* Multiplicação
/ Divisão
% Mod (Resto Divisão)
Como na matemática, em computação existe uma ordem de execução dos operadores, por 
exemplo, primeiro são resolvidos as expressões com os símbolos * e /, em seguida + e -.
Expressões lógicas
Expressões lógicas são aquelas que retornam ou resulta um valor lógico e só existem dois 
tipos de dados, verdadeiros ou falsos. Na expressão lógica utilizamos um operador lógico. A 
tabela a seguir ilustra a utilização e resultado da expressão
Tabela verdade
A B ! A ! B A .OU. B ( || ) A .E. B ( && )
F F V V F F
F V V F V F
V F F V V F
V V F F V V
O operador lógico .NÃO.(!) sempre inverterá o valor do seu operando. O operador .OU. 
resultará verdadeiro quando um dos seus operando for Verdadeiro, já o operando .E. só 
resultará verdade quando todos os seus operando forem Verdadeiros.
Operadores relacionais
Ainda existe outro tipo de operadores que é o relacional, esses operadores relacionais poder 
ser utilizados entre as operações lógicas.
Operador RelacionalOperador Operação
== Igual
!= Diferente
< Menor
<= Menor ou Igual
> Maior
>= Maior ou Igual
9
Uma decisão simples é composta pela instrução se... então...fim, se a condição estabelecida 
for verdadeira, serão executas todas as instruções definidas entre o se... então e depois serão 
executadas todas as instruções que existirem após o fim.
Para representarmos o fluxograma acima, iremos escrever um trecho de código. Será criado 
uma classe de nome Conta com o atributo saldo, os métodos de acesso setSaldo() e getSaldo(). 
O método de nome sacar, recebe um parâmetro de entrada, dentro do método é realizada a 
seguinte operação:
- Se o valor de entrada for maior do que o saldo, exibe uma mensagem de saldo insuficiente, 
caso contrário realiza a operação de saldo, retirando o valor informado da variável saldo.
Desvio condicional simples
10
Unidade: Métodos + Estruturas de Decisão e Repetição
A estrutura condicional composta é similar com a estrutura condicional simples. Sempre um 
comando será executado independente da condição, ou seja, caso a condição seja verdadeira os 
comandos da condição serão executados ou os comandos da condição falsa serão executados.
Para representarmos o fluxograma acima, iremos escrever um trecho de código. Será criado 
uma classe de nome Boletim com os atributos media, n1 e n2, os métodos de acesso setN1(), 
getN1(),setN2() e getN2(). O método de nome calcularMedia(), dentro do método é realizada a 
seguinte operação:
- calcula-se a média das notas.
- se a média for menor do que 4, exibir “Conceito D”
- se a média for maior ou igual a 4 e menor do que 6, exibir “Conceito C”
- se a média for maior ou igual a 6 e menor do que 8, exibir “Conceito B”
- se a média for maior ou igual a 8 e menor ou igual a 10, exibir “Conceito A”.
Desvio condicional composta
11
Em Java podemos representar a estrutura condicional por meio do seguinte trecho de código:
O comando switch case pode ser útil quando precisamos fazer diversas verificações e 
executar diferentes comandos de acordo com o valor de alguma variável.
Estrutura de decisão Switch Case
12
Unidade: Métodos + Estruturas de Decisão e Repetição
Para representarmos o fluxograma acima, iremos escrever um trecho de código. Será 
criado uma classe de nome Cambio com o atributo valorRS e os métodos de acesso 
setValor() e getValor(). O método de nome converterMoeda(), dentro do método é realizada 
a seguinte operação:
- calcula-se a média das notas.
- se a opçao for igual a 1, exibir a conversão para dólar
- se a média for maior ou igual a 4 e menor do que 6, exibir “Conceito C”
- se a média for maior ou igual a 6 e menor do que 8, exibir “Conceito B”
- se a média for maior ou igual a 8 e menor ou igual a 10, exibir “Conceito A”.
Em Java podemos representar a estrutura condicional por meio do seguinte trecho de código:
While é uma estrutura de repetição que compara uma variável, quando o resultado da 
comparação é verdadeiro, ele executa o bloco de instruções. O problema com estruturas de 
repetição, principalmente com while, é o que chamamos de looping infinito, esse nome é dado 
por a linha de comando é executada repetitivamente sem nunca chegar ao resultado final, por 
isso é imprescindível que uma determinada variável seja modificada de acordo com cada loop. 
Estrutura de repetição While
13
Veja o exemplo:
Para representarmos o fluxograma acima, iremos escrever um trecho de código. Será 
criado uma classe de nome QtdeNumPar com o atributo numero, os métodos de acesso 
setQtdeNumero() e getQtdeNumero(). O método de nome retQtdeNumPar(), que recebe um 
parâmetro de entrada, dentro do método é realizada a seguinte operação:
- realiza uma repetição e com cada item verifica se o número é par, executando o MOD de 2
- Cada vez que o resto da operação for 0, contabilizamos 1 para o método retornar o valor.
Em Java podemos representar a estrutura condicional por meio do seguinte trecho de código:
 
14
Unidade: Métodos + Estruturas de Decisão e Repetição
DO WHILE é uma estrutura de repetição, tal como o próprio while. A principal diferença 
entre os dois é que DO WHILE irá fazer a comparação apenas no final do bloco de código, 
sendo representado da seguinte forma:
Em Java podemos representar a estrutura condicional de repetição while por meio do seguinte 
trecho de código:
Estrutura de repetição Do While
15
É um loop mais “fixo”, permite executar o conjunto de sentenças com um número determinado 
de vezes. Sua expressão geral seria como a que segue: 
Em Java podemos representar a estrutura condicional de repetição while por meio do seguinte 
trecho de código:
Estrutura de repetição For
5
• Introdução a vetores
Hoje veremos alguns assuntos introdutórios, na nossa disciplina. Aproveito para apresentar-lhes 
alguns conceitos que utilizaremos na estrutura de todas as nossas unidades.
Para obter um bom aproveitamento nesta unidade, vamos conferir sua estrutura:
• Conteúdo Teórico - neste link você encontrará o material principal de estudos na forma de 
texto escrito.
• Atividade de Sistematização - os exercícios disponibilizados são de autocorreção; nessa 
atividade, você vai praticar o que aprendeu na disciplina e identificar os pontos em que 
precisa prestar mais atenção, ou pedir esclarecimentos a seu tutor. As notas atribuídas aos 
exercícios serão parte de sua média final na disciplina.
• Atividade de Aprofundamento - é uma atividade dissertativa.
• Material Complementar e Referências - nestes links você poderá ampliar seus conhecimentos.
• Videoaula - neste link serão apresentadas algumas ferramentas na prática e a resolução de 
alguns exercícios também de forma prática. 
Lembramos a você da importância de realizar todas as atividades propostas dentro do prazo 
estabelecido para cada Unidade, dessa forma, você evitará que o conteúdo se acumule. Evitará 
ainda problemas ao final do semestre.
Uma última recomendação: caso tenha problemas para acessar algum item da disciplina, ou dúvidas 
com relação ao conteúdo, entre em contato com seu professor tutor através do botão Mensagens.
 · Nesta unidade iremos enriquecer nosso conhecimento com novos 
conceitos. 
 · Nós já estudamos os tipos de variáveis e como criá-las, e 
vimos também que nem sempre uma variável atenderá nossas 
necessidades.
 · Para aprimoramos nosso desenvolvimento, aprenderemos o 
conceito de vetores e como utilizá-los juntamente com os objetos e 
também passagem de parâmetros.
Introdução a Vetores
7
Introdução a vetores
Antes de começar a falar de arrays, devemos lembrar o que é uma variável e para que ela 
serve. 
Nas unidades anteriores, vimos que variável é a representação simbólica dos elementos, e 
que ficam armazenadas em memória. Cada variável corresponde a uma posição, cujo conteúdo 
pode se alterado ao longo do tempo durante a execução de um programa. No entanto, a 
variável só pode ser armazena por um único tipo.
 Também vimos que as variáveis podem ser de três tipos: numéricas, alfanuméricas e lógicas, 
e que para declarar uma variável precisamos definir o seu nome e que tipo de dados será 
armazenado nela.
Antes de definir vetor, imaginemos a seguinte situação:
A solução é bem simples. Definiremos uma variável, alocamos um espaço na memória do 
computador para armazenar uma e somente uma constante por vez, seja ela literal, numérica 
ou lógica. Quando atribuímos um valor à variável sobrescrevemos seu conteúdo.
Em algumas rotinas é necessário a manipulação de várias variáveis ao mesmo tempo, por 
exemplo, imagine que o programa deverá controlar o nome de 100 pessoas, ao invés de criar 
100 variáveis é possível à criação de apenas uma, que é definida como array.
Mas como criar um array? É muito simples: especificamos o nome do array e o número 
de posições da memória que queremos alocar. Cada posição de memória pode armazenar 
um valor.
Os arrays são criados para que possam armazenar várias informações do mesmo tipo ou 
da mesma classe; com um vetor também é possível o armazenamentode vários objetos. Essas 
diversas informações que foram armazenadas em array são de fácil manipulação. As informações 
ficam disponíveis em forma de tabelas e podem ser acessadas por meio do índices. 
Nas unidades anteriores vimos que para se chamar um programa em Java, devemos criar um 
programa principal com o método main, e como parâmetro do método devemos criar um string 
args[], isso nada mais é do que um array de Strings.
Os arrays estão presentes em todas as linguagens de programação, em Java, os arrays são 
objetos que permitem armazenar uma lista de itens relacionados.
Precisamos criar um programa que armazene as seguintes notas de um aluno: 8.0, 10.0, 
9.0, 10.0, 8.5, 10.0 e que calcule a média final.
8
Unidade: Introdução a Vetores
Arrays Unidimensionais
Os arrays de uma dimensão são aqueles que possuem um único índice para acessar os 
elementos. Eles podem ser declarados da seguinte forma:
TIPO-DE-DADO NOME-DO-ARRAY[] = NEW TIPO-DO-DADO[QTDE]. 
Em que:
Tipo-de-dado: Qualquer tipo de variável ou de classe;
 Nome-do-array: Qualquer nome válido vale o mesmo conceito para a criação dos 
nomes de variáveis.
Exemplos:
 Criar um array de nome Cidades contendo 50 elementos do tipo String e seu índice varia 
de 0 a 49.
Criar um array de nome mes contendo 12 elementos do tipo int e seu índice varia de 0 a 11.
 Para se atribuir valores a um vetor (array), devemos colocar o índice desejado entre os 
colchetes, como demonstrado abaixo:
9
O exemplo que será demonstrado a seguir utiliza um array para armazenar um conjunto de 
argumentos do tipo inteiro, informado pelo usuário na linha de execução:
Exemplo do livro Java 2 - Ensino Didático ( pag. 142 )
Os vetores (arrays) podem ser criados e inicializados ao mesmo tempo, para isso, deve-
se utilizar o operador new para instanciar um novo objeto. Os arrays criados entre chaves e 
separados por vírgula devem ter o mesmo tipo que a variável. Veja a sintaxe abaixo:
TIPO-DE-DADO NOME-DO-ARRAY[] = { valores separados por vírgula }
O exemplo abaixo mostra como usar, e explica também a função String.valueOf() para 
manipulação do conteúdo de um array de caracteres.
10
Unidade: Introdução a Vetores
Linha 5: criando array de caracteres.
Linha 9: mostrando a quantidade de elementos do array.
Linha 15: armazenando informações no array.
Arrays Bidimensionais
Os arrays bidimensionais ou arrays multidimensionais permite a criação de vetores com mais 
de um índice. Essa característica possibilita que os valores sejam armazenados na forma de 
matrizes de qualquer dimensão.
TIPO-DO-DADO NOME-DO-ARRAY[][] = NEW TIPO-DO-DADO[<índice>][<índice>].
O exemplo abaixo demonstra o uso de arrays bidimensionais para armazenar 2 (duas) notas 
de 3 (três) alunos (total de 6 notas). Uma vez armazenadas, o programa solicita ao usuário o 
número do aluno para exibir suas notas e também a média.
 
 Informação
Alguns pontos devem ser levados em consideração quando se trabalhar com vetores (arrays) de 
caracteres e strings: nos array de caracteres são utilizados ‘ (apóstrofos) e já nos arrays de string 
são utilizados “ (aspas).
A função String.valueOf() pode ser usada para apresentar os elementos do array de caracteres 
ou um trecho dele. A função String.valueOf() não funciona para um conjunto de arrays do tipo 
string, apenas do tipo char(conjunto de caracteres).
11
Arrays de objetos
Do mesmo jeito que criamos array de dados primitivos (int, float, Double, string e char), 
é possível criar um array para armazenamento de objetos. Isso é muito útil, pois permite as 
mesmas operações com diversos objetos do mesmo tipo.
O exemplo abaixo utiliza um array de objetos, aproveitando das funcionalidades da 
classe Veículo.
12
Unidade: Introdução a Vetores
Passagem de arrays em métodos
Os métodos já foram vistos nos capítulos anteriores. Vimos que é possível a criação de 
métodos que recebem valores, manipulam esses valores e retornam um resultado. 
A passagem de arrays em métodos é basicamente o mesmo das variáveis. Quando um método 
é invocado, um vetor qualquer é informado; esse vetor pode ser manipulado internamente pelo 
método e também retornar o resultado.
Public static TIPO_DE-ARRAY[] nome-do-método (tipo-do-array nome-do-array[])
O exemplo a seguir mostra o método que recebe um array do tipo inteiro, organiza seus 
elementos e retorna o array.
5
•	Construtores
•	Sobrecarga
•	Herança
Hoje, veremos alguns assuntos introdutórios na nossa disciplina e aproveito para apresentar-lhes 
alguns conceitos que utilizaremos na estrutura de todas as nossas unidades.
Para obter um bom aproveitamento, vamos conferir a estrutura desta unidade?
Conteúdo Teórico: neste link você encontrará o material principal de estudos na forma de texto escrito.
Atividade de Sistematização: os exercícios disponibilizados são de autocorreção e visam que 
você pratique o que aprendeu na disciplina e que identifique os pontos em que precisa prestar mais 
atenção, ou pedir esclarecimentos a seu tutor. Além disso, as notas atribuídas aos exercícios serão 
parte de sua média final na disciplina.
Atividade de Aprofundamento: é uma atividade dissertativa.
Material Complementar e Referências Bibliográficas: nestes links você poderá ampliar seus conhecimentos.
Vídeoaula: nestes links serão apresentadas algumas ferramentas na prática e também a resolução de 
alguns exercícios de forma prática. 
 
 Atenção
Lembramos-lhe da importância de realizar todas as atividades propostas dentro do prazo estabelecido para cada 
Unidade, dessa forma, você evitará que o conteúdo se acumule e que você tenha problemas ao final do semestre.
Uma última recomendação, caso tenha problemas para acessar algum item da disciplina, ou dúvidas com 
relação ao conteúdo, não deixe de entrar em contato com seu professor-tutor por meio do item mensagens.
 · Iremos enriquecer nosso conhecimento com novos 
conceitos, veremos qual a importância dos construtores, 
sobrecarga e herança. Veremos que isso é de fácil 
implementação e adaptação.
Construtores, Sobrecarga e Herança
7
Construtores são métodos que são invocados automaticamente quando um objeto é 
instanciado. São métodos que nunca retornam nada e não possuem tipo. Em todas as 
instanciações foram utilizadas a palavra reservada, conforme o exemplo abaixo: 
Carro c1 = new Carro();
Conforme comentado nas unidades anteriores, a palavra new é a responsável por inicializar o 
objeto. O método construtor é o método que é chamado toda vez que o objeto é criado, ou seja, 
quando se utiliza o operador new, o primeiro método que é chamado é o construtor do objeto. Ele 
é responsável por disponibilizar ou alocar o espaço em memória para a utilização do novo objeto.
Obrigatoriamente, o método construtor deve possuir o mesmo nome da classe, se ele não for 
declarado, por default é criado automaticamente.
Logo abaixo demonstrado-se a codificação de dois arquivos:
Arquivo classe:
Arquivo para instanciar a classe e invocar o método construtor:
 O método construtor funciona como qualquer método criado em um programa Java, pode 
receber argumentos no momento da criação, veja os exemplos abaixo. 
Suponhamos a necessidade de criar dois objetos da classe carro, com diferentes 
conteúdos para a variável nome.
Construtores
8
Unidade: Construtores, Sobrecarga e Herança
Classe carro com recebimento de argumentos
Classe UsaCarro com passagem de valores:
Em Java, existe uma referência para a própria classe através da palavra-chave “this”. Assim, 
no construtor ao invés de usar “nome = n”, podemos usar “this.nome = nome”, nesse caso as 
mesmas variáveis no construtor podem ser usadas nos atributos.
9
Agora, quando instanciamos um objeto da classe Carro, veja como fica:
 
Sobrecarregar (do inglês overload) trata-se de um método para criar mais métodos com o 
mesmo nome, porém com assinaturas diferentes. Os parâmetros podem se diferenciar em tipo 
e/ou em quantidade, assim como o tipo de retorno. Ficará a cargo docompilador escolher de 
acordo com a lista de argumentos enviados os métodos a serem executados. Vejamos os 
exemplos abaixo: 
O método recebe dois parâmetros e o retorno é o resultado impresso na tela, veja o método implementado.
 
Agora, imagine que precisamos fazer um método que multiplique números inteiros e não 
números reais. Para o usuário, é transparente, o programador deve realizar uma sobrecarga de 
métodos e desenvolveria da seguinte forma:
Sobrecarga
10
Unidade: Construtores, Sobrecarga e Herança
As possibilidades são ilimitadas e a sobrecarga vai depender das necessidades de cada projeto 
de classe. Em Java, muitos métodos já são sobrecarregados. Por exemplo, o próprio comando de 
imprimir que sempre usamos “System.out.println” possui várias sobrecargas. Você pode passar 
como parâmetro um número inteiro, um número real ou mesmo uma String que ele consegue 
imprimir na tela o que passou. Isso quer dizer que existe um método println que recebe um int, 
outro que recebe um double, outro que recebe uma String, além de outros tipos.
Herança
Como o nome sugere, na orientação a objeto, se refere a algo que será herdado. Em Java 
ocorre quando uma classe herda todas as características, métodos e atributos de outra classe, essa 
técnica possibilita o compartilhamento e reaproveitamento de recursos definidos anteriormente. 
A classe principal que irá disponibilizar todos os recursos recebe o nome de superclasse e a 
classe que herda recebe o nome de subclasse.
Outro recurso da herança, permite que a classe que está herdando, ou subclasse possa aproveitar 
toda a característica da superclasse, como também implementar novos atributos e métodos.
Essa técnica de herança é muito utilizada em Java, para melhor entendimento sobre herança, 
observe os exemplos abaixo:
Classe veículo:
11
A classe Veículo possui duas variáveis de instância (nome e velocidade) e seis métodos. 
Existe a necessidade de outra classe utilizar as mesmas características da classe Veiculo, mas 
também implementará métodos que não foram desenvolvidos na superclasse, como por 
exemplo, os métodos de ligar e desligar. Com a técnica da herança, as características da classe 
serão herdadas na nova classe e, para realizar a herança, utiliza-se a palavra extends, ou seja a 
subclasse extends superclasse, veja o exemplo abaixo:
A classe Veículo1 estende (extends) as funcionalidades da classe Veículo, ou seja, a classe 
Veículo1 está herdando os métodos set e get e também os métodos acelera() e frea().
Veja a implementação do código:
 
Ao instanciar o objeto v, o mesmo receberá as variáveis de instância e todos os métodos 
presentes nas classes Veículo e Veículo1, desse modo o objeto v terá acesso as variáveis nome, 
velocidade, ligado e os métodos frea, acelera, liga e desliga.
Com base na modelagem UML abaixo, veremos como ficará o desenvolvimento das classes 
MembroUniversidade, Aluno, Bolsista, Funcionário e Professor.
 
12
Unidade: Construtores, Sobrecarga e Herança
Logicamente, começaremos pela classe principal (superclasse).
13
Vamos, agora, implementar a classe Aluno que herda todas as características de 
MembroUniversidade. Observe a palavra extends, essa palavra indica que a classe Aluno herda 
as características da classe MembroUniversidade. Pode-se observar que a classe aluno tem seus 
próprios atributos como RGM e curso. A palavra chave “super” refere-se à superclasse da classe. 
O comando “super()” está chamando o construtor da classe pai, nesse exemplo a classe pai é a 
MembroUniversidade.
Veja, agora, como fica a classe Bolsista que será subclasse de Aluno.
 
5
•	Classes Abstratas
•	Polimorfismo e Sobreposição
•	Interfaces
Hoje veremos alguns assuntos introdutórios na nossa disciplina e aproveito para apresentar-lhes alguns 
conceitos que utilizaremos na estrutura de todas as nossas unidades.
Para obter um bom aproveitamento nesta unidade vamos conferir a estrutura desta unidade:
Conteúdo Teórico: neste link você encontrará o material principal de estudos na forma de texto escrito.
Atividade de Sistematização: os exercícios disponibilizados são de autocorreção e visam que 
você pratique o que aprendeu na disciplina e que identifique os pontos em que precisa prestar mais 
atenção, ou pedir esclarecimentos a seu tutor. Além disso, as notas atribuídas aos exercícios serão 
parte de sua média final na disciplina.
Atividade de Aprofundamento: é uma atividade dissertativa.
Material Complementar e Referências Bibliográficas: nestes links você poderá ampliar seus conhecimentos.
Vídeo Aula: nestes links serão apresentadas algumas ferramentas na prática e também a resolução de 
alguns exercícios de forma prática. 
 
 Atenção
Lembramos a você da importância de realizar todas as atividades propostas dentro do prazo estabelecido para cada 
Unidade, dessa forma, você evitará que o conteúdo se acumule e que você tenha problemas ao final do semestre.
Uma última recomendação, caso tenha problemas para acessar algum item da disciplina, ou dúvidas com 
relação ao conteúdo, não deixe de entrar em contato com seu professor tutor através do botão mensagens.
 · Nesta Unidade você verá conceitos de Classes Abstratas, 
Polimorfismo, Sobreposição e Interfaces. Nessa altura, você já 
deve ter incorporado muitos termos de POO, esses conceitos 
são bastante importantes em Orientação a Objetos, pois 
permitem a extensibilidade de componentes e seu reuso. 
Classes Abstratas, Polimorfismo, 
Sobreposição e Interfaces
7
À medida que você sobe na hierarquia de herança, as classes tornam-se mais gerais. Em 
algum momento, a classe torna-se tão geral que ela seria apenas uma base para as outras classes 
e não mais uma classe com instâncias específicas que você queira utilizar.
Uma classe abstrata é desenvolvida para representar entidades e conceitos abstratos. Usamos 
uma classe abstrata para criar um padrão de subclasses com comportamentos iguais.
Vamos analisar a Figura 1 a seguir:
 Figura 1 – Diagrama de Herança para a classe Veiculo e suas subclasses
No Diagrama de classes representado na Figura 1 podemos criar classes comuns (classes 
concretas) para todas as classes representadas. Isso fará com que possamos instanciar objetos 
de qualquer uma das sete classes. Porém, a classe Veículo só serviu de molde para atributos e 
métodos comuns às subclasses Carro e Caminhão. Podemos, por exemplo, ter como atributos 
na classe Veículo “velocidade” e “passageiros”, e alguns métodos como “acelera”, “freia” e seus 
métodos de acesso “set” e “get”.
Desse modo, não há motivos para instanciar objetos da classe Veículo, pois ela serviu apenas como 
abstração das subclasses da mesma. Nesse caso, dizemos que Veículo pode ser uma classe abstrata.
Para a criação de uma classe abstrata usamos a palavra chave “abstract”. Veja na Figura 2 a 
implementação da classe Veículo.
Classes Abstratas
8
Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces
 Figura 2 – Implementação de classe abstrata Veiculo
Uma classe abstrata, além de seus métodos concretos, pode conter também métodos abstratos. 
Note na Figura 2 que temos dois métodos abstratos, “acelera” e “freia”. Métodos abstratos não 
possuem corpo, apenas a sua assinatura e eles devem ser implementados obrigatoriamente em 
suas subclasses, a não ser que suas subclasses também sejam abstratas e nesse caso, devem ser 
implementados na primeira classe concreta do diagrama.
Portanto, uma subclasse de uma classe abstrata herda os métodos concretos e se obriga a 
implementar os métodos abstratos.
 Figura 3 – Implementação da subclasse concreta Carro
9
Na Figura 3 temos a implementação da classe Carro, que é subclasse de Veiculo. Note que, por 
ser uma classe concreta, temos obrigatoriamente que implementar os métodos “acelera” e “freia”.
Nesse caso, não podemos instanciar objetos da classe abstrata Veiculo, ou seja, um comando 
do tipo “Veiculo v1 = new Veiculo();” estaria incorreto.
O termo polimorfismo é originário do gregoe significa “muitas formas” (poli = muitas, morphos 
= formas). A propriedade segundo o qual uma operação pode comportar-se diferentemente em 
classes diferentes.
O polimorfismo é o responsável pela extensibilidade em programação orientada a objetos, 
promovendo o reuso. Em termos de programação, é o princípio pelo qual duas ou mais 
subclasses de uma mesma superclasse podem invocar métodos quem tem a mesma identificação 
(assinatura), mas com comportamentos distintos, especializados para cada classe derivada.
Para exemplificar, pense no termo “abrir”. Você pode abrir uma porta, uma caixa, uma janela 
ou conta no banco. A palavra abrir pode ser aplicada a muitos objetos diferentes no mundo real 
e cada objeto interpreta a ação de “abrir” à sua maneira, entretanto podemos simplesmente 
dizer “abrir” para expressar a ação.
Uma linguagem polimórfica é a que suporta polimorfismo ( Actionscript, Java), já a linguagem 
monomórfica não suporta polimorfismo (Pascal, ASP).
Uma maneira de utilizar o polimorfismo, utilização o mecanismo de Sobreposição de 
Métodos (do inglês override), que consiste em reescrever o método herdado da superclasse. 
Não confundir Sobrecarga de Métodos (overload), que consiste em escrever métodos com o 
mesmo nome, porém com parâmetros diferentes, o que faz com que eles tenham assinaturas 
diferentes. Na Sobreposição de Métodos, a assinatura é idêntica ao método herdado, porém o 
corpo do método é alterado para o propósito específico da subclasse.
Na Figura 2, a classe abstrata Veiculo possui métodos abstratos “acelera” e “freia”. Isso fez 
com que fôssemos obrigados a implementar esses métodos na classe Carro conforme Figura 3. 
Se analisarmos novamente a Figura 1, notamos que as classes Uno e Ferrari herdam todos os 
atributos e métodos de Carro, incluindo os métodos acelera e freia.
Porém, sabemos que o os objetos da classe Uno aceleram e freiam mais lentamente que 
objetos da classe Ferrari, portanto, devemos sobrepor esses métodos para que ajam de acordo 
com a realidade de cada objeto.
Polimorfismo e Sobreposição
10
Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces
 Figura 4 – Implementação das classes Uno e Ferrari
Note na Figura 4 que nós reescrevemos os métodos acelera e freia das subclasses Uno e 
Ferrari, adaptando para as próprias necessidades. Podemos notar que a assinatura do método 
é idêntica à superclasse carro usando então o mecanismo de Sobreposição.
 Figura 5 – Exemplo de Polimorfismo e Sobreposição
Veja mais um exemplo na Figura 5. Temos uma classe abstrata “Telefone” que possui um 
método calcularConta. Por herança, as classes “Movel” e “Fixo” recebem o método calcularConta, 
porém a maneira de calcular a conta de um Telefone Móvel e de um Telefone Fixo é diferente.
11
Nesse caso, através da Sobreposição de Métodos, reescrevemos os métodos calcularConta em 
cada subclasse para que se adapte à sua necessidade, criando então o conceito de Polimorfismo.
 Figura 6 – Exemplo de Polimorfismo e Sobreposição
Veja o exemplo da Figura 6, onde temos uma classe “Animal” que possui um único método 
“andar”. Criamos uma subclasse de Animal chamada Cavalo, que por herança recebe o método 
andar. Nesse exemplo, estamos sobrescrevendo o método andar para que faça outra coisa.
Tanto a classe Animal como a classe Cavalo são concretas e aceitam instanciar objetos, 
podemos ter o seguinte código Java:
Animal a = new Animal();
Cavalo b = new Cavalo();
a.andar();
b.andar();
Para o objeto “a”, aparecerá a mensagem de “pessoa andando” e para o objeto “b” a 
mensagem será “Cavalo Andando”. Porém, podemos ter também o seguinte código:
Animal a = new Animal();
Animal b = new Cavalo();
a.andar();
b.andar();
No exemplo anterior, o resultado será o mesmo, para o objeto “a” aparecerá “pessoa 
andando” e para o “b” será “Cavalo andando”. Porém temos agora “b” como uma variável 
polimórfica. Um objeto do tipo Animal pode referir-se a um objeto do tipo Animal ou a um 
objeto de qualquer subclasse da classe Animal.
12
Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces
Muitas linguagens de programação orientada a objetos não possuem o conceito de Herança 
Múltipla. Isso ocorre porque alguns mecanismos da POO são incompatíveis com processos de 
herança múltipla. Linguagens como C++ e Eiffel possuem mecanismos de herança múltipla, 
porém são pouco utilizados por serem complexos e por vezes ineficientes. Vamos analisar a 
Figura 7 a seguir:
 Figura 7 – Cenário de Herança Múltipla
Analisando a Figura 7 podemos notar que a classe ComboDrive herda características das 
superclasses GravadorDVD e GravadorCD, caracterizando uma herança múltipla. Porém, 
sabemos que por herança as subclasses herdam todos os atributos e métodos da classe pai.
No nosso exemplo, o método “burn” foi sobrescrito nas duas classes GravadorCD e GravadorDVD. 
Qual método será chamado quando invocarmos o método “burn” da classe ComboDrive?
Esse cenário não é possível em Java e em muitas outras linguagens OO. Nesse caso, usamos 
outro mecanismo chamado Interfaces.
Uma interface especifica um conjunto de operações públicas de uma classe e/ou um 
componente. Uma interface não é uma classe, mas um conjunto de requisitos para classes que 
precisam se adequar a ela, ou seja, você nunca poderá utilizar o operador new para instanciar 
uma interface.
Interfaces
13
 Figura 8 - Interface
Note na Figura 8 que Cliente não é uma classe e sim uma Interface. Ela define quais os 
métodos que deverão ser criados nas classes que a implementam. Uma interface não é herdada 
e sim implementada. Quando dizemos que uma classe implementa uma interface, estamos 
firmando um contrato de compromisso que essa classe, obrigatoriamente, implementará os 
métodos da interface.
Os métodos na interface são métodos “ocos”, ou seja, só possuem as assinaturas, mas não 
possuem corpo. Além dos métodos, as interfaces podem conter constantes, cujas classes que 
implementam a interface recebem as constantes como um mecanismo de herança. 
Uma classe pode herdar apenas de uma superclasse, porém podem implementar diversas 
interfaces, podendo assim simular o mecanismo de herança múltipla.
 Figura 9 – Interface Imprimível e classe Produto
Na Figura 9 temos uma Interface Imprimivel e uma classe Produto. A implementação da 
Interface pode ser algo como:
14
Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces
Podemos notar que, ao invés de usar “public class”, usamos “public interface” para criação 
de interfaces e não classes. Nessa interface temos uma constante de nome “nlin”, definida com 
o modificador “final” e a assinatura de dois métodos “toString” e “toSystemOut”. Notem que 
esses métodos são ocos e não possuem implementação, semelhante aos métodos abstratos vistos 
anteriormente, mas sem o “abstract”. Todos os métodos de interface serão obrigatoriamente públicos.
Todas as classes que implementam a interface “Imprimivel” terão a obrigação de implementar 
os métodos “toString” e “toSystemOut”. Isso faz com que tenhamos um padrão de programação, 
assim não importa quais os métodos que as subclasses terão, saberemos que pelo menos esses 
2 métodos existirão em todas as classes que implementam a interface.
Todos os métodos em uma interface são implicitamente abstratos, porém o modificador 
“abstract” não é utilizado com métodos de interface, apesar de poder ser, ele é desnecessário.
Veja a seguir como uma classe implementa uma interface, utilizando o operador “implements”. 
Veja no código da classe Produto que usamos a palavra chave “implements” para dizer que a 
classe implementa a interface. Veja que tivemos que criar os métodos “toString” e “toSystemOut” 
dentro da classe.
public interface Imprimivel {
	 final	char	nlin	=	’\n’;	
	 public	String	toString();	
	 public	void	toSystemOut();	
}
public class Produto implements Imprimivel {
	 private	String	descricao;
	 private	int	quantidade;public Produto(String d,int q) {
	 	 descricao	=	d;
	 	 quantidade	=	q;
 }
 public String toString() {
	 	 String	resp	=	“Descrição:”	+	descricao;
	 	 resp	+=	nlin	+	“Qtde:”	+	quantidade;
	 	 return	resp;
 }
 public void toSystemOut() {
	 	 String	resp	=	“Descrição:”	+	descricao;
	 	 resp	+=	nlin	+	“Qtde:”	+	quantidade;
	 	 System.out.print(resp);	
 }
}
15
Apesar de não podermos instanciar interfaces, podemos criar variáveis de interface e instanciar 
objetos de classes que a implementam. O código abaixo teria o mesmo efeito que o anterior:
 
Podemos então perceber que o conceito de classes abstratas é semelhante ao de interfaces. 
Quando devemos usar uma ou outra?
Use classes abstratas quando você quer definir um “template” para subclasses e você possui 
alguma implementação (métodos concretos) que todas as subclasses podem utilizar. Use 
interfaces quando você quer definir uma regra que todas as classes que implementem a interface 
devem seguir, independentemente se pertencem a alguma hierarquia de classes ou não. Claro 
que podemos também usar ambas no caso de uma simulação de herança múltipla.
public class TesteProduto {
 public static void main(String args[]) {
	 	 Produto	prod	=	new	Produto(“Macarrão”,10);
	 	 prod.toSystemOut();
	 	 System.out.println(“\n”	+	prod.toString());
 }
}
public class TesteProduto {
 public static void main(String args[]) {
	 	 Imprimivel	prod	=	new	Produto(“Macarrão”,10);
	 	 prod.toSystemOut();
	 	 System.out.println(“\n”	+	prod.toString());	
 }
}

Continue navegando