Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Aulas de Java Avançado 1 - Faculdade iDez 2010

1,323 views

Published on

  • Be the first to comment

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 />

×