Programação Orientada A Objetos 2
Programação Orientada A Objetos 2
Programação Orientada A Objetos 2
PROGRAMAÇÃO ORIENTADA A
OBJETOS
AULA 2
https://univirtus.uninter.com/ava/web/roa/ 1/24
26/04/2022 21:40 UNINTER
CONVERSA INICIAL
Nesta aula, vamos abordar o principal conceito dentro do paradigma de programação orientado
a objetos: as classes. As classes dentro de orientação a objetos são compostas principalmente por
atributos e métodos, e é por meio delas que geramos os objetos que dão nome ao paradigma. Além
da definição dos conceitos, teremos exemplos do uso das classes e objetos com maiores detalhes de
Ao final desta aula, esperamos atingir os seguintes objetivos, que serão avaliados ao longo da
Quadro 1 – Objetivos
Objetivos Avaliação
Questionário e questões
1. Aplicar os conceitos de classes e objetos em linguagem Java.
dissertativas
2. Desenvolver algoritmos que combinam, agrupam e interagem com diferentes Questionário e questões
objetos. dissertativas
Questionário e questões
3. Aplicar o conceito de construtor em linguagem Java.
dissertativas
Neste tema, vamos debater os dois conceitos mais importantes da Programação Orientada a
https://univirtus.uninter.com/ava/web/roa/ 2/24
26/04/2022 21:40 UNINTER
contexto que nos interessa. Esse modelo deve ser simples e considerar apenas os elementos que
forem relevantes para o problema abordado. Os objetos são os elementos em si que compõem o
nosso sistema, enquanto as classes são a descrição desses objetos, e como o nome sugere,
Por exemplo, suponha que desejamos criar um jogo eletrônico que implemente uma corrida de
carros. É pertinente representar todos os diferentes carros que participam dessa corrida. Cada carro
individualmente possui suas características próprias, uma cor, um valor de velocidade máxima, um
nível de combustível, uma localização na pista de corrida, entre outros. Cada carro individualmente,
portanto, é um objeto.
Ainda no exemplo da corrida, observe que todos os carros são representados pelo mesmo
conjunto de características, embora possuam valores diferentes para cada variável. E dentro da POO
o código que descreve os atributos que todos os carros possuem é chamado de classe.
carro vermelho que está liderando a corrida, estamos falando de um carro específico, portanto, de
um objeto.
Métodos: São como funções que dizem o que cada objeto faz.
Estado: Seria o valor de cada atributo que representa aquele objeto específico.
semelhante ao registro, as classes possuem atributos que caracterizam seus objetos. Na Figura 1,
novamente utilizamos o exemplo de uma classe Carro para ilustrar esse conceito. Todos os carros
Figura 1 – Representação da classe Carro com os atributos cor, modelo e velocidade com 3 objetos
https://univirtus.uninter.com/ava/web/roa/ 3/24
26/04/2022 21:40 UNINTER
Crédito: Colorlife/Shutterstock.
Já os métodos representam o que cada objeto da classe é capaz de fazer, são funções associadas
a cada objeto. A classe carro, por exemplo, poderia ter o método acelerar(int), que receberia um valor
faria o estado do atributo Velocidade do objeto Sally ser modificado de 210 para 260, por exemplo.
O Java é uma linguagem orientada a objetos, o que significa que todo o código que escrevemos
está dentro de alguma classe e as interações entre os dados se dão por meio de métodos e objetos.
A convenção entre os programadores Java é a de criar um arquivo separado para cada Classe Java. O
arquivo que contém o método main também é uma classe própria geralmente.
Anteriormente, fizemos o nosso primeiro programa (código abaixo) e nele observe a linha:
A palavra public diz respeito à visibilidade quais outras classes poderão visualizar o código.
Estudaremos mais detalhes sobre visibilidade posteriormente, por hora basta entender que é
https://univirtus.uninter.com/ava/web/roa/ 4/24
26/04/2022 21:40 UNINTER
necessário o comando public. Na sequência, temos o comando class PrimeiraClasse, que indica que
Como exemplo, vamos fazer um programa Java com duas classes. A classe Principal e uma
classe Aluno que representará quais dados cadastrais possuem os alunos de uma instituição. Você já
aprendeu, anteriormente, como fazer um programa básico com uma única classe contendo o método
main. Para a primeira classe, dê o nome de Principal e marque a opção no checkbox a opção public
static void main(String[] args). Para a segunda classe, certifique-se de que a nova classe fique no
mesmo pacote que a classe Principal e dê um nome de Aluno. As demais opções devem ser as
padrões do sistema, especialmente a opção public static void main(String[] args), só pode existir
um único método main no projeto. A estrutura do seu projeto deve ficar como na Figura abaixo.
Na classe Aluno, vamos declarar como atributo dados que desejamos representar. Para uma
https://univirtus.uninter.com/ava/web/roa/ 5/24
26/04/2022 21:40 UNINTER
De volta à classe Principal, dentro do método main, podemos criar objetos do tipo Aluno,
modificar e comparar seus atributos. No código a seguir, declaramos dois alunos (Mario e Luigi) e
queremos imprimir o nome do aluno mais antigo, ou seja, aquele que possui a menor matrícula.
Confira o código:
https://univirtus.uninter.com/ava/web/roa/ 6/24
26/04/2022 21:40 UNINTER
No POO, um objeto pode ser chamado de instância de uma classe e criar uma nova instância, o
que é chamado de instanciação. Na linha 2 e 7, temos os objetos sendo instanciados pelo comando
new, seguido do nome da classe com abre fecha parênteses, esses parênteses estão presentes, pois
se trata de um construtor, que funciona semelhante a um método que especifica detalhes de como o
O comando new reserva um espaço de memória para aquele objeto. Veja que, na linha 11, uma
variável chamada antigo do tipo Aluno está sendo criada, porém, sem ser instanciada com o
comando new. Nesse caso, a variável é apenas um ponteiro e serve para referenciar outros objetos.
No caso, ela irá referenciar qual dos dois alunos (Mario ou Luigi) é o que possui a menor matrícula.
Na linha 18 antigo.nome irá imprimir o nome Super Mario. Se mario.nome fosse alterado para outro
valor a alteração passaria a valer para antigo.nome e vice-versa, mario e antigo são referências
https://univirtus.uninter.com/ava/web/roa/ 7/24
26/04/2022 21:40 UNINTER
(ponteiros) para o objeto criado na linha 2. Nas linhas 3, 4, 5, 8, 9 e 10 os atributos de cada objeto
estão sendo acessados e modificados.
O código orientado a objeto no caso geral é mais legível que na programação estruturada. Em
uma versão estruturada cada aluno deveria ser representando com 3 variáveis diferentes para cada
aluno, assumindo um sistema em que os alunos sejam representados por 50 atributos diferentes
rapidamente o código ficaria muito difícil de administrar sem uso de classe ou registro/struct.
Como desafio, considere o código anterior e modifique-o para termos um terceiro aluno, Yoshi.
Descubra qual é o mais antigo dentre os três e imprima todos os dados dele.
TEMA 2 – MÉTODOS
Neste tema, vamos discutir os métodos que representam as ações que podem desempenhar
Mais do que agrupar um conjunto de variáveis, as classes também possuem o que chamamos de
métodos, que são equivalentes às funções em programação estruturada, um bloco de código que só
é executado quando chamado. Os métodos podem receber dados de entrada (parâmetros) e
associado.
Suponha a classe Aluno que criamos anteriormente. Dentro da classe, poderíamos criar um
método conforme no código abaixo:
https://univirtus.uninter.com/ava/web/roa/ 8/24
26/04/2022 21:40 UNINTER
Na linha 5, criamos o método info() que irá imprimir na tela todos os dados referentes ao aluno,
os atributos nome, matricula e CPF são acessados de dentro do contexto do método. No entanto,
vale o questionamento: qual aluno está tendo os atributos acessados pelo método? Será aquele que
está associado ao método? Vamos exemplificar com o código a seguir, supondo o seguinte código
na main:
https://univirtus.uninter.com/ava/web/roa/ 9/24
26/04/2022 21:40 UNINTER
2.1 EXERCÍCIOS
Desenvolva os exercícios listados aqui e depois compare sua resposta com os códigos
apresentados na seção Apêndice ao final deste documento.
1. Crie uma classe Nota, com três atributos reais chamados: nota1, nota2, nota3. E crie também
dois métodos, cada um para calcular e retornar diferentes tipos de média. Média Aritmética; e Média
2. Crie uma classe Conta, para administrar contas correntes de um banco com os seguintes
atributos:
String correntista;
float saldo;
float limiteSaque;
E os métodos:
void info()
O método deve transferir o valor passado por parâmetro do objeto conta que executa o método
https://univirtus.uninter.com/ava/web/roa/ 10/24
26/04/2022 21:40 UNINTER
Neste tema, vamos discutir dois assuntos importantes dentro da programação Java: os padrões
amplamente utilizados. Desde as principais e mais elaboradas bibliotecas internas do Java até os
projetos mais simples utilizam os mesmos padrões que apresentaremos aqui facilitando a leitura dos
O padrão principal da linguagem é o Camel Case, que consiste em descrever uma palavra
composta ou frase sem dar espaços ou utilizar underline (ou sublinha), mas utilizando letras
Suponha uma variável que representa o nome completo de um usuário poderia ser declarada no
código como String nomeCompleto (letra maiúscula quando começa outra palavra) ao invés de
nome_completo ou nomecompleto dentre outras opções. O nome Camel Case vem da semelhança das
letras maiúsculas se sobressaindo no nome com as corcovas nas costas de um camelo. A Figura 2
https://univirtus.uninter.com/ava/web/roa/ 11/24
26/04/2022 21:40 UNINTER
Classes: inicia com letra maiúscula e segue o Camel Case. Ex: Aluno
Métodos, atributos e variáveis: iniciam com letra minúscula e seguem o Camel Case. Ex:
nomeCompleto
Constantes: inteiramente com letras maiúsculas separadas por underline. Ex: VALOR_PI
A palavra reservada static possui dois usos na linguagem JAVA. Um quando é associada a um
método e outro quando é associada a um atributo. Nos dois casos significa que o atributo ou
método poderá ser acessado de forma independente de instâncias. Métodos e atributos sempre são
Um atributo estático pode ser entendido como uma variável global da classe, todas as instâncias
podem trabalhar sobre a mesma variável. Veja o exemplo a seguir. As variáveis numeroComum e
numeroEstatico se comportam de maneira diferente quando o método incremento for invocado por
diferentes objetos. Se dois objetos invocarem o método incremento duas vezes cada um.
valores 0, 1, 2 e 3.
No caso dos métodos estáticos, eles funcionam de forma semelhante a uma função comum do
paradigma estruturado. Um bloco de código associado a um nome. Observe que o método main que
https://univirtus.uninter.com/ava/web/roa/ 12/24
26/04/2022 21:40 UNINTER
No exemplo anterior, temos uma classe com um método estático, que pode ser invocado por
qualquer outra classe sem a necessidade de instanciar, mas colocando nome da classe antes do
método com no comando: resultado = Aritmetica.somar(3,2);
Esse comando irá chamar o método somar da classe Aritmética passando os valores 3 e 2 como
forma estática dentro de uma classe denominada Aritmética. Acesse depois estes métodos a partir de
outra classe.
Uma forma visual e muito prática de representar graficamente classes e suas relações é por meio
muito utilizada na documentação de projetos, especialmente de grande escala por sua facilidade de
compreensão. É especialmente útil durante a etapa de projeto, pois conseguimos representar os
Na UML existem diversos tipos de diagramas que representam diferentes aspectos do projeto de
software, entre eles o diagrama de classes que, como o nome sugere, representa justamente as
https://univirtus.uninter.com/ava/web/roa/ 13/24
26/04/2022 21:40 UNINTER
classes. Cada classe é graficamente apresentada com um retângulo contendo geralmente três áreas.
Na parte superior, o nome da classe; no meio, os atributos; e na parte inferior, os métodos. Na Figura
por exemplo, ter atributos de uma classe sejam objetos de outra classe ou que seus métodos
recebam objetos como parâmetros. Suponha, por exemplo, que desejamos criar uma classe que
represente uma turma de alunos. Podemos representar a classe turma da seguinte forma.
https://univirtus.uninter.com/ava/web/roa/ 14/24
26/04/2022 21:40 UNINTER
Nas linhas 5 até 7, temos os atributos. Cada turma é composta por uma quantidade variável de
alunos portanto o primeiro atributo é um ArrayList, uma classe que implementa arrays com grande
facilidade, pois possui diversos métodos para adicionar, remover, contar e buscar elementos de
forma dinâmica. Para utilizar essa classe, é necessário importar o arquivo onde está definida, o
comando de importação está na linha 2. Dentro do operador <> podemos definir o tipo do
ArrayList, que no caso é um ArrayList da classe Aluno, ou seja, todo o elemento desse array
representará um aluno diferente que está matriculado naquela turma, lembrando novamente que o
comando new ArrayList() gera uma instância nova da classe ArrayList, sem esse comando listaAlunos
seria uma referência, um ponteiro. Na linha 6, temos um elemento da classe Professor que representa
o orientador daquela turma, também um objeto de uma classe que é um atributo nesta. Suponha
que a classe Professor composta por alguns poucos atributos e um método info() análogo ao aluno.
Nas linhas 9 até 11 da classe Turma, temos o método que adiciona um novo aluno no ArrayList
que compõem todos os alunos. O método add da classe ArrayList adiciona ao final do array, se
necessário, o método de forma transparente aloca memória extra para realizar a adição do elemento.
Abaixo, na Figura 4 representamos a relação entre essas classes no diagrama de classes UML. No
caso Turma, possui uma relação que chamamos de composição com relação às duas outras classes. O
paradigma orientado a objetos tenta representar o domínio dos problemas de forma mais natural e
semelhante ao problema real. Portanto, assim como na vida real, as turmas são compostas por um
grupo de alunos da mesma forma a relação que entre elas é chamada de composição. Na Figura a
indicação 0..1 significa que cada turma possui de zero até um professor e 0..* significa que a turma
possui de zero até vários alunos. Mais detalhes sobre o digrama de classes UML serão apresentados
https://univirtus.uninter.com/ava/web/roa/ 15/24
26/04/2022 21:40 UNINTER
TEMA 5 – CONSTRUTORES
No bloco de código de um construtor qualquer código pode ser escrito, mas usualmente
utilizamos para carregar alguma informação, especialmente informações que sejam cruciais para o
Os construtores são criados de forma semelhante aos métodos, porém, devem possuir o mesmo
nome da classe e não possuem valor de retorno. É possível também possuir diversos construtores
para uma mesma classe variando apenas os parâmetros de entrada. Abaixo segue um código que
exemplifica isso:
https://univirtus.uninter.com/ava/web/roa/ 16/24
26/04/2022 21:40 UNINTER
Mais uma vez exemplificamos utilizando a classe Aluno. Dessa vez criamos três construtores
diferentes, linhas 6, 11 e 14. No primeiro construtor, temos três parâmetros sendo passados, ou seja,
é permitido instanciar o objeto passando o nome, a matrícula e o CPF. Conforme vemos nas linhas 7,
8 e 9, os parâmetros passados para os atributos da classe Aluno. A palavra reservada this serve para
distinguir os atributos dos parâmetros, visto que ambos possuem os mesmos nomes.
Ao instanciar aluno desta maneira, ele já terá valores em todos os seus atributos sem
necessidade de indicar um a um individualmente.
https://univirtus.uninter.com/ava/web/roa/ 17/24
26/04/2022 21:40 UNINTER
Por termos criado três construtores, temos três opções de instanciação. Esta instanciação por ter
apenas um parâmetro String invoca o construtor da linha 11 que também possui apenas um
parâmetro String e atribui um valor inicial para o nome baseado no parâmetro do construtor, os
demais atributos são ignorados. Note que os atributos são o que distingue diferentes construtores.
presente na linha 14 irá imprimir uma mensagem. Quando criamos uma classe, um construtor vazio
implícito que não executa nenhum código é criado. No entanto, a partir do momento que criamos
um construtor qualquer, esse construtor vazio implícito deixa de existir. Para testar isso, observe que
se apagarmos apenas o construtor da linha 14, essa instanciação vazia não vai funcionar, porém se
5.1 EXERCÍCIO
Crie uma classe Horario com os atributos inteiros, hora, minuto e segundo. Crie três
construtores, um que recebe três parâmetros e inicia os três atributos com os valores passados, outro
que recebe apenas a hora e outro vazio. Caso algum dos valores inicializados não esteja no intervalo
adequado (hora entre 0 e 23, minutos e segundos entre 0 e 59), inicialize o valor em questão em zero
FINALIZANDO
Nesta aula, iniciamos propriamente dito o conteúdo relativo à orientação a objetos. Vimos o
conceito de classe e objeto que é o mais importante dentro desse Paradigma.
Com o conteúdo desta aula, o(a) aluno(a) dá um passo importante na compreensão da orientação a
objetos. Nessa fundamentação, o aluno tem a base para os conceitos mais aprofundados que
seguem posteriormente.
https://univirtus.uninter.com/ava/web/roa/ 18/24
26/04/2022 21:40 UNINTER
APÊNDICE
1. Crie uma classe Nota, com três atributos reais chamados: nota1, nota2, nota3. E crie também
dois métodos, cada um para calcular e retornar diferentes tipos de média. Média Aritmética; e Média
https://univirtus.uninter.com/ava/web/roa/ 19/24
26/04/2022 21:40 UNINTER
2. Crie uma classe Conta, para administrar contas correntes de um banco com os atributos
abaixo.
E os métodos:
https://univirtus.uninter.com/ava/web/roa/ 20/24
26/04/2022 21:40 UNINTER
https://univirtus.uninter.com/ava/web/roa/ 21/24
26/04/2022 21:40 UNINTER
O método deve transferir o valor passado por parâmetro do objeto conta que executa o método
4. Crie uma classe Horario com os atributos inteiros, hora, minuto e segundo. Crie três
construtores, um que recebe três parâmetros e inicia os três atributos com os valores passados.
Outro que recebe apenas a hora e outro vazio. Caso algum dos valores inicializados não esteja no
intervalo adequado (hora entre 0 e 23, minutos e segundos entre 0 e 59), inicialize o valor em
https://univirtus.uninter.com/ava/web/roa/ 22/24
26/04/2022 21:40 UNINTER
REFERÊNCIAS
BARNES, D. J.; KÖLLING, M. Programação orientada a objetos com Java. 4. ed. São Paulo:
Pearson Prentice Hall, 2009.
DEITEL, P.; DEITEL, H. Java Como programar. 10. ed. São Paulo: Pearson, 2017.
MEDEIROS, E. S. de. Desenvolvendo software com UML 2.0: definitivo. São Paulo: Pearson
Makron Books, 2004.
PAGE-JONES, M. Fundamentos do desenho orientado a objetos com UML. São Paulo: Makron
Book, 2001.
PFLEEGER, S. L. Engenharia de software: teoria e prática. 2. ed. São Paulo: Prentice Hall, 2004.
https://univirtus.uninter.com/ava/web/roa/ 23/24
26/04/2022 21:40 UNINTER
SINTES, T. Aprenda programação orientada a objetos em 21 dias. 5. reimp. São Paulo: Pearson
Education do Brasil, 2014.
https://univirtus.uninter.com/ava/web/roa/ 24/24