Prévia do material em texto
<p>Centro Universitário Jorge Amado</p><p>Sistemas de Informação</p><p>Salvador</p><p>2024</p><p>Programação Orientada a Objetos I</p><p>Tarefa 2</p><p>Docente: Caio Eduardo Pinheiro Costa</p><p>Aluno: Arlin César Mafra</p><p>Índice</p><p>Introdução...............................................................................................................................4</p><p>Gráfico hierárquico das classes...........................................................................................5</p><p>Codificação das Classes....................................................................................................... 5</p><p>Classe Veículo........................................................................................................................ 5</p><p>Classe Avião........................................................................................................................... 8</p><p>Classe Navio.........................................................................................................................10</p><p>Classe de testes................................................................................................................... 13</p><p>Resultados Obtidos............................................................................................................. 15</p><p>Conclusão.............................................................................................................................17</p><p>Referência.............................................................................................................................19</p><p>Introdução</p><p>Este trabalho tem como objetivo aplicar os conceitos fundamentais da</p><p>Programação Orientada a Objetos (POO), como herança, encapsulamento,</p><p>polimorfismo e tratamento de exceções, no desenvolvimento de uma aplicação</p><p>prática. O projeto envolve a criação de uma hierarquia de classes que representa</p><p>diferentes tipos de veículos — aviões e navios —, utilizando vetores para manipular</p><p>múltiplos objetos de forma eficiente.</p><p>Através da implementação de métodos para ajuste de preço, cálculo de</p><p>proporções e entrada de dados via teclado, o sistema visa simular situações reais</p><p>de manipulação de objetos, procurando garantir robustez ao tratar possíveis erros</p><p>de entrada de dados incorretos. Com isso, o trabalho destaca a importância da</p><p>organização lógica e reusabilidade de código no desenvolvimento de sistemas de</p><p>software, favorecendo a manutenção e evolução do sistema.</p><p>Gráfico hierárquico das classes</p><p>Codificação das Classes</p><p>Classe Veículo</p><p>package com.unijorge.prog1.ava2;</p><p>import java.text.DecimalFormat;</p><p>import java.util.Scanner;</p><p>/**</p><p>*</p><p>* @author arlin</p><p>*/</p><p>public class Veiculo {</p><p>protected int capacidadeTanque;</p><p>protected int numeroPassageiros;</p><p>protected double preco;</p><p>// Construtor padrão</p><p>public Veiculo() {</p><p>}</p><p>// Construtor com parâmetros</p><p>public Veiculo(int capacidadeTanque, int numeroPassageiros, double preco) {</p><p>this.capacidadeTanque = capacidadeTanque;</p><p>this.numeroPassageiros = numeroPassageiros;</p><p>this.preco = preco;</p><p>}</p><p>public int getCapacidadeTanque() {</p><p>return capacidadeTanque;</p><p>}</p><p>public void setCapacidadeTanque(int capacidadeTanque) {</p><p>this.capacidadeTanque = capacidadeTanque;</p><p>}</p><p>public int getNumeroPassageiros() {</p><p>return numeroPassageiros;</p><p>}</p><p>public void setNumeroPassageiros(int numeroPassageiros) {</p><p>this.numeroPassageiros = numeroPassageiros;</p><p>}</p><p>public double getPreco() {</p><p>return preco;</p><p>}</p><p>public void setPreco(double preco) {</p><p>this.preco = preco;</p><p>}</p><p>public void imprimir() {</p><p>DecimalFormat df = new DecimalFormat("###,###.00");</p><p>System.out.println("Capacidade do Tanque: " + capacidadeTanque + " Litros");</p><p>System.out.println("Número de Passageiros: " + numeroPassageiros);</p><p>System.out.println("Preço: R$ " + df.format(preco));</p><p>}</p><p>// Método para reajustar o preço</p><p>public void reajustarPreco(double percentual) {</p><p>this.preco += this.preco * (percentual / 100);</p><p>}</p><p>// Método para entrada de dados</p><p>@SuppressWarnings("InfiniteRecursion")</p><p>public void entrada() {</p><p>Scanner scanner = new Scanner(System.in);</p><p>try {</p><p>System.out.print("Capacidade do Tanque em litros: ");</p><p>this.capacidadeTanque = scanner.nextInt();</p><p>System.out.print("Número de Passageiros: ");</p><p>this.numeroPassageiros = scanner.nextInt();</p><p>System.out.print("Preço: ");</p><p>this.preco = scanner.nextDouble();</p><p>} catch (java.util.InputMismatchException e) {</p><p>System.out.println("Erro: Entrada inválida. Tente novamente.");</p><p>scanner.next();</p><p>entrada();</p><p>}</p><p>}</p><p>}</p><p>Classe Avião</p><p>package com.unijorge.prog1.ava2;</p><p>import java.util.Scanner;</p><p>/*</p><p>* @author arlin</p><p>*/</p><p>public class Aviao extends Veiculo {</p><p>private String prefixo;</p><p>private String dataRevisao;</p><p>// Construtor padrão</p><p>public Aviao() {</p><p>}</p><p>// Construtor com parâmetros</p><p>public Aviao(String prefixo, String dataRevisao, int capacidadeTanque, int</p><p>numeroPassageiros, double preco) {</p><p>super(capacidadeTanque, numeroPassageiros, preco);</p><p>this.prefixo = prefixo;</p><p>this.dataRevisao = dataRevisao;</p><p>}</p><p>public String getPrefixo() {</p><p>return prefixo;</p><p>}</p><p>public void setPrefixo(String prefixo) {</p><p>this.prefixo = prefixo;</p><p>}</p><p>public String getDataRevisao() {</p><p>return dataRevisao;</p><p>}</p><p>public void setDataRevisao(String dataRevisao) {</p><p>this.dataRevisao = dataRevisao;</p><p>}</p><p>@Override</p><p>public void imprimir() {</p><p>System.out.println("Prefixo: " + prefixo);</p><p>super.imprimir();</p><p>System.out.println("Data de Revisão: " + dataRevisao);</p><p>}</p><p>@Override</p><p>@SuppressWarnings("InfiniteRecursion")</p><p>public void entrada() {</p><p>Scanner scanner = new Scanner(System.in);</p><p>try {</p><p>System.out.print("Prefixo: ");</p><p>this.prefixo = scanner.nextLine();</p><p>super.entrada();</p><p>System.out.print("Data de Revisão: ");</p><p>this.dataRevisao = scanner.nextLine();</p><p>} catch (java.util.InputMismatchException e) {</p><p>System.out.println("Erro: Entrada inválida. Tente novamente.");</p><p>scanner.next();</p><p>entrada();</p><p>}</p><p>}</p><p>}</p><p>Classe Navio</p><p>package com.unijorge.prog1.ava2;</p><p>import java.util.Scanner;</p><p>/**</p><p>*</p><p>* @author arlin</p><p>*/</p><p>public class Navio extends Veiculo {</p><p>private String nome;</p><p>private int numeroTripulantes;</p><p>private String dataLancamento;</p><p>public Navio() {</p><p>}</p><p>public Navio(String nome, int numeroTripulantes, String dataLancamento, int</p><p>capacidadeTanque, int numeroPassageiros, double preco) {</p><p>super(capacidadeTanque, numeroPassageiros, preco);</p><p>this.nome = nome;</p><p>this.numeroTripulantes = numeroTripulantes;</p><p>this.dataLancamento = dataLancamento;</p><p>}</p><p>public String getNome() {</p><p>return nome;</p><p>}</p><p>public void setNome(String nome) {</p><p>this.nome = nome;</p><p>}</p><p>public int getNumeroTripulantes() {</p><p>return numeroTripulantes;</p><p>}</p><p>public void setNumeroTripulantes(int numeroTripulantes) {</p><p>this.numeroTripulantes = numeroTripulantes;</p><p>}</p><p>public String getDataLancamento() {</p><p>return dataLancamento;</p><p>}</p><p>public void setDataLancamento(String dataLancamento) {</p><p>this.dataLancamento = dataLancamento;</p><p>}</p><p>@Override</p><p>public void imprimir() {</p><p>System.out.println("Nome: " + nome);</p><p>super.imprimir();</p><p>System.out.println("Número de Tripulantes: " + numeroTripulantes);</p><p>System.out.println("Data de Lançamento: " + dataLancamento);</p><p>}</p><p>// Método para calcular a divisão do número de passageiros pelo número de</p><p>tripulantes</p><p>public double passageirosPorTripulantes() {</p><p>if (numeroTripulantes == 0) {</p><p>return 0;</p><p>}</p><p>int resultado = numeroPassageiros / numeroTripulantes;</p><p>return resultado;</p><p>}</p><p>@Override</p><p>@SuppressWarnings("InfiniteRecursion")</p><p>public void entrada() {</p><p>Scanner scanner = new Scanner(System.in);</p><p>try {</p><p>System.out.print("Nome: ");</p><p>this.nome = scanner.nextLine();</p><p>super.entrada();</p><p>System.out.print("Número de Tripulantes: ");</p><p>this.numeroTripulantes = scanner.nextInt();</p><p>System.out.print("Data de Lançamento: ");</p><p>this.dataLancamento = scanner.next();</p><p>} catch (java.util.InputMismatchException e) {</p><p>System.out.println("Erro: Entrada inválida. Tente novamente.");</p><p>scanner.next();</p><p>entrada();</p><p>}</p><p>}</p><p>}</p><p>Classe de testes</p><p>package com.unijorge.prog1.ava2;</p><p>/**</p><p>* @author arlin</p><p>*/</p><p>public class Prog1Ava2 {</p><p>public static void main(String[] args) {</p><p>// Criando um vetor de objetos</p><p>Veiculo[] veiculos = new Veiculo[20];</p><p>// Inicializando 10 objetos do tipo</p><p>Aviao</p><p>System.out.println("Dados dos Aviões:");</p><p>for (int i = 0; i < 10; i++) {</p><p>veiculos[i] = new Aviao();</p><p>veiculos[i].entrada();</p><p>veiculos[i].reajustarPreco(10);</p><p>}</p><p>// Inicializando 10 objetos do tipo Navio</p><p>System.out.println("Dados dos Navios:");</p><p>for (int i = 10; i < 20; i++) {</p><p>veiculos[i] = new Navio();</p><p>veiculos[i].entrada();</p><p>}</p><p>System.out.println();</p><p>// Imprimindo os dados dos veículos</p><p>for (int i = 0; i < 20 ; i++) {</p><p>System.out.println("============================");</p><p>if(i < 10){</p><p>System.out.println("=============Dados do Avião "+ (i+1) +"</p><p>===============");</p><p>}else{</p><p>System.out.println("=============Dados do Navio " + (i - 9) + "</p><p>===============");</p><p>}</p><p>veiculos[i].imprimir();</p><p>if(i >= 10){</p><p>System.out.println("Passageiros por tripulante: "</p><p>+ ((Navio) veiculos[i]).passageirosPorTripulantes());</p><p>}</p><p>System.out.println("============================");</p><p>}</p><p>}</p><p>}</p><p>Resultados Obtidos</p><p>imagem 1:dados dos aviões 1 ao 5</p><p>imagem 2: dados dos aviões 6 ao 10</p><p>imagem 3: dados dos navios 1 ao 4</p><p>imagem 4: dados dos navios 5 ao 8</p><p>imagem 5: dados dos navios 9 e 10</p><p>Conclusão</p><p>Neste projeto, foi possível aplicar os conceitos de Programação Orientada a</p><p>Objetos (POO) no desenvolvimento de uma aplicação prática. As classes Veiculo,</p><p>Aviao e Navio foram criadas utilizando o princípio de herança, compartilhando</p><p>funcionalidades comuns através da superclasse Veiculo e especializando</p><p>funcionalidades específicas nas subclasses.</p><p>A criação de uma hierarquia de classes demonstrou a importância da</p><p>reutilização de código e da organização de atributos e métodos em estruturas mais</p><p>adequadas para diferentes tipos de veículos. O uso de tratamento de exceções foi</p><p>fundamental para garantir a integridade dos dados fornecidos pelo usuário,</p><p>assegurando que a entrada de informações incorretas fosse tratada</p><p>adequadamente, sem interromper a execução do programa.</p><p>Além disso, o projeto incluiu o uso de vetores para armazenar e manipular</p><p>múltiplos objetos, evidenciando a importância das estruturas de dados no</p><p>gerenciamento eficiente de coleções de objetos. O ajuste de preços e o cálculo da</p><p>proporção de passageiros por tripulante no caso dos navios exemplificaram a</p><p>utilização de métodos para modificar e obter informações sobre os atributos dos</p><p>objetos.</p><p>A aplicação mostrou-se eficaz, permitindo a criação, manipulação e</p><p>visualização dos dados de aviões e navios, conforme solicitado. A organização do</p><p>código e o uso de boas práticas de programação facilitaram a manutenção e a</p><p>clareza do sistema.</p><p>Referência</p><p>YOUTUBE. Curso Completo de Java - Playlist. 2024. Disponível em:</p><p>https://www.youtube.com/playlist?list=PLGxZ4Rq3BOBq0KXHsp5J3PxyFaBIXVs3r.</p><p>Acesso em: 6 set. 2024.</p><p>https://www.youtube.com/playlist?list=PLGxZ4Rq3BOBq0KXHsp5J3PxyFaBIXVs3r</p><p>https://www.youtube.com/playlist?list=PLGxZ4Rq3BOBq0KXHsp5J3PxyFaBIXVs3r</p>