Buscar

Programação Orientada a Objetos e Estrutura de Dados_Ebook completo_SER_Versão Digital_V3

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

Program
ação Orientada a Objetos e Estrutura de Dados 
Fábio da Silva Souza
Rolfi Cintas Gomes Luz 
Organizador:
Adilson da Silva
Fábio da Silva Souza
Rolfi Cintas Gomes Luz 
Organizador:
Adilson da Silva
GRUPO SER EDUCACIONAL
PROGRAMAÇÃO 
ORIENTADA 
A OBJETOS E 
ESTRUTURA DE 
DADOS 
PROGRAMAÇÃO 
ORIENTADA 
A OBJETOS E 
ESTRUTURA DE 
DADOS 
SER_Capa e Contra-Programação Orientada a Objetos e Estrutura de Dados.indd 1,3SER_Capa e Contra-Programação Orientada a Objetos e Estrutura de Dados.indd 1,3 27/01/2023 12:10:3327/01/2023 12:10:33
Programação 
Orientada a Objetos 
e Estrutura de Dados
© by Ser Educacional
Todos os direitos reservados. Nenhuma parte desta publicação poderá ser 
reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, 
eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro 
tipo de sistema de armazenamento e transmissão de informação, sem prévia 
autorização, por escrito, do Grupo Ser Educacional.
Imagens e Ícones: ©Shutterstock, ©Freepik, ©Unsplash.
Diretor de EAD: Enzo Moreira.
Gerente de design instrucional: Paulo Kazuo Kato.
Coordenadora de projetos EAD: Jennifer dos Santos Sousa.
Equipe de Designers Instrucionais: Gabriela Falcão; José Carlos Mello; Lara 
Salviano; Leide Rúbia; Márcia Gouveia; Mariana Fernandes; Mônica Oliveira 
e Talita Bruto.
Equipe de Revisores: Camila Taís da Silva; Isis de Paula Oliveira; José Felipe 
Soares; Nomager Fabiolo Nunes.
Equipe de Designers gráficos: Bruna Helena Ferreira; Danielle Almeida; 
Jonas Fragoso; Lucas Amaral, Sabrina Guimarães, Sérgio Ramos e Rafael 
Carvalho.
Ilustrador: João Henrique Martins.
SOUZA, Fábio da Silva. / LUZ, Rolfi Cintas Gomes.
Organizador: SILVA, Adilson.
Programação Orientada a Objetos e Estrutura de Dados:
Recife: Digital Pages e Grupo Ser Educacional - 2022.
187 p.: pdf
ISBN: 978-65-81507-81-7
1. Programação 2. Sistemas 3. Objetos.
Grupo Ser Educacional
Rua Treze de Maio, 254 - Santo Amaro
CEP: 50100-160, Recife - PE
PABX: (81) 3413-4611
E-mail: sereducacional@sereducacional.com
Iconografia
Estes ícones irão aparecer ao longo de sua leitura:
ACESSE
Links que 
complementam o 
contéudo.
OBJETIVO
Descrição do conteúdo 
abordado.
IMPORTANTE
Informações importantes 
que merecem atenção.
OBSERVAÇÃO
Nota sobre uma 
informação.
PALAVRAS DO 
PROFESSOR/AUTOR
Nota pessoal e particular 
do autor.
PODCAST
Recomendação de 
podcasts.
REFLITA
Convite a reflexão sobre 
um determinado texto.
RESUMINDO
Um resumo sobre o que 
foi visto no conteúdo.
SAIBA MAIS
Informações extras sobre 
o conteúdo.
SINTETIZANDO
Uma síntese sobre o 
conteúdo estudado.
VOCÊ SABIA?
Informações 
complementares.
ASSISTA
Recomendação de vídeos 
e videoaulas.
ATENÇÃO
Informações importantes 
que merecem maior 
atenção.
CURIOSIDADES
Informações 
interessantes e 
relevantes.
CONTEXTUALIZANDO
Contextualização sobre o 
tema abordado.
DEFINIÇÃO
Definição sobre o tema 
abordado.
DICA
Dicas interessantes sobre 
o tema abordado.
EXEMPLIFICANDO
Exemplos e explicações 
para melhor absorção do 
tema.
EXEMPLO
Exemplos sobre o tema 
abordado.
FIQUE DE OLHO
Informações que 
merecem relevância.
SUMÁRIO
UNIDADE 1
Objetivos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 11
Introdução � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 12
Introdução à orientação a objetos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 13
Objetivos e vantagens da poo � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 14
Modelos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �14
Bibliotecas de operações � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �16
Tipos de Dados Primitivos (Representação) � � � � � � � � � � � � � � � � � � � � � � � �16
A classe String � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 20
Variáveis � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 23
Operadores lógicos relacionais e comparadores em java � � � � � � � � � 23
Executando o java � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 30
Inserido Classes � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �33
Operadores lógicos e negação em java � � � � � � � � � � � � � � � � � � � � � � � � � � 34
Estrutura de decisão em java � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 38
Estrutura de repetição em java � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �42
Terminologia da programação orientada a objetos � � � � � � � � � � � � � 44
Instanciando um objeto � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �47
UNIDADE 2
Objetivos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 51
Introdução � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 52
Classes, pacotes, objetos, atributos, métodos, construtores, 
palavra-chave this e sobrecarga � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 53
Classes � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 53
Pacotes � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 55
Objetos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 57
Atributos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 58
Métodos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 60
Construtores � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 63
Palavra-chave This � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 67
Sobrecarga � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 68
Instanciação e referências de objetos � � � � � � � � � � � � � � � � � � � � � � � � � � �70
Envio de mensagens � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 72
Ciclo de vida de um objeto � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 73
Abstração e encapsulamento � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �76
Abstração � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 76
Encapsulamento � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 78
Estruturas compostas homogêneas � � � � � � � � � � � � � � � � � � � � � � � � � � � � 83
Vetor � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 83
Vetor orientado a objetos � � � � � � � � � � � � � � � � � � � � � � � � � � � 89
Matriz � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 92
Estruturas comportamentais heterogêneas � � � � � � � � � � � � � � � � � � � 94
Instanciação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 94
Atribuição � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 95
Tipos abstratos de dados � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 97
Tipos de armazenamento � � � � � � � � � � � � � � � � � �� � � � � � � � � 98
Coleções � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 99
UNIDADE 3
Objetivos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 103
Introdução � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 104
Herança � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �105
Utilização de herança � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 105
Palavra-chave super � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 109
Criação e uso de hierarquia de classes � � � � � � � � � � � � � � � � � � � � � � � � � � 111
Classes e subclasses � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 113
Classes abstratas e interfaces � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 113
Classes abstratas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �114
Interfaces � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 117
Relacionamento entre classes � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 121
Associação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 121
Composição � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 127
Agregação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �133
Polimorfismo � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 134
Introdução ao polimorfismo � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 134
Polimorfismo na prática � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �135
Ligação dinâmica (dynamic binding) � � � � � � � � � � � � � � � � � � � � � � � � � � � 138
Tratamento de exeções � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 140
Evitando e capturando exceções � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 140
UNIDADE 4
Objetivos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 143
Introdução � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 144
Algoritmos recursivos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �145
Técnicas de ordenação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �146
Método Bubble Sort � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 147
Método Insertion Sort � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 149
Método Selection Sort � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 150
Estruturas Lineares � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 151
Listas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 151
Lista Estática � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 152
Lista Ligada � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 152
Lista Duplamente Ligada � � � � � � � � � � � � � � � � � � � � � � � � � � � 156
Código Lista Duplamente Ligada � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 158
Lista Collection � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 158
Pilhas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �160
Código da Pilha de Alocação Estática � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 162
Filas – implementações � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 163
Collection Class Queue – Fila dinâmica � � � � � � � � � � � � � � � � � � � � � � � � � � � � 168
Árvores e suas generalizações � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �170
Terminologia da estrutura Árvore � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 174
Nó � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 174
Node – Implementação dinâmica � � � � � � � � � � � � � � � � � � 176
Vetor – Implementação sequencial � � � � � � � � � � � � � � � � � 177
Árvores binárias � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 178
Tipos de Árvores binárias � � � � � � � � � � � � � � � � � � � � � � � � � � � 179
Árvores de busca � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 182
Árvore binária e de busca � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 183
Referências � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 185
Apresentação
Olá, aluno(a). Seja bem-vindo(a) à disciplina!
Nessa disciplina será abordada a Programação Orientada a 
Objetos (POO), utilizando a linguagem de programação JAVA. Tam-
bém serão apresentados conceitos de POO e conceitos e estruturas 
de dados usadas para a manipulação e armazenamento de dados. 
Dentre essas estruturas apresentadas, vamos encontrar os 
vetores, as matrizes e as árvores. Para essas estruturas, serão apre-
sentadas formas de ordenação de dados. 
Antes de começarmos, lembre-se que muitas dessas estru-
turas possuem formatos diferenciados que contribuem em diversas 
áreas, como redes, hardware, banco de dados, Sistemas de Infor-
mação e negócios, entre outros.
No decorrer do conteúdo, todos os conceitos de orientação a 
objetos serão abordados de forma simplificada para que você possa 
absorver facilmente os temas abordados no material.
Dito isto, desejo a você boa leitura e bons estudos!
Autoria
Fábio da Silva Souza 
O professor Fábio da Silva Souza é tecnólogo em Gestão da Tecno-
logia da Informação pela Faculdade Tecnológica de Guaratinguetá 
(Fatec). Formou-se no ano de 2017 e, desde então, atua como pro-
gramador e analista de sistemas.
Currículo Lattes
http://lattes.cnpq.br/0316083306850058
Rolfi Cintas Gomes Luz 
O professor Rolfi Cintas Gomes Luz é mestre (2012) em Ensino de 
Ciências pela Universidade Cruzeiro do Sul. É graduado (2008) em 
Ciência da Computação pela mesma instituição. Atua há duas déca-
das na área da computação como analista de sistemas, passando por 
empresas nacionais e multinacionais, e possui uma década atuando 
no ensino superior.
Currículo Lattes
http://lattes.cnpq.br/0778971556248045
Organizador
Adilson da Silva
O professor Adilson da Silva é formado em Ciência da Computação 
pela Universidade Católica de Pernambuco (1995), possui especiali-
zação em Tecnologia da Informação pela UFPE (Universidade Fede-
ral de Pernambuco) e MBA em Gestão de Pessoas por Competências 
pela faculdade Santa Maria. Também tem especialização em Meto-
dologias Ativas da Educação e Mestrado em Engenharia de Software 
pelo C.E.R.S.A.R., além de possuir certificação Scrum Master. 
Atua na área de informática há mais de trinta anos, como Analista de 
Sistemas e como professor de disciplinas como Algoritmo, Banco de 
dados, Gestão de projetos, Gestão ágil e Segurança da Informação. 
Currículo Lattes
http://lattes.cnpq.br/7221002795193400
UN
ID
AD
E
1
Objetivos
 ◼ Apresentar as características de Programação Orientada a Objetos.
 ◼ Introduzir a linguagem Java para Programação Orientada a Objetos.
 ◼ Entender os conceitos da Programação Orientada a Objetos.◼ Compreender como surgiu o paradigma de Programação 
