1 Criação de classes - parte 1
1. Escreva uma classe para representar um time de um esporte qualquer em um campeo-
nato desse esporte. Que atributos devem ser representados nessa classe? Quais méto-
dos ela deve conter? Escreva um aplicativo de teste que demonstre as capacidades da
classe criada.
Implementação da classe time.java
public class Time {
private String nome;
private String cidade;
private int vitorias;
private int derrotas;
private int empates;
private int golsMarcados;
private int golsSofridos;
public Time(String nome, String cidade) {
this.nome = nome;
this.cidade = cidade;
}
public void registrarVitoria(int golsMarcados, int golsSofridos) {
this.vitorias++;
this.golsMarcados += golsMarcados;
this.golsSofridos += golsSofridos;
}
public void registrarDerrota(int golsMarcados, int golsSofridos) {
this.derrotas++;
this.golsMarcados += golsMarcados;
this.golsSofridos += golsSofridos;
}
public void registrarEmpate(int golsMarcados, int golsSofridos) {
this.empates++;
this.golsMarcados += golsMarcados;
this.golsSofridos += golsSofridos;
}
public int calcularPontos() {
return (this.vitorias * 3) + this.empates;
}
public int calcularSaldoGols() {
return this.golsMarcados - this.golsSofridos;
}
// Getters e setters omitidos para brevidade
}
Implementação do campeonato.java
public class Campeonato {
public static void main(String[] args) {
Time time = new Time("Tigers", "Pau dos Ferros");
time.registrarVitoria(3, 1);
time.registrarEmpate(2, 2);
time.registrarDerrota(1, 2);
System.out.println("Pontos: " + time.calcularPontos());
System.out.println("Saldo de Gols: " + time.calcularSaldoGols());
}
}
2. Crie uma classe chamada F atura para que uma loja de suprimentos de informática a
utilize para representar uma fatura de um item vendido. Uma Fatura deve incluir as se-
guintes informações sobre o item vendido: o número de identificação, a descrição, a
quantidade comprada e o preço unitário. Se a quantidade não for positiva, ela deve ser
configurada como 0. Se o preço por item não for positivo, ele deve ser configurado como
0.0. Forneça também um método chamado calculaT otal que calcula e retorna o valor de
fatura (isto é, multiplica a quantidade pelo preço por item). Escreva um aplicativo de teste
que demonstre as capacidades da classe criada.
Implementação do fatura.java
public class Fatura {
private String numeroIdentificacao;
private String descricao;
private int quantidade;
private double precoUnitario;
public Fatura(String numeroIdentificacao, String descricao, int quantidade, double
precoUnitario) {
this.numeroIdentificacao = numeroIdentificacao;
this.descricao = descricao;
this.quantidade = quantidade > 0 ? quantidade : 0;
this.precoUnitario = precoUnitario > 0 ? precoUnitario : 0.0;
}
public double calculaTotal() {
return this.quantidade * this.precoUnitario;
}
// Getters e setters omitidos para brevidade
}
Implementação do loja.java
public class Loja {
public static void main(String[] args) {
Fatura fatura = new Fatura("1234", "Mouse Óptico", 2, 50.0);
System.out.println("Total da Fatura: R$ " + fatura.calculaTotal());
}
}
3. Escreva uma classe cujos objetos representam alunos matriculados em uma disciplina da
Ufersa. Cada objeto dessa classe deve guardar os seguintes dados do aluno: matrícula,
nome, 2 notas de prova (P1 e P2) e 1 nota de trabalho (T). Escreva os seguintes métodos
para esta classe:
• media: calcula a média parcial do aluno (MP)
– cada prova tem peso 2, 5 e o trabalho tem peso 2 (MP =
2,5×P1+2,5×P2+2×T
7
)
• provaF inal: calcula quanto o aluno precisa para o exame final (EF)
– retorna zero se o aluno não necessita realizar o exame final (MP < 3 ou MP >=
7)
– média final MF = (MP × 6 + EF × 4)/10
– é necessário que MF seja maior ou igual a 5 para que o aluno seja aprovado
após realizar o exame final
Escreva um aplicativo de teste que demonstre as capacidades da classe criada.
Implementação aluno.java
public class Aluno {
private String matricula;
private String nome;
private double notaP1;
private double notaP2;
private double notaT;
public Aluno(String matricula, String nome, double notaP1, double notaP2, double notaT)
{
this.matricula = matricula;
this.nome = nome;
this.notaP1 = notaP1;
this.notaP2 = notaP2;
this.notaT = notaT;
}
public double calcularMediaParcial() {
return ((2.5 * notaP1) + (2.5 * notaP2) + (2 * notaT)) / 7;
}
public double calcularNotaFinalNecessaria() {
double mp = calcularMediaParcial();
if (mp < 3 || mp >= 7) {
return 0;
} else {
double efNecessaria = (5 - (0.6 * mp)) / 0.4;
return efNecessaria > 10 ? 10 : efNecessaria;
}
}
// Getters e setters omitidos para brevidade
}
Implementação do testeAluno.java
public class TesteAluno {
public static void main(String[] args) {
Aluno aluno1 = new Aluno("2025001", "Ana Silva", 6.0, 7.5, 8.0);
Aluno aluno2 = new Aluno("2025002", "Bruno Souza", 4.0, 5.0, 6.0);
Aluno aluno3 = new Aluno("2025003", "Carla Pereira", 2.0, 3.5, 4.0);
System.out.printf("Aluno: %s - MP: %.2f - Nota Final Necessária: %.2f%n",
aluno1.getNome(), aluno1.calcularMediaParcial(),
aluno1.calcularNotaFinalNecessaria());
System.out.printf("Aluno: %s - MP: %.2f - Nota Final Necessária: %.2f%n",
aluno2.getNome(), aluno2.calcularMediaParcial(),
aluno2.calcularNotaFinalNecessaria());
System.out.printf("Aluno: %s - MP: %.2f - Nota Final Necessária: %.2f%n",
aluno3.getNome(), aluno3.calcularMediaParcial(),
aluno3.calcularNotaFinalNecessaria());
}
}
4. [FAB - EEAR - 2023 - Sargento da Aeronáutica - Informática] Relacione as colunas
quanto
aos conceitos de POO. Em seguida, assinale a alternativa com a sequência correta.
1 – Classe 2 – Objeto 3 – Construtor
( ) É uma estrutura dinâmica que encapsula estado e comportamento.
( ) É executado automaticamente quando um objeto é instanciado utilizando o operador
“new”.
( ) Trata-se de modelo ou template que permite a criação de idênticas estruturas dinâmi-
cas.
(A) 1 - 2 - 3
(B) 2 - 3 - 1
(C) 3 - 1 - 2
(D) 3 - 2 - 1
5. [UFES - 2023 - Técnico de Tecnologia da Informação] Considere o seguinte programa
escrito em Java:
class Conta {
double saldo;
void sacar(double qtd) { saldo -= qtd; }
void depositar(double qtd) { saldo += qtd; }
}
public class Programa {
public static void main(String[] args) {
Conta c1 = new Conta();
c1.depositar(1000);
Conta c2 = c1;
c1.sacar(500);
System.out.println(c1.saldo);
}
}
Ao compilar e executar esse programa, o valor impresso na tela é:
(A) 1000.0
(B) 500.0
(C) 500
(D) 1000
(E) Indeterminado, pois o saldo não foi inicializado.
2 Criação de classes - parte 2
6. Crie uma classe denominada Elevador para armazenar as informações de um elevador
dentro de um prédio. A classe deve armazenar o número do andar atual, o total de
andares no prédio, a capacidade do elevador e quantas pessoas estão presentes nele.
Outras classes não devem ter acesso direto aos atributos de Elevador. A classe deve
também disponibilizar os seguintes métodos:
• construtor : que deve receber como parâmetros a capacidade do elevador e o total
de andares no prédio (um elevador sempre começa no térreo e vazio);
• entra : para acrescentar uma pessoa no elevador (só deve acrescentar se ainda
houver espaço);
• sai : para remover uma pessoa do elevador (só deve remover se houver alguém
dentro dele);
• sobe : para subir um andar (não deve subir se já estiver no último andar);
• desce : para descer um andar (não deve descer se já estiver no térreo).
Escreva um aplicativo de teste que demonstre as capacidades da classe criada, ou seja,
execute todos os métodos da classe.
Implementação do elevador.java
public class Elevador {
private int andarAtual;
private int totalAndares;
private int capacidade;
private int pessoasPresentes;
public Elevador(int capacidade, int totalAndares) {
this.capacidade = capacidade;
this.totalAndares = totalAndares;
this.andarAtual = 0; // Térreo
this.pessoasPresentes = 0;
}
public void entra() {
if (pessoasPresentes < capacidade) {
pessoasPresentes++;
} else {
System.out.println("Elevador cheio!");
}
}
public void sai() {
if (pessoasPresentes > 0) {
pessoasPresentes--;
} else {
System.out.println("Elevador vazio!");
}
}
public void sobe() {
if (andarAtual < totalAndares) {
andarAtual++;
} else {
System.out.println("Já estamos no último andar!");
}
}
public void desce() {
if (andarAtual > 0) {
andarAtual--;
} else {
System.out.println("Já estamos no térreo!");
}
}
public int getAndarAtual() {
return andarAtual;
}
public int getPessoasPresentes() {
return pessoasPresentes;
}
}
Implementação do testeElevador.java
public class TesteElevador {
public static void main(String[] args) {
Elevador elevador = new Elevador(5, 10);
elevador.entra();
elevador.entra();
elevador.sobe();
elevador.sobe();
elevador.desce();
elevador.sai();
System.out.println("Andar atual: " + elevador.getAndarAtual());
System.out.println("Pessoas presentes: " + elevador.getPessoasPresentes());
}
}
7. Escreva a classe Contador que encapsule um valor usado para contagem de eventos.
Esta classe deve esconder o valor encapsulado de programadores-usuários, fazendo
com que o acesso ao valor seja feito através de métodos que devem zerar, incremen-
tar e imprimir o valor do contador. Escreva um aplicativo de teste que demonstre as
capacidades da classe criada.
Implementação do contador.java
public class Contador {
private int valor;
public Contador() {
this.valor = 0;
}
public void zerar() {
this.valor = 0;
}
public void incrementar() {
this.valor++;
}
public int getValor() {
return valor;
}
}
Implementação do testeComtador.java
public class TesteContador {
public static void main(String[] args) {
Contador contador = new Contador();
contador.incrementar();
contador.incrementar();
System.out.println("Valor do contador: " + contador.getValor());
contador.zerar();
System.out.println("Valor do contador após zerar: " + contador.getValor());
}
}
8. Escreva uma classe Lampada que possui o atributo estadoDaLampada (ligado ou desli-
gado) e os métodos acende, apaga e mostraEstado (ex.: A lampada esta acesa). Inclua
um método estaLigada que retorne verdadeiro se a lâmpada estiver ligada e falso caso
contrário. Adicione um campo que indique quantas vezes a lâmpada foi acesa. Para
isso, utilize uma instância da classe Contador criada anteriormente e implemente a ló-
gica necessária para atualizar seu valor. Escreva um aplicativo de teste que demonstre
as capacidades da classe criada.
Implementação do lâmpada.java
public class Lampada {
private boolean estadoDaLampada;
private Contador contador;
public Lampada() {
this.estadoDaLampada = false; // Desligada inicialmente
this.contador = new Contador();
}
public void acende() {
if (!estadoDaLampada) {
estadoDaLampada = true;
contador.incrementar();
}
}
public void apaga() {
estadoDaLampada = false;
}
public void mostraEstado() {
if (estadoDaLampada) {
System.out.println("A lâmpada está acesa.");
} else {
System.out.println("A lâmpada está apagada.");
}
}
public boolean estaLigada() {
return estadoDaLampada;
}
public int getQuantidadeVezesAcesa() {
return contador.getValor();
}
}
Implementação de teste lâmpada.java
public class TesteLampada {
public static void main(String[] args) {
Lampada lampada = new Lampada();
lampada.acende();
lampada.mostraEstado();
lampada.apaga();
lampada.mostraEstado();
lampada.acende();
lampada.mostraEstado();
System.out.println("A lâmpada foi acesa " + lampada.getQuantidadeVezesAcesa() + "
vezes.");
}
}
9. Escreva uma classe para representar um número complexo. Essa classe deve conter
três construtores. Um construtor deverá receber os dois valores (parte real e parte imagi-
nária) como argumentos, o outro somente o valor real, considerando o imaginário como
sendo zero, e o terceiro construtor não recebe argumentos, considerando as partes real e
imaginária do número complexo como sendo iguais a zero. Escreva um método toString
que apresente o número complexo em notação apropriada (ex.: 2 + 4i) e o use em um
aplicativo de teste que demonstre as capacidades da classe criada.
public class NumeroComplexo {
private double parteReal;
private double parteImaginaria;
public NumeroComplexo(double parteReal, double parteImaginaria) {
this.parteReal = parteReal;
this.parteImaginaria = parteImaginaria;
}
public NumeroComplexo(double parteReal) {
this(parteReal, 0);
}
public NumeroComplexo() {
this(0, 0);
}
@Override
public String toString() {
if (parteImaginaria >= 0) {
return parteReal + " + " + parteImaginaria + "i";
} else {
return parteReal + " - " + (-parteImaginaria) + "i";
}
}
}
public class TesteNumeroComplexo {
public static void main(String[] args) {
NumeroComplexo num1 = new NumeroComplexo(2, 3);
NumeroComplexo num2 = new NumeroComplexo(4);
NumeroComplexo num3 = new NumeroComplexo();
System.out.println("Número 1: " + num1);
System.out.println("Número 2: " + num2);
System.out.println("Número 3: " + num3);
}
}
10. Escreva uma classe que contenha métodos estáticos para retornar o maior de dois, três,
quatro e cinco valores, considerando que os argumentos e o retorno dos métodos podem
ser dos tipos int e double. Em outra classe, escreva um aplicativo de teste que, sem criar
objetos, demonstre as capacidades da classe criada.
public class MaiorValor {
// Métodos para tipos int
public static int maior(int a, int b) {
return Math.max(a, b);
}
public static int maior(int a, int b, int c) {
return Math.max(maior(a, b), c);
}
public static int maior(int a, int b, int c, int d) {
return Math.max(maior(a, b, c), d);
}
public static int maior(int a, int b, int c, int d, int e) {
return Math.max(maior(a, b, c, d), e);
}
// Métodos para tipos double
public static double maior(double a, double b) {
return Math.max(a, b);
}
public static double maior(double a, double b, double c) {
return Math.max(maior(a, b), c);
}
public static double maior(double a, double b, double c, double d) {
return Math.max(maior(a, b, c), d);
}
public static double maior(double a, double b, double c, double d, double e) {
return Math.max(maior(a, b, c, d), e);
}
}
public class TesteMaiorValor {
public static void main(String[] args) {
// Testes com valores int
System.out.println("Maior entre 3 e 7: " + MaiorValor.maior(3, 7));
System.out.println("Maior entre 3, 7 e 5: " + MaiorValor.maior(3, 7, 5));
System.out.println("Maior entre 3, 7, 5 e 9: " + MaiorValor.maior(3, 7, 5, 9));
System.out.println("Maior entre 3, 7, 5, 9 e 2: " + MaiorValor.maior(3, 7, 5, 9, 2));
// Testes com valores double
System.out.println("Maior entre 3.5 e 7.2: " + MaiorValor.maior(3.5, 7.2));
System.out.println("Maior entre 3.5, 7.2 e 5.8: " + MaiorValor.maior(3.5, 7.2, 5.8));
System.out.println("Maior entre 3.5, 7.2, 5.8 e 9.1: " + MaiorValor.maior(3.5, 7.2, 5.8,
9.1));
System.out.println("Maior entre 3.5, 7.2, 5.8, 9.1 e 2.4: " + MaiorValor.maior(3.5, 7.2,
5.8, 9.1, 2.4));
}
}
11. Escreva uma versão da classe RegistroAcademico (vista em aula) que tenha o campo
numeroDeMatriculas declarado como static, e que incremente o valor deste campo cada
vez que uma instância da classe for criada. Use o atributo numeroDeMatriculas para
definir o atributo matricula automaticamente com um valor diferente para cada instância.
Escreva também uma aplicação que crie algumas instâncias da classe para demonstrar
seu funcionamento.
class RegistroAcademico {
private static int numeroDeMatriculas = 0;
private int matricula;
private String nome;
public RegistroAcademico(String nome) {
this.nome = nome;
this.matricula = ++numeroDeMatriculas; // Incrementa e atribui a matrícula
}
public void exibirDados() {
System.out.println("Nome: " + nome + ", Matrícula: " + matricula);
}
}
public class TesteRegistroAcademico {
public static void main(String[] args) {
RegistroAcademico aluno1 = new RegistroAcademico("Ana");
RegistroAcademico aluno2 = new RegistroAcademico("Bruno");
RegistroAcademico aluno3 = new RegistroAcademico("Carlos");
aluno1.exibirDados();
aluno2.exibirDados();
aluno3.exibirDados();
}
}
12. Escreva uma classe genérica com 3 atributos de um mesmo tipo genérico. Além do
construtor, essa classe deve ter:
• Um método que diz quantos dos 3 atributos são iguais;
• Um método que imprime os 3 atributos.
Escreva também uma classe executável para demonstrar o uso da classe criada com
diferentes tipos de dados.
class Trio<T> {
private T atributo1, atributo2, atributo3;
public Trio(T atributo1, T atributo2, T atributo3) {
this.atributo1 = atributo1;
this.atributo2 = atributo2;
this.atributo3 = atributo3;
}
public int contarIguais() {
int contador = 0;
if (atributo1.equals(atributo2)) contador++;
if (atributo1.equals(atributo3)) contador++;
if (atributo2.equals(atributo3)) contador++;
return contador == 3 ? 3 : contador;
}
public void imprimirAtributos() {
System.out.println("Atributos: " + atributo1 + ", " + atributo2 + ", " + atributo3);
}
}
public class TesteTrio {
public static void main(String[] args) {
Trio<Integer> numeros = new Trio<>(5, 5, 10);
numeros.imprimirAtributos();
System.out.println("Quantidade de iguais: " + numeros.contarIguais());
Trio<String> palavras = new Trio<>("Java", "Java", "Java");
palavras.imprimirAtributos();
System.out.println("Quantidade de iguais: " + palavras.contarIguais());
}
}
13. [FGV - 2024 - CVM - Analista CVM - Perfil 8 - TI / Sistemas e Desenvolvimento] Maria
está desenvolvendo um aplicativo desktop, com base em um ambiente de janelas, e
precisa que alguns processos sejam disponibilizados de forma global no aplicativo, sem
a necessidade de instanciar um objeto específico, e de forma que qualquer entidade
possa acessar.
Por estar trabalhando dentro da metodologia orientada a objetos, Maria precisará adicio-
nar aos métodos globais os modificadores:
(A) privado e estático;
(B) protegido e sobrecarregado;
(C) público e abstrato;
(D) protegido e sobrescrito;
(E) público e estático.
14. [IV - UFG - 2024 - Prefeitura de Rio Branco - AC - Analista de Tecnologia da Informação]
Qual recurso da Análise e Projeto Orientado a Objetos separa os aspectos externos de
um objeto dos detalhes internos da implementação, possibilitando alterar a implementa-
ção de um objeto sem afetar as aplicações que o utilizam?
(A) Polimorfismo
(B) Encapsulamento
(C) Herança
(D) Especilização
15. [FAB - CIAAR - 2023 - Oficial de Apoio da Aeronáutica - Análise de Sistema] As classes
são fundamentais na orientação a objeto. Sobre esse assunto, marque a opção que
apresenta a composição de uma classe de forma correta.
(A) Nome da classe, operações e armazenamento de dados.
(B) Nome da classe, método construtor, armazenamento na sessão.
(C) Nome da classe, atributos, métodos e visibilidade.
(D) Nome da classe, configuração e implementação.
16. [PR-4 UFRJ - 2023 - UFRJ - Técnico de Tecnologia da Informação - Desenvolvimento]
Considere o código em Java a seguir:
public class ContaCorrenteSobrecarga {
int conta;
int agencia;
double saldo;
void efetuarSaque(double valor) {
this.saldo = this.saldo - valor;
}
void efetuarDeposito(double valor) {
this.saldo = this.saldo + valor;
}
void imprimirAtributos(int a) {
System.out.println("Imprime Atributos!");
}
void imprimirAtributos(char a) {
System.out.println("Imprime Atributos!");
}
int imprimirAtributos(char a) {
System.out.println("Imprime Atributos!");
}
}
Baseado no código acima, assinale a alternativa correta.
(A) Um erro de compilação será indicado, pois existem métodos com a mesma assina-tura.
(B) Os métodos efetuarSaque e efetuarDeposito não podem ter o mesmo parâmetro.
(C) A palavra this está sendo usada de forma incorreta.
(D) Um erro de compilação será indicado, pois não há um método construtor.
(E) Métodos de mesmo nome não podem ter parâmetros diferentes.