Prévia do material em texto
AVALIAÇÃO 1
CURSO: Bacharelado em Sistemas de Informação MODALIDADE: Ensino Superior
MÓDULO/SEMESTRE/SÉRIE: 3º PERÍODO LETIVO: 2023.1
DISCIPLINA: Linguagem de Programação II CLASSE: 20222.3.119.1N
DOCENTE: Alexandro dos Santos Silva
DISCENTE: CONCEITO:
INSTRUÇÕES
• A avaliação é composta de 5 (cinco) questões com escore total de 7 (sete) pontos;
• Em caso de identificação de plágio, todos os discentes envolvidos terão sua avaliação anulada, com consequente
atribuição de conceito nulo;
• Para resolução das questões, será admitido o uso apenas da sintaxe adotada para escrita de programas em Java;
• Será admitida entrega da resolução apenas através do ambiente da disciplina junto à plataforma Google Sala de Aula e em prazo
estabelecido pelo docente.
• Para efeito de entrega da resolução, todos os arquivos de extensão .java gerados devem ser compactados em um único
arquivo, cujo nome deve corresponder ao próprio nome do discente, sob pena, inclusive, de penalização.
1. (Peso: 1,5) Implemente uma classe para fins de encapsulamento de dados típicos de produtos comercializados por um
estabelecimento comercial, de nome Produto. Na forma de campos de instância, referidos dados incluem nome, sigla de
unidade de venda ("kg", de quilograma, ou "lt", de litro, por exemplo), estoque inicial e preço unitário de venda, de modo a
serem inicializados na forma de passagem de parâmetros ao construtor no momento em que novo objeto da classe for
instanciado. Considere ainda inclusão de campo adicional para registro de acúmulo de quantidade de venda do produto. Além
dos métodos de acesso getter de tais campos de instância, exige-se a inclusão de outros métodos cuja especificação se segue
abaixo:
Método Descrição
double getEstoqueDisponivel() Estoque disponível considerando diferença entre estoque inicial e quantidade
acumulada de vendas
boolean adicionarVenda(double qtd)
Processamento de nova venda em caso de estoque atual for igual ou superior à
quantidade indicada por qtd e considerando que haja, portanto, atualização de
quantidade acumulada de vendas e, após isso, retorno de true; no entanto, caso
o estoque atual seja inferior, além da não atualização da quantidade acumulada
de vendas, exige-se retorno de false
double getFaturamentoVenda() Retorno de faturamento de venda considerando-se quantidade acumulada de
vendas e preço unitário de venda
boolean isDisponivel()
Retorno de true se ainda houver estoque disponível para realização de vendas
(ou seja, caso estoque atual seja diferente de 0); caso contrário, exige-se retorno
de false
double getPercentEstoqueDisponivel() Retorno de percentual de estoque ainda disponível para realização de vendas, a
ser obtido levando-se em contato estoque inicial e estoque atual
2. (Peso: 1,5) Implemente classe utilitária de nome ProdutoUtil para demonstração das capacidades da classe Produto da
questão anterior. A referida classe deve dispor de método estático main de modo a permitir que sejam implementadas operações
de entrada, pelo usuário, de dados de 5 (cinco) produtos. Sobre estes dados, são eles: nome, sigla de unidade de venda, estoque
inicial e preço unitário de venda (a serem encapsulados em array de objetos da classe Produto). Após isso, deverá ser
executada alguma das seguintes operações:
a) Listagem de nomes de produtos com estoque disponível para novas vendas;
b) Registro de nova venda de algum dos 5 (cinco) produtos, cabendo ao usuário, para tal, indicar produto desejado pela ordem
de entrada de seus respectivos dados (ou seja, um inteiro entre 1 e 5) e quantidade de venda (ao final, deverá ser exibido
informativo indicando se houve processamento da venda com êxito ou, ao invés disto, impossibilidade dela ocorrer por
estoque atual insuficiente do produto);
c) Listagem de faturamento de vendas de produtos para os quais houve registro de 1 (uma) ou mais vendas;
d) Encerramento da aplicação.
Observação: em caso de seleção de alguma das operações elencadas pelos itens a, b e c, após executada, deverá ser permitido
ao usuário selecionar novamente outra operação.
3. (Peso: 1,5) Readeque as classes das 2 (duas) questões anteriores de acordo com condições que se seguem abaixo:
a) Redefinição de construtor da classe Produto de tal modo que exceção da classe java.lang.Exception seja lançada em
caso de tentativa de inicialização de campos de instância numéricos com valores não positivos (estoque inicial e preço
unitário de venda);
b) Inclusão, em método estático main da classe utilitária ProdutoUtil, de bloco try/catch para captura e tratamento de
eventual exceção lançada por construtor da classe Produto, quando da instanciação de novo objeto daquela classe (o
tratamento consistirá na exigência de entrada, novamente, de todos os dados do produto até que não haja mais lançamento
de exceção).
4. (Peso: 1,0) Readeque método estático main da classe utilitária ProdutoUtil da questão anterior de modo a incluir bloco
try/catch para captura e tratamento de eventual exceção de java.util.InputMismatchException por tentativa de entrada
inválida de número de produto que não corresponda ao padrão de inteiro esperado, quando do registro de nova venda. O
tratamento consistirá na exigência de entrada, novamente, de número de produto até que ele seja válido. Neste ponto, entende-
se por entrada inválida qualquer sequência de caracteres que não possui caracteres numéricos decimais ou que, além destes,
possua caracteres não númericos.
Observação: entende-se por entrada inválida de número de produto qualquer entrada que não corresponda a um inteiro
formatado corretamente; caso o número fornecido seja inferior a 1 (um) ou superior a 5 (cinco), em vez de captura e tratamento
de exceção, certifique-se da impossibilidade de registro de nova venda.
5. (Peso: 1,5) A classe que se segue abaixo reproduz comportamento de soma de números inteiros pseudoaleatórios entre 0 (zero)
e 10 (dez) gerados indefinidamente. Para tal, a referida classe herda outra classe, Thread. Ao instanciar novo objeto da classe, é
necessário indicar intervalo em segundos para a geração de novo número pseduoaleatório.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package avaliacao01.questao05;
import java.util.Random;
public class SomadorAleatorio extends Thread {
final int MAX = 10; // valor máximo possível de ser gerado de forma pseudoaleatório
private int soma = 0; // soma de valores pseudoaleatórios
private int intervalo = 0; // intervalo para geração de inteiros pseudoaleatórios (em seg)
// construtor com inicialização de intervalo de geração de inteiros pseudoaleatórios
public SomadorAleatorio(int intervalo) {
this.intervalo = intervalo;
}
// retorno de soma de valores pseudoaleatórios até então gerados
public int getSomaAtual() {
return soma;
}
// tarefa de geração e totalização de inteiros pseudoaleatórios
public void run() {
Random gerador = new Random(); // gerador de números pseudoaleatórios
while (true) { // loop infinito
try {
// geração de inteiro pseudoaleatório e atualização de soma
soma += gerador.nextInt(MAX) + 1;
sleep(intervalo * 1000); // espera de acordo com intervalo
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
Crie uma classe utilitária munida de método estático main para instanciação e execução de 3 (três) threads baseadas na classe
SomadorAleatorio. Para a instanciação de cada thread, caberá ao usuário fornecer intervalo de geração de números
pseudoaleatórios. Após isso, deverá ser executada alguma das seguintes operações:
a) Consulta de valor atual de soma de alguma das três instâncias da classe SomadorAleatorio;
b) Consulta de totalização de somas atuais dastrês instâncias da classe SomadorAleatorio;
c) Encerramento da aplicação.