Orientada a Objetos.
12
Introdução
Caro(a) aluno(a), como vai?
A partir de agora veremos a Programação Orientada a Obje-
tos. Dessa forma, falaremos sobre os objetivos esperados e quais as 
vantagens de utilizá-la. Além disso, apresentaremos os principais 
conceitos de orientação a objetos e a algumas das suas implemen-
tações em JAVA. 
Veremos também como podemos executar os programas em 
JAVA usando o Netbean. Assim, discutiremos a aplicação de alguns 
conceitos de lógica de programação em Java, como o uso de opera-
dores (Lógicos e aritméticos). Trataremos também das estruturas 
condicionais e das estruturas de repetição que podem ser usadas. 
Por fim, apresentaremos algumas terminologias usadas no para-
digma de orientação a Objetos.
Pensando nisso, até o final desse material, discutiremos:
1. características da Programação Orientada a Objetos;
2. uso da Linguagem JAVA na ferramenta NetBeans;
3. uso de estruturas condicionais e de estruturas de repetição 
em JAVA;
4. conceitos de Programação Orientada a Objetos.
Destaco que a Programação Orientada a Objetos é o paradig-
ma de programação mais utilizado atualmente no desenvolvimento 
de sistemas, trazendo um aumento de produtividade com a utiliza-
ção de reuso de código. E, para que você possa se inserir no merca-
do, é necessário ter uma boa base nesse paradigma, e é o que essa 
disciplina lhe dará. 
Dito isto, vamos iniciar nossos estudos. 
13
Introdução à orientação a objetos
Caro(a) aluno(a), é notório que computadores estão presentes no 
cotidiano e servem para automatizar e agilizar a execução de tarefas 
simples ou complexas. Mas, um computador não é capaz de efetuar 
qualquer tarefa sem um software, pois é através dele que se proces-
sam as informações. 
Nos primórdios da computação, um programa de computador 
era escrito de maneira sequenciada, com suas funções uma abaixo da 
outra e seguindo esta sequência até o final. Dentro da sequência, o pro-
grama trabalhava diante de seleções que executavam uma sequência 
com base em condições (if ou else) verdadeiras (true) ou falsas (false) 
ou diante de repetições que executassem tal sequência enquanto a 
condição fosse verdadeira (iterações: for, foreach, do e while).
Em síntese, a Programação Orientada a Objetos (POO) con-
siste no desenvolvimento de sistemas computacionais utilizan-
do linguagens de programação que suportam orientação a objetos 
por meio de classes e seus atributos e métodos, introduzindo uma 
abordagem na qual o(a) programador(a) visualiza o programa em 
execução como uma coleção de objetos cooperantes que se comuni-
cam por mensagens. Em outras palavras, podemos dizer que a POO 
procura atender aos requisitos do(a) cliente através de funções 
encontradas dentro dos objetos criados.
É importante destacarmos que cada um dos objetos é ins-
tância de uma classe e todas as classes formam uma hierarquia de 
classes unidas via relacionamento de herança, como apontado na 
página 4 do livro Introdução ao Paradigma de Orientação a Objetos, 
publicado em 1996 e escrito por Carlos Kamienski.
Uma das características da Programação Orientada a Objetos, 
como o próprio nome sugere, é o uso de objetos, em vez de funções 
ou procedimentos, para a construção do programa. Eles se comuni-
cam mediante mensagens e cada objeto é uma instância de classe, 
possibilitando que o programa seja escrito sem a necessidade de se 
seguir uma sequência e que um método seja executado em qualquer 
parte da classe, desde que no padrão aceito pela linguagem.
14
Objetivos e vantagens da poo
A Programação Orientada a Objetos tem por objetivo melhorar a 
produtividade dos(as) programadores(as) no desenvolvimento de 
sistemas, possibilitando a construção de sistemas robustos com 
menos linhas de código, de modo que trechos de códigos sejam rea-
proveitados. A POO é vantajosa porque:
 • possibilita a reutilização de código, sendo essa sua maior van-
tagem ao permitir que um(a) programador(a) escreva menos 
linhas, já que um trecho de código pode ser reutilizado inú-
meras vezes em qualquer parte do sistema;
 • possibilita que a aplicação seja escalável, fazendo com que ela 
cresça de acordo com as necessidades que surgem no decorrer 
do desenvolvimento ou mesmo diante da necessidade de im-
plantar novas funcionalidades;
 • além disso, a manutenção do sistema é feita de forma simpli-
ficada, rápida e eficiente.
Modelos
Para programar utilizando a orientação a objetos, é necessário criar 
classes que, em muitos casos, são só modelos de entidades e, para 
que se possa representar dados a partir das classes, é necessária a 
criação de objetos e/ou instanciação destas classes.
Além disso, a criação de um objeto, ou sua instanciação, é ne-
cessária para que se possa ter a representação de dados e a manipu-
lação das informações e executar operações contidas na classe. 
No exemplo: “Livro livro = new Livro();”, a primeira parte antes do 
igual indica que se está referenciando na memória do sistema opera-
cional o objeto denominado “livro”, que tem o tipo Livro, e a segun-
da parte é a criação da instância através da palavra-chave “new”.
EXEMPLO
15
Já Na página 14 do livro Introdução à Programação Orienta-
da a Objetos usando JAVA, editado em 2011, o autor Rafael Santos 
afirma que:
as classes são estruturas das linguagens de 
programação orientadas a objetos para con-
ter, para determinado modelo, os dados que 
devem ser representados e as operações que 
devem ser efetuadas com estes dados (SAN-
TOS, 2011). 
Além disso, os dados contidos na classe são atributos do 
objeto e as classes são abstrações do mundo real no mundo vir-
tual. Na programação, tais classes também são chamadas de 
modelos (models), representações de objetos, pessoas, tarefas 
e processos, usados no dia a dia, não necessariamente diante de 
um computador. 
Para melhor exemplificar isso, o Diagrama 1 representa um 
modelo de abastecimento num posto de combustível.
Diagrama 1 - modelo de abastecimento em posto de combustível
 Fonte: editorial Digital Pages (2020).
16
O modelo anterior traduz o processo num posto de combustí-
vel, onde o frentista ou caixa recolhe dados, como tipo de com-
bustível, valor total pago, quantidade de litros, preço por litro 
e tipo de pagamento. Esses dados possuem comportamentos 
usados, por exemplo, para fechamento de caixa, determinar 
qual combustível é o mais vendido, se é necessária a compra de 
mais combustível, dentre outros trâmites relativos a um posto 
de combustível.
Bibliotecas de operações
Caro(a) aluno(a), é preciso que você saiba que nem todo mode-
lo possui dados e operações, visto que eles podem incluir ape-
nas dados ou operações. Lembre-se que modelos que contêm 
só dados são pouco usados, pois não faz sentido ter um modelo 
cujas informações não são manipuláveis. Já modelos que pos-
suem só operações são mais encontrados, sendo denominados 
bibliotecas de operações, criadas para manipulação de dados 
de outras classes.
Tipos de Dados Primitivos (Representação)
Em Sistemas de Informação, muito se fala sobre dados, informa-
ção e conhecimento. Nesse cenário, a computação, de forma geral, 
refere-se à informação e ao conhecimento. Previsão ou tendências, 
por sua vez, são tratadas na Inteligência de Negócios, ou BI (Busi-
ness Intelligence). Já os dados podem ser um conjunto de bits, uma 
palavra, uma letra, um número, ou podem assumir algum valor sem 
significado aparente.
DICA
17
EXEMPLO
EXEMPLO
EXEMPLO
Por exemplo, o abacate, R$ 5,00, 1 kg.
Além disso, a informação é a união de diversos dados que 
possuem sentido ou significado. 
Por exemplo: “hoje, 1 kg do abacate está custando R$ 5,00 reais”.
Já o conhecimento é a relação dos dados e das informações, 
constituindo uma ação, aplicação ou saber em diversas áreas do co-
nhecimento, geralmente empregada quando se cruzam valores.
Por exemplo: “há dez anos, no mês de dezembro, 1 kg do abacate 
custava R$ 5,00 reais”.
Por fim, os dados,em Estrutura de Dados, são trabalhados 
como forma primordial de computar ou solucionar problemas do 
mundo real, visando atender às regras de negócio, ou seja, às regras 
do mundo real que devem ser incorporadas no mundo computacio-
nal ou atividades empresariais que utilizam esses dados como ca-
deia de valor do negócio.
É importante destacarmos ainda que a escolha do tipo de dado 
em Estrutura de Dados leva em consideração alguns aspectos, como:
18
 • identificador - nome pelo qual a estrutura será identificada. 
