Exercício de POO Analise a situação descrita abaixo: Em uma escola de segundo grau, com curso médio e técnico, a diretoria especificou um software para manter informações de seus alunos conforme o diagrama UML abaixo. Utilizando a linguagem Java, desenvolver todas as classes do diagrama, com a devida atenção para: a. b. c. d. encapsular obrigatoriamente todos os atributos; implementar a sobrecarga de métodos construtores em pelo menos uma das classe; providenciar a implementação dos métodos get e set necessários às classes Para um aluno do curso médio, o método informarMedia() devolve somente a média do curso médio, comum a todos os alunos do segundo grau. Já para um aluno do curso técnico, o mesmo método devolve a média aritmética entre a média do curso médio e a média do curso técnico. A partir do código abaixo, desenvolva uma aplicação para calcular a potência de quatro ( x 4 ) de um número inteiro entre 1 e 200, inclusive, digitado pelo usuário. Se esta condição não for atendida, o sistema deverá tratar a exceção e enviar uma mensagem para o usuário utilizando uma janela de diálogo. A potência calculada também deverá ser apresentada em uma janela de diálogo. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class CalculaPotencia extends JFrame { private JButton btnCalcular; private JTextField txtBase; private JLabel lblBase; public CalculaPotencia() { setLayout(new FlowLayout()); lblBase = new JLAbel("Digite a base"); add(lblBase); txtBase = new JTextField(10); add(txtBase); btnCalcular = new JButton("Calcular Potência"); add(btnCalcular); // Implementar a chamada do evento } // Implementar a Classe que trata o evento 1-6 public static void main( String args []){ CalculaPotencia aplicacao = new CalculaPotencia(); aplicacao.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); aplicação.setSize(300,150); aplicacao.setVisible(true); } } // fim da classe CalculaPotencia Crie uma aplicação em Java para manipular instâncias das classes AlunoMedio e AlunoTecnico criadas na primeira questão. Esta aplicação deve: instanciar objetos das classes envolvidas com valores definidos pelo teclado; Ex: Aluno do médio: Nome = Carlos, Matrícula = 1000, Média = 8.0 , Código da Disciplina = 100, Descrição = História Aluno do técnico: Nome = Jennifer, Matrícula = 2000, Media = 9.5, Código da Disciplina = 201, Descrição = Eletrônica , Média do Técnico = 6.5 apresentar os dados dos alunos e suas médias implementando, obrigatoriamente, o conceito de polimorfismo. 2-6 Resolução 1o Item package base; public abstract class Aluno { private String nome; // construtor com um argumento public Aluno( String no ){ nome = no; } // configura o nome public void setNome( String no ) { nome = no; } // retorna o nome public String getNome() { return nome; } // métodos abstratos a serem sobrescritos pelas subclasses public abstract double informarMedia(); } package escolatecnica; public class Disciplina { private int codigo; private String descricao; public Disciplina (int cod, String desc){ codigo = cod; descricao = desc; } public void setCodigo (int cod){ codigo = cod; } // Retorna matricula public void setDescricao (String desc) { descricao = desc; } } package escolatecnica; import base.*; public class AlunoSegundoGrau extends Aluno{ private int matricula; private double media; private Disciplina disciplina ; // constructor da classe com 5 argumentos public AlunoSegundoGrau (String no, int mat, double med, int cod, String desc) { super (no); 3-6 setMatricula (mat); setMedia (med); disciplina = new Disciplina (cod, desc); } // fim do construtor // constructor da classe com 2 argumentos public AlunoSegundoGrau (String no, int mat) { super (no); setMatricula (mat); } // fim do construtor // Configura matrícula public void setMatricula (int mat){ matricula = mat; } // Retorna matricula public int getMatricula () { return matricula; } // Configura media do médio public void setMedia(double med){ if (med < 0 ) med = 0.0; else media = med; } // Retorna media do médio public double getMedia() { return media; } public double informarMedia() { return media; } } package escolatecnica; import base.*; public class AlunoMedio extends AlunoSegundoGrau{ // construtor com 5 argumentos public AlunoMedio (String no, int mat, double med, int cod, String desc) { super(no, mat, med, cod, desc); } // fim do construtor } package escolatecnica; import base.*; public class AlunoTecnico extends AlunoSegundoGrau{ private double mediaTecnico; // construtor com seis argumentos public AlunoTecnico (String no, int mat, double med, int cod, String desc, double medT) { super (no, mat, med, cod, desc); setMediaTecnico (medT); } // fim do construtor 4-6 // configura o atributo MediaTecnico public void setMediaTecnico (double mT) { if ( mediaTecnico < 0.0 ) mediaTecnico = 0.0; else mediaTecnico = mT ; } // retorna o atributo média do técnico public double getMediaTecnico() { return mediaTecnico; } // retorna o resultado do cáculo da média do aluno técnico public double informarMedia() { return ( getMedia() + mediaTecnico) / 2; } } 2o Item // Implementação da chamada do evento TrataBotao tratador = new TrataBotao(); btnCalcular.addActionListener(tratador); // Implementação da Classe que trata o evento private class TrataBotao implements ActionListener { public void actionPerformed(ActionEvent evento){ if (event.getSource() == btnCalcular){ try{ btnCalcularClick(evento); } catch (Exception e){ JOptionPane.showMessageDialog(null,e.getMessage(),"CalculaPotência", JOptionPane.ERROR_MESSAGE); } } } } private void btnCalcularClick( ActionEvent ev) throws Exception{ int base = 0; try{ base = Integer.parseInt(txtBase.getText()); } catch( Exception e ){ JOptionPane.showMessageDialog(null,"Você deve digitar um número!!!", "Calcula Potência", JOptionPane.ERROR_MESSAGE ); return; } if( (base < 1) || (base >200) ) throw new Exception( "Número deve ser entre 1 e 200 inclusive!!!" ); else{ int potencia = base * base * base * base; JOptionPane.showMessageDialog( null, "Potência quarta =" + potencia, "Calcula potência", JOptionPane.PLAIN_MESSAGE ); 5-6 } } } 3o Item import import import import base.Aluno; escolatecnica.AlunoMedio; escolatecnica.AlunoTecnico; java.util.Scanner; public class TestaAlunos{ public static void main( String args[] ) { String nome,descricao; int mat, cod; double med, medT; Scanner entrada = new Scanner(System.in); System.out.println("Digite o nome do Aluno do curso Médio"); nome = entrada.nextLine(); System.out.println("Digite a matricula"); mat = entrada.nextInt(); System.out.println("Digite média"); med = entrada.nextDouble(); System.out.println("Digite o codigo da disciplina"); cod = entrada.nextInt(); System.out.println("Digite a descricao da disciplina"); descricao = entrada.nextLine(); AlunoMedio alunoM = new AlunoMedio ( nome, mat, med, cod, descricao ); System.out.println("Digite o nome do Aluno do curso Técnico"); nome = entrada.nextLine(); System.out.println("Digite a matricula"); mat = entrada.nextInt(); System.out.println("Digite média"); med = entrada.nextDouble(); System.out.println("Digite o codigo da disciplina"); cod = entrada.nextInt(); System.out.println("Digite a descricao da disciplina"); descricao = entrada.nextLine(); System.out.println("Digite média do técnico"); medT = entrada.nextDouble(); AlunoCTecnico alunoT = new AlunoTecnico ( nome, mat, med, cod, descricao, medT); // cria uma array alunos de dois elementos Aluno alunos[] = new Aluno[ 2 ]; // inicializa o vetor com alunos alunos[ 0 ] = alunoM; alunos[ 1 ] = alunoT; for ( Aluno alunoCorrente : alunos ) { System.out.printf ("A média final do aluno é alunoCorrente.informarMedia() ); } // final do for } // fim de main } 6-6 : %.1f\n\n",