Você está na página 1de 13

UNIVERSIDADE VEIGA DE ALMEIDA –

UVA
CURSO SUPERIOR DE SISTEMAS DE
INFORMAÇÃO

TRABALHO DA DISCIPLINA [AVA1]


Mateus Florindo Pereira
Índice
Introdução:.............................................................................................................................1
Trabalho:................................................................................................................................2
Código da classe Veiculo:......................................................................................................4
Código da classe Aviao:.........................................................................................................4
Código da classe Navio:.........................................................................................................5
Código da classe principal:.....................................................................................................6
Código do singleton Utility....................................................................................................7
Conclusão:..............................................................................................................................9
Bibliografia:..........................................................................................................................10

0
Introdução

Neste trabalho será apresentado o conceito de super classe em Java, visando


demonstrar a utilidade do uso de vetores e matrizes em projetos reais.

1
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

· Acesso (setters e getters).


· Construtores: pelo menos dois métodos
Prefixo : Texto construtores.

CapacidadeTanque : inteiro · imprimir(): exibe os dados do objeto.


NumeroPassageiros : . entrada(): realiza a entrada de dados pelo
Aviao teclado
inteiro
Preco : real · reajustarPreco(percentual : real): reajusta
o preço do avião, alterando o valor do
DataRevisao : Texto atributo de acordo com o percentual
passado como parâmetro.

Nome : Texto
· Acesso (setters e getters).
CapacidadeTanque : inteiro
· Construtores: pelo menos cinco métodos
Navio NumeroPassageiros : construtores.
inteiro
· imprimir(): exibe os dados do objeto.
NumeroTripulantes : inteiro

2
Preco : real · entrada(): realiza a entrada de dados pelo
teclado
DataLancamento : Texto
· 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)

Diagrama de hierarquia das classes:

Veiculo (Pai)

Aviao (filho) Navio (filho)

Atributos:

Veiculo: capacidadeTanque, numeroPassageiros, preco;


Aviao: prefixo, dataRevisao;
Navio: nome, numeroTripulantes, dataLancamento;

3
Classe Veiculo:

public class Veiculo {


protected int capacidadeTanque;
protected int numeroPassageiros;
protected double preco;

public Veiculo() {
}

public Veiculo(int capacidadeTanque, int numeroPassageiros, double


preco) {
this.capacidadeTanque = capacidadeTanque;
this.numeroPassageiros = numeroPassageiros;
this.preco = preco;
}

protected void imprimir() {


System.out.println("Capacidade do Tanque: " + capacidadeTanque);
System.out.println("Número de Passageiros: " + numeroPassageiros);
System.out.println("Preço: " + preco);
}

protected void entrada() {


System.out.println("Informe a Capacidade do Tanque: ");
capacidadeTanque = Utility.getInstance().getScanner().nextInt();
System.out.println("Informe o Número de Passageiros: ");
numeroPassageiros = Utility.getInstance().getScanner().nextInt();
System.out.println("Informe o Preço: ");
preco = Utility.getInstance().getScanner().nextDouble();
Utility.getInstance().getScanner().nextLine();
}
}

Classe Aviao:

public class Aviao extends Veiculo {


private String prefixo;
private String dataRevisao;

4
public Aviao() {
}

public Aviao(int capacidadeTanque, int numeroPassageiros, double preco,


String prefixo, String dataRevisao) {
super(capacidadeTanque, numeroPassageiros, preco);
this.prefixo = prefixo;
this.dataRevisao = dataRevisao;
}

protected void imprimir() {


super.imprimir();
System.out.println("Prefixo: " + prefixo);
System.out.println("Data de Revisão: " + dataRevisao);
}

protected void reajustarPreco(double percentual) {


preco = preco * (1 + percentual / 100);
}

protected void entrada() {


super.entrada();
System.out.println("Informe o Prefixo: ");
prefixo = Utility.getInstance().getScanner().nextLine();
System.out.println("Informe a Data de Revisão: ");
dataRevisao = Utility.getInstance().getScanner().nextLine();
}
}

Classe Navio:

public class Navio extends Veiculo {


private String nome;
private int numeroTripulantes;
private String dataLancamento;

public Navio() {
}

public Navio(int capacidadeTanque, int numeroPassageiros, double preco,


String nome, int numeroTripulantes, String dataLancamento) {
super(capacidadeTanque, numeroPassageiros, preco);
this.nome = nome;
this.numeroTripulantes = numeroTripulantes;
this.dataLancamento = dataLancamento;
}

5
protected 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);
}

protected double passageirosPorTripulantes() {


if (numeroTripulantes != 0) {
return (double) numeroPassageiros / numeroTripulantes;
} else {
return 0.0;
}
}

protected void entrada() {


super.entrada();
System.out.println("Informe o Nome: ");
nome = Utility.getInstance().getScanner().nextLine();
System.out.println("Informe o Número de Tripulantes: ");
numeroTripulantes = Utility.getInstance().getScanner().nextInt();
Utility.getInstance().getScanner().nextLine();
System.out.println("Informe a Data de Lançamento: ");
dataLancamento = Utility.getInstance().getScanner().nextLine();
}
}

Classe Principal:

public class App {


public static void main(String[] args) throws Exception {

Aviao[] avioes = new Aviao[10];


Navio[] navios = new Navio[10];

try {
for (int i = 0; i < 10; i++) {
avioes[i] = new Aviao();
System.out.println("Preenchendo dados para o Avião #" + (i +
1));
avioes[i].entrada();
System.out.println("/////////////////////////////////");
}

for (int i = 0; i < 10; i++) {


navios[i] = new Navio();

6
System.out.println("Preenchendo dados para o Navio #" + (i +
1));
navios[i].entrada();
System.out.println("/////////////////////////////////");

}
} catch (Exception e) {
System.out.println("Ocorreu um erro durante a entrada de
dados.");
e.printStackTrace();
} finally {
Utility.getInstance().closeScanner();
}

for (int i = 0; i < 10; i++) {


System.out.println("Avião #" + (i + 1));
avioes[i].imprimir();
System.out.println("/////////////////////////////////");
}

System.out.println("\nDados dos Navios:");


for (int i = 0; i < 10; i++) {
System.out.println("Navio #" + (i + 1));
navios[i].imprimir();
System.out.println("/////////////////////////////////");
}

Singleton Utility:

import java.util.Scanner;

public class Utility {


private static Utility instance;
private Scanner scanner;

private Utility() {
scanner = new Scanner(System.in);
}

public static Utility getInstance() {


if (instance == null) {
instance = new Utility();

7
}
return instance;
}

public Scanner getScanner() {


return scanner;
}

public void closeScanner() {


scanner.close();
}
}

8
Conclusão
Após os exemplos acima, e a construção de classes utilizando-se de atributos
compartilhados e hierarquia é possível notar somando ao trabalho anterior o ainda maior
ganho não somente em agilidade ao construir e a trabalhar com objetos, mas também no
ganho de estrutura, onde classes podem ser atribuídas a uma cascata organizada.

9
Bibliografia
DEVMEDIA. Trabalhando com Singleton - Java. Disponível em:
https://www.devmedia.com.br/trabalhando-com-singleton-java/23632. Acesso em: 02
set. 2023.

10

Você também pode gostar