Geralmente, possui ligação com sua aplicação no mundo real.
 • tipo de armazenamento - define se serão armazenadas le-
tras, números, valores lógicos etc.
 • velocidade em inserir dados - a velocidade é medida, geral-
mente em milissegundos, e pode variar dependendo do tipo de 
estrutura escolhida.
 • algoritmo de ordenação e localização de dados - existem 
muitos algoritmos específicos para cada tipo de estrutura que 
dependem muito da sua aplicação. 
Às vezes, possuem estruturas que demoram mais para or-
denar, mas que, por outro lado, são mais velozes para localizar os 
dados. Assim, através do tipo de aplicação de dados, verifica-se qual 
o melhor formato de dados para tanto. Nesse contexto, surgem os 
tipos de dados primitivos, que orientam ao programador a estrutura 
mais adequada para aplicação na regra de negócio.
É importante destacarmos que, em Java, há poucos tipos de 
dados primitivos, também conhecidos como nativos ou básicos. Eles 
são parte da linguagem, portanto, suas nomenclaturas são pala-
vras-chaves e não são instâncias de outras classes. Assim, cada tipo 
tem limitações, ocupando valores específicos em memória. 
Para que você possa entender o que estamos tratando, abaixo, na 
Tabela 1, constam as especificações dos tipos primitivos em JAVA. Veja:
Tabela 1.- Tipos Primitivos em JAVA
boolean
byte
true ou false
Entre -128 e 127
O valor 
booleano
assume valores 
true ou false
Números 
inteiros de 8 
bits de precisão
8
8
true
108
Tipo
primitivo Valores Observações
Bits em
memória Exemplo
19
Fonte: editorial Digital Pages (2020).
Caro(a) aluno(a), é necessário que você saiba que, para o 
tipo char, cada número de 0 a 65535 é um dos caracteres na ta-
bela ASCII (American Standard Code for Information Interchange), 
sigla em inglês para Código Padrão Americano para o Intercâm-
bio de Informação. Para que você entenda o que estamos deta-
lhando, o código a seguir dá um melhor entendimento sobre o 
tipo char.
float
long
char
double
int
short
Entre 1.40239846e-46 e
3.40282347e+38
Entre
-9.223.372.036.854.775.808 e
+9.223.372.036.854.775.807
Entre 0 e 65535
Entre
4.94065645841246544e-324
e 1.7976931348623157e+308
Entre -2.147.483.648 e
+2.147.483.647
Entre -32768 e 32767
Pontos flutuantes
de precisão sim-
ples, usados para
representar valo-
res decimais
Números inteiros 
de 64 bits de 
precisão
Na teoria, char 
armazena
números inteiros 
de 16 bits de
 precisão, mas,
na prática, é utili-
zado para 
para qualquer
caractere 
alfanumérico
(char = character)
Pontos 
flutuantes de 
precisão dupla, 
usados para 
representar
valores decimais
Números inteiro 
de 32 bits de 
precisão
Números inteiros 
de 16 bits de 
precisão
32
64
16
64
32
16
34897.75
7234829
s
34897.75
1000
1000
20
EXEMPLO
public class ExemploCharASCII { 
public static void main(String args[]) { 
char caractereJ = 74;
char caractereA = 65; 
char caractereV = 86;
System.out.println(caractereJ + “” + caractereA + “” + caractereV + 
“” + caractereA ) ;
}
}
Como você deve ter percebido, no código há três atri-
butos do tipo char e cada um representa uma letra. Assim, 
para escrever a palavra JAVA utilizando char, é preciso usar 
aspas vazias para dizer ao Java que se está concatenando e não 
somando, pois, como char é inteiro, sem + “” + a linguagem 
entenderia que os valores estão somados em vez de concate-
nados. Assim, executando o código anterior, a saída no con-
sole seria “JAVA”.
A classe String
Em Java, para atribuir qualquer texto no lugar de um array de char 
(char []), usa-se a classe String. Isso porque, por ser uma classe, 
String não é um tipo primitivo, apesar de não precisar ser instancia-
da. De acordo com Santos (2011), embora não seja preciso declarar 
um array de char, o conceito de String é que a instância possui zero 
ou mais caracteres do tipo char, enfileirados em ordem de leitura (da 
esquerda para direita). Veja:
21
EXEMPLO
public class testePalavra {
 public static void main(String args[]) {
 //Usando array de char
 char [] tipoChar = {‘p’,’a’,’l’,’a’,’v’,’r’,’a’};
 //usando classe String sem instanciá-la String classeString = 
“Palavra”;
//usando a classe String, instanciando-a
 String classeString2 = new String (“Palavra”);
}
}
No exemplo a cima, usando char, é preciso criar um array e 
cada letra precisa ser passada por aspas simples, enquanto na classe 
String é possível passar diretamente entre aspas duplas ou por parâ-
metro entre aspas duplas ao instanciar a classe String. 
Perceba que, no código anterior, o mais comum é fazer 
“String nomeVariavel = “palavra”;” em vez de “String nomeVaria-
vel = new String(“palavra”);”. 
É importante destacarmos que o tamanho de uma String depende 
da quantidade de memória disponível no sistema, ou seja, ela consome 
poucos ou muitos bits de memória conforme o tamanho do texto.
Além do que detalhamos, é preciso que você saiba que a classe 
String tem métodos essenciais que auxiliam no desenvolvimento de 
trabalho com textos. Alguns dos métodos, e para que eles servem, são:
 • length - regressa à quantidade exata de caracteres con-
tidos em uma String. Este método, além de caracteres 
visíveis, também retorna espaços, quebras de linhas, 
22
tabulações etc. É importante destacarmos que o método 
lengh não aceita parâmetros.
 • charAt - volta ao caractere que está numa posição do texto. 
Para execução do método, é necessário que se passe um valor 
inteiro como argumento.
 • getChars - retrocede a caracteres partindo de uma posi-
ção inicial até outra. Exige que se passe por quatro parâ-
metros, posição inicial (srcBegin), posição final (srcEnd), 
destino (dest) e posição do início do destino (dstBegin). 
Para tanto, é preciso criar um array de char como destino 
passado como parâmetro.
 • replace - substitui caractere ou texto e possui como parâme-
tro dois argumentos. O primeiro é o caractere ou texto a ser 
substituído e o segundo, o caractere ou texto substituto.
 • toUpperCase - deixa todo o texto maiúsculo e não 
aceita parâmetros.
 • toLowerCase - deixa todo o texto minúsculo e não 
aceita parâmetros.
 • trim: remove espaços contidos no início e/ou no final 
de um texto, exceto entre duas palavras. Também não 
aceita parâmetros. 
A classe String é imutável, não sendo possível alterá-la após cria-
da. Por outro lado, uma variável da classe String também admite a 
junção de textos, denominada como concatenação. A concatenação 
é feita utilizando o operador de adição (+) que junta dois ou mais 
textos em um. Ela só é possível porque, na concatenação, é criado 
um novo objeto temporário da classe String, posteriormente asso-
ciado à referência da variável criada.
DICA
23
Variáveis
No algoritmo e na computação, temos as variáveis, que são definidas 
como espaço em memória que possui um identificador e pode alo-
car dados. Como nos tipos de dados primitivos que compõem a cadeia 
(inteiro, real e lógico), nas linguagens de programação, temos tipos 
primitivos mais específicos, em que cada linguagem possui seu tipo 
primitivo, porém, algumas linguagens possuem um padrão.
Para que você não tenha dúvidas, já lhe adianto que, nesta disci-
plina, será utilizada a linguagem Java nos exemplos e, nessa linguagem, 
para definir uma variável, usa-se o conceito de declaração de variável.
É importantedestacarmos que Java é uma linguagem de pro-
gramação simples, portável, gratuita, robusta e com bibliotecas para 
aplicações, além de ser possível executá-la em um terminal Unix ou 
MS-DOS. Por ser multiplataforma, é utilizada para desenvolvimen-
to de sistemas web, mobile ou desktop e possui frameworks fáceis de 
utilizar e também há integração fácil com o banco de dados.
Esta linguagem também é fortemente tipada, ou seja, ao de-
clarar atributos ou variáveis, declara-se também o tipo de dado (nu-
mérico, texto, booleano, entre outros). Grosso modo, diz-se que, 
para um campo do tipo primitivo int (numérico), não é possível 
atribuir um caractere não inteiro entre 0 e 9. Isso porque os tipos de 
dados primitivos são palavras-chaves reservadas pela linguagem de 
programação e não se pode utilizá-las como nome para uma variável.
Operadores lógicos relacionais 
e comparadores em java
Os fluxos de um programa são baseados em operadores lógicos e ló-
gicos relacionais. Eles servem para que, durante a execução de um 
trecho do código e segundo a condição, o programa faça algo ou, em 
uma iteração, ele execute aquilo até que a condição seja cumprida ou 
enquanto ela for válida. Dessa maneira, os operadores lógicos rela-
cionais em Java retornam o valor booleano true ou false e são listados 
a seguir, junto com seu uso para verificação.
24
 ◼ == (igual): se dois valores são iguais. Se o valor à esquerda e 
