Apostila

Java e Orientação a Objetos

    sumário
  1. 1 Como Aprender Java
    1. 1.1 O que é realmente importante?
    2. 1.2 Sobre os exercícios
    3. 1.3 Tirando dúvidas e indo além
  2. 2 O que é Java
    1. 2.1 Java
    2. 2.2 Uma breve história do Java
    3. 2.3 Máquina Virtual
    4. 2.4 Java lento? Hotspot e JIT
    5. 2.5 Versões do Java e a confusão do Java2
    6. 2.6 JVM? JRE? JDK? O que devo baixar?
    7. 2.7 Onde usar, e os objetivos do Java
    8. 2.8 Especificação versus implementação
    9. 2.9 Como o FJ-11 está organizado
    10. 2.10 Compilando o primeiro programa
    11. 2.11 Executando seu primeiro programa
    12. 2.12 O que aconteceu?
    13. 2.13 Para saber mais: como é o bytecode?
    14. 2.14 Exercícios: modificando o Hello World
    15. 2.15 O que pode dar errado?
    16. 2.16 Um pouco mais...
    17. 2.17 Exercícios opcionais
  3. 3 Variáveis Primitivas e Controle de Fluxo
    1. 3.1 Declarando e usando variáveis
    2. 3.2 Tipos primitivos e valores
    3. 3.3 Exercícios: Variáveis e tipos primitivos
    4. 3.4 Discussão em aula: convenções de código e código legível
    5. 3.5 Casting e promoção
    6. 3.6 O if e o else
    7. 3.7 O While
    8. 3.8 O For
    9. 3.9 Controlando loops
    10. 3.10 Escopo das variáveis
    11. 3.11 Um bloco dentro do outro
    12. 3.12 Para saber mais
    13. 3.13 Exercícios: fixação de sintaxe
    14. 3.14 Desafios: Fibonacci
  4. 4 Orientação a Objetos Básica
    1. 4.1 Motivação: problemas do paradigma procedural
    2. 4.2 Criando um tipo
    3. 4.3 Uma classe em Java
    4. 4.4 Criando e usando um objeto
    5. 4.5 Métodos
    6. 4.6 Métodos com retorno
    7. 4.7 Objetos são acessados por referências
    8. 4.8 O método transfere()
    9. 4.9 Continuando com atributos
    10. 4.10 Para saber mais: uma fábrica de carros
    11. 4.11 Um pouco mais...
    12. 4.12 Exercícios: Orientação a Objetos
    13. 4.13 Desafios
    14. 4.14 Fixando o conhecimento
  5. 5 Modificadores de Acesso e Atributos de Classe
    1. 5.1 Controlando o acesso
    2. 5.2 Encapsulamento
    3. 5.3 Getters e setters
    4. 5.4 Construtores
    5. 5.5 A necessidade de um construtor
    6. 5.6 Atributos de classe
    7. 5.7 Um pouco mais...
    8. 5.8 Exercícios: encapsulamento, construtores e static
    9. 5.9 Desafios
  6. 6 Eclipse IDE
    1. 6.1 O Eclipse
    2. 6.2 Apresentando o Eclipse
    3. 6.3 Views e Perspective
    4. 6.4 Criando um projeto novo
    5. 6.5 Criando o main
    6. 6.6 Executando o main
    7. 6.7 Pequenos truques
    8. 6.8 Exercícios: Eclipse
    9. 6.9 Discussão em aula: Refactoring
  7. 7 Pacotes - Organizando suas Classes e Bibliotecas
    1. 7.1 Organização
    2. 7.2 Diretórios
    3. 7.3 Import
    4. 7.4 Acesso aos atributos, construtores e métodos
    5. 7.5 Usando o Eclipse com pacotes
    6. 7.6 Exercícios: pacotes
  8. 8 Ferramentas: JAR e Javadoc
    1. 8.1 Arquivos, bibliotecas e versões
    2. 8.2 Gerando o JAR pelo Eclipse
    3. 8.3 Javadoc
    4. 8.4 Gerando o Javadoc
    5. 8.5 Exercícios: JAR e Javadoc
    6. 8.6 Importando um JAR externo
    7. 8.7 Exercícios: Importando um JAR
    8. 8.8 Manipulando a conta pela interface gráfica
    9. 8.9 Exercícios: mostrando os dados da conta na tela
  9. 9 Herança, Reescrita e Polimorfismo
    1. 9.1 Repetindo código?
    2. 9.2 Reescrita de método
    3. 9.3 Invocando o método reescrito
    4. 9.4 Polimorfismo
    5. 9.5 Um outro exemplo
    6. 9.6 Um pouco mais...
    7. 9.7 Exercícios: herança e polimorfismo
    8. 9.8 Discussões em aula: alternativas ao atributo protected
  10. 10 Classes Abstratas
    1. 10.1 Repetindo mais código?
    2. 10.2 Classe abstrata
    3. 10.3 Métodos abstratos
    4. 10.4 Aumentando o exemplo
    5. 10.5 Para saber mais...
    6. 10.6 Exercícios: classes abstratas
  11. 11 Interfaces
    1. 11.1 Aumentando nosso exemplo
    2. 11.2 Interfaces
    3. 11.3 Dificuldade no aprendizado de interfaces
    4. 11.4 Exemplo interessante: conexões com o banco de dados
    5. 11.5 Exercícios: interfaces
    6. 11.6 Exercícios opcionais
    7. 11.7 Discussão: favoreça composição em relação à herança
  12. 12 Exceções e Controle de Erros
    1. 12.1 Motivação
    2. 12.2 Exercício para começar com os conceitos
    3. 12.3 Exceções de Runtime mais comuns
    4. 12.4 Outro tipo de exceção: Checked Exceptions
    5. 12.5 Um pouco da grande família Throwable
    6. 12.6 Mais de um erro
    7. 12.7 Lançando exceções
    8. 12.8 O que colocar dentro do try?
    9. 12.9 Criando seu próprio tipo de exceção
    10. 12.10 Para saber mais: finally
    11. 12.11 Exercícios: exceções
    12. 12.12 Desafios
    13. 12.13 Discussão em aula: catch e throws com Exception
  13. 13 O Pacote java.lang
    1. 13.1 Pacote java.lang
    2. 13.2 Um pouco sobre a classe System
    3. 13.3 java.lang.Object
    4. 13.4 Métodos do java.lang.Object: equals e toString
    5. 13.5 Exercícios: java.lang.Object
    6. 13.6 java.lang.String
    7. 13.7 Exercícios: java.lang.String
    8. 13.8 Desafio
    9. 13.9 Discussão em aula: o que você precisa fazer em Java?
  14. 14 Um Pouco de Arrays
    1. 14.1 O problema
    2. 14.2 Arrays de referências
    3. 14.3 Percorrendo uma array
    4. 14.4 Percorrendo uma array no Java 5.0
    5. 14.5 Exercícios: arrays
    6. 14.6 Um pouco mais...
    7. 14.7 Desafios opcionais
  15. 15 Collections Framework
    1. 15.1 Arrays são trabalhosas, utilizar estrutura de dados
    2. 15.2 Listas: java.util.List
    3. 15.3 Listas no Java 5 e Java 7 com Generics
    4. 15.4 A importância das interfaces nas coleções
    5. 15.5 Ordenação: Collections.sort
    6. 15.6 Exercícios: ordenação
    7. 15.7 Conjunto: java.util.Set
    8. 15.8 Principais interfaces: java.util.Collection
    9. 15.9 Percorrendo coleções no Java 5
    10. 15.10 Para saber mais: iterando sobre coleções com java.util.Iterator
    11. 15.11 Mapas - java.util.Map
    12. 15.12 Para saber mais: Properties
    13. 15.13 Para saber mais: Equals e HashCode
    14. 15.14 Para saber mais: boas práticas
    15. 15.15 Exercícios: Collections
    16. 15.16 Desafios
    17. 15.17 Para saber mais: Comparators, classes anônimas, Java 8 e o lambda
  16. 16 E Agora?
    1. 16.1 Web
    2. 16.2 Praticando Java e usando bibliotecas
    3. 16.3 Grupos de usuários
    4. 16.4 Próximos cursos
  17. 17 Pacote java.io
    1. 17.1 Conhecendo uma API
    2. 17.2 Orientação a objetos no java.io
    3. 17.3 InputStream, InputStreamReader e BufferedReader
    4. 17.4 Lendo Strings do teclado
    5. 17.5 A analogia para a escrita: OutputStream
    6. 17.6 Uma maneira mais fácil: Scanner e PrintStream
    7. 17.7 Um pouco mais...
    8. 17.8 Integer e classes wrappers (box)
    9. 17.9 Autoboxing no Java 5.0
    10. 17.10 Para saber mais: java.lang.Math
    11. 17.11 Exercícios: Java I/O
    12. 17.12 Discussão em aula: Design Patterns e o Template Method
  18. 18 Apêndice - Programação Concorrente e Threads
    1. 18.1 Threads
    2. 18.2 Escalonador e trocas de contexto
    3. 18.3 Garbage Collector
    4. 18.4 Exercícios
    5. 18.5 E as classes anônimas?
  19. 19 Apêndice - Sockets
    1. 19.1 Motivação: uma API que usa os conceitos aprendidos
    2. 19.2 Protocolo
    3. 19.3 Porta
    4. 19.4 Socket
    5. 19.5 Servidor
    6. 19.6 Cliente
    7. 19.7 Imagem geral
    8. 19.8 Exercícios: Sockets
    9. 19.9 Desafio: múltiplos clientes
    10. 19.10 Desafio: broadcast das mensagens
    11. 19.11 Solução do sistema de chat
  20. 20 Apêndice - Problemas com Concorrência
    1. 20.1 Threads acessando dados compartilhados
    2. 20.2 Controlando o acesso concorrente
    3. 20.3 Vector e Hashtable
    4. 20.4 Um pouco mais...
    5. 20.5 Exercícios avançados de programação concorrente e locks
  21. 21 Apêndice - Instalação do Java
    1. 21.1 Instalando no Ubuntu e em outros Linux
    2. 21.2 No Mac OS X
    3. 21.3 Instalação do JDK em ambiente Windows
  22. 22 Apêndice - Debugging
    1. 22.1 O que é debugar
    2. 22.2 Debugando no Eclipse
    3. 22.3 Perspectiva de debug
    4. 22.4 Debug avançado
    5. 22.5 Profiling
    6. 22.6 Profiling no Eclipse TPTP
  23. 23 Resoluções de exercícios
    1. 23.1 Exercícios 3.3: variáveis e tipos primitivos
    2. 23.2 Exercícios 3.13: fixação de sintaxe
    3. 23.3 Desafios 3.14: Fibonacci
    4. 23.4 Exercícios 4.12: orientação a objetos
    5. 23.5 Desafios 4.13
    6. 23.6 Exercícios 5.8: encapsulamento, construtores e static
    7. 23.7 Desafios 5.9
    8. 23.8 Exercícios 8.9: mostrando os dados da conta na tela
    9. 23.9 Exercícios 9.7: herança e polimorfismo
    10. 23.10 Exercícios 11.5: interfaces
    11. 23.11 Exercícios opcionais 11.6
    12. 23.12 Exercícios 12.11: exceções
    13. 23.13 Desafios 12.12
    14. 23.14 Exercícios 13.5: java.lang.Object
    15. 23.15 Exercícios 13.7: java.lang.String
    16. 23.16 Desafio 13.8
    17. 23.17 Exercícios 14.5: arrays
    18. 23.18 Exercícios 15.6: ordenação
    19. 23.19 Exercícios 15.15: collections
    20. 23.20 Desafios 15.16
    21. 23.21 Exercícios 17.11: Apêndice Java I/O