![Page 1: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/1.jpg)
Java AvançadoMaurício Linhares
Especialização em Desenvolvimento para a Web - iDez
![Page 2: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/2.jpg)
Assuntos da aula
Revisão;
Composição e agregação de objetos;
Testes unitários em Java com JUnit;
Classe File;
Classes InputStream e OutputStream;
Classes Reader e Writer;
FileChannels e NIO;
Parsing de XML com DOM e StAX;
Acesso a bancos de dados em Java com JDBC;
![Page 3: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/3.jpg)
Associações entre objetos
Objetos podem referenciar outros objetos como suas propriedades;
Quando objetos são associados, dois tipos de associação se configuram:Composição;Agregação;
![Page 4: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/4.jpg)
Agregação
Quando um objeto referencia um ou mais objetos mas os objetos referenciados existem independentemente de quem os referencia;
Na agregação, os objetos referenciados normalmente são acessíveis para todos e fazem parte da API pública do objeto;
Eles tem outras responsabilidades no sistema além de serem referenciados pelo agregador;
![Page 5: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/5.jpg)
Modelagem do barzinho da esquina
![Page 6: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/6.jpg)
Modelando uma UniversidadeExercício
![Page 7: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/7.jpg)
Composição
Associação na qual um objeto é tido como “dono” dos objetos os quais ele referencia;
Os objetos referenciados agora não podem mais existir sem o objeto raiz, não faz sentido os ter dentro do sistema de forma separada;
Em muitos casos, os objetos referenciados não ficam visíveis para quem utiliza o objeto raiz;
![Page 8: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/8.jpg)
Modelando um carro
![Page 9: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/9.jpg)
Modelando um computadorExercício
![Page 10: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/10.jpg)
Introdução aos testes unitários
O que são testes unitários?
Pra que servem os testes unitários?
Eles são realmente testes?
![Page 11: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/11.jpg)
Prática – TDD com Contas Bancárias
![Page 12: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/12.jpg)
Prática – Criando uma classe Dinheiro
![Page 13: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/13.jpg)
Prática – Calculando a data de entrega de um pedido
![Page 14: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/14.jpg)
Arquivos em Java – java.io.File
Classe base que representa um caminho:ArquivosDiretóriosCaminho virtual (que ainda não existe no sistema de
arquivos)
Pode ser usada para:Criar;Remover;Mover;
![Page 15: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/15.jpg)
Métodos comuns
createNewFile | mdkirCria um arquivo ou diretório
mkdirsCria o diretório e todos os diretórios pais que ainda
não existam
lenghtDiz o tamanho do arquivo em bytes
rename( File ) Renomeia (move) um arquivo para o caminho
passado como parâmero
![Page 16: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/16.jpg)
Métodos comuns
delete()Remove o arquivo ou o diretório (apenas se o
diretório estiver vazio);
list()Lista todos os arquivos e pastas que estejam nesse
diretório (retorna nomes de arquivos, não caminhos);
list(FilenameFilter)Lista todos os arquivos do diretório que atenderem
ao requisito;
![Page 17: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/17.jpg)
InputStream e OutputStream
Fluxo padrão para leitura e escrita de dados em formato binário em Java;
É usado para ler e escrever em arquivos, memória, conexões de rede ou entrada/saída padrão do sistema;
Contém várias classes complementares;
![Page 18: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/18.jpg)
Outras de classes Stream em Java
Buffered(Input/Output)Stream;
File(Input/Output)Stream;
ByteArray(Input/Output)Stream;
![Page 19: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/19.jpg)
Streams em Java – Decorator pattern
InputStream
FileInputStream
BufferedInputStream
![Page 20: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/20.jpg)
Criando um OutputStream que faz backup automático
![Page 21: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/21.jpg)
Object(Input|Output)Stream e Serializable
Classes utilizadas para escrever objetos Java diretamente em um arquivo;
Objetos salvos em formato binário, lido diretamente pela classe ObjectOutputStream;
Maneira simples de gravar dados da aplicação, mas pouco portável e pode causar problemas de compatibilidade;
![Page 22: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/22.jpg)
Lendo e escrevendo Serializables em arquivos
![Page 23: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/23.jpg)
Reader e Writer – lidando com caracteres
Classes especializadas em escrever fluxos de caracteres;
Podem ser utilizadas diretamente ou em conjunto (“decorando”) Input e Output streams;
Mais simples de serem utilizadas;
![Page 24: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/24.jpg)
Classes comuns
InputStreamReader|InputStreamWriter;
File(Reader|Writer);
String(Reader|Writer);
CharArray(Reader|Writer);
![Page 25: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/25.jpg)
Criando um par de Reader/Writer que criptografam o conteúdo
![Page 26: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/26.jpg)
Criando um writer que faz backup do arquivo escritoExercício
![Page 27: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/27.jpg)
FileChannel e NIO
Nova API para leitura e escrita de arquivos;
Faz escrita assíncrona e não bloqueante;
Normalmente é mais rápida que a forma comum;
Código bem mais complicado para lidar com arquivos;
![Page 28: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/28.jpg)
Lendo e escrevendo em arquivos com FileChannel
![Page 29: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/29.jpg)
Parsing de Arquivos XML
XML é um fomato padrão para troca de informações entre aplicações, seja via rede ou diretamente ingerindo arquivos;
Há várias formas de se fazer parsing de arquivos, sendo as mais comuns:DOM;SAX;StAX;
![Page 30: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/30.jpg)
Fazendo parsing to staff.xml
![Page 31: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/31.jpg)
Fazendo parsing da lista de músicasExercício
Lista de Albuns
Lista de Artistas
![Page 32: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/32.jpg)
Gerando XML (e texto em geral) com FreeMarker
Engine de templates comum do Java, muito utilizado pra geração de XML e templates de email;
Tem sintaxe parecida com a dos JSP, é simples de ser utilizada e tem poucas dependências externas;
É capaz de executar condicionais simples dentro dos seus templates, quando necessário;
![Page 33: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/33.jpg)
Exemplo de template do FreeMarker
<?xml version="1.0"?>
<empregados>
<#list empregados as empregado>
<empregado>
<nome>${empregado.id?html}</nome>
<#if empregado.posicao??>
<posicao>${empregado.posicao!}</posicao>
</#if>
</empregado>
</#list>
</empregados>
![Page 34: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/34.jpg)
Acesso a bancos de dados em Java
Em Java, o acesso a bancos de dados é feito através da JDBC, que é a API de acesso a banco de dados padrão;
Os fornecedores desenvolvem Drivers JDBC que podem ser utilizados pelos
![Page 35: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/35.jpg)
Acessando um banco de dados
Class.forName("org.h2.Driver");
Connection conexao = DriverManager.getConnection("jdbc:h2:~/clientes", "sa", "");
![Page 36: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/36.jpg)
Passos
Primeiro você deve carregar a classe do Driver JDBC;
Após a carga, você pode abrir uma conexão com o banco através dos métodos getConnection() da classe DriverManager;
![Page 37: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/37.jpg)
Executando comandos
Os comandos ou consultas feitas em Java usam os objetos Statement e PreparedStatement;
Um Statement é uma consulta comum feita através de uma String;
Um PreparedStatement é uma consulta que é pré-compilada e tende a ser mais rápida e mais segura que o Statement;
![Page 38: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/38.jpg)
Exemplo de código usando JDBC
Connection conexao = DriverManager.getConnection("jdbc:h2:~/clientes", "sa", "");
Statement statement = conexao.createStatement();
statement.executeUpdate("CREATE TABLE clientes(id int, nome varchar, senha varchar, email varchar)");
conexao.close();
![Page 39: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/39.jpg)
Usando um PreparedStatement para executar um update
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/lastfm", "root", "");
PreparedStatement statement = connection.prepareStatement( "update tracks set processed = true where id = ? and updated_at = ?" );
statement.setInt(1, id);
statement.setDate(2, new Date());
statement.executeUpdate();
connection.close();
![Page 40: Aulas de Java Avançado 1 - Faculdade iDez 2010](https://reader036.vdocuments.net/reader036/viewer/2022070318/5573223fd8b42aae7b8b4de3/html5/thumbnails/40.jpg)
Usando um PreparedStatement para fazer uma consulta
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/lastfm", "root", "");
PreparedStatement statement = connection.prepareStatement( "SELECT * FROM tracks" );
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()) {
Track track = new Track();
track.title = resultSet.getString("title");
track.id = resultSet.getInt("id");
tracks.add(track);
}
connection.close();