Buscar

POO1_ebook

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 173 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 173 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 173 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 I
PROGRAMAÇÃO 
ORIENTADA A OBJETOS I
R343 
 Rego, Angela 
 História da língua portuguesa no Brasil [livro eletrônico] / 
 Angela Rego. – Rio de Janeiro: UVA, 2019. 
 
 727 KB. 
 
 ISBN 978-85-5459-044-4
 
 1. Língua portuguesa - Brasil - História. 2. Sociolinguística 
 - Brasil - História. I. Universidade Veiga de Almeida. II. 
 Título. 
 
 CDD – 469.800981
Copyright © UVA 2019
Nenhuma parte desta publicação pode ser reproduzida por qualquer 
meio sem a prévia autorização desta instituição.
Texto de acordo com as normas do Novo Acordo Ortográfico 
da Língua Portuguesa.
AUTORIA DO CONTEÚDO
Adriana Aparicio Sicsú Ayres 
do Nascimento
REVISÃO
Theo Cavalcanti
Lydianna Lima
PROJETO GRÁFICO
UVA
DIAGRAMAÇÃO
UVA
Bibliotecária Katia Cavalheiro CRB 7 - 4826.
Ficha Catalográfica elaborada pela Biblioteca Central da UVA.
SUMÁRIO
Apresentação
Autor
6
7
Os conceitos básicos da programação orientada a 
objetos utilizando o Java
49
• Classes, objetos, atributos e métodos; métodos de acesso 
• Polimorfismo de sobrecarga de operadores e de métodos
• Métodos construtores e sobrecarga de métodos construtores
UNIDADE 2
8
• Histórico da linguagem Java
• Características
• Ambientes de desenvolvimento
A linguagem Java e o paradigma da orientação a objetos
UNIDADE 1
SUMÁRIO
Estruturas homogêneas com Java e o tratamento de 
exceções
133
• Estruturas estáticas: vetores e matrizes de tipos básicos
• Criação de vetores de objetos e a organização em memória
• Aplicação do tratamento de exceções em vetores e matrizes
UNIDADE 4
83
• A herança de classes, o reaproveitamento de membros das classes e 
o polimorfismo de sobrescrita
• Encapsulamento de métodos e atributos e a organização de classes 
em pacotes
• Os conceitos de classes abstratas e interfaces
Os conceitos avançados da programação orientada a 
objetos utilizando o Java
UNIDADE 3
6
O desenvolvimento de sistemas tem se expandido muito ao longo dos anos. Inicialmen-
te, foram as aplicações científicas e militares, passando pelas comerciais de empresas, 
e, posteriormente, cresceu muito com o advento da computação pessoal. A partir desta 
e do uso de computadores para o entretenimento, novamente o mercado de desenvolvi-
mento se expandiu. Os computadores pessoais passaram a ser ferramentas importan-
tíssimas nas empresas para a execução de tarefas diárias, e as pessoas, a usar muito 
as redes sociais e os aplicativos. Atualmente, estamos vivendo uma nova expansão 
com a popularização dos smartphones e tablets, quando aplicações para dispositivos 
móveis têm sido muito solicitadas e as empresas têm investido no desenvolvimento de 
aplicativos capazes de facilitar a vida de seus usuários, aumentando assim suas opor-
tunidades de negócios. Nesse contexto, o desenvolvimento de sistemas e aplicações 
tem sido sempre requisitado a contribuir com esse crescimento. O paradigma de pro-
gramação orientada a objetos permite o desenvolvimento tanto de aplicações simples 
como complexas e com grande possibilidade de reaproveitamento de códigos, além de 
facilitar a manutenção desses sistemas. A linguagem Java é uma linguagem orientada 
a objetos muito versátil, pois permite o desenvolvimento de sistemas complexos com 
emprego da arquitetura cliente × servidor, além da criação de aplicações para desktops 
e dispositivos móveis.
APRESENTAÇÃO
7
ADRIANA APARICIO SICSÚ AYRES DO NAS-
CIMENTO
Doutora em Computação de Alto Desempenho pelo Instituto Alberto Luiz Coimbra de 
Pós-Graduação e Pesquisa de Engenharia da Universidade Federal do Rio de Janeiro – 
Coppe/UFRJ. Mestre em Engenharia da Computação pela Universidade do Estado do 
Rio de Janeiro – Uerj. Bacharel e licenciada em Informática. Professora concursada do 
Centro Universitário Estadual da Zona Oeste – Uezo. Professora da Universidade Veiga 
de Almeida – UVA e da Universidade Estácio de Sá – Unesa. Possui experiência na área 
de ciência da computação, com ênfase em engenharia de software, atuando principal-
mente nos seguintes temas: modelagem e desenvolvimento de sistemas, bancos de da-
dos e mineração de dados e textos.
AUTOR
A linguagem Java e o paradigma 
da orientação a objetos
UNIDADE 1
9
O conhecimento das técnicas de desenvolvimento de sistemas baseados no paradigma 
de programação orientada a objetos é fundamental para o desenvolvimento de sistemas 
complexos, facilitando a divisão de tarefas em partes mais simples e fáceis de serem 
desenvolvidas, permitindo que posteriormente essas partes sejam agrupadas de forma 
a resolver problemas que envolvam grandes e complexos sistemas. A prática exige o co-
nhecimento e o uso de uma linguagem de programação com suporte aos conceitos de 
orientação a objetos. Dessa forma, é importante conhecer uma linguagem de programa-
ção orientada a objetos, tal como a linguagem Java, para poder desenvolver aplicações 
segundo esse paradigma.
INTRODUÇÃO
Nesta unidade, você será capaz de:
• Conhecer o paradigma da programação orientada objetos e o histórico e a es-
trutura da linguagem Java.
OBJETIVO
10
Histórico da linguagem Java 
Desenvolvida na década de 1990 por James Gosling, da Sun Microsystems, foi inicial-
mente um pequeno trabalho anônimo, que, após a divulgação de suas ideias, foi apoiado 
pela empresa Sun Microsystems, muito conhecida e forte no mercado de desenvolvi-
mento de estações de trabalho e de computação de alto desempenho. A Sun, então, 
criou um grupo de trabalho para o projeto, que foi batizado de “The Green Project”, em 
1991. Esse grupo foi separado das operações cotidianas da Sun, e uma equipe com 13 
desenvolvedores trabalhou em um conjunto de escritórios próprios em Menlo Park, du-
rante 18 meses e sem comunicação com a matriz, para a criação de uma linguagem de 
programação que fosse independente de plataforma, com a ideia de criar uma aplicação 
em uma plataforma (write once) que pudesse ser executada em outras plataformas dife-
rentes, sem a necessidade de qualquer tipo de alteração (run anywhere). 
Ainda naquela época, eles já previam a convergência entre dispositivos controlados di-
gitalmente e computadores. Podemos analisar um exemplo com os dispositivos eletro-
domésticos inteligentes ou ainda os smartphones, que se tornaram verdadeiros compu-
tadores pessoais, com sistema operacional próprio, diversos componentes e inúmeros 
aplicativos.
Inicialmente, a linguagem criada foi bati-
zada de “Oak” (em referência ao carvalho 
que existia em frente às janelas dos es-
critórios), para posteriormente ganhar o 
nome de “Java”, que atualmente se tornou 
uma referência no desenvolvimento de 
aplicações e é uma homenagem ao tipo 
de café muito apreciado pela equipe. Por 
isso, a linguagem tem como marca o desenho de uma xícara de café com a fumaça ca-
racterística da bebida.
A equipe, ainda naquela época, criou um controlador portátil direcionado ao entreteni-
mento doméstico (setup box) voltado à televisão digital, mas estava muito além de seu 
tempo, uma vez que nessa época a televisão digital não estava tão desenvolvida, mas 
todo esse esforço foi recompensado ao se incluir a linguagem Java ao Netscape Navi-
gator (navegador de internet muito utilizado na época), que foi lançado em 1995. A partir 
desse momento, a linguagem começou a ser conhecida e passou a ter milhares de adep-
tos e desenvolvedores,sendo usada em todo o mundo até hoje.
11
A tecnologia Java é encontrada em equipamentos de redes, dispositivos voltados à inter-
net, sistemas de controle, supercomputadores, notebooks, desktops, smartphones, tablets, 
dispositivos de jogos, máquinas de cartões de crédito, controles de robôs, entre outros.
A plataforma Java
A tecnologia Java se divide entre:
• Uma linguagem de programação, com estrutura e sintaxe, além de empregar o 
paradigma de programação orientada a objetos.
• Um ambiente de desenvolvimento, com compilador, interpretador, gerador de do-
cumentação, entre outros.
• Uma biblioteca de classes predefinidas, com suporte a interfaces gráficas (GUI), 
coleções de dados, comunicação de dados, entre outras.
• Um ambiente de execução de aplicações capaz de executar aplicações Java nos 
mais diferentes tipos de computadores e dispositivos.
Tipos de sistemas que podem ser desenvolvidos em Java
A tecnologia Java conta com três tipos de plataformas, cada uma voltada a um tipo de 
aplicação, sendo elas:
• Java SE (Java Standart Edition): são aplicações mais simples, para uso em compu-
tadores pessoais e de empresas.
• Java EE (Java Enterprise Edition): são aplicações mais complexas, que se baseiam 
na arquitetura cliente × servidor, que dependem da comunicação de dados e execu-
tam em servidores, normalmente disponíveis em redes locais ou na internet, para 
atender a demandas de aplicações do cliente. 
Acesse a midiateca da Unidade 1 e veja o conteúdo indicado como material 
complementar pela professora sobre Java.
MIDIATECA
12
• JME (Java Micro Edition): permite o desenvolvimento de aplicações voltadas ao en-
tretenimento e ao uso doméstico, tais como aplicativos para celulares, equipamen-
tos de blu-ray, set-top boxes, módulos de equipamento, impressoras, entre outros 
equipamentos com aplicações voltadas a dispositivos móveis e integrados.
A tecnologia Java ainda se divide em dois diferentes tipos de suporte às aplicações, o de 
desenvolvimento (JDK), no qual criamos as aplicações, e o de execução (JRE), em que as 
aplicações são utilizadas pelos usuários.
Para podermos contar com o suporte ao desenvolvimento Java, devemos primeiramente 
instalar seu ambiente de desenvolvimento, conhecido como JDK (Java Distribution Kit), 
disponibilizado pela Oracle por meio de download no site do Java. Essa plataforma é ne-
cessária para o desenvolvimento e a execução de aplicações Java, mas, se for apenas para 
a execução de aplicações, devemos instalar apenas a JRE (Java Runtime Environment). 
O ambiente do JDK permite o desenvolvimento e a execução de aplicações Java.
Esse ambiente instala o compilador e o interpretador Java, permitindo que você possa 
criar aplicações nessa linguagem. Ele possui uma quantidade maior de arquivos e só 
deve ser instalado pelos desenvolvedores, uma vez que pode atrapalhar o usuário final. 
É possível criar aplicações apenas com o JDK, mas seu uso é mais complexo e depende 
de conhecimentos avançados do sistema operacional para que o desenvolvedor possa 
realizar essa tarefa. Dessa forma, é comum o uso de ferramentas apropriadas, tais como 
o NetBeans e o Eclipse, que são específicas para o desenvolvimento de sistemas e muito 
apropriadas ao desenvolvimento Java. Esse assunto voltará a ser discutido em breve 
ainda neste conteúdo, mas é bom saber que essas ferramentas facilitarão o desenvolvi-
mento e os testes de seus aplicativos.
Acesse a midiateca da Unidade 1 e veja como realizar o download do ambien-
te JDK.
MIDIATECA
13
A seguir, podemos compreender o processo de desenvolvimento, no qual é necessário, 
primeiramente, que o código do programa Java seja escrito em um editor de textos. Os 
ambientes de desenvolvimento NetBeans e Eclipse já possuem um editor preparado para 
facilitar a tarefa de edição do código. Após a edição, devemos então compilar o programa 
Java para obtermos o arquivo com a extensão “class”, que é o segredo da portabilidade 
Java. O arquivo com essa extensão é, então, executado a partir de um interpretador Java.
O processo de compilação do Java é diferente dos das demais linguagens, pois, en-
quanto nelas a compilação gera um código de máquina para um determinado ambiente 
(hardware + software), esse processo em Java gera um código intermediário chamado 
“bytecode”, um código especial de máquina, que não leva em consideração um ambiente 
específico, mas sim um ambiente genérico que independe do ambiente de desenvolvi-
mento. O bytecode, então, é uma linguagem de máquina genérica que o processo de 
compilação da linguagem Java usa para padronizar as aplicações Java independente-
mente do ambiente em que ocorreu o processo de compilação. Os bytecodes indepen-
dem do hardware e do software (sistema operacional) do computador no qual ocorreu a 
compilação, permitindo que a interpretação ocorra em qualquer ambiente, mesmo que 
seja diferente daquele em que ocorreu a compilação. O interpretador Java também é 
conhecido como JVM (Java Virtual Machine), que nada mais é do que um software ca-
paz de interpretar os bytecodes em um ambiente específico. Basta que seja criado um 
interpretador Java (JVM) para cada ambiente em que o Java poderá ser executado, que 
esse interpretador poderá, então, executar qualquer aplicação Java desenvolvida para 
ele. Dessa forma, temos uma JVM específica para cada ambiente ou dispositivo espe-
cífico, mas não podemos esquecer que, uma vez compilado um programa ou aplicação, 
essa técnica permite que o programa seja executado em qualquer ambiente. Existem 
diferentes versões da máquina virtual Java, uma para cada computador ou dispositivo 
que irá executar as aplicações Java.
InterpretadorEditor CompiladorProg.java Prog.class
O código é compilado uma vez, 
gerando o bytecode, que pode 
ser interpretado quantas vezes 
forem necessárias e em qualquer 
ambiente Java (JVM) existente.
Atualmente, realiza uma 
compilação just in time 
(no momento da exe-
cução) com o intuito de 
aumentar o desempenho.
14
• O ambiente do JRE permite apenas a execução de aplicações Java.
O JRE instala apenas a máquina virtual Java (JVM), que é o interpretador Java apropriado 
a cada máquina ou dispositivo, existindo então várias versões da JVM. Um computador 
ou dispositivo com o JRE instalado poderá apenas executar aplicações Java, mas será 
capaz de interpretar os bytecodes gerados em outros computadores com total compati-
bilidade, permitindo então a portabilidade da linguagem Java.
Esse ambiente instala apenas o interpretador Java.
Existe, ainda, um plug-in Java para navegadores de internet que permite a execução de 
aplicações Java incorporadas às páginas HTML, os chamados “applets Java”.
Como vimos, a linguagem Java é híbrida: enquanto as demais são compiladas ou inter-
pretadas, a linguagem Java é compilada e interpretada, sendo necessariamente obriga-
tória a compilação para o bytecode, e a execução é sempre interpretada pela máquina 
virtual Java (JVM), que deve ser instalada no ambiente de execução do cliente. Essa ca-
racterística torna a linguagem Java muito diferente das demais linguagens, contribuindo 
para a portabilidade das aplicações Java. Atualmente, o interpretador Java realiza uma 
compilação ( just in time) com o intuito de aumentar o desempenho das aplicações. Isso 
fez com que as execuções das aplicações se tornassem mais rápidas do que as lingua-
gens de script e mais próximas, mas ainda abaixo do desempenho das linguagens com-
piladas diretamente para um determinado ambiente.
Acesse a midiateca da Unidade 1 e veja como realizar o download do ambien-
te do JRE.
MIDIATECA
InterpretadorProg.class
15
Acesse a midiateca da Unidade 1 e veja o conteúdo sobre o funcionamento do 
Java indicado como material complementar pela professora.
MIDIATECA
Aplicações para smartphones com sistema operacional Android® são criadas, 
testadas e emuladas em computadores usados para o desenvolvimento, mas 
sua execução pelo cliente é toda realizada no smartphone. O Android® utiliza 
como linguagemnativa de desenvolvimento a linguagem Java.
Curiosidade
Principais características e vantagens da tecnologia Java:
• Suas aplicações independem de plataforma: escreva uma vez e execute em qual-
quer lugar (write once, run everywhere).
• Linguagem de programação orientada a objetos, com grande versatilidade para o 
desenvolvimento de diferentes tipos de aplicações.
• Grande biblioteca de classes prontas para suporte a interfaces gráficas, comunica-
ções de dados, acesso a banco de dados, entre várias outras.
• Sua segurança possui mecanismos de suporte à proteção contra vírus e suporte 
à criptografia.
• Sintaxe de comando se baseia no padrão da linguagem C.
• Sintaxe simples para a aplicação dos conceitos de orientação a objetos.
• Internacionalização de sistemas, permitindo que as aplicações possam ser de-
senvolvidas com suporte a várias línguas ao mesmo tempo, sendo escolhidas no 
momento da instalação.
• Utilização do padrão Unicode, o que permite o uso de textos de qualquer sistema 
de escrita.
• Robustez, dando suporte à criação de aplicações simples e com poucos requisitos 
até a aplicações altamente complexas e com muitos requisitos.
• Tratamento de exceções em tempo de compilação e em tempo de execução, au-
mentando a segurança na execução de aplicações altamente complexas.
• Suporte a diversos protocolos de rede (TCP/IP, HTTP, FTP etc.).
16
• Execução simultânea, com o uso de múltiplas threads.
• Gerenciamento de memória, com sua limpeza (garbage collection).
• A JVM (máquina virtual Java) possui proteção contra a execução de aplicações 
malcomportadas que possam vir a paralisar o sistema.
• Suporte à programação distribuída e à multitarefa.
• Gerenciamento de memória virtual por meio da JVM.
• Alto desempenho, sendo mais rápida do que linguagens de script, mas é mais lenta 
do que linguagens de programação compiladas para um ambiente.
• Suas aplicações podem utilizar recursos da rede de forma tão simples quanto 
acessar arquivos locais.
• Atualmente, diminuiu os problemas de desempenho com a inclusão da compilação 
just in time em vez de uma simples interpretação executada pela máquina virtual.
17
Características 
Comentários
Existem três tipos permitidos de comentários nos programas feitos em Java:
 // comentário de linha: tudo na linha a partir dele é
 // desconsiderado pelo compilador.
 /* comentário de bloco: tudo entre o início e o fim é 
 desconsiderado pelo compilador.
 */
 /** comentário de documentação: tudo entre o início e o fim é 
 desconsiderado pelo compilador, mas é considerado
 pelo documentador. (Arquivos de documentação).
 */