o valor à direita foram iguais, o resultado é true, do contrário 
é false.
 ◼ != ( ): se dois valores são diferentes. Se o valor à esquerda 
for diferente do valor à direita, o resultado é true, do con-
trário é false.
 ◼ > (maior): se um valor é maior que o outro. Se o valor à es-
querda for maior que o valor à direita, o resultado é true, do 
contrário é false.
 ◼ < (menor): se um valor é menor que o outro. Se o valor à es-
querda for menor que o valor à direita, o resultado é true, do 
contrário é false.
 ◼ >= (maior ou igual): se um valor é maior ou igual ao outro. 
Se o valor à esquerda for maior ou igual ao valor à direita, o 
resultado é true, do contrário é false.
 ◼ <= (menor ou igual): se um valor é menor ou igual ao outro. 
Se o valor à esquerda for menor ou igual ao valor à direita, o 
resultado é true, do contrário é false. 
É importante destacarmos que os operadores anteriores são uti-
lizados para comparar valores nativos numéricos, inclusive o tipo char:
 public class TesteOperadoresLogicos { 
 public static void main(String args[]) {
 int numeroComparado = 18;
 if (15 == numeroComparado) { 
 System.out.println(“os números são iguais”);
 } else {
EXEMPLO
25
 System.out.println(“os números são diferentes”);
 }
 If (21 != numeroComparado) { 
 System.out.println(“os números são diferentes”);
 } else {
 System.out.println(“os números são iguais”);
 }
 If (33 > numeroComparado) {
 System.out.println(“o número é maior que o número comparado”);
 } else {
 System.out.println(“o número é menor que o número comparado”);
 }
 if (19 < numeroComparado) {
 System.out.println(“o número é menor que o número comprado”);
 } else {
 System.out.println(“o número é menor que o número comprado”); 
 } 
 if ( 18 >= numeroComparado) {
 System.out.println(“o número é maior ou igual ao número comparado”);
 } else {
 System.out.println(“o número é menor que o número comparado”);
 }
26
EXEMPLO
 if (18 <= numeroComparado) {
 System.out.println(“o número é menor ou igual ao número comparado”);
 } else {
 System.out.println(“o número é maior que o número comparado”);
 }
 }
}
E, caso seja necessário comparar Strings ou objetos, se usa o 
método equals, como neste exemplo da classe String:
 public class ComparaPalavra {
 public static void main(String args[]) { String palavra1 = “Palavra”;
 String palavra2 = “Palavra”;
 If (palavra1.equals(palavra2)) { 
 System.out.println(“As palavras são iguais”);
 } else {
 System.out.println(“As palavras são diferentes”);
 }
 }
 }
27
EXEMPLO
Perceba que, no exemplo anterior, a palavra1 é igual à pala-
vra2, portanto, ao executar o código, é exibido no console o resulta-
do “As palavras são iguais”.
Ao utilizar o método equals da classe String, todos os caracteres da 
palavra precisam estar na mesma sequência, inclusive os espaça-
mentos. Isso porque o método também diferencia se o caractere é 
maiúsculo ou minúsculo. Então, “Arroz com Feijão” não é a mesma 
coisa que “Arroz coM feijão” ou “Arroz comFeijão”. Assim, para sa-
ber se uma String é igual a outra, sem distinguir caracteres maiús-
culos e minúsculos, é utilizado o equalsIgnoreCase.
É importante você saber que todas as classes possuem o mé-
todo equals (herdado da classe Object) e, para customizá-lo, é pre-
ciso sobrescrevê-lo utilizando a annotation @Override acima do 
método, veja:
public class Livro { 
private long id;
private String nomeAutor; 
private int anoLancamento; 
private String titulo;
public String getNomeAutor() { 
return nomeAutor;
}
DICA
28
public void setNomeAutor(String nomeAutor) { 
this.nomeAutor = nomeAutor;
}
public int getAnoLancamento() { 
return anoLancamento;
}
public void setAnoLancamento(int anoLancamento) { 
this.anoLancamento = anoLancamento;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) { 
this.titulo = titulo;
}
 
@Override
public boolean equals(Object obj) { 
if (this == obj)
return true; 
if (obj == null)
return false;
if (getClass() != obj.getClass()) 
return false;
Livro other = (Livro) obj;
29
if (anoLancamento != other.anoLancamento) 
return false;
if (nomeAutor == null) {
if (other.nomeAutor != null) 
return false;
} else if (!nomeAutor.equals(other.nomeAutor)) 
return false;
if (titulo == null) {
 if (other.titulo != null)
 return false;
} else if (!titulo.equals(other.titulo)) 
return false;
return true;
}
}
No exemplo acima, o método equals foi sobrescrito com a 
annotation @Override. No código, o objeto passado pelo parâmetro 
“(Object obj)” é do tipo Object e não do tipo Livro, isso acontece por-
que todas as classes herdam direta ou indiretamente a classe Object, 
sendo ela a base para todas as demais. Em seguida, como no código 
do exemplo, é feita a conversão explícita do objeto genérico para o 
tipo Livro (Livro other = (Livro) obj;).
Ele também confere cada atributo da classe Livro, com ex-
ceção do id, algo que foi feito de forma proposital, pois, se ele 
fosse verificado também, conforme a circunstância, haveria dois 
objetos Livros com o mesmo autor, mesmo título e mesmo ano de 
lançamento, mas com o id diferente, fazendo que o método equals 
retorne false.
30
Lembre-se que o id é utilizado para aplicações em banco de 
dados, logo, ao averiguar se um objeto já existe no banco, não se 
considera o id, pois assim é evitada a duplicidade de dados, já que os 
demais atributos seriam iguais. Não obstante, isso depende da regra 
de negócio.
Executando o java
Após a instalação do JDK e do Netbeans, abra o Netbeans. Clique em 
Arquivo e, logo em seguida, clique em Novo Projeto, e aparecerá a 
tela representada na Figura 1:
Figura 1 - Ambiente Netbeans: tela inicial de Novo Projeto
Fonte: editorial Digital Pages (2019).
Logo depois, na tela do Novo Projeto, clique em Java, Aplica-
ção Java e Próximo, e aparecerá a tela conforme a Figura 2:
31
Figura 2 - Ambiente Netbeans: criando Nova Aplicação do Projeto
Fonte: editorial Digital Pages (2019).
Nessa etapa, escreva o Nome do Projeto (todo exemplo e 
programa que serão desenvolvidos na disciplina será um Projeto 
Novo). A localização física padrão do projeto é na pasta Documentos\
NetBeansProjects do Usuário local. Deixe selecionadoCriar Classe 
Principal, assim:
Figura 3 - Ambiente Netbeans: tela inicial de Desenvolvimento
Fonte: editorial Digital Pages (2019).
32
EXEMPLO
Na área de desenvolvimento, temos o botão Play, que é o bo-
tão que inicia o comando de execução do projeto e o faz na parte de 
baixo da área de desenvolvimento. Fique tranquilo(a), pois, na dis-
ciplina, será fornecido o código para execução das estruturas.
Atente-se ao fato de que todo nome do programa deve-
rá (neste primeiro momento) ser o nome do projeto. Logo, veja o 
exemplo a seguir.
public class prjOla {
 public static void main(String []args)
 {
 System.out.println(“Olá”);
 }
}
O nome do projeto, ao criar um novo, é prjOla. O Java é case 
sensitive, isto é, ele diferencia letras maiúsculas e minúsculas. En-
tão, prjOLA é diferente de PRJOLA e diferente de prjola. Por isso, no-
mes de programas, projetos e comandos devem seguir exatamente 
como estão escritos no material.
No comando anterior, para poder executar, cole o código e di-
gite play. Lembre-se que os comandos em Java funcionam via blo-
cos, que são as aberturas e fechamentos de chaves.
O principal método a ser executado no projeto é o public static 
void main que, ao ser iniciado, irá apresentar na tela a palavra “Olá” 
através do comando System.out.println().
A seguir, estão exemplos do uso de tipos primitivos em ope-
ração matemática e demonstração em tela.
33
EXEMPLO
 public class prjSoma {
 public static void main(String []args)
 {
 int numA = 5; int numB = 6;
 int result = numA + numB;
 System.out.println(“O resultado de A + B :” + result);
 }
}
Inserido Classes
Caro(a) aluno(a), para inserir mais uma classe no projeto, clique 
com o botão direito do mouse em cima do pacote, como na Figura 4.
Figura 4 - Ambiente Netbeans: criando uma nova Classe no Projeto (passo 1)
Fonte: editorial Digital Pages (2019).
34
Logo em seguida, aparecerá a janela da Figura 5. Neste mo-
mento, somente escreva o nome da classe e clique em Finalizar.
Figura 5 - Ambiente Netbeans: criando uma nova Classe no Projeto (passo 2)
Fonte: editorial Digital Pages (2019).
Operadores lógicos e negação em java
Os operadores lógicos seguem a mesma ideia que os lógicos relacio-
nais e auxiliam na execução de processos diante de circunstâncias 
para tomada de decisões, em que duas ou mais condições são consi-
deradas e retornam um valor booleano true ou false. Há apenas dois 
operadores lógicos:
 • && (dois “e comercial”): a pronúncia correta é and e a tradu-
