Aulas de Java Avançado 1 - Faculdade iDez 2010

1,272 views
1,168 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,272
On SlideShare
0
From Embeds
0
Number of Embeds
74
Actions
Shares
0
Downloads
34
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • ----- Meeting Notes (04/12/10 08:11) -----Add meeting notes.
  • Aulas de Java Avançado 1 - Faculdade iDez 2010

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

    ×