Prévia do material em texto
UNIVERSIDADE VEIGA DE ALMEIDA
GRADUAÇÃO EM ANÁLISE E
DESENVOLVIMENTO DE SISTEMAS
DESENVOLVIMENTO DE PROJETO DE APLICAÇÃO COM USO
DE VETORES DE OBJETOS COM TRATAMENTO DE
EXCEÇÕES.
JAIME DE MELO MORAES
MATRÍCULA:1220200564
DUQUE DE CAXIAS
2024
JAIME DE MELO MORAES
MATRÍCULA:1220200564
DESENVOLVIMENTO DE PROJETO DE APLICAÇÃO COM USO
DE VETORES DE OBJETOS COM TRATAMENTO DE
EXCEÇÕES.
Trabalho apresentado para avaliação
da disciplina Programação orientada a objeto I
Curso superior em análise e desenvolvimento de sistema
da instituição Veiga de almeida
ministrado pelo professor Claudio Fico Fonseca.
Transcrição do enunciado:
Desenvolvimento de projeto de aplicação com uso de vetores de
objetos com tratamento de exceções
O uso de vetores e matrizes de objetos pode facilitar muito o desenvolvimento de
determinados projetos, facilitando o desenvolvimento, diminuindo a complexidade e
favorecendo a manutenção do sistema.
Dadas as classes a seguir, crie uma superclasse para atender às necessidades das
subclasses, com todas as funcionalidades comuns às classes similares. Crie também uma
aplicação que gere, por meio de um vetor único com dez objetos de cada tipo, utilizando
sempre o construtor vazio. Utilize o tratamento de exceções para proteger a aplicação
contra possíveis entradas de dados inválida com os métodos da classe Scanner.
Classes:
Classe Atributos Métodos
Aviao
Prefixo : Texto
CapacidadeTanque : inteiro
NumeroPassageiros : inteiro
Preco : real
DataRevisao : Texto
· Acesso (setters e getters).
· Construtores: pelo menos dois métodos
construtores.
· imprimir(): exibe os dados do objeto.
. entrada(): realiza a entrada de dados pelo
teclado
· reajustarPreco(percentual : real): reajusta o
preço do avião, alterando o valor do atributo
de acordo com o percentual passado como
parâmetro.
Navio
Nome : Texto
CapacidadeTanque : inteiro
NumeroPassageiros : inteiro
NumeroTripulantes : inteiro
Preco : real
DataLancamento : Texto
· Acesso (setters e getters).
· Construtores: pelo menos cinco métodos
construtores.
· imprimir(): exibe os dados do objeto.
· entrada(): realiza a entrada de dados pelo
teclado
· passageirosPorTripulantes(): retorna a
divisão do número de passageiros pelo
número de tripulantes. Os valores usados
nesse método são atributos, por isso não
precisam ser passados como parâmetros.
Observações:
1. A superclasse deverá possuir dois métodos construtores também.
2. Apenas atributos com o mesmo nome e do mesmo tipo podem ser considerados
similares para a herança.
3. Os atributos devem ser protegidos contra acesso direto.
Monte o diagrama de hierarquia das classes e defina onde ficará cada atributo após a
aplicação do conceito de herança. Após a determinação da hierarquia, desenvolva
separadamente as classes (incluindo a classe de aplicação). O projeto deve então ser
documentado em um arquivo do Word e postado no ambiente de avaliação.
Introdução:
No desenvolvimento de sistemas de software, a utilização de boas práticas de programação
e a aplicação de conceitos como herança, encapsulamento e tratamento de exceções são
fundamentais para garantir a qualidade, a eficiência e a robustez do sistema. Neste
contexto, o uso de vetores e matrizes de objetos pode facilitar significativamente o
desenvolvimento de projetos, proporcionando uma estrutura organizada e de fácil
manutenção.
O presente trabalho tem como objetivo demonstrar a aplicação desses conceitos na
construção de um sistema de gestão de veículos, utilizando as linguagens de programação
orientada a objetos. Serão apresentadas duas classes principais, Avião e Navio, que
representam tipos distintos de veículos, cada uma com suas características específicas e
funcionalidades. A partir dessas classes, será desenvolvida uma superclasse Veículo, que
conterá os atributos e métodos comuns a ambas as subclasses.
Além disso, será implementada uma aplicação que utiliza um vetor único para armazenar
objetos de ambas as subclasses, preenchendo-o com dados inseridos pelo usuário por
meio de um tratamento de exceções, garantindo a integridade e a validade das informações
fornecidas. Ao final, será apresentado um diagrama de hierarquia das classes, ilustrando a
estrutura do sistema e a relação de herança entre as classes envolvidas.
Dessa forma, este trabalho visa exemplificar de forma prática e didática a aplicação dos
conceitos estudados, demonstrando sua relevância e utilidade na construção de sistemas
orientados a objetos.
Desenvolvimento:
import java.util.Scanner;
// Superclasse Veiculo
class Veiculo {
// Atributos protegidos para permitir acesso pelas subclasses
protected int capacidadeTanque;
protected int numeroPassageiros;
protected double preco;
// Métodos construtores
public Veiculo() {
this.capacidadeTanque = 0;
this.numeroPassageiros = 0;
this.preco = 0.0;
}
public Veiculo(int capacidadeTanque, int numeroPassageiros, double preco) {
this.capacidadeTanque = capacidadeTanque;
this.numeroPassageiros = numeroPassageiros;
this.preco = preco;
}
// Getters e setters
public int getCapacidadeTanque() {
return capacidadeTanque;
}
public void setCapacidadeTanque(int capacidadeTanque) {
this.capacidadeTanque = capacidadeTanque;
}
public int getNumeroPassageiros() {
return numeroPassageiros;
}
public void setNumeroPassageiros(int numeroPassageiros) {
this.numeroPassageiros = numeroPassageiros;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
// Método para imprimir os dados do objeto
public void imprimir() {
System.out.println("Capacidade do tanque: " + capacidadeTanque);
System.out.println("Número de passageiros: " + numeroPassageiros);
System.out.println("Preço: " + preco);
}
// Método para reajustar o preço
public void reajustarPreco(double percentual) {
this.preco *= (1 + percentual / 100);
}
// Método para entrada de dados pelo teclado com tratamento de exceções
public void entrada(Scanner scanner) {
try {
System.out.print("Capacidade do tanque: ");
this.capacidadeTanque = scanner.nextInt();
System.out.print("Número de passageiros: ");
this.numeroPassageiros = scanner.nextInt();
System.out.print("Preço: ");
this.preco = scanner.nextDouble();
} catch (Exception e) {
System.out.println("Entrada inválida. Certifique-se de digitar números inteiros para
capacidade do tanque e número de passageiros, e um número real para o preço.");
scanner.nextLine(); // Limpar o buffer do scanner
entrada(scanner); // Chamar novamente o método de entrada
}
}
}
// Subclasse Aviao
class Aviao extends Veiculo {
private String prefixo;
private String dataRevisao;
// Construtores
public Aviao() {
super();
this.prefixo = "";
this.dataRevisao = "";
}
public Aviao(String prefixo, String dataRevisao, int capacidadeTanque, int
numeroPassageiros, double preco) {
super(capacidadeTanque, numeroPassageiros, preco);
this.prefixo = prefixo;
this.dataRevisao = dataRevisao;
}
// Getters e setters específicos
public String getPrefixo() {
return prefixo;
}
public void setPrefixo(String prefixo) {
this.prefixo = prefixo;
}
public String getDataRevisao() {
return dataRevisao;
}
public void setDataRevisao(String dataRevisao) {
this.dataRevisao = dataRevisao;}
// Sobrescrita do método imprimir para incluir os dados específicos do avião
@Override
public void imprimir() {
super.imprimir();
System.out.println("Prefixo: " + prefixo);
System.out.println("Data de revisão: " + dataRevisao);
}
}
// Subclasse Navio
class Navio extends Veiculo {
private String nome;
private int numeroTripulantes;
private String dataLancamento;
// Construtores
public Navio() {
super();
this.nome = "";
this.numeroTripulantes = 0;
this.dataLancamento = "";
}
public Navio(String nome, String dataLancamento, int capacidadeTanque, int
numeroPassageiros, int numeroTripulantes, double preco) {
super(capacidadeTanque, numeroPassageiros, preco);
this.nome = nome;
this.numeroTripulantes = numeroTripulantes;
this.dataLancamento = dataLancamento;
}
// Getters e setters específicos
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getNumeroTripulantes() {
return numeroTripulantes;
}
public void setNumeroTripulantes(int numeroTripulantes) {
this.numeroTripulantes = numeroTripulantes;
}
public String getDataLancamento() {
return dataLancamento;
}
public void setDataLancamento(String dataLancamento) {
this.dataLancamento = dataLancamento;
}
// Método específico para calcular a relação entre passageiros e tripulantes
public double passageirosPorTripulantes() {
if (numeroTripulantes == 0) {
return 0;
}
return (double) numeroPassageiros / numeroTripulantes;
}
// Sobrescrita do método imprimir para incluir os dados específicos do navio
@Override
public void imprimir() {
super.imprimir();
System.out.println("Nome: " + nome);
System.out.println("Número de tripulantes: " + numeroTripulantes);
System.out.println("Data de lançamento: " + dataLancamento);
}
}
// Classe de aplicação
public class Aplicacao {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Criando um vetor com 10 objetos de cada tipo
Veiculo[] veiculos = new Veiculo[20];
// Preenchendo o vetor com aviões
for (int i = 0; i < 10; i++) {
Aviao aviao = new Aviao();
System.out.println("Preenchendo os dados do avião " + (i + 1));
aviao.entrada(scanner);
veiculos[i] = aviao;
}
// Preenchendo o vetor com navios
for (int i = 10; i < 20; i++) {
Navio navio = new Navio();
System.out.println("Preenchendo os dados do navio " + (i - 9));
navio.entrada(scanner);
veiculos[i] = navio;
}
// Imprimindo os dados dos veículos
for (Veiculo veiculo : veiculos) {
veiculo.imprimir();
System.out.println();
}
scanner.close();
}
}
Testes:
Nome:
Número de tripulantes: 0
Data de lançamento:
Capacidade do tanque: 265
Número de passageiros: 485
Preço: 324.0
Nome:
Número de tripulantes: 0
Data de lançamento:
PS C:\Users\jaime\OneDrive\Área de Trabalho\projeto.java>
Conclusão
O desenvolvimento deste projeto proporcionou uma oportunidade valiosa para aplicar e
entender conceitos fundamentais da programação orientada a objetos, como herança,
encapsulamento e tratamento de exceções. Ao criar uma hierarquia de classes para
representar veículos, foi possível demonstrar como as características comuns podem ser
encapsuladas em uma superclasse, enquanto as particularidades de cada tipo de veículo
são implementadas nas subclasses.
Durante a implementação, foram utilizadas práticas recomendadas de programação, como
a proteção dos atributos contra acesso direto e a organização do código em métodos e
classes coesas e de fácil compreensão. Além disso, o tratamento de exceções foi
implementado para garantir a robustez da aplicação, fornecendo uma maneira elegante de
lidar com possíveis erros durante a entrada de dados pelo usuário.
A realização de testes foi fundamental para verificar o funcionamento correto das classes e
identificar possíveis falhas de implementação. Por meio dos testes, foi possível confirmar
que os métodos desenvolvidos estão comportando-se conforme o esperado e que a
aplicação está pronta para uso em diferentes cenários.
Referencias:
POO com Java no VS Code :: Aula 19 :: Criação de Classes e Objetos
(youtube.com)
E-book (instructure.com)
Vídeos da disciplina (instructure.com)
https://www.youtube.com/watch?v=CMdFpY0BKZk
https://www.youtube.com/watch?v=CMdFpY0BKZk
https://uva.instructure.com/courses/39531/modules/items/642175
https://uva.instructure.com/courses/39531/modules/items/642176
DESENVOLVIMENTO DE PROJETO DE APLICAÇÃO COM USO DE VETORES DE OBJETOS COM TRATAMENTO DE EXCEÇÕES.
DESENVOLVIMENTO DE PROJETO DE APLICAÇÃO COM USO DE VETORES DE OBJETOS COM TRATAMENTO DE EXCEÇÕES.
Desenvolvimento de projeto de aplicação com uso de vetores de objetos com tratamento de exceções