ção para o português é “e”. É utilizado para comparar duas ou 
mais condições e todas precisam ser verdadeiras.
 • || (duas vezes o símbolo pipe, localizado no mesmo botão que 
a contra-barra “\”, próximo à letra Z no teclado): a pronúncia 
correta é or e a tradução para o português é “ou”. É utiliza-
do para comparar duas ou mais condições em que pelo menos 
uma delas precisa ser verdadeira. 
35
EXEMPLO
public class OperadorLogico {
public static void main(String args[]) { 
 int resultado1 = 15 + 12;
 int resultado2 = 22 + 33;
 if (resultado1 == 27 && resultado2 == 55) {
 System.out.println(“As condições foram atendidas”);
 } else {
 System.out.println(“As condições não foram atendidas”);
 }
 if (resultado1 > 27 || resultado2 == 55) { 
 System.out.println(“Uma ou outra condição foi atendida”);
 } else {
 System.out.println(“Nenhuma das condições foi atendida”); 
 }
}
}
No exemplo acima, a primeira condição (primeiro if) é 
que o resultado1 precisa ser igual a 27 e o resultado2, igual a 55. 
Como ambas as comparações são verdadeiras, ao executar o có-
digo, para a primeira condição é exibido o texto “As condições 
foram atendidas”.
Já na segunda condição, o resultado1 precisa ser maior que 27 
e o resultado2, igual a 55. Assim, a primeira condição não é atendi-
da, pois resultado1 é igual a 27 e não maior. Já a segunda condição 
é atendida, pois o resultado2 é igual a 55. Como o operador lógico é 
36
EXEMPLO
“ou” e só uma condição precisa ser verdadeira, ao executar a segun-
da condição, o texto exibido é “Uma ou outra condição foi atendida”.
A negação é utilizada para negar (inverter) um valor boolea-
no, seja ele verdadeiro (true) ou falso (false). A negação utiliza o sinal 
! (exclamação) e sua denominação é not (não). Dessa maneira, toda 
comparação retorna um valor booleano, assim, a negação impacta 
diretamente no valor booleano, em que o verdadeiro vira falso e o 
falso vira verdadeiro.
public class ComparaPalavra {
public static void main(String args[]) { 
 int resultado1 = 15 + 12;
 int resultado2 = 22 + 33;
 if (!(resultado1 == 28) && resultado2 == 55) { 
 System.out.println(“As condições foram atendidas”);
 } else {
 System.out.println(“As condições não foram atendidas”);
 }
 if (!(resultado1 > 27 || resultado2 == 55)) {
 System.out.println(“Uma ou outra condição foi atendida”);
 } else {
 System.out.println(“Nenhuma das condições foi atendida”);
 }
}
} 
37
Como você já deve ter percebido, um programa de compu-
tador segue a mesma regra da matemática, processando primeiro 
o conteúdo interno dentro dos parênteses e, depois, o que está fora 
dos parênteses. Pensando nisso, o raciocínio para o operador de ne-
gação parece um pouco complicado em um primeiro momento e, 
por isso, ele foi separado em tópicos para melhor entendimento. 
Observando o código anterior, na primeira condição, se tem:
!(resultado1 == 28) && resultado2 == 55
 • Dentro dos parênteses resultado1 == 28. O resultado dá o valor 
booleano false, já que o resultado1 é igual a 27, e não 28.
 • O sinal de negação está negando o resultado dentro dos parênteses. 
Desse modo, o resultado vira true já que é false (inverso de false);
 • Depois, se tem a comparação “resultado2 == 55”, o que resul-
ta em true.
 • Então, aparecem dois valores booleanos –true: o “!(resultado 1 == 
28)” é verdadeiro e o “resultado2 == 55” também. Como o compa-
rador lógico neste caso é “&&” (e), todas as condições precisam ser 
verdadeiras, o que realmente acontece. Assim sendo, para a primeira 
condição, é exibido no terminal “As condições foram atendidas”.
Já para a segunda condição, se tem o seguinte cenário:
!(resultado1 > 27 || resultado2 == 55)
 • Dentro dos parênteses, há duas comparações de operadores 
lógicos de comparação e o operador lógico “||” (ou).
 • O resultado1 é igual a 27, e não maior, logo, o resultado é false.
 • O resultado2 é igual a 55, logo, o resultado é true.
 • A condição interna dentro dos parênteses volta true, porque 
apenas uma das comparações precisa retornar true.
 • O sinal de negação está negando esse resultado. Como ele é 
true, o resultado final é false.
 • Portanto, o resultado exibido no terminal é “Nenhuma das 
condições foi atendida”.
38
Estrutura de decisão em java
Um programa de computador trabalha constantemente em cima de 
decisões que são executadas a partir dos valores booleanos true e false. 
Além disso, os comandos if-else permitem que um comando ou bloco 
seja executado diante de uma comparação lógica. Assim, a instrução 
if-else possui uma estrutura básica que pode ser observada na Figura 6.
Figura 6 - Exemplo de condição IF-ELSE *
 Fonte: editorial Digital Pages (2020).
Como você deve ter observado, na figura 6 se tem a declaração 
do tipo primitivo boolean, com referência na memória chamada de 
“verdadeiro”, ou seja, o valor booleano possui valor true. Além disso, 
na estrutura if-else, a primeira condição, destacada em vermelho e na 
qual está o if, só é executada caso a condição dentro dos parênteses for 
verdadeira (true). Na hipótese da primeira condição ser false, é execu-
tada a condição dentro de else, destacada em cinza. Assim, em uma es-
trutura if-else, se não houver uma condição a ser executada dentro da 
condição else, ela não é obrigatória e nem é declarada,contendo apenas 
o if. Em alguns casos, há N condições em uma estrutura if-else, que é, 
então, denominada de if-else aninhada, como na figura 7.
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
39
Figura 7 - Exemplo de decisão IF, ELSE E IF-ELSE *
Fonte: editorial Digital Pages (2020).
Como você pôde perceber, na figura 7, há uma instrução 
if-else aninhada, composta por vários blocos de instruções if-else. 
Se a primeira condição, destacada em vermelho, for true, as demais 
não são executadas. Mas, caso seja false, é apurada a segunda condi-
ção, destacada em verde e, se ela for true, as demais abaixo não são 
examinadas. E, caso seja false, é verificada a terceira condição, des-
tacada em bordô. Isso acontece até a condição em laranja e a última 
condição só é executada se a condição em laranja não for true. Para 
comparação de casos mais simples, é possível fazer uso do operador 
ternário. A sintaxe do operador ternário é: “condiçãoBooleana? se-
Verdade : seFalso;”.
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
40
Figura 8 - Exemplo de SWITCH-CASE *
Fonte: editorial Digital Pages (2020).
Na figura 8, em azul, está o condicionador ternário e, em ver-
de, a expressão que resulta em um valor booleano true ou false. Se a 
expressão booleana for true, é executado o trecho entre ? (interro-
gação) e : (dois-pontos), destacado em vermelho. 
Mas, caso a expressão booleana seja false, é executado o tre-
cho após os: (dois-pontos), destacado em laranja. O operador ter-
nário é similar a uma expressão if-else simples.
Similar à um if-else aninhado, há o switch-case, utilizado para 
uma expressão que possui diversas possibilidades, como na figura 9.
Figura 9 - Exemplo de SWITCH-CASE *
Fonte: editorial Digital Pages (2020).
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
41
Diferentemente do if-else aninhado, o switch-case não para de 
ser executado até que a última condição não seja validada, exceto se 
usada a palavra-chave “break”. Na figura 9, há um switch-case e cada 
bloco possui a palavra-chave “break” para que, quando a condição for 
correspondida, o bloco de código switch-case seja interrompido.
Destacada em amarelo, a palavra-chave “default” é executa-
da quando nenhuma das condições é correspondida. Não obstante, 
há outras observações importantes quanto ao switch-case:
 • a palavra-chave “default” não é obrigatória e não precisa ter um 
break, afinal, não há mais condições a serem comparadas e, por con-
sequência, não há necessidade de interromper o bloco switch-case.
 • caso o bloco do switch-case não possua default, o último case 
não têm necessidade de ter break.
 • caso duas ou mais condições executem o mesmo processo, 
elas são alinhadas abaixo uma da outra sem expressão. Veja 
na Figura 10 que, na parte destacada em cinza, caso a variável 
número1 seja 8, 9 ou 10, é exibido no console o texto “O núme-
ro é 8, 9 ou 10”; e se não for nenhuma destas opções, é exibido 
no console “O número não é 8, 9 ou 10”;
Figura 10 - Exemplo de SWITCH-CASE ANINHADO *
Fonte: editorial Digital Pages (2020).
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
42
 • O switch-case também é designado para comparar valo-
