Ap3 Poo 2023.2 Gab

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 3

Fundação CECIERJ - Vice Presidência de Educação Superior a Distância

Curso de Tecnologia em Sistemas de Computação


Disciplina: EAD05032 - Programação Orientada a Objetos
AP3 – 2° semestre de 2023.

Observações:
1. Prova sem consulta e sem uso de máquina de calcular.
2. Use caneta para preencher o seu nome e assinar nas folhas de questões e nas folhas de
respostas.
3. Você pode usar lápis para responder as questões.
4. Ao final da prova devolva as folhas de questões e as de respostas.
5. Todas as respostas devem ser transcritas nas folhas de respostas. As respostas nas folhas de
questões não serão corrigidas.

Questão 1) (5,0 PONTOS)


Escreva um conjunto de classes com atributos e métodos que apliquem os três pilares da
programação orientada a objetos: encapsulamento, herança e polimorfismo. O cenário é a
modelagem de pessoas, que podem ser pessoas físicas ou pessoas jurídicas, sendo que toda pessoa
possui um nome, pessoas físicas possuem CPF e pessoas jurídicas possuem CNPJ. Para toda pessoa
é possível solicitar que tipo de pessoa ela é, sendo que pessoas físicas respondem “Sou pessoa física
e meu CPF é ABC”, quanto que pessoas jurídicas respondem “Sou pessoa jurídica e meu CNPJ é
XYZ”, onde ABC e XYZ são, respectivamente, o CPF ou CNPJ da pessoa.
A implementação apresentada como resposta desta questão deve indicar por comentário e de forma
inequívoca onde foi aplicado encapsulamento, herança e polimorfismo. A avaliação será não só do
código produzido, mas também a correta ciência da aplicação dos pilares.
Gabarito
public abstract class Pessoa {
private String nome; // Encapsulamento pelo uso de private no atributo
// e setter (podia ter um getter, também).
public Pessoa(nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public abstract String getTipo(); // Polimorfismo.
}

public class PessoaFisica extends Pessoa { // Herança, por causa do extends e


private String cpf; // por reaproveitar o que foi
// implementado na superclasse.
public PessoaFisica(String nome, String cpf) {
super(nome);
this.cpf = cpf;
}
public String getCPF() { // Encapsulamento pelo uso de private no atributo
return cpf; // e setter (podia ter um getter, também).
}
public String getTipo() { // Polimorfismo.
return "Sou pessoa física e meu CPF é " + cpf;
}
}

public class PessoaJuridica extends Pessoa { // Herança, por causa do extends e


private String cnpj; // por reaproveitar o que foi
// implementado na superclasse.
public PessoaJuridica(String nome, String cnpj) {
super(nome);
this.cnpj = cnpj;
}
public String getCNPJ() { // Encapsulamento pelo uso de private no atributo
return cnpj; // e setter (podia ter um getter, também).
}
public String getTipo() { // Polimorfismo.
return "Sou pessoa jurídica e meu CNPJ é " + cnpj;
}
}

Questão 2) (3,5 PONTOS)


A coordenação do curso de Tecnologia em Sistemas de Computação do CEDERJ resolveu utilizar a
Questão 2 da AP3 de Programação Orientada a Objetos para desenvolver um sistema revolucionário
que auxiliará na organização da grade de horários dos alunos. O programa a ser escrito nessa
questão receberá como entrada um arquivo texto que registra cada disciplina cursada por cada
estudante no semestre atual. As disciplinas são identificadas por código e os estudantes por número
de matrícula. Cada par de dados ocupa uma linha do arquivo, sendo os dados separados por uma
barra. Um exemplo de um arquivo de entrada é mostrado a seguir:
EAD05034/20113000001
EAD05032/20141000002
EAD05034/20141000002
EAD05032/20113000001
EAD00096/20113000001
Escreva um programa que leia da entrada padrão o nome do arquivo de entrada, em seguida abra
esse arquivo e organize a informação de modo que seja produzido um novo arquivo texto para cada
estudante contento a lista de disciplinas cursadas por ele(a), um código de disciplina por linha. O
nome dos arquivos gerados deve ser o código de matrícula do respectivo estudante. Por exemplo,
para o arquivo de entrada dado acima são gerados dois arquivos de saída:
Arquivo 20113000001.txt
EAD05034
EAD05032
EAD00096
Arquivo 20141000002.txt
EAD05032
EAD05034
É importante ressaltar que seu programa deve funcionar com qualquer arquivo de entrada que
respeite a formatação indicada. Programas que funcionam apenas com o exemplo dado na folha de
prova serão considerados incorretos.
Gabarito
import java.io.*;
import java.util.*;

public class Questao2 {


public static void main(String[] args) throws Exception {
Scanner s = new Scanner(System.in);
BufferedReader in = new BufferedReader(new FileReader(s.nextLine()));
try {
String linha;
while ((linha = in.readLine()) != null) {
String[] dados = linha.split("/");
BufferedWriter out = new BufferedWriter(
new FileWriter(dados[1] + ".txt", true));
try {
out.write(dados[0] + "\n");
}
finally {
out.close();
}
}
}
finally {
in.close();
}
}
}

Questão 3) (1,5 PONTOS)

Escreva classes que apresentem um exemplo de sobrescrita e um exemplo de sobrecarga de


métodos. Indique claramente qual é cada caso implementado.

Gabarito

Exemplo de sobrescrita:
public class Animal {
public String emitirSom() {
return "Som genérico de animal";
}
}
public class Cachorro extends Animal {
@Override
public String emitirSom() {
return "Latido";
}
}

Exemplo de sobrecarga:
public class Calculadora {
public int somar(int a, int b) {
return a + b;
}
public int somar(int a, int b, int c) {
return a + b + c;
}
}

Você também pode gostar