Ponto e vírgula, blocos e o espaço em branco
• Na linguagem Java, os comandos são terminados com o sinal de ponto e vírgula ( ; ).
• Um bloco tem seu início e seu fim representados pelo uso das chaves ({ }).
• O uso dos espaços em branco (indentação) permite uma melhor visualização dos 
comandos de controle de fluxo e de instruções, e, em consequência, facilita a visua-
lização para a realização da manutenção no programa.
Identificadores
Identificadores são usados para dar nomes aos elementos dos nossos programas, tais 
como: classes, objetos, interfaces, variáveis, constantes, métodos, atributos etc.
• Os identificadores só podem começar por:
 – Uma letra (maiúscula ou minúscula – ver as regras da boa prática de programação).
 – O símbolo $.
 – O símbolo _ (underscore).
18
• Após o primeiro caractere, passam a ser permitidas novas letras (maiúsculas ou 
minúsculas), os símbolos $ e _, além dos dígitos de 0 a 9 (um identificador não pode 
iniciar por um dígito).
• Não há limite para o número de letras, símbolos e dígitos em um identificador.
• Você deve evitar o uso de caracteres acentuados e de outros símbolos ao nomear 
um identificador (ç, á, é, í, ó, ú, â, ê, ô, à, ã, õ, %, #, @ etc.).
• Identificadores na linguagem Java são case-sensitive, ou seja, fazem distinção 
entre letras maiúsculas e minúsculas: pessoa, PESSOA e Pessoa são identificado-
res diferentes.
• Exemplos de identificadores permitidos:
– Identificador
– UserName
– Username
– _sys_var1
– $change
• Algumas palavras reservadas não são permitidas como identificadores, tais 
como:
Abstract Do Implements Private Throw
Boolean Double Import Protected Throws
Break Else Instanceof Public Transient
Byte Extends Int Return True
Case False Interface Short Try
Catch Final Long Static Void
Char Finally Native Super Volatile
Class Float New Switch While
Continue For Null Synchronized
Default If Package This
19
Declaração de variáveis auxiliares 
A linguagem Java possui grande semelhança com a sintaxe utilizada nas linguagens C/
C++, e todas as variáveis em Java devem ser tipadas (o tipo de dado deverá ser explicita-
mente informado).
• Linguagens de programação fracamente tipadas: são linguagens em que as va-
riáveis podem ser criadas sem a necessidade de identificação do tipo de dado que 
será armazenado nelas. Essas variáveis são conhecidas como variantes e podem 
armazenar tipos diferentes de dados durante a execução do programa. Lingua-
gens como PHP e Visual Basic são exemplos de linguagens fracamente tipadas, 
sendo que o Visual Basic permite que as variáveis sejam obrigatoriamente tipadas 
quando usamos “option explicit”.
• Linguagens de programação fortemente tipadas: são linguagens que obrigam 
todas as variáveis criadas a terem seu tipo definido, não permitindo que tipos dife-
rentes do que foi declarado sejam armazenados nessas variáveis.
Tipos de dados básicos 
A linguagem Java possui nove tipos de dados básicos, sendo oito deles primitivos e um 
tipo especial. Esses dados formam a base para o armazenamento em memória de todos 
os tipos suportados pela linguagem.
A boa prática em programação Java determina que variáveis e atributos devem ser 
identificados pelo uso de letras minúsculas.
• Tipos primitivos – São responsáveis apenas pelo armazenamento de valores na 
memória e são divididos em:
– Lógico (boolean): responsável pelo armazenamento de um valor lógico, pode 
ser usado com os valores: on e off, true e false ou yes e no.
Exemplo: boolean flag = false;
A linguagem Java é fortemente tipada, desse modo todas as variáveis, as cons-
tantes e os atributos devem ser tipados. 
Importante
20
– Caractere (char): responsável por armazenar um único caractere ou caracte-
re especial (indicado por iniciar com uma barra invertida).
Exemplos:
 char letra = ‘a’;
 char novaLinha = ‘\n’;
O tipo char define um caractere simples e o representa na forma da tabela 
Unicode com 16-bits. O literal do tipo char pode ser representado com o uso 
do (‘A’).
Caractere especial Descrição
‘\n’ Nova linha.
‘\r’ Enter.
‘\u????’
Especifica um caractere Unicode, o qual 
é representado na forma hexadecimal. 
‘\t’ Tabulação.
‘\\’ Representa um caractere \ (barra invertida).
‘\”’ Representa um caractere “ (aspa).
– Inteiros (byte, short, int e long): responsáveis por armazenar valores inteiros, 
cada tipo possui uma limitação de valores, entre os limites inferior e superior, 
a fim de permitir economia de espaço de memória no armazenamento de pe-
quenos valores.
Tipo Tamanho Escopo
byte 8 bits -27 . . . . 27 - 1
short 16 bits -215 . . . . 215 - 1
int 32 bits -231 . . . . 231 - 1
long 64 bits -263 . . . . 263 - 1
21
Exemplos: 
byte vByte = 127b; // maior valor byte possível, o menor é -128
short vShort = 5000s;
int vInt = 20000;
long vLong = 2000000000;
Obs.: com exceção do int, os demais, ao receberem valores constantes, devem 
indicar o tipo do valor, sendo: b ou B para byte, s ou S para short e l ou L para long.
– Reais (float e double): responsáveis por armazenar valores reais na memória.
Tipo Tamanho Descrição
float 32 bits
Armazena valor real de simples precisão. Por 
possuir uma quantidade menor de bits para ar-
mazenar o valor, não é capaz de guardar com 
grande precisão números muito pequenos ou 
muito grandes.
double 64 bits
Armazena valor realde dupla precisão. Um 
double possui maior precisão, ou seja, podemos 
armazenar valores muito menores ou muito 
maiores do que em um float, mas utilizam maior 
espaço de memória para o armazenamento.
Exemplos: 
float vFloat = 1.27f;
double vDouble = 5000.050556;
Obs.: o float também precisa de um indicador de tipo quando recebe um valor 
constante, que deve indicar seu tipo: f ou F. Isso não é necessário para a atribui-
ção de um valor do tipo double.
A linguagem Java realiza uma conversão de qualquer tipo numérico para double 
sempre que um tipo diferente de double é atribuído a uma variável double. Essa 
característica é chamada de “coerção” e é empregada na linguagem Java.
22
• Tipo especial – Responsável por armazenar o valor em uma classe, com a possi-
bilidade de uso dos métodos disponibilizados por ela.
– String: o tipo String não é um tipo primitivo, mas especial. O valor é armazena-
do em uma classe, por isso esse tipo é iniciado com letra maiúscula, ao contrá-
rio dos tipos primitivos, que sempre se iniciam por letras minúsculas. Esse tipo 
é usado para armazenar uma sequência de caracteres e possui várias ações 
(métodos) que podem ser usadas sobre os valores armazenados. Variáveis e 
atributos do tipo String também devem ter identificadores iniciados por letras 
minúsculas.
Valores constantes
Valores constantes em Java são obtidos com o emprego do modificador final. Qualquer 
tipo associado a ele fará com que, ao ser inicializado, o valor não possa mais ser alterado. 
A boa prática em programação Java define que constantes devem ser identificadas por 
meio do uso de letras maiúsculas.
Exemplos:
final int IDADEMINIMA = 18; // o valor será constante e não poderá
 // ser alterado.
final String NOMEPROJETO = “Programação Java”;
Operadores
• Operadores aritméticos:
Operador Descrição
= Atribuição
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Resto da divisão inteira
23
Exemplos:
int a = 7, b = 2, c;// declaração de variáveis
c = a + b;// atribuição de c com a soma inteira de a com b => 9
c = a - b;// atribuição de c com a subtração inteira de a com b => 2
c = a / b;// atribuição de c com a divisão inteira de a por b => 3
c = a * b;// atribuição de c com a multiplicação inteira de a por b => 14
c = a % b;// atribuição de c com o resto da divisão inteira de a por b => 1
int a = 7; // declaração de variáveis
double b = 2.0, c; // declaração de variáveis
c = a / b; // atribuição de c com a divisão real de a por b => 3,333...
Todo cálculo entre inteiros resulta em um inteiro, mesmo a divisão. Para uma divisão 
entre inteiros que se queira a parte fracionária, é necessário converter o tipo, e isso 
pode ser feito por meio de cast.
Exemplos:
int x=7, y = 3, z;
z = x / y; // z valerá 2: 7 / 3 => 2 e resto 1.
Podemos, então, usar o cast: 
int x=7, y = 3;
float z;
z = (float) x / y;
Sempre que os operandos de uma expressão aritmética forem inteiros, a ope-
ração será realizada exclusivamente com os valores inteiros, resultando em um 
valor inteiro para a atribuição. Já quando um número inteiro e um número em 
ponto flutuante são usados como operandos sem uma única operação aritmé-
tica, o resultado é também um número em ponto flutuante. O número inteiro 
é implicitamente convertido em um número em ponto flutuante antes de a ex-
pressão ser avaliada para a realização da operação.
Importante
24
• Operadores de incremento e decremento:
No Java, os operadores são muito similares ao estilo e à funcionalidade de outras 
linguagens, por exemplo, as linguagens C/C++.
– Pré-incremento: 
 x = 10;
 x = x + 1; O valor da variável x é 11
ou
 x = 10;
 ++x; O valor da variável x é 11.
– Pós-incremento:
 x = 10;
 x = x + 1; O valor da variável x é 11
ou
 x = 10;
 x++; O valor da variável x é 11.
Diferença entre o pré-incremento e o pós-incremento em atribuições:
Exemplo 1:
int y, x = 10;
y = ++x ; => neste momento, a variável x foi primeiramente incremen-
tada e vale 11, já a variável y receberá o valor de x e também valerá 11.
 
Exemplo 2:
int y, x =10;
y = x++; => neste momento, a variável x será pós-incrementada, 
e, sendo assim, a variável y receberá primeiramente o valor de 
x e valerá 10; posteriormente, a variável x será incrementada e 
passará a valer 11.
25
Pré-decremento e o pós-decremento:
--x; e x--; => Valem as mesmas regras apresentadas para o incremento, mas dimi-
nuem uma unidade respectivamente. 
• Operadores relacionais:
Operador Descrição
== Igualdade/comparação
!= Negação
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
Exemplos:
if(a > b)
if(a+b >= c)
• Operadores em expressões lógicas
Operador Descrição
! NÃO lógico
&& E lógico
|| OU lógico
Esses operadores seguem as tabelas-verdade das operações lógicas de NÃO (nega-
ção lógica), E (AND) e OU (OR). 
Exemplos:
if( a > b && c <= d)
if( ! a < b || c != d && e > f )
26
Precedência na avaliação: !, &&, ||
Assim, o segundo exemplo equivale a, de acordo com a precedência:
if( ( !(a < b) || (c != d && e > f) ) )
• Operadores de bits:
Operador Descrição
& E entre bits
^ OU EXCLUSIVO entre bits
| OU entre bits
Precedência: &, ^, | 
Exemplos: 
byte a = 45, b = 70, c=0;
c = a & b; // o valor de c será 4
128 64 32 16 8 4 2 1
a = 0 0 1 0 1 1 0 1 = 45
b = 0 1 0 0 0 1 1 0 = 70
c = 0 0 0 0 0 1 0 0 = 4
byte a = 45, b = 70, c=0;
c = a ^ b; // o valor de c será 107
128 64 32 16 8 4 2 1
a = 0 0 1 0 1 1 0 1 = 45
b = 0 1 0 0 0 1 1 0 = 70
c = 0 1 1 0 1 0 1 1 = 107
No OU exclusivo, apenas um dos operandos pode ser 1 (um), não os dois.
27
byte a = 45, b = 70, c=0;
c = a | b; // o valor de c será 111
128 64 32 16 8 4 2 1
a = 0 0 1 0 1 1 0 1 = 45
b = 0 1 0 0 0 1 1 0 = 70
c = 0 1 1 0 1 1 1 1 = 111
As operações com bits são muito importantes não apenas para a definição de máscaras 
e submáscaras de rede, mas principalmente para as operações relacionadas à criptogra-
fia para a segurança de dados. Nesse contexto, a operação de OU exclusivo é fundamen-
tal para a realização das operações de criptografia.
• Operador condicional (ternário):
O operador ? : é usado em expressões condicionais. 
Pode ser usado em expressões aritméticas para tomar uma decisão no momento 
do cálculo, para definir um valor de retorno, entre outras aplicações.
Exemplo:
int a=15, b=5, c;
c= b * ((a>=10) ? 20 : 10);// como a é maior do que 10, b será multi-
plicado por 20
System.out.println(“Valor de c= “ + c);// o resultado será 100
• Boa prática em programação Java (BP):
Convenções de codificação na linguagem Java:
• Classe – Nomes de classes podem ser maiúsculos, minúsculos ou misturados (le-
tras maiúsculas e minúsculas), mas, por convenção, o nome de classes deve come-
çar por uma letra maiúscula, e, a cada nova palavra, passa-se a iniciar por maiúscula. 
Exemplo: class Aluno { }
28
• Interfaces – Nomes de interfaces seguem o mesmo formato de classes. 
Exemplo: interface Atleta { }
• Métodos – Nomes de métodos podem ser verbos, podendo misturar letras 
maiúsculas e minúsculas. Entretanto, a primeira letra deve ser minúscula, e, a 
cada nova palavra, passa-se a iniciar por maiúscula. 
Exemplo: cadastrar( ) { }
• Atributos – Nomes de atributos seguem a regra de identificação de métodos 
(iniciar por letras minúsculas), podendo misturar entre maiúsculas e minúsculas, 
sendo que a primeira letra deve ser minúscula, e, a cada nova palavra, passa-se 
a iniciar por maiúscula. 
Exemplo: String nome; 
• Variáveis e objetos – Todas as instâncias de classes e variáveis globais su-
portam maiúsculas e minúsculas e devem ser nomeadas tal qual um atributo, 
iniciando por letra minúscula.
Exemplo: Carro carro = new Carro();
• Identificadores com mais de uma palavra – Em todos os casos anteriores, as 
demais palavras usadas para nomear um identificador devem começar por le-
tras maiúsculas.
Exemplos:
class AlunoGraduacao { }
interface AtletaProfissional { } 
double alturaPredio;
setNome () { }
• Constantes – Nomes de constantes podem sermaiúsculos, minúsculos, mis-
turados ou separados com underscore (_). Na boa prática de programação, usa-
mos todas as letras maiúsculas.
29
• Controles de estruturas – Convencionou-se o uso obrigatório de { } (chaves).
• Espaços – Convencionou-se o uso de quatro espaços para indentação.
• Comentários – Use os comentários para explicar os segmentos de código que 
não são óbvios.
Veja, a seguir, um exemplo de uso da boa prática de programação.
• Estruturas de controle de fluxo:
– Estruturas condicionais:
- Se (if):
if (condição) {
 instruções;
}// A cláusula else é opcional.
- Se / senão (if ... else): 
if (condição) {
 instruções;
} 
else {
 instruções;
}
30
- Se / Senão Se / Senão (if ... else if ... else):
A cláusula if ocorre apenas uma vez.
A cláusula else if pode ocorrer nenhuma ou várias vezes.
A cláusula else pode ocorrer apenas uma vez.
if (condição1) {
 instruções;
} 
else if (condição2) {
 instruções;
}
else if (condição3) {
 instruções;
} 
else {
 instruções;
}
- Caso (switch … case): 
Estruturas de decisão caracterizadas pela possibilidade de uma variável pos-
suir vários valores. 
A cláusula switch ocorre uma vez, e a variável de controle em C/C++ e, Java 
pode ser um tipo inteiro ou caractere. 
A cláusula case pode ocorrer de uma a várias vezes, e default é opcional.
switch (variável) {
 case 1 : instruções; 
 break;
 case 2 : instruções; 
 break;
 case 3 : instruções; 
 break;
 default: instruções para condições não previstas anteriormente;
}
31
switch (variável) // Pode-se simular o uso do OU em um switch: 
{
 case 2 : numeroDias = 28;
 break;
 case 4 :
 case 6 :
 case 9 :
 case 11: numeroDias = 30; 
 break;
 case 1 : 
 case 3 : 
 case 5 : 
 case 7 :
 case 8 : 
 case 10 : 
 case 12 : numeroDias = 31;
 break;
 default: System.out.println(“Mês não identificado”);
}
• Estruturas de repetição:
– Para (for):
Estrutura de repetição controlada por uma ou mais variáveis contadoras e ca-
racterizadas pela existência de três parâmetros (opcionais): 
1. Valor inicial.
2. Condição para parada das iterações.
3. Quantidade de incrementos/decrementos a cada iteração.
Exemplos:
 
for(inic (1); cond(2); passo(3))
// Repetição controlada por uma variável:
for (int i=0; i<valor; i++) 
switch(letra){
 case ‘a’:
 case ‘A’: opcao = 1;
 break;
...
32
{
 instruções;
}
// Repetição controlada por duas variáveis:
for (x=1, y=2; x*y<valor; x++, y+=2) 
{
 instruções;
}
// Repetição sem fim
for ( ; ; ) {
 instruções; // você pode usar uma condicional if () e a instrução 
 // break, que encerrará a repetição
}
 
– Enquanto / Faça (while): 
Estrutura de repetição que realiza as operações desejadas enquanto uma de-
terminada condição especificada for verdadeira.
 
// Teste de condição no início
while (condição) {
 instruções;
}
 
– Faça / Enquanto (do ... while): 
Estrutura de repetição semelhante à anterior, com o diferencial de que as con-
dições são verificadas ao final da estrutura, permitindo que as operações es-
pecificadas sejam sempre executadas pelo menos uma vez.
 
// Teste de condição no final
do 
{
 instruções;
} while (condição);
33
Acesse a midiateca da Unidade 1 e veja o conteúdo Java: introdução, caracte-
rísticas, estrutura e ambientes de programação indicado como material com-
plementar pela professora.
MIDIATECA
34
Ambientes de desenvolvimento
Existem várias ferramentas para o desenvolvimento de aplicações utilizando a tecnologia 
Java, mas as duas principais são o Eclipse e o NetBeans. Você poderá escolher a que 
mais lhe for agradável para desenvolver os projetos dos nossos exemplos e exercícios 
práticos, mas não será necessário realizar as tarefas em ambos — basta escolher a que 
você mais gostar. Outro ponto importante é que as empresas possuem sua preferência, 
mas isso não será problema, porque quem está acostumado com uma delas não terá 
dificuldades ao utilizar a outra, uma vez que as duas são muito parecidas e realizam as 
mesmas tarefas.
JDK
Antes de mais nada, é importante que você instale o JDK.
No endereço disponibilizado na midiateca da Unidade 1, você poderá efetuar 
o download da última versão do JDK até o momento e também baixar uma 
versão antiga do NetBeans. Mais a seguir, você poderá efetuar o download da 
versão mais atual. 
Clique sobre o botão “Download” do Oracle JDK versão Java SE 12.0.1 e escolha:
 Windows 158.49 MB jdk-12.0.1_windows-x64_bin.exe
Não se esqueça de aceitar o contrato de licença após analisá-lo e de se cadas-
trar na Oracle caso seja necessário.
Depois, basta instalá-lo seguindo as orientações do instalador. Após a instala-
ção, não se esqueça de reiniciar a máquina para que as configurações sejam 
atualizadas. Essa versão irá atender tanto ao Eclipse como ao NetBeans.
Acesse a midiateca da Unidade 1 e veja como realizar o download do ambiente 
JDK, disponibilizado pela Oracle.
MIDIATECA
35
NetBeans 
Para realizar o download do NetBeans, acesse a midiateca da Unidade 1.
Faça a escolha pela versão mais recente e pelo pacote “bin” (neste momento, 
é a versão 11.0), que contém os executáveis da ferramenta; o pacote “source” 
contém todos os códigos do projeto do NetBeans, que foi feito em Java. 
Essa versão não precisa ser instalada — basta descompactar o arquivo, e você 
encontrará o executável na pasta “bin” do NetBeans. 
Se quiser, você poderá clicar sobre o executável com o botão direito do mouse 
e enviar para a área de trabalho para criar um atalho no desktop.
Acesse a midiateca da Unidade 1 e veja como realizar o download do NetBeans.
MIDIATECA
Acesse a midiateca da Unidade 1 e veja um tutorial de download do Java e da 
IDE NetBeans.
MIDIATECA
36
Eclipse
Caso prefira, realize o download do Eclipse acessando também a midiateca 
da Unidade 1 e siga os procedimentos de instalação. Nas versões anteriores, 
bastava apenas descompactar o arquivo, assim como no NetBeans. Caso al-
gum problema de instalação ocorra, será aberta uma janela do navegador com 
informações de suporte.
Usaremos o seguinte programa para testar as duas ferramentas, e você decidirá qual 
prefere utilizar no desenvolvimento de seus projetos:
import java.util.Scanner;
public class Media {
 public static void main(String[] args) {
 // TODO Auto-generated method stub
 Scanner sc = new Scanner(System.in);
 double media, nota1, nota2, nota3;
 double menorNota;
 System.out.println(“Digite a nota de A1:”);
 nota1 = Double.parseDouble(sc.nextLine());
 System.out.println(“Digite a nota de A2:”);
 nota2 = Double.parseDouble(sc.nextLine());
 System.out.println(“Digite a nota de A3:”);
 nota3 = Double.parseDouble(sc.nextLine());
 if((nota1 <= nota2) && (nota1 <= nota3)) {
 menorNota = nota1;
Acesse a midiateca da Unidade 1 e veja como realizar o download do Eclipse.
MIDIATECA
37
 }
 else {
 if((nota2 <= nota1) && (nota2 <= nota3)) {
 menorNota = nota2;
 }
 else {
 menorNota = nota3;
 }
 }
 media = (((nota1 + nota2 + nota3) - menorNota)) /2.0;
 System.out.println(“A média das 2 maiores notas é:” + media);
 sc.close();
 }
}
• Trabalhando com o NetBeans 11: 
Tela de abertura do NetBeans 11.
Fonte: The Apache Software Foundation© (2019). 
38
Para criar um novo projeto, clique em “File” e, em seguida, “New Project”.
Fonte: The Apache Software Foundation© (2019).
Para a disciplina, sempre use “Java with Ant” e “Java Application”. Clique em “Next” 
para continuar.
Fonte: The Apache Software Foundation© (2019).
39
Defina o nome do projeto como “Media”. Clique em “Finish” para terminar e criar o 
projeto.
Fonte: The Apache Software Foundation© (2019).
Tela do NetBeans com o projeto criado.
Fonte: The Apache Software Foundation© (2019).
40
Faça a codificação do programa na página de edição.
Fonte: The Apache Software Foundation© (2019).
Para executar esse código, selecione o arquivo da classe na área de projetos e clique 
com o botão direito do mouse escolhendo “Run File”para executar o código.
Fonte: The Apache Software Foundation© (2019). 
41
O código será executado na área de Output abaixo do código. Todas as áreas po-
dem ser redimensionadas, assim como foi feito no exemplo ao aumentar a área de 
Output para analisar a execução.
Fonte: The Apache Software Foundation© (2019).
Sua primeira aplicação Java desenvolvida no NetBeans está pronta!
• Trabalhando com o Eclipse Oxygen 3 (atualizado para março de 2018): 
Na tela principal do Eclipse, acesse o “Menu File”, em seguida, a opção “New”, e es-
colha “Java Project”.
Fonte: Eclipse Foundation, Inc.© (2019). 
42
Defina o nome do projeto “Media” e clique em “Finish” para criar o projeto.
Fonte: Eclipse Foundation, Inc.© (2019). 
Tela do Eclipse com o projeto Media criado.
Fonte: Eclipse Foundation, Inc.© (2019). 
43
Crie uma classe Java para realizar a codificação da aplicação. Selecione o projeto e 
clique com o botão direito do mouse, selecionando “New” e “Class”.
Fonte: Eclipse Foundation, Inc.© (2019).
Determine o nome da classe (Media), selecione a opção de criação do método “main” 
para podermos codificar a aplicação e clique em “Finish” para criar a classe.
Fonte: Eclipse Foundation, Inc.© (2019). 
44
Área de codificação da classe pronta para a edição do código.
Fonte: Eclipse Foundation, Inc.© (2019). 
Codificação da classe realizada.
Fonte: Eclipse Foundation, Inc.© (2019). 
45
Execute o código, selecione a classe e clique com o botão direito do mouse sobre 
ela, escolhendo “Run As” e “Java Application”.
Fonte: Eclipse Foundation, Inc.© (2019).
Área de execução do código para a realização de testes do programa. Você pode 
redimensionar as diversas áreas de forma a facilitar seu trabalho.
Fonte: Eclipse Foundation, Inc.© (2019).
Pronto! Seu primeiro programa Java desenvolvido no Eclipse está concluído.
46
Você conheceu as características da tecnologia e da linguagem Java e pode 
aplicá-las na prática, para isso escolha uma das ferramentas de desenvolvi-
mento (NetBeans ou Eclipse) e desenvolva um programa para resolver o pro-
blema a seguir. Neste primeiro momento, não se preocupe com os conceitos 
de orientação a objetos.
Problema: o cálculo do IMC (índice de massa corporal) é utilizado para detectar 
casos de desnutrição ou obesidade. Sua fórmula é bem simples: divide o peso 
pela altura elevada ao quadrado. 
O programa deverá solicitar ao usuário seu peso e sua altura e retornar o valor 
do IMC e em qual situação ele se encontra, de acordo com a tabela a seguir.
IMC Resultado
Menos do que 18,5 Abaixo do peso
Entre 18,5 e 24,9 Peso normal
Entre 25 e 29,9 Sobrepeso
Entre 30 e 34,9 Obesidade grau 1
Entre 35 e 39,9 Obesidade grau 2
Mais do que 40 Obesidade grau 3
NA PRÁTICA
47
Resumo da Unidade 1
Nesta unidade, você conheceu a história da linguagem Java e os tipos de aplicações 
que pode desenvolver utilizando essa tecnologia. Conheceu, ainda, as características 
da tecnologia Java e as estruturas de controle de fluxo condicionais e de repetição. 
Você também pôde avaliar duas das ferramentas mais usadas no desenvolvimento de 
aplicações baseadas na tecnologia Java, o Eclipse e o NetBeans, para poder escolher 
aquela com a qual você se sinta mais à vontade para usar no desenvolvimento de seus 
exercícios práticos.
Histórico da linguagem Java; tipos de dados; operadores; variáveis; constan-
tes; estruturas de controle de fluxo; conversões de tipos; entrada e saída; pla-
taformas de desenvolvimento.
CONCEITO
48
Referências 
DEITEL, P. Java: como programar. 10. ed. São Paulo: Pearson Education do Brasil, 2017. 
Biblioteca Virtual.
SCHILDT, H. Java para iniciantes: crie, compile e execute programas Java rapidamente. 
6. ed. Porto Alegre: Bookman, 2015. Minha Biblioteca.
Os conceitos básicos da 
programação orientada a 
objetos utilizando o Java
UNIDADE 2
50
A programação orientada a objetos possui diversos conceitos associados ao 
desenvolvimento de sistemas. Alguns desses conceitos são básicos e estão 
disponibilizados na maioria das linguagens de programação, mas nem todos os conceitos 
de programação orientada a objetos são disponibilizados em todas essas linguagens; 
alguns podem não estar presentes ou estar presentes parcialmente. Nesta unidade, 
iremos conhecer os principais conceitos da programação orientada a objetos, que fazem 
parte dos conceitos básicos para a implementação dessa técnica de desenvolvimento 
utilizando o Java.
INTRODUÇÃO
Nesta unidade, você será capaz de:
• Compreender e aplicar os conceitos básicos da programação orientada a ob-
jetos com Java.
OBJETIVO
51
Classes, objetos, atributos e métodos; mé-
todos de acesso 
Classes
As classes na programação orientada a objetos são responsáveis por descrever as 
características e as ações que o objeto poderá realizar. Dessa forma, a classe é desenvolvida 
como uma biblioteca, uma vez que uma mesma classe pode ser responsável pela criação 
de diversos objetos em uma aplicação, assim como pode ser utilizada em várias outras 
aplicações diferentes. Essa característica é responsável pelo reaproveitamento de código, 
um dos principais benefícios da programação orientada a objetos. É parte da codificação 
e da criação de uma classe a ser utilizada em sua biblioteca.
Toda classe representa um tipo, ou seja, assim como temos os tipos básicos (byte, short, 
int, long, float, double, char e boolean) e o tipo especial (String), toda classe representa 
uma estrutura de dados que pode armazenar um conjunto de características. 
Na programação orientada a objetos, temos dois tipos de membros em uma classe, que 
são responsáveis por determinar as características e ações dos objetos nas aplicações. 
É na aplicação que os objetos são criados e realizam suas ações.
Uma classe possui apenas dois tipos de membros:
o Atributos – Os atributos de uma classe são responsáveis por descrever o objeto quanto 
a suas características. Cada objeto deve ser analisado, e apenas as características 
importantes ao sistema devem ser levadas em consideração. As características de um 
automóvel para um sistema de estacionamento podem se resumir em modelo, cor e placa, 
sendo suficientes para representar o automóvel nesse contexto. Já para um sistema mais 
abrangente, como o Detran, por exemplo, a codificação do chassi, o fabricante, o número 
do Renavam e potência são igualmente importantes. Dessa forma, é necessário analisar 
o contexto do projeto de sistema (minimundo) e determinar quais são as características 
importantes de cada objeto ao contexto do sistema. Em um sistema acadêmico, por 
exemplo, são importantes o nome, matrícula, CR, curso, entre outras características, mas 
o time para o qual o aluno torce ou a sua religião não tem importância. Atributos devem, 
então, definir um tipo de dado e um identificador para cada característica relevante do 
objeto para o sistema. 
52
Atributos não devem ser identificados de formas diferentes: uma vez que ocorra uma 
definição de projeto sobre o seu identificador, não devemos alterá-lo. A boa prática em 
desenvolvimento Java facilitará o desenvolvimento em equipes se todos usarem sempre 
o identificador-padrão do projeto. Qualquer mudança atrasará o projeto, e provavelmente 
parte dele precisará ser alterada. Se um atributo foi definido como NúmeroPessoas: 
inteiro, ele deve ser declarado como o atributo:
int numeroPessoas;
Isso de acordo com a boa prática de desenvolvimento Java (BP).
public class Automovel {
 // Atributos
 String modelo, cor, placa;
 int hora, minuto, dia, mes, ano;
}
Em uma aplicação, podemos então criar diferentes objetos Automovel, 
baseados em apenas uma classe:
public class AppAutomovel {
 public static void main(String[] args) {
 // TODO Auto-generated method stub
 Automovel auto1 = new Automovel();
 auto1.modelo = “Corsa”;
 auto1.cor = “Branca”;
 auto1.placa = “RIO1A01”;
 auto1.hora = 12;
 auto1.minuto = 25;
 auto1.dia = 03;
 auto1.mes = 06;
 auto1.ano = 2019;
 Automovel auto2= new Automovel();
 Automovel auto3 = new Automovel();
 Automovel auto4 = new Automovel();
 Automovel auto5 = new Automovel();
Exemplo
53
 auto2.placa = “SAL1A02”;
 auto3.placa = “SAO1A03”;
 auto4.placa = “VIT1A04”;
 auto5.placa = “BEL1A05”;
 System.out.println(“Placa do auto1: “ + auto1.placa);
 System.out.println(“Placa do auto2: “ + auto2.placa);
 System.out.println(“Placa do auto3: “ + auto3.placa);
 System.out.println(“Placa do auto4: “ + auto4.placa);
 System.out.println(“Placa do auto5: “ + auto5.placa);
 }
}
Notas:
1. A classe Automovel foi definida uma única vez, e a aplicação criou cinco 
diferentes objetos Automovel.
2. Para cada objeto Automovel criado, foi reservada uma região de memória 
para armazenar as suas características (atributos).
3. As características dos diferentes objetos não se misturam, uma vez que a 
atribuição de cada característica exige a identificação do objeto; dessa forma, 
as atribuições das placas não se misturaram.
4. Exibir todas as características de cada Automovel exigiria uma grande 
quantidade de programação na aplicação, com códigos quase repetidos, 
alterando apenas o identificador de cada objeto.
o Métodos – Os métodos de uma classe são responsáveis pelas ações que o objeto 
pode realizar. Enquanto os atributos se resumem apenas na declaração das suas 
características, os métodos possuem um conjunto de instruções que serão executadas 
para realizar ações ou funções referentes ao objeto. No caso acima, como temos oito 
atributos (características), a impressão de cada atributo de cada objeto poderia demandar 
um conjunto de 40 instruções (cinco objetos x oito atributos). Podemos, então, criar dois 
métodos: um método capaz de realizar a exibição dos dados do objeto e outro para 
realizar a entrada de dados dos atributos do objeto. Esses métodos serão responsáveis 
pela entrada de dados para atribuição das características e por exibir todos os atributos 
do objeto. Ambos os métodos serão desenvolvidos apenas uma vez e poderão ser 
executados por todos os objetos criados em qualquer aplicação. As ações ocorrerão 
sempre sobre o objeto que estiver identificado na chamada da ação.
54
import java.util.Scanner;
public class Automovel {
 // Atributos
 String modelo, cor, placa;
 int hora, minuto, dia, mes, ano;
 // Métodos
 public void entradaDados ( ){
 Scanner sc = new Scanner(System.in);
 System.out.println(“Digite o Modelo :”);
 modelo = sc.nextLine();
 System.out.println(“Digite a Cor :”);
 cor = sc.nextLine();
 System.out.println(“Digite a Placa :”);
 placa = sc.nextLine();
 System.out.println(“Digite a Hora :”);
 hora = Integer.parseInt(sc.nextLine());
 System.out.println(“Digite o Minuto :”);
 minuto = Integer.parseInt(sc.nextLine());
 System.out.println(“Digite o Dia :”);
 dia = Integer.parseInt(sc.nextLine());
 System.out.println(“Digite o Mês :”);
 mes = Integer.parseInt(sc.nextLine());
 System.out.println(“Digite o Ano :”);
 ano = Integer.parseInt(sc.nextLine());
 }
 public void imprimir ( ){
 System.out.println(“Modelo : “ + modelo);
 System.out.println(“Cor : “ + cor);
 System.out.println(“Placa : “ + placa);
 System.out.println(“Hora : “ + hora);
 System.out.println(“Minuto : “ + minuto);
 System.out.println(“Dia : “ + dia);
 System.out.println(“Mês : “ + mes);
 System.out.println(“Ano : “ + ano);
 }
}
Exemplo
55
Em uma aplicação, podemos, então, criar diferentes objetos Automovel, 
baseados em apenas uma classe:
public class AppAutomovel {
 public static void main(String[] args) {
 // TODO Auto-generated method stub
 // criação dos 5 objetos
 Automovel auto1 = new Automovel();
 Automovel auto2 = new Automovel();
 Automovel auto3 = new Automovel();
 Automovel auto4 = new Automovel();
 Automovel auto5 = new Automovel();
 // entrada de dados dos 5 objetos
 auto1.entradaDados();
 auto2.entradaDados();
 auto3.entradaDados();
 auto4.entradaDados();
 auto5.entradaDados();
 // exibição dos dados dos 5 objetos
 auto1.imprimir();
 auto2.imprimir();
 auto3.imprimir();
 auto4.imprimir();
 auto5.imprimir();
 }
}
Notas:
1. A classe Automovel foi alterada (sofreu uma evolução), e foram criados dois 
métodos.
2. Os métodos entradaDados e imprimir passaram a realizar as ações de 
atribuições e de exibição dos dados armazenados, respectivamente.
3. Para cada objeto Automovel criado, os métodos são executados, mas a 
entrada de dados e a exibição ocorrem separadamente para cada objeto, uma 
vez que devemos sempre identificar o objeto que realizará a ação.
4. Os métodos foram reaproveitados por todos os objetos da aplicação, mas 
eles também estão disponíveis para qualquer outro objeto em qualquer outra 
aplicação que crie objetos da classe Automovel criada.
56
5. O objeto Scanner sc foi definido dentro do método de entrada de dados, 
porque ele não representa uma característica do objeto Automovel; esse objeto 
é apenas auxiliar para a realização da ação do método.
Um outro ponto importante é a evolução das classes: uma vez que elas são bibliotecas 
disponíveis para as aplicações, essas classes podem ser utilizadas em várias aplicações 
diferentes. É normal que determinadas aplicações tenham algumas exigências a mais 
do que outras; dessa forma, as classes na programação orientada a objetos podem 
sofrer evoluções, mas isso não quer dizer que elas passarão a atender a apenas uma 
aplicação. Elas devem evoluir mantendo a compatibilidade com as aplicações anteriores. 
Essa forma de evolução permite que cada classe criada possa ser utilizada em diversas 
aplicações distintas, daí a ideia de biblioteca de classes.
Objetos
Objetos na programação orientada a objetos representam os objetos reais dentro do 
sistema de computação. Como nos exemplos anteriores, criamos cinco diferentes 
objetos, e cada um tem características diferentes, cada um deles pode representar um 
automóvel diferente. Os modelos, cores, placas e demais características são próprios de 
cada objeto, por isso eles se assemelham em suas características (atributos comuns), 
mas se diferenciam em suas propriedades. Cada objeto possui para cada atributo um 
valor diferente, ou seja, para o atributo placa, cada automóvel possui uma propriedade 
placa próprio, o que o torna diferente dos demais. Enquanto as classes são criadas e 
ficam à disposição das aplicações que irão usar objetos criados a partir delas, os objetos 
só existem na memória do computador; eles só existirão quando a aplicação estiver em 
execução e representarão objetos do contexto (minimundo) do sistema. Dizemos que os 
objetos “só existem em tempo de execução”. 
Os objetos realizam interações com o sistema realizando trocas de mensagens. Essas 
trocas de mensagens são realizadas pelos métodos, quando são utilizados. A troca de 
mensagens é a forma como a programação orientada a objetos realiza suas tarefas.
57
A classe Automovel então faz parte de uma biblioteca de classes criadas 
para serem utilizadas em aplicações, que irão criar objetos baseados nessas 
classes.
Exemplo:
// Aplicação 1:
public class AppAutomovel {
 public static void main(String[] args) {
 // TODO Auto-generated method stub
 // criação dos 5 objetos
 Automovel auto1 = new Automovel();
 Automovel auto2 = new Automovel();
 Automovel auto3 = new Automovel();
 Automovel auto4 = new Automovel();
 Automovel auto5 = new Automovel();
 }
}
// Aplicação 2:
public class AppAuto {
 public static void main(String[] args) {
 // TODO Auto-generated method stub
 // criação dos 5 objetos
 Automovel a1 = new Automovel();
 Automovel a2 = new Automovel();
 Automovel a3 = new Automovel();
 }
}
Notas:
1. Ambas as aplicações criam objetos Automovel da mesma classe.
2. A classe Automovel pode ser usada em diversas aplicações diferentes, sem 
a necessidade de que ela seja duplicada.
3. Em ambas as aplicações, os objetos Automovel criados serão capazes de 
representar objetos da vida real (contexto do sistema — minimundo).
Exemplo
58Resumindo:
• Classe: é um conjunto de códigos de programação que definem um modelo para 
a criação de um ou mais objetos. É uma estrutura capaz de representar diferentes 
objetos, com propriedades distintas, mas com as mesmas características. A classe é 
o modelo para a criação dos objetos. 
• Objeto: é uma entidade única capaz de reunir propriedades (atributos próprios de 
cada objeto) que difiram um objeto do outro. Pode efetuar ações para a realização 
de tarefas ao utilizar seus métodos. Os métodos de cada objeto realizam operações 
exclusivamente sobre as suas propriedades.
• Atributos: definem um conjunto de descritores do objeto de forma geral e de acordo 
com as características necessárias do objeto para o contexto do sistema.
• Métodos: representam as ações que podem ser executadas por cada objeto.
Métodos de acesso
São métodos especiais que são utilizados para evitar acesso direto aos seus atributos. 
Uma atribuição direta a um atributo não permite que possamos analisar se o valor a ser 
atribuído está de acordo com o realizado. 
MIDIATECA
Acesse a midiateca da Unidade 2 e veja o conteúdo sobre objetos indicado como 
material complementar.
59
Imagine atribuir um valor –5 para uma idade, ou deixar de definir um nome. 
Esses exemplos demonstram demonstram que não há como realizar uma 
análise durante uma atribuição direta.
Exemplos:
 auto1.hora = -3;
 auto1.placa = “AAA”;
 auto1.modelo = “”;
Notas:
1. Foi determinada uma hora inválida.
2. A placa não está completa.
3. O modelo não foi definido.
Exemplo
Nesses casos, as atribuições ocorreram sem que nenhum tipo de teste pudesse ser 
realizado a fim de evitar essas atribuições incorretas. Outro ponto importante que será 
visto mais adiante é o conceito de encapsulamento, em que os atributos deverão estar 
protegidos para que não possam ser acessados indiscriminadamente pelas aplicações. 
Esse conceito é responsável por proteger os atributos de um objeto, dando mais segurança 
para que eles não sejam alterados diretamente pela aplicação.
o Métodos setters
São métodos especiais responsáveis por realizar a atribuição e o armazenamento na 
memória de uma propriedade do objeto. Esses métodos recebem como parâmetro o 
valor a ser atribuído e realizam uma análise para identificar se o valor é válido. De acordo 
com a boa prática em programação Java, esses métodos se iniciam pela palavra set, 
seguida pelo nome do atributo com letra inicial maiúscula, uma vez que será a segunda 
palavra do identificador.
60
Devem ser públicos 
(public), para que 
possam ser usados 
em qualquer 
aplicação.
São sempre do tipo 
void, porque nunca 
retornam nada.
Possuem sempre 
um parâmetro do 
mesmo tipo do 
atributo que 
realizará a 
atribuição.
Devem realizar 
a atribuição do 
conteúdo do 
parâmetro da 
propriedade 
correspondente 
do objeto.
Exemplos:
 public void setModelo(String m) {
 modelo = m;
 }
 public void setCor(String c) {
 cor = c;
 }
 public void setPlaca(String p) {
 placa = p;
 }
 public void setHora(int h) {
 hora = h;
 }
 public void setMinuto(int m) {
 minuto = m;
 }
 public void setDia(int d) {
 dia = d;
 }
 public void setMes(int m) {
 mes = m;
 }
 public void setAno(int a) {
 ano = a;
 }
Exemplo
61
Notas:
1. Para cada atributo, foi criado um método setter.
2. Todos os métodos são públicos (public).
3. Todos os métodos são do tipo void, uma vez que não realizam retorno de 
dados.
4. Os parâmetros são do mesmo tipo do atributo.
5. Realizam a atribuição do valor do parâmetro da propriedade do objeto.
6. Os identificadores dos parâmetros puderam ser usados em diferentes 
métodos, mesmo sendo de diferentes tipos, porque eles somente são válidos 
dentro de seus respectivos métodos.
Você ainda pode incluir testes para analisar se os valores estão de acordo com o esperado:
 public void setModelo(String m) {
 if(!m.isEmpty()) {
 modelo = m;
 } 
 else {
 System.out.println(“valor inválido, não foi atribuído”);
 }
 }
 public void setPlaca(String p) {
 if(p.length()!=7) {
 placa = p;
 } 
 else {
 System.out.println(“valor inválido, não foi atribuído”);
 }
 }
 public void setHora(int h) {
 if (h >= 0 && h <= 24){
 hora = h;
 } 
Exemplo
62
 else {
 System.out.println(“valor inválido, não foi atribuído”);
 }
 } 
Notas:
1. O modelo só será atribuído se o texto passado como parâmetro não estiver 
vazio.
2. A placa só será atribuída se o texto passado como parâmetro tiver exatamente 
sete caracteres.
3. A hora só será atribuída se o valor da hora passado como parâmetro estiver 
entre 0 e 24.
o Métodos getters
São métodos especiais responsáveis por recuperar valores atribuídos às propriedades 
e que se encontram armazenados na memória de um objeto. Esses métodos nunca 
recebem parâmetro, uma vez que apenas devem retornar o valor atribuído à propriedade. 
De acordo com a boa prática em programação Java, esses métodos se iniciam pela 
palavra get, seguida pelo nome do atributo com letra inicial maiúscula, uma vez que será 
a segunda palavra do identificador.
Devem ser 
públicos (public) 
para que possam 
ser usados 
em qualquer 
aplicação.
Nunca são do 
tipo void, porque 
sempre retornam 
um valor, devendo 
ser do mesmo 
tipo do atributo 
que irá retornar.
Não possuem 
parâmetros, 
porque não 
recebem valores.
Devem apenas 
realizar o 
retorno do valor 
armazenado na 
propriedade do 
objeto.
63
Exemplos:
 public String getModelo() {
 return modelo;
 }
 public String getCor() {
 return cor;
 }
 public String getPlaca() {
 return placa;
 }
 public int getHora() {
 return hora;
 }
 public int getMinuto() {
 return minuto;
 }
 public int getDia() {
 return dia;
 }
 public int getMes() {
 return mes;
 }
 public int getAno() {
 return ano;
 }
Notas:
1. Para cada atributo, foi criado um método getter.
2. Todos os métodos são públicos.
3. Nenhum método é do tipo void, devendo ser definidos com o mesmo tipo do 
atributo que irá realizar o retorno.
4. Não recebem parâmetros.
5. Realizam o retorno do valor da propriedade do objeto armazenado na 
memória.
Exemplo
64
o Atualização da classe (evolução)
A classe Automovel foi atualizada, mas a aplicação usada anteriormente não precisará 
ser alterada, uma vez que a classe permanece compatível com as aplicações anteriores.
De forma a melhorar a classe e utilizar os métodos de acesso criados, a nova versão da 
classe (evolução) irá utilizar os métodos setters e getters nos métodos de entrada de 
dados e de exibição. 
Classe Automovel atualizada:
import java.util.Scanner;
public class Automovel {
 // Atributos
 String modelo, cor, placa;
 int hora, minuto, dia, mes, ano;
 // Métodos de acesso
 public String getModelo() {
 return modelo;
 }
 public void setModelo(String m) {
 if(!m.isEmpty() ) {
 modelo = m;
 } 
 else {
 System.out.println(“valor inválido, não foi atribuído”);
 }
 }
 public String getCor() {
 return cor;
 }
 public void setCor(String c) {
 cor = c;
 }
 public String getPlaca() {
 return placa;
 }
Exemplo
65
public void setPlaca(String p) {
 if(p.length()==7) {
 placa = p;
 } 
 else {
 System.out.println(“valor inválido, não foi atribuído”);
 }
 }
 public int getHora() {
 return hora;
 }
 public void setHora(int h) {
 if (h >= 0 && h <=24){
 hora = h;
 } 
 else {
 System.out.println(“valor inválido, não foi atribuído”);
 }
 }
 public int getMinuto() {
 return minuto;
 }
 public void setMinuto(int m) {
 minuto = m;
 }
 public int getDia() {
 return dia;
 }
 public void setDia(int d) {
 dia = d;
 }
 public int getMes() {
 return mes;
 }
 public void setMes(int m) {
 mes = m;
 }
 public int getAno() {
 return ano;
 }
66
public void setAno(int a) {
 ano = a;
 } 
 // demais métodos
 public void entradaDados ( ){
 Scanner sc = new Scanner(System.in);
 System.out.println(“Digite o Modelo :”);
 setModelo(sc.nextLine());
 System.out.println(“Digite a Cor :”);
 setCor(sc.nextLine());
 System.out.println(“Digite a Placa :”);
 setPlaca(sc.nextLine());System.out.println(“Digite a Hora :”);
 setHora(Integer.parseInt(sc.nextLine()));
 System.out.println(“Digite o Minuto :”);
 setMinuto(Integer.parseInt(sc.nextLine()));
 System.out.println(“Digite o Dia :”);
 setDia(Integer.parseInt(sc.nextLine()));
 System.out.println(“Digite o Mês :”);
 setMes(Integer.parseInt(sc.nextLine()));
 System.out.println(“Digite o Ano :”);
 setAno(Integer.parseInt(sc.nextLine()));
 }
 public void imprimir ( ){
 System.out.println(“Modelo : “ + getModelo());
 System.out.println(“Cor : “ + getCor());
 System.out.println(“Placa : “ + getPlaca());
 System.out.println(“Hora : “ + getHora());
 System.out.println(“Minuto : “ + getMinuto());
 System.out.println(“Dia : “ + getDia());
 System.out.println(“Mês : “ + getMes());
 System.out.println(“Ano : “ + getAno());
 }
}
Notas: 
1. A classe Automovel ganhou novos métodos, mas as aplicações usadas como 
exemplos em nosso estudo continuam compatíveis com a classe, apesar de 
sua evolução.
67
2. Não existe ordem para os métodos e atributos de uma classe; apenas por 
convenção, devemos definir os atributos no início, para facilitar a identificação.
3. Apenas por uma questão de organização, os métodos de acesso foram 
colocados no início, mas alguns desenvolvedores ainda os separam em um 
grupo para os setters e outro para os getters.
4. Os métodos entradaDados e imprimir foram alterados e passaram a utilizar 
os métodos de acesso, e não mais o acesso direto aos atributos da classe.
Você ainda poderá melhorar os métodos setters que estão sem os testes de verificação 
de dados para entender melhor como realizar 
essa tarefa.
68
Polimorfismo de sobrecarga de operadores 
e de métodos
Polimorfismo
O polimorfismo vem do grego e quer dizer “muitas formas”. Na programação orientada a 
objetos, o polimorfismo permite que tenhamos diferentes formas de realizar uma tarefa. 
Isso é importante quando precisamos que uma classe atenda a diferentes aplicações, 
mas que em algum momento realizam a mesma operação de formas diferentes.
Conforme definido por Deitel: 
[…] com o polimorfismo, podemos projetar e implementar sistemas que 
são facilmente extensíveis — novas classes podem ser adicionadas com 
pouca ou nenhuma modificação a partes gerais do programa, contanto 
que as novas classes façam parte da hierarquia de herança que o 
programa processa genericamente. (DEITEL, 2017, p. 312)
• Polimorfismo de sobrecarga de operadores
A sobrecarga de operadores é um conceito que ocorre quando utilizamos um mesmo 
operador para realizar diferentes tarefas em uma mesma linguagem. A análise sintática 
realizada pela linguagem é que irá definir qual ação deverá ser executada em cada 
momento, para um mesmo operador.
69
Podemos analisar o operador + (soma), que será analisado sintaticamente de 
acordo com o contexto em que o operador está empregado. Vamos analisar a 
situação a seguir:
public static void main(String[] args) {
 // TODO code application logic here
 int x=12;
 System.out.println(“Resultado: “ + (5.0 + (3 + 6) + ++ x));
}
“Resultado: “ + (5.0 + (3 + 6) + ++ x)
Ações:
• Uso do operador +: realizará uma operação de concatenação entre o texto a 
ser exibido (“Resultado:”) e o valor resultante da expressão aritmética: (7.0 
+ (2 + 5) + ++x).
• Uso do operador +: realizará uma operação de soma inteira, uma vez que 
os operandos são valores inteiros: (3 + 6) 9 // “Resultado: “ + (5.0 + (9) + 
++ x).
• Uso do operador +: realizará uma operação de soma real, uma vez que um 
dos operandos tem valor real: 5.0 + (9) 14.0 // “Resultado: “ + (14.0 + ++ x).
• Uso do operador ++: realizará a operação de pré-incremento sobre a variável 
x: ++x x = 13
// “Resultado: “ + (14.0 + 13).
• Uso do operador +: realizará uma operação de soma real, uma vez que um 
dos operandos tem valor real: 14.0 + (13) 27.0 // “Resultado: “ + (27.0).
Após a execução, será exibido:
Resultado: 27.0
Exemplo
70
Podemos observar que o mesmo operador foi usado de muitas formas 
diferentes, sendo a linguagem responsável por realizar a análise sintática e 
identificar a ação correta a ser realizada entre as diferentes formas possíveis.
Importante
Polimorfismo de sobrecarga de métodos
A sobrecarga de métodos é obtida ao se criar mais de um método com o mesmo nome 
em uma mesma classe; para isso, é importante que esses métodos possuam diferentes 
assinaturas de métodos. As assinaturas dos métodos estão ligadas aos parâmetros re-
cebidos pelos métodos; assim, dois ou mais métodos podem ser sobrecarregados em 
uma mesma classe, desde que não possuam a mesma assinatura.
A assinatura do método leva em conta apenas os tipos de dados e sua ordem, não levan-
do em consideração os identificadores dos parâmetros.
O método definido como int meuMetodo( int a, double b, String c ) possui como assi-
natura: int meuMetodo( int, double, String ).
Repare que apenas os tipos e a ordem dos tipos na área de parâmetros são levados em 
consideração.
Dessa forma, os métodos a seguir não atendem ao critério de sobrecarga, porque pos-
suem a mesma assinatura:
public void setX(String a )
 { 
 x = a;
 }
Assinatura: setX( String )
public void setX(String b )
 { 
 x = b;
 } 
Assinatura: setX( String )
71
Como os métodos possuem o mesmo nome e a mesma assinatura, eles não 
podem ficar na mesma classe.
Importante
Exemplos de polimorfismo de sobrecarga de métodos 
Você pode sobrecarregar o método setModelo, por exemplo:
O método setModelo recebe um parâmetro com o modelo do automóvel e o armazena 
no atributo:
 public void setModelo( String m )
 { 
 modelo = m;
 } 
O método setNome não recebe parâmetros e serve para limpar (eliminar) o valor armaze-
nado no atributo modelo:
 public void setModelo( )
 {
 modelo = “”;
 }
As assinaturas dos dois métodos são diferentes e, por isso, podem existir na mesma 
classe.
• void setNome( String )
• void setNome ( )
72
A linguagem Java resolve esse problema durante a execução da aplicação. O método 
correto será executado em função de uma avaliação que será realizada na sintaxe da 
chamada do método. Vamos analisar o seguinte exemplo:
Nota: 
Dessa forma, não importa quantos métodos com o mesmo nome existam em uma 
mesma classe. Quando isso ocorre, a chamada ao método que está sendo realizada 
irá avaliar e transferir a execução para o método sobrecarregado que possuir a mesma 
assinatura da chamada. 
public class AppAutomovel {
 public static void main(String[] args) {
 // TODO Auto-generated method stub
 // criação dos 5 objetos
 Automovel auto1 = new Automovel();
 auto1.setModelo(“Uno”);
 auto1.setModelo();
 }
}
No primeiro caso, a chamada ao 
método será avaliada de acordo com 
a sua assinatura, uma vez que existe 
mais de um método com o mesmo 
nome. Como temos um método que 
possui uma assinatura recebendo 
um String, essa chamada executará o 
método:
auto1.setModelo(“Uno”);
No segundo caso, a chamada ao mé-
todo não possui parâmetros, e isso 
fará com que o método sem parâme-
tros seja executado:
auto1.setModelo();
73
Exemplos de polimorfismo de sobrecarga de métodos com a mesma 
quantidade de parâmetros, mas com tipos diferentes:
Exemplo
public double calcQuadrado(double n) {
 return n * n;
 }
Assinatura: calcQuadrado( double )
public double calcQuadrado(int n) {
 return (double) n * n;
 }
Assinatura: calcQuadrado( int )
Métodos de mesmo nome em uma mesma classe (sobrecarga) podem receber diferen-
tes mensagens (assinaturas) e responder à chamada de diferentes formas.
Os exemplos a seguir podem pertencer à mesma classe, uma vez que, apesar 
de todos terem a mesma quantidade de parâmetros, as suas assinaturas são 
diferentes:
Exemplo
Métodos sobrecarregados:
int meuMetodo(int a, double b, String c) 
{ }
int meuMetodo(double b, String c, int a) 
{ }
int meuMetodo(String c, int a, double b) 
{ }
int meuMetodo(String c, double b, int a) 
{ }
Chamada na aplicação:
obj.meuMetodo(10, 2.5, “texto”);
 
obj.meuMetodo(2.5, “texto”,10);
 
obj.meuMetodo(“texto”, 10, 2.5);
 
obj.meuMetodo(“texto”, 2.5, 10);
74
O uso do polimorfismo de sobrecarga de métodos está associado à evolução das clas-
ses. Imagine que você tem uma classe de acesso aos sistemas, com identificação do 
usuário, e esse método possui a seguinte assinatura:
public void nivelAcesso ( String nome, String senha ){ }
Vários sistemas já em funcionamento usam esse método para realizar o login dos usuá-
rios, mas um novo cliente precisa que, além do nome de login e da senha, seja verificado 
um código gerado por um token. Você não precisa criar uma nova classe, basta evoluir 
essa classe implementando uma nova forma de acesso:
public void nivelAcesso ( String nome, String senha, int token ){ }
A classe agora pode atender o seu novo cliente e ainda se mantém compatível 
com as aplicações dos antigos clientes. 
Importante
MIDIATECA
Acesse a midiateca da Unidade 2 e veja a aplicação do conceito de polimorfismo, 
por meio de um estudo de caso, indicado como material complementar. 
75
Métodos construtores e sobrecarga de mé-
todos construtores
Métodos construtores
São usados para controlar a criação (instanciação) do objeto e só executam nesse 
momento. Após a criação do objeto, esses métodos não podem mais ser usados. São 
responsáveis pelo controle durante a construção do objeto na memória. Podem ser 
usados para definir valores para os atributos e/ou tarefas que devam ser realizados para 
que o objeto seja criado com algumas características.
São sempre públicos (public).
Não podem retornar valores, por isso são sem tipo.
Devem obrigatoriamente possuir o mesmo nome da classe e 
podem receber valores como parâmetros para a realização de 
atribuição(ões) inicial(is) das propriedades do objeto.
Executam apenas durante o processo de criação do objeto (ins-
tanciação da classe), não podendo ser executados novamente 
para o objeto já criado.
76
Exemplo:
 public Automovel(String mo, String co, String pl, int ho,
 int mi, int di, int me, int an) {
 setModelo(mo);
 setCor(co);
 setPlaca(pl);
 setHora(ho);
 setMinuto(mi);
 setDia(di);
 setMes(me);
 setAno(an);
 }
Uso:
Automovel a1 = new Automovel( “Uno”, “Verde”, “RIO1A00”, 10, 23, 23, 06, 2019 );
Exemplo
O uso desse método permite que possamos criar um objeto automóvel já com todos os 
valores atribuídos; isso é importante quando estamos trabalhando com bases de dados. 
Como o objeto a1 já recebeu os valores para serem atribuídos às suas propriedades, o 
objeto não precisará da entrada de dados ou outra forma de atribuição.
 
Por outro lado, as aplicações anteriores não irão mais funcionar com a classe Automovel. 
Isso ocorre porque a forma antiga de instanciação deixou de ser válida.
Automovel a1 = new Automovel( );
Quando em Java criamos uma classe sem a definição de um método construtor, o 
processo de compilação disponibiliza um método construtor vazio: Automovel a1 = new 
Automovel( );
Porém, quando criamos algum método construtor, isso não acontece. Passa a ser uma 
questão de segurança: como o método construtor controla a criação do objeto, só podem 
ser criados objetos utilizando construtores existentes na classe. 
77
Essa é uma medida de segurança, uma vez que não será permitido que sejam 
criados objetos de qualquer forma, apenas obedecendo aos construtores 
disponíveis.
Importante
Para assegurarmos que a classe Automovel se manterá compatível com as aplicações 
anteriores, devemos recorrer ao polimorfismo de sobrecarga de métodos em nossos 
métodos construtores. 
Sobrecarga de métodos construtores
Métodos construtores podem ser sobrecarregados e seguem a mesma regra da 
sobrecarga de métodos: os parâmetros são verificados não de acordo com o identificador, 
mas sim pela sequência dos tipos (assinatura).
Para mantermos a compatibilidade de nosso Automovel com a inclusão do método 
construtor que recebe todos os valores para atribuição nas propriedades do objeto, 
devemos criar também um construtor vazio sobrecarregando os métodos construtores:
public Automovel() { 
 }
 public Automovel(String mo, String co, String pl, int ho,
 public int mi, int di, int me, int an) {
 setModelo(mo);
 setCor(co);
 setPlaca(pl);
 setHora(ho);
 setMinuto(mi);
 setDia(di);
 setMes(me);
 setAno(an);
 }
78
A instanciação ou criação de um objeto segue a seguinte sintaxe:
Podemos, então, evoluir a classe Automovel incluindo alguns métodos construtores, mas 
lembre-se de que não poderá haver métodos com o mesmo nome, construtores ou não, 
e com a mesma assinatura.
Incluir na classe Automovel:
// métodos construtores
public Automovel() { } // construtor vazio para a classe
public Automovel( String pl) { // só a placa
 setPlaca(pl);
}
public Automovel( String pl, int ho, int mi) { // poucos atributos
 setPlaca(pl);
 setHora(ho);
 setMinuto(mi);
}
public Automovel(String pl, int ho, int mi, int di, int me, int an) {// alguns atributos
 setPlaca(pl);
 setHora(ho);
 setMinuto(mi);
 setDia(di);
 setMes(me);
 setAno(an);
}
public Automovel(String mo, String co, String pl, int ho,
 int mi, int di, int me, int an) { // todos os atributos
 setModelo(mo);
 setCor(co);
 setPlaca(pl);
 setHora(ho);
 setMinuto(mi);
Classe objeto = new Construtor();
Automovel auto2 = new Automovel();
Lembre-se de que o método construtor 
possui o mesmo nome da classe.
79
 setDia(di);
 setMes(me);
 setAno(an);
}
Lembre-se de alterar a aplicação AppAutomovel e criar alguns objetos utilizando 
os novos construtores disponibilizados. Dizemos que os objetos estão sendo 
criados com diferentes métodos construtores.
Importante
MIDIATECA
Acesse a midiateca da Unidade 2 e veja o conteúdo sobre construtores indicado 
como material complementar.
80
NA PRÁTICA
A programação orientada a objetos procura trazer para o ambiente computa-
cional objetos existentes no mundo real. Ao analisar os conceitos aqui com-
preendidos, observamos que qualquer objeto do mundo real pode ter a sua 
representação computacional, mas devemos ficar atentos às características 
importantes para o contexto do sistema. Vamos analisar um objeto a nossa 
volta e pensar em quais seriam as características importantes dele para um 
sistema computacional. Vamos, então, analisar o mouse. Suas características 
para um determinado sistema poderiam ser: marca (texto), modelo (texto), cor 
(texto), peso (real), número de botões (inteiro) e tipo de conexão (texto), poden-
do ser bluetooth, wireless ou fio. Agora é sua vez de analisar outros objetos e 
determinar as suas características para um sistema computacional.
81
Resumo da Unidade 2
Nesta unidade, você conheceu os conceitos de classe e objeto e aprendeu a diferenciá-
los. Você também aprendeu que uma classe é composta de membros e que os 
membros de uma classe são os atributos e os métodos. Além disso, também aprendeu 
as características de cada um dos membros de uma classe. Abordamos o conceito de 
polimorfismo e como ele pode ser aplicado a operadores e métodos na programação 
orientada a objetos. Por final, conhecemos os métodos construtores e suas características, 
além de compreendermos que, por se tratar de métodos, eles também podem ser 
sobrecarregados.
CONCEITO
Nesta unidade, conhecemos os conceitos de classes e objetos e suas carac-
terísticas. Vimos que uma classe é composta somente de atributos e méto-
dos, que são responsáveis, respectivamente, pela descrição do objeto e pelas 
ações (tarefas) que o objeto pode executar. Conhecemos também o conceito 
de polimorfismo aplicado à sobrecarga de operadores e à sobrecarga de mé-
todos. Entendemos como ocorre a sobrecarga de operadores e aprendemos 
a utilizar na prática a sobrecarga de métodos. Ainda exploramos o conceito 
de métodos construtores, suas características e como utilizá-los na prática.
82
Referências 
DEITEL, P. Java: como programar. 10. ed. São Paulo: Pearson Education do Brasil, 2017. 
p. 312. Biblioteca Virtual.
MANZANO, J. A. N. G.; COSTA JUNIOR, R. A. Java 7: programação de computadores:

Outros materiais