res numéricos de, no máximo, tipo int, que variam entre 
-2147483648 e 2147483647. Somente a partir do Java 7, é 
possível trabalhar com Strings, portanto, tipos boolean, long, 
float e double não funcionam.
Estrutura de repetição em java
Além da estrutura de decisão, o sistema conta com estruturas de repetição 
que só param por uma condição programada, como se nota na Figura 11.
Figura 11 - Exemplo de Estrutura de repetição *
Fonte: editorial Digital Pages (2020).
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
43
Como você deve ter percebido, na Figura 11 há quatro tipos de 
estruturas de repetição:
 • o for, destacado em cinza, realiza uma tarefa enquanto a 
condição for verdadeira. Na figura 10, a variável i é decla-
rada no próprio escopo da condição, mas poderia ser de-
clarada fora. A estrutura for é lida da seguinte maneira: 
“enquanto a condição for verdadeira, execute a tarefa”. 
Cada trecho é separado por ponto e vírgula. Assim, no pri-
meiro ponto e vírgula consta a declaração da variável e a 
atribuição de um valor a ela. No segundo, há a condição e, 
no terceiro, a incrementação.
 • o do-while, destacado em bordô, executa uma tarefa enquanto 
a condição for verdadeira. A estrutura é lida da seguinte ma-
neira: “execute a tarefa, enquanto a condição for verdadeira”. 
A variável foi declarada fora da iteração, pois, se fosse decla-
rada dentro, ela seria criada novamente a cada iteração. Den-
tro do bloco do, é concretizada a incrementação e, dentro do 
while, a condição é verificada.
 • o while, destacado em vermelho, faz uma tarefa enquanto a 
condição for verdadeira. A estrutura é lida da seguinte ma-
neira: “enquanto a condição for verdadeira, execute a ta-
refa”. A variável é declarada fora do escopo do while, pois, 
se fosse declarada dentro, ela seria criada a cada iteração. 
Assim, a verificação e o incremento se dão dentro do escopo 
do while.
 • o último, embora seja similar ao for, é conhecido como forEa-
ch. Ele é utilizado para percorrer arrays e, a cada valor contido 
no array, ele promove uma tarefa. A estrutura forEach é inter-
pretada da seguinte maneira: “a cada dado, execute a tarefa”. 
O forEach não possui contador porque um array possui chave e 
valor, em que a chave é o índice e o valor é o dado em si. Logo, 
ele percorre o índice do array.
Embora while e do-while sejam similares, o while só executa 
se a condição for true, enquanto o do-while executa ao menos uma 
vez, mesmo que a condição seja false.
44
EXEMPLO
public class ExemploRepeticao {
public static void main(String args[]) {
int j = 0; 
do {
 System.out.println( “ O valor de J é “ + j );
} while (j != 0);
 int k = 0; 
while (k != 0) {
System.out.println( “ O valor de k é “ + k );
}
 }
}
Observe que, nesse exemplo, o do-while é executado uma vez, 
enquanto o while não é executado.
Terminologia da programação orientada 
a objetos
No mundo de orientação a objetos, assim como em outras áreas, 
existem terminologias utilizadas nas linguagens orientadas a ob-
jetos, tais como:
 • objetos - são instâncias de classes que possuem estado e 
comportamento. O estado é representado pelos campos (atri-
butos) daquele objeto, que podem ser modificados ao longo 
do tempo. Já os comportamentos são os métodos, compostos 
45
por um conjunto de instruções, com a característica de alterar 
o estado do objeto.
 • classes - são estruturas de um objeto (model) que contêm 
atributos e métodos. Todo objeto é uma instância pertencente 
à classe e toda classe precisa de um nome único no pacote em 
que se encontra. Seguindo a convenção de código, uma classe 
é declarada usando UpperCamelCase.
 • atributos - são as propriedades (variáveis) que descrevem o 
objeto. Em uma linguagem fortemente tipada, precisam ser 
de um tipo, seja ele primitivo ou de outra classe. Em uma lin-
guagem fracamente tipada, o tipo não importa, pois a lin-
guagem consegue se arranjar com o tipo de dado presente 
naquele atributo.
 • variáveis - são nomes atribuídos ao endereço de memória do 
computador utilizado para armazenamento de tipos de dados do 
programa executado. Possuem esse nome porque variam duran-
te a execução, não sendo um valor fixo. Seguindo a convenção de 
código, são declaradas usando LowerCamelCase e devem iniciar 
por uma letra (de a-z),underline (_) ou cifrão ($). É importante 
que você nunca inicie o nome de uma variável com números. 
Uma variável global pode ser acessada por qualquer método na 
classe e é declarada no cabeçalho da classe. Já uma variável local 
é visível apenas pelo método que está executando.
 • constantes - possuem as mesmas características de uma va-
riável, mas são imutáveis durante a execução do programa. 
Seguindo a convenção de códigos, uma constante é declarada 
usando UpperCase.
 • escopo - trata-se do local em que uma variável é acessada. Há 
dois tipos de escopo, o global e o local. Uma variável declarada 
no cabeçalho de uma classe possui o escopo global, ou seja, 
pode ser acessada por qualquer método de uma classe. Já uma 
variável local, declarada dentro de um método, tem o escopo 
local e só é acessada dentro daquele método, não sendo possí-
vel utilizá-la em outro método.
46
 • métodos e mensagens - os métodos são processos exe-
cutados a fim de realizar alguma operação relacionada ao 
objeto a que ela pertence. Eles se comunicam por meio de 
mensagens que podem ou não conter dados. Já as mensa-
gens são as informações contidas dentro dos parênteses 
dos métodos, batizados como parâmetros. A declaração de 
um método, seguindo a convenção de códigos, é escrita em 
LowerCamelCase.
 • herança - admite que um objeto herde as mesmas carac-
terísticas de outro objeto, facilitando o desenvolvimento 
e reaproveitando o código já existente. Uma classe Equi-
pamento Eletronico, por exemplo, possui característi-
cas (como marca, modelo, altura, largura, profundidade 
e preço), comportamentos (como liga e desliga) e outras 
duas classes, TV e Rádio, que apresentam as mesmas ca-
racterísticas que o equipamento, fazendo com que herdem 
esses atributos.
 • ocultação de informação (privacidade) - termo manifesto 
como Information Hiding, que provê a ocultação de informa-
ções desnecessárias, permitindo a visibilidade de itens es-
senciais da classe. Assim, a privacidade é controlada pelos 
três tipos de modificadores para atributos e métodos: pu-
blic, protected e private ou, respectivamente, visível a todas 
as classes de qualquer pacote; visível a todas as classes do 
mesmo pacote exceto em caso de herança visível por classes 
que a herdam em pacotes diferentes; e visível apenas pela 
própria classe.
 • encapsulamento de dados - muitos autores afirmam que o 
encapsulamento é utilizado para a proteção de dados, o que de 
fato acontece. Porém, a ideia é que esses dados sejam acessí-
veis diante dos métodos disponíveis naquela classe, denomi-
nados de getters e setters. Contudo, há outras formas de acesso 
a estes dados.
 • polimorfismo - em POO, possibilita que uma classe herde 
outra de maneira que seus comportamentos sejam similares, 
47
mas distintos. Um exemplo é a classe animal, na qual quase 
todos os animais têm o comportamento de emitir som, mas 
cada espécie emite um som particular.
 • identação - a identação (ou endentação) é o termo atribuído 
ao código-fonte de um programa, que auxilia na identificação 
de hierarquia de blocos de instrução, tornando o código mais 
“limpo” e de fácil entendimento. A identação não é obrigató-
ria na programação, mas sua prática é essencial. 
Um sistema computacional é gerado com objetivo de solucionar 
problemas cotidianos e a orientação a objetos é destinada a geren-
ciar a complexidade na solução dos problemas com um conjunto de 
objetos. Assim, baseados em objetos reais, os objetos criados são 
compostos por características e comportamentos, além de serem 
únicos na memória do sistema.
Instanciando um objeto
Para criar um objeto na memória do sistema, é preciso declarar o 
tipo do objeto seguido de um nome. Isso faz com que o programa 
reserve um espaço na memória do computador e, mediante o nome 
do objeto, se obtém acesso aos dados armazenados no objeto. No 
entanto, isso não é suficiente para que se trabalhe com o objeto, já 
que ele possui somente uma referência na memória.
Para que as informações do objeto sejam acessíveis, é ne-
cessário que ele seja instanciado e, para isso, emprega-se a pa-
lavra-chave “new” seguida do construtor da classe. Lembre-se 
que toda classe tem seu construtor, que não precisa ser declara-
do, mas, conforme a necessidade, é criado da maneira que me-
lhor convém.
DICA
48
DICA
Figura 12 - Exemplo de Instanciação *
Fonte: editorial Digital Pages (2020).
Devem ser utilizados ao longo da unidade, sejam gráficos, mapas 
mentais e/ou conceituais, fluxogramas, organogramas, tabelas e 
quadros, além de imagens que ilustrem graficamente o texto. Para 
esse fim se utilize de programas como canva.com, Lucidchart.com, 
pixabay e freepic. Ao inseri-lo, não esqueça de referenciar a fonte e 
colocar a legenda.
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
Construtor padrão
Construtor da classe Car
Nova instância do objeto Car
Construtor customizado
com parâmetros
Referência do
objeto em
memória
49
Caro(a) aluno(a), neste material, discutimos o surgimento da pro-
gramação orientada a objetos, sua referência com modelos de en-
tidades e explicamos que, para programar, é preciso representar 
objetos por meio de classes que contêm estados e comportamentos 
de um objeto.
Além disso, explicamos que a POO melhora a produtividade dos(as) 
programadores(as), permitindo a reutilização de códigos e é de fácil 
manutenibilidade, além de ser escalável. 
Sobre a linguagem de programação Java, ressaltamos que ela é 
100% orientada a objetos e que funciona em diversos dispositivos 
e sistemas operacionais diferentes, sendo fortemente tipada, pos-
suindo tipos primitivos e uma classe diferenciada chamada String 
para trabalhar com caracteres alfanuméricos, mas que não precisa 
ser instanciada, além de haver vários métodos internos essenciais 
para um(a) programador(a) trabalhar com os caracteres.
Também foram abordados operadores lógicos, operadores lógicos 
relacionais, negação, comparadores de classes, estruturas de deci-
são e repetição. E, ao final, foram abordados conceitos da orientação 
a objetos, incluindo objetos, classes, atributos, variáveis, constan-
tes, escopos, métodos e mensagens, herança e encapsulamento.
Lembre-se de estudar antes e depois da sua aula, aproveite o mo-
mento com o(a) docente para tirar todas as suas dúvidas. 
Até breve!
SINTETIZANDO
UN
ID
AD
E
2
Objetivos
 ◼ Apresentar as características de Programação Orientada a Objetos.
 ◼ Compreender como surgiu o paradigma de Programação 
