Prova aplicada em 24/10/2019
1) Dado uma hierarquia de classes mapeadas em uma modelagem de um software, com vistas ao reuso de código, o que deve ser levado em consideração para a decisão do uso de herança de implementação (extends) ou de agregação/composição para promover o reuso ? ( 0,5 )
RESP:
Deve ser levado em consideração o uso em tempo de compilação e o uso em tempo de execução.
Para o uso em tempo de compilação a herança (extends) resolve o problema, para a agregação/composição que é herança de tipo ou uso em tempo de execução resolve o problema.
2) Tipos genéricos podem ser definidos por meio de classes abstratas ou interfaces. Estabeleça as diferenças entre o uso de classes abstratas ou interfaces na implementação de tipos genéricos ? ( 1,0 )
RESP:
Classes abstratas:
+ As classes abstratas força a hierarquia para as subclasses.
+ Seu contrato faz com que as subclasses contemplem as mesmas hierarquias e/ou padrões.
- Classes abstratas não podem ser instanciadas
- Deve conter pelo menos um método abstrato
- Classes abstratas serve apenas para ser herdado
Interface
+ Uma classe pode implementar diversas interfaces
+ Interface não possui implementação, apenas assinatura
- Interface não pode ser instanciada e nem como criar um construtor
3) Como é possível um tipo ser implementado por mais de uma classe ? ( 1,0 )
RESP:
É possível através de interfaces, se uma classe A é do tipo I1, se a classe B é do tipo I2 e se a classe A fazer uma herança (extends) de classe B, logo; podemos dizer que a classe A é do tipo I1 e do tipo I2.
4) Por que é conveniente que um cliente de um objeto não conheça a(s) classe(s) que pode(m) produzir os objetos para ele ? Como isso é possível ? ( 0,7 )
RESP:
Porque é necessário que as classes sejam implementadas por interfaces para adicionar todos os métodos da classe, ou que essa classe se transforme em uma herança.
- É possível através de interfaces que esconde os métodos da classe.
5) Qual a finalidade da API JDBC do java ? ( 0,7 )
RESP:
Porque é necessário que as classes sejam implementadas por interfaces para adicionar todos os métodos da classe ou que essa classe se transforme em uma herança
- É possível através de interfaces que esconde os métodos da classe
6) Como é possível uma aplicação Java acessar mais de um tipo de SGDB de forma flexível (com pouca alteração) por meio da API JDBC ? ( 1,0 )
RESP:
É possível usando um driver JDBC para se comunicar diretamente com uma fonte de dados específica, caso não tenha um driver JDBC é necessário que tenha pelo menos um driver ODBC.
7) Existem quatro tipo de driver JDBC, qual é o mais recomendado ? Porque ? ( 1,0 )
RESP:
Pure Java, tipo 4
- Porque os drivers se comunicam diretamente com o Banco de Dados usando soquetes de rede
- Porque não requer código adicional do Java
8 - Considere o trecho de código a seguir e responda as questões ? ( 0,7 )
package apps;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Conexao1{
public static void main(String args[]){
Connection conexao;
String url = "jdbc:postgresql://localhost:5432/produto";
String usr = "postgresql";
String pass = "postgresql";
try{
Class.forName("org.postgresql.Driver");
conexao = DriverManager.getConnection(url, usr, pass);
System.out.println("Conexão estabelecida");
conexao.close();
System.out.println("Conexão encerrada");
}catch (ClassNotFoundException cnf){
System.out.println("Classe do driver não encontrado - "+cnf.getMessage());
}catch (SQLException sqle){
System.out.println("Conexao não estabelecida - "+sqle.getMessage());
}
}
}
a) Descreva quais são as informações presentes na URL de conexão JDBC ?
RESP:
b) Qual o papel da classe DriverManager ?
RESP:
Realizar a conexão com o banco de dados da fonte específica PostgreSQL usando a URL, USR(usuário) e o pass(senha)
c) Qual a finalidade da Interface / objeto Connection na manipulação de banco de dados por meio da JDBC ?
RESP:
Ser como uma forma de ponte para estabelecer a conexão com o Banco de Dados.
d) O que é realizado no trecho de código, caso ão ocorra exceções ?
RESP:
É feita uma conexão de curto tempo com a fonte específica PostgreSQL e em seguida é finalizado a conexão
9) Considere os trechos de código a seguir e responda as questões. ( 1,0 )
Código 01
Connection conexao = FabricaConexao.obterConexao();
PreparedStatement comando = null;
String nome = "Refrigerantes";
float promocao = 0;
float margem = 50;
try{
comando = conexao.preparedStatement("INSERT INTO GRUPOPRODUTO (NOME, PROMOCAO, MARGEMLUCRO) VALUES (?, ?, ?)");
comando.setString(1, nome);
comando.setFloat(2, promocao);
comando.setFloat(3, margem);
comando.executeUpdate();
System.out.println("Inclusão realizada com sucesso");
}catch (SQLException ex){
System.out.println("Erro ao incluir grupo de produto"+ex.toString());
} finally {
try{
comando.close();
conexao.close();
}catch (SQLException ex){
System.out.println("Erro ao desconectar"+ex.toString);
}
}
Código 02
Connection conexao = FabricaConexao.obterConexao();
PreparedStatement comando = null;
String sql = "Refrigerantes";
String nome = "Bebidas destiladas";
float promocao = 10;
float margem = 50;
sql += "('"+ nome +"', "+promocao+", "+margem+")";
try{
comando = conexao.reateStatment();
comando.executeUpdate(sql);
System.out.println("Inclusão realizada com sucesso");
}catch (SQLException ex){
System.out.println("Erro ao incluir grupo de produto"+ex.toString());
} finally {
try{
comando.close();
conexao.close();
}catch (SQLException ex){
System.out.println("Erro ao desconectar"+ex.toString);
}
}
a) Existe diferença funcional entre os dois trechos de código ? Justifique.
RESP:
Não existe diferença funcionais entre o código 1 e o código 2, porém o código 1 é mais recomendado.
b) Existe diferença de implementação entre os trechos de código ? Justifique.
RESP:
Existe diferença de implementação entre os 2 códigos, o código 01 utiliza o PreparedStatmente para realizar a inserção, já o código 02 utiliza uma String SQL que é menos recomentada.
10) Analise o trecho de código a seguir e responda as questões. Considere que a FábricaConexao é uma classe utilitária que devolve um objeto Connection instanciado. (0,8 )
Connection conexao = FabricaConexao.obterConexao();
PreparedStatement comando = null;
try{
comando = conexao.preparedStatement("SELECT *FROM grupoproduto ORDER BY nome");
ResultSet resultado = comando.executeQuery();
while (resultado.next()){
System.out.println("Codigo: "+resultado.getInt("codigo"));
System.out.println("Nome: "+resultado.getString("nome"));
System.out.println("% Promocao: "+resultado.getFloat("promocao"));
System.out.println("% Margem lucro: "+resultado.getFloat("margemlucro"));
System.out.println("---------------------------------------------------");
}
resultado.close();
}catch (SQLException ex){
System.out.println("Erro ao recuperar os grupos de produtos"+ex.toString());
} finally {
try{
comando.close();
conexao.close();
}catch (SQLException ex){
System.out.println("Erro ao desconectar"+ex.toString);
}
}
a) O que o código realiza (linhas gerais) ?
RESP:
- Realiza a conexão com o banco de dados
- Faz uma seleção de tudo do grupoproduto ordenado em forma crescente por nome
- É processado e executado o resultado
- Enquanto haver dados em ResultSet
- Exibe o código
- Exibe o nome
- Exibe a promoção
- Exibe a margem de lucro
- É finalizada e fechada o resultado
- Caso ocorra erro de comando, irá exibir ERRO e os dados do grupo
- Finalizar a conexão com o Banco de Dados
- Caso ocorra um erro de conexão com Banco de Dados, irá exibir a mensagem de erro SQL
b) O que é o objeto ResultSet ? Qual a sua finalidade ?
RESP:
Coletar informação de linhas de comandos SQL e processa -lá.
- Sua finalidade é ser como um objeto de referência para realizar os comandos SQL