Orientada a Objetos.
 ◼ Introduzir a linguagem Java para Programação Orientada a Objetos. 
 ◼ Entender os conceitos da Programação Orientada a Objetos.
 ◼ Apresentar as estruturas de dados compostas homogêneas 
e heterogêneas.
 ◼ Apresentar os tipos abstratos de dados.
52
Introdução
Olá, aluno(a), como vai?
Vamos iniciar mais uma etapa de estudos e, a partir de agora, 
veremos os principais conceitos de atributos e métodos, entenden-
do a ocultação das informações através do encapsulamento. Além 
disso, serão apresentados os conceitos de instâncias, referências e 
como as classes enviam mensagens. 
Destaco que, neste material, será explicado qual o ciclo de 
vida de um objeto. Também apresentaremos o conceito de estrutura 
compostas homogêneas e heterogêneas.
Dito isto, desejo a você boa leitura e bons estudos!
53
Classes, pacotes, objetos, atributos, 
métodos, construtores, palavra-chave 
this e sobrecarga
Classes
A programação orientada a objetos demanda que, ao desenvolver 
um programa de computador, constantemente, sejam utilizadas 
classes, com as quais fazemos a representação de uma entidade, 
seja ela real ou abstrata. A declaração de uma classe é simples, con-
forme a sintaxe expressa na figura 1:
Figura 1 - Sintaxe básica de uma classe*
Fonte: Editorial Digital Pages, 2020.
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponívelno seu Ambiente Virtual de Aprendizagem (AVA)�
54
Como você deve ter percebido, na figura 1 temos o modifica-
dor de acesso da classe que determina a visibilidade da classe, e que 
pode ser public, protected, private ou default. 
Os modificadores de acesso são palavras-chaves reservadas pela 
linguagem, e devem ser escritos com caracteres minúsculos. 
Os modificadores protected e private são raramente usados, e 
só são possíveis através de classes aninhadas.
No contexto da programação em Java, o modificador de acesso de-
fault não deve ser declarado, sendo oculto.
Além dos modificadores de acesso, temos o nome da clas-
se, que deverá ser único no pacote e seguir a convenção de códigos. 
Além disso, ela deve ser declarada em CammelCase, seguindo padrão 
UpperCamelCase, seu nome deverá ser um substantivo e ter relação 
com o que ela realmente propõe, sendo simples e objetivo.
Fique atento(a), pois as declarações de atributos e métodos 
devem ser realizadas dentro do escopo da classe. Importante res-
saltar que:
 • toda classe deve possuir a palavra-chave class declarada entre 
o modificador de acesso e o nome da classe;
 • toda classe deve estar contida em um pacote. Isso porque, 
mesmo que ele não seja definido, por padrão, a classe estará 
em um pacote default.
DEFINIÇÃO
VOCÊ SABIA?
55
Pacotes
Caro(a) aluno(a), ao programar fazendo uso da orientação a objetos, 
utilizamos pacotes (packages). Pensando nisso, mesmo que eles não 
sejam definidos, as classes devem estar dentro de um pacote default 
do próprio Java. 
Lembre-se: pacotes são utilizados a fim de estruturarmos melhor 
o sistema desenvolvido, facilitando a localização de tipos, evitando 
conflitos de nomes e controlando o acesso.
Ao trabalharmos com pacotes diferentes do default, temos 
que declarar, na estrutura da classe, a palavra-chave packages, se-
guida do nome do pacote. Carvalho e Teixeira (2012, p. 36) definem 
pacotes como sendo um envoltório de classes, um guarda classes e 
outros pacotes. Dessa maneira, podemos visualizar os pacotes como 
diretórios, ou pastas, nos quais podemos guardar arquivos (classes) 
e outros diretórios (pacotes).
Veja o exemplo da declaração de uma classe com pacote:
package modelos; 
public class Pessoa { 
 private String nome;
}
Se declarado, o pacote deve estar na primeira linha de código.
DICA
DICA
56
Mendes (2009, p. 79) diz que os nomes de pacotes, por reco-
mendação, mas não obrigatoriamente, devem ser declarados utili-
zando o nome do domínio reverso da empresa. 
Imagine a seguinte situação: uma empresa com domínio www.mi-
nhaempresa.com.br está desenvolvendo o projeto farmacêutica, 
portanto, durante o desenvolvimento do projeto, ao criar o pacote 
interfaces, deve ser utilizado o nome br.com.minhaempresa.far-
maceutica.interfaces.
É importante destacarmos que o uso de pacotes é útil para re-
solver problemas com a importação de classes que possuem nomes 
iguais. E, por convenção, os pacotes devem possuir nomenclaturas 
que usam letras minúsculas e sem caracteres especiais. Veja um 
exemplo de estrutura de pacotes de um sistema na figura 2:
Figura 2 - Exemplo de estrutura de pacotes
Fonte: Editorial Digital Pages, 2020.
EXEMPLO
57
Como você deve ter percebido, na figura 2 temos vários pa-
cotes do projeto fictício denominado gtc. e, em cada pacote, há um 
tipo de classe que corresponde ao que ela faz. Além disso, todos os 
pacotes após o .gtc. estão dentro do primeiro pacote gtc.
Objetos
Inicialmente, é necessário que você saiba que os objetos são todas 
as entidades que podem ser modeladas (podendo ser concretas 
ou não) e que possuem estado e comportamento. Além disso, o 
estado de um objeto é o conjunto das características que ele pos-
sui e que podem ser modificadas. Já o comportamento é definido 
pelas ações que modificam o estado do objeto. Veja um exemplo 
na figura 3:
Figura 3 - Exemplo de classe com estado, comportamento e outro objeto*
Fonte: Editorial Digital Pages, 2020.
Para que você entenda, na figura 3 temos duas classes que são 
representações do objeto carro e fabricante. Destacado em cinza, 
temos o estado da classe, que são os seus atributos e, em vermelho, 
temos o comportamento que são os métodos que alteram o estado 
da classe. Observe que o objeto carro, possui como atributo o objeto 
fabricante, que também possui estado e comportamento.
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
58
Atributos
Os atributos são as características que um objeto possui. Dessa manei-
ra, podemos entender que um atributo é a representação de um dado 
ou informação de estado do objeto e cada objeto de uma classe pos-
sui seu valor próprio. Existem dois tipos de atributos na programação 
orientada a objetos: os atributos de objetos e os atributos de classes.
Os atributos de objetos são os que descrevem os valores daque-
le objeto, em que cada instância possui a sua particularidade. Já os 
atributos de classe são os valores compartilhados entre todas as 
instâncias do objeto.
Em Java, por se tratar de uma linguagem fortemente tipada, 
ao declarar um atributo, precisamos dizer de qual tipo é aquele atri-
buto. Veja a sintaxe básica para declaração de atributos na figura 4:
Figura 4 - Exemplo de declaração de atributos em classe*
Fonte: Editorial Digital Pages, 2020.
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
Indica que o atributo é da classe
Indica que o atributo é da classe
Indica que o atributo é 
da classe
Indica que o atributo é da classe
Tipo de dado: primitivo ou outro projeto
Nome do atributo
Indica que o atributo é da classe
DEFINIÇÃO
59
Observando a figura 4, podemos fazer algumas observações:
 • os atributos possuem modificadores de acesso, que podem 
ser private, protected, public ou default, e que determinam 
a visibilidade do atributo. Lembre-se que os modificadores 
são palavras-chave da linguagem e são declarados em le-
tras minúsculas.
 • a palavra-chave static é reservada da linguagem e deve ser 
declarada em letras minúsculas. É utilizada para informar 
que aquele atributo é de classe, portanto, todas as instân-
cias da classe possuem o mesmo valor e, se em algum mo-
mento ele for alterado, todas as instâncias passarão a ter o 
novo valor.
 • o tipo do dado é uma característica das linguagens forte-
mente tipadas como o Java, em que é necessário declarar 
qual é o tipo do atributo, que pode ser primitivo ou um outro 
objeto (classe).
 • por último, temos o nome do atributo que deve ser único na 
classe. Seguindo a convenção de códigos, ele deve ser declara-
do utilizando LowerCamelCase.
Uma observação importante a se fazer sobre os atributos de 
classe é que, para acessá-los, não é necessário instanciar o obje-
to, porém a classe precisa estar visível a outra classe e o atributo 
precisa ter o modificador public, protected ou default. Caso contrário, 
eles devem ser acessados por métodos também declarados como 
estáticos, por exemplo, os métodos getters e setters. Para acessar o 
atributo estático da classe, precisamos fazer referência ao objeto, 
seguido do atributo. 
Carro.quantidadeVendida; ou Carro.getQuantidadeVendida();.
EXEMPLO
60
Métodos
Os métodos são estruturas contidas dentro de classes que são utili-
zadas para realizar operações. Eles, geralmente, alteram o estado de 
um objeto, porém podem ser utilizados para realizar qualquer fun-
ção (não demandando, necessariamente, a alteração de um objeto, e 
podendo apenas retornar um dado qualquer).
Dependendo do que o método faz, se ele é utilizado por vá-
rias classes e não realiza operações específicas com atributos de 
uma classe (como calcular dois valores), ele pode se conter apenas 
dentro de classes que não possuem atributos, sendo essas classes 
denominadas bibliotecas de operações. Veja como é a sintaxe da de-
claraçãode métodos, na figura 5:
Figura 5 - Sintaxe básica de método*
Fonte: Editorial Digital Pages, 2020.
Dentro da classe mostrada na figura 5, temos:
 • em azul escuro, os modificadores de acesso aos métodos, que 
podem ser public, protected, private ou default.
 • em rosa, o modificador static que possibilita utilizar o método 
da classe sem a necessidade de instanciá-la.
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
61
 • em vermelho, duas informações. A primeira está na parte de cima, 
onde se indica a palavra int. Isso quer dizer que o método deve-
rá retornar algum dado que represente o tipo int (qualquer valor 
dentro da faixa de -2147483648 a 2147483647). Depois, temos a 
palavra-chave return, que retorna um resultado entre os números 
inteiros. Um método pode retornar qualquer tipo de dado, seja ele 
primitivo ou não, além de poder não retornar nada, sendo que o 
tipo de retorno deve ser void e não possuir a palavra-chave return.
 • em verde, os nomes dos métodos. Diferente dos atributos, 
podemos possuir vários métodos com o mesmo nome, porém 
eles precisam possuir uma assinatura diferente. Lembre-se 
que a assinatura de um método é composta por nomes e parâ-
metros. Assim, a possibilidade de criar dois ou mais métodos 
com mesmo nome e assinaturas diferentes é chamada de so-
brecarga de métodos. Seguindo a convenção de códigos Java, 
os nomes de métodos devem ser declarados usando LowerCa-
melCase e representar um verbo.
 • em azul, os parâmetros. Eles precisam estar dentro dos parên-
teses do método. A quantidade de argumentos passados por pa-
râmetros podem ser nenhuma ou várias, e de diferentes tipos de 
dados ou objetos. Os parâmetros, se declarados, devem possuir 
tipo e nome, assim como fazemos para declarar atributos na 
classe. Esses parâmetros devem ser informações que são utiliza-
das dentro do método, e não estão acessíveis fora do seu escopo.
 • em laranja, o escopo do método que está entre as chaves. Nele 
são realizadas as operações, declaradas variáveis e, se neces-
sário, enviado o retorno de que o método necessita. Lembre-
-se que toda variável declarada ou objeto instanciado dentro 
do escopo do método é acessível somente dentro do método e 
não pode ser reutilizado em outro método.
A invocação de um método é feita, geralmente, de forma ex-
plícita a partir de outros trechos de códigos. Esses trechos podem 
estar dentro de outros métodos (um método chamando o outro) que 
está dentro da própria classe ou a partir de outras classes. Veja o 
exemplo da figura 6:
62
Figura 6 - Sintaxe para invocação de métodos*
Fonte: Editorial Digital Pages, 2020.
Como você pode observar na figura 6, temos o método main da 
classe Start declarado em cinza. Ele é um método padrão da linguagem 
Java, que é utilizado para dar o pontapé inicial na aplicação. Esse método 
sempre será public static void e deve possuir como parâmetro um array de 
argumentos do tipo String, que pode ser ou não passado durante a inicia-
lização da aplicação. Para esse caso, os parâmetros não são obrigatórios 
e nome args pode ser qualquer outro, porém deve ser um array, ou seja, 
possuir os colchetes declarados após o nome do parâmetro. O método 
main não possui retorno, já que o retorno esperado é void.
Assim, com base na figura 5, a invocação do método realizada 
na figura 6 é feita de duas maneiras diferentes, conforme explica-
remos a seguir.
 • A primeira maneira está destacada em amarelo, e é feita sem a ne-
cessidade de criar uma instância do objeto ExemploMetodo. Isso 
só é possível graças ao método ter sido declarado com modificador 
static, o que não funcionaria para o método subtrair. Para fins didá-
ticos e uma melhor visualização da declaração de um método, foram 
separados cada trecho, porém o correto é declarar da seguinte ma-
neira: NomeClasse.nomeMetodo(tipoAtributo nomeAtributo);.
* Caro(a) aluno(a), para uma melhor visualização da figura, sugerimos que 
acesse o material disponível no seu Ambiente Virtual de Aprendizagem (AVA)�
63
DICA
 • A segunda maneira está destacada em laranja e só é possível 
após a instanciação da classe ExemploMetodo, destacada em 
roxo. Isso permite que os métodos estáticos e não estáticos do 
objeto exemplo fiquem acessíveis. Assim como foi feito para a 
primeira maneira, a declaração foi separada em trechos para 
melhor visualização e o correto é instanciaObjeto.nomeMe-
todo(tipoAtributo nomeATributo);.
Os parâmetros passados ao invocar cada método são núme-
ros inteiros, assim como é esperado pelos métodos na classe Exem-
ploMetodo. Eles devem ser passados na mesma ordem em que a 
assinatura do método se encontra. Ou seja, se um método aguarda 
argumentos do tipo int e boolean em sua respectiva ordem, não se 
pode passar os argumentos boolean e int (de forma invertida), ou 
deixar de passar um dos parâmetros.
Construtores
Construtores são métodos especiais chamados através do uso da 
palavra-chave new. São usados quando desejamos criar uma ins-
tância de classe.
Um construtor não precisa ser declarado, mas, dependendo do con-
texto, pode ser essencial que ele seja, pois é por meio dele que pode-
mos, por exemplo, inicializar uma variável ou executar um método 
antes de fazer uso do objeto.
Por meio da criação de construtores podemos garantir que 
o código que eles contêm será executado antes de qualquer outro 
código em outros métodos, já que uma instância de uma classe só 
pode ser usada depois de ter sido criada com new, o que causará a 
execução do construtor (SANTOS, 2013).
64
Quando os atributos (primitivos ou de classe) são inicializa-
dos, mas não receberam uma programação durante sua estruturação, 
iniciam-se automaticamente com valores default listados a seguir.
 • Tipo boolean: inicializados com valor false, por padrão.
 • Tipo byte, char, int, long e short: inicializados com valor 0 (zero).
 • Tipo float e double: inicializados com valor 0.0 (zero ponto zero).
 • Instâncias de classes: inicializadas com valor null.
Para que você entenda o que estamos tratando, sugiro que veja o 
exemplo de uma classe sem um construtor definido: 
 public class BrinquedoAPilha {
private int quantidadePilha;
}
Uma referência com valor null não estará acessível a menos 
que ela seja inicializada através do uso da palavra-chave new.
No exemplo do código anterior, ao instanciar o objeto, o 
construtor default será executado, porém nada de mais acontecerá. 
Mas, supondo que a quantidade mínima de pilhas sejam duas, po-
demos declarar o construtor para atribuir o valor dois sempre que o 
objeto for instanciado. Veja o exemplo do que estamos falando:
public class BrinquedoAPilha {
 public Brinquedo () {
 this.quantidadePilha = 2;
 }
 private int quantidadePilha;
}
EXEMPLO
65
No exemplo do código anterior, foi declarado o construtor 
padrão que atribui o valor dois ao atributo quantidadePilha sempre 
que o objeto seja instanciado. Isso porque, se isso não fosse feito, o 
valor sempre se iniciaria como sendo zero.
O construtor, embora seja um método, possui suas particula-
ridades o que o diferencia dos demais métodos. São elas:
 • o construtor não precisa ser declarado. Se não declarado, o 
compilador usa o construtor default da classe. Assim, o cons-
trutor default é assinado pelo nome da classe e sem argumen-
tos como parâmetros;
 • o construtor sempre possui o mesmo nome da classe à qual 
ele pertence;
 • o construtor não tem nenhum tipo de retorno e não deve ser 
declarado como void;
 • o construtor pode receber todos os modificadores de aces-
so, porém não é muito comum encontrar construtores com 
modificadores de acesso private. Isso ocorre porque acaba 
não sendo usual uma classe conter um construtor com essa 
característica, a menos que ele seja chamado a partir de ou-
tros construtores com modificador de acesso public, protec-
ted ou default;
 • o construtor só pode ser chamado a partir da declaração

Continue navegando