Bach. Sistemas de Informação
1º Semestre - 2019
ICMC - USP - São Carlos
João do E.S. Batista Neto - jbatista at icmc usp br (SALA 4-222)
PAE : Ivar Vargas - l.ivarvb at gmail com
-->
horário atendimento: Qualquer horário em que não tenha compromissos oficiais (me mande um email
para marcar horário, se preferir)
- Conceitos de Orientação a Objetos
- Tipos e Classes
- Identificação de Objetos
- Abstrações, Generalizações, Instanciação
- Herança
- Ocultamento de Informações
- Polimorfismo
- Construtores e Destrutores (Garbage Collection)
- Generics
- Collections (coleções)
- Padrões de Projeto
- Linguagem Java e C++: principais diferenças
- Threads
- Redes / Interface Socket (?)
- Metodologia de Análise Orientada a Objeto: Notação UML (apenas uma introdução com diagramas de classe)
[Índice]
[Índice]
Aula 1
Apresentação da Disciplina
Material Necessário para programação
- Página Oracle/Sun downloads
- Se vc usa linux, verifique como instalar java no seu computador (openJDK). Dependendo do seu linux, vc pode ter uma versão maior ou menor. Dica: no
mínimo JDK 8
- BlueJ - Excelente ide para APRENDER java e conceitos de POO (Veja a sua versão JDK antes de baixar o pacote..)
- EXCELENTE Editor de Texto (com plugins) escrito em Java JEdit
- Plataforma de desenvolvimento da Sun/Oracle NetBeans
- Plataforma de desenvolvimento Eclipse
- Quais as melhores IDE's para programar JAVA ?
Sítios de consulta O B R I G A T Ó R I A !
Lição de casa
- Instalar e executar alguns demos do BlueJ
- Instalar e criar projetos "Hello World!" no Netbeans e/ou Eclipse (C++ e Java)
Aula 3
Aspectos interessantes da linguagem Java
Material da prof. Renata 1
Material da prof. Renata 2
Saiba mais sobre UTF
Aula 4
Classes e Objetos
Saiba como usar o depurador JDB
Saiba como produzir documentação com o JAVADOC
Notação UML para AGREGAÇÃO
Aula 5
Excelente sítio sobre conceitos em JAVA
membros static exemplo
Coleta de lixo (garbage collection) e o método finalize() exemplo
Herança
Aula 6
Polimorfismo: Overriding (Sobrescrita) e Overload (sobrecarga)
Aula 7
Mais sobre polimorfismo
Material Argonavis Interfaces
Material Argonavis Interfaces
Herança Multipla C++
Aula 8
C++: Herança e Herança Multipla
Aula 9
Fluxo de Programa e Exceções
Aula 10
Exceções - 2
- Tipos de exceções: verificadas (IOExceptions, por exemplo) e NÃO verificadas (Runtime)
- Como criar sua própria exceção
- Trabalhinho prático em sala aqui
Aula 11
Noções de Arquivos
Aula 12
Introdução a Threads
- Macacos me mordam! Para que serve isso e isso
- Threads argonavis.com.br
- Material do Prof. Adenilso
- Exemplo código java (1)
- Exemplo código java (2)
- A questão da Thread.sleep e InterruptedException
veja aqui
- Escreva um programa em java que a) inicie um vetor de 10 milhões de inteiros aleatorimente (valores entre -10 e 10); b)
calcule a soma destes números e imprima o resultado.
- O Mesmo que o anterior, só que desta vez no modo multi-thread, onde o usuário define o tamanho do segmento do vetor em
que cada thread vai operar.
- FAça um programa no Netbeans que mostre um frame, como um relógio funcional (HH:MM:SS)
Aula 13
Um pouco mais de Threads: exclusao mutua; threads independentes, threads dependentes
Sincronização de threads: forma implícita (synchronised) e explícita (wait e notitfy)
Aula 14
Tipos Genéricos
- Tutorial simples sobre Generics (basta ler até o slide 19) aqui
- Estilo tradicional de programação java
- Os 2 links abaixo explicam como era java antes da elaboração dos genérics e a falta que este recurso fazia... Rode ambos os exemplos..
- Exemplos de uso básico e mais corriqueiro de Genéricos
- Uso de Genéricos com limitantes superiores... Veja que interessante...
- Um assunto muito importante. A diferença entre Tipos e Subtipos... Não é a mesma coisa que classe e subclasse.
- Finalmente WildCards... Isso é bastante usado nos Generics..
Aula 15
Redes com Java: breve introdução
Aula 16
Redes com Java: Combinando Threads, apresentando datagramas
Aula 18
Coleções (Collections)
Aula 23
Introdução a Design Patterns
- Padrões de Modelagem
- Padrões de Projetos
Material Argonavis (tutorial + exemplos + questões)
Material Argonavis 2
Material Profa. Elisa aqui
Wikipedia
- Será um projeto incremental
- Etapa 1: Partindo do modelo fornecido, implemente as pecas de xadrez. Use o conceito de Classe Mãe e classes filhas
(herança) e aplique o polimorfismo.
- Etapa 2 aqui
- Etapa 3
- De preferência que contenha interface gráfica, para aprendermos também a parte de padrões de projeto,
componentes Swing, etc..
[Índice]
Duas Provas: Conceito Básicos de Herança e Polimorfismo (P1 -> Dia 23/Abril); o restante (P2 -> 25/Junho)
Média Final = (Med_Prova + Med_Projetos)/2
- Se Med_prova E Med_Projetos >= 5,0.
- Caso contrário, Média Final = MENOR(Med_Prova, Med_Projetos)
Você quer me tirar do sério? Então copie os trabalhos de alguém e diga que é seu.
Se faz isso, qual a diferença entre você e, digamos, o Eduardo Cunha? Resposta: nenhuma
[Índice]
- Herança e Polimorfismo (aula 12/03) aqui
- Herança e Polimorfismo e Interface (aula 19/03) aqui
- Herança Multipla em C++ (aula 26/03) aqui
- Para testar no lab no dia 29 (problema da heranca tipo diamante) aqui
- Para testar no lab no dia 29 (problema da heranca tipo diamante solucionada) aqui
- Destrutor Virtual aqui
- Métodos Virtuais aqui
- SobreCArga de Operadores aqui
- Fluxo 1
- Fluxo 2
- Fluxo 3
- Fluxo 4
- Primo sem thread aqui
- Primo com thead aqui
- Consulte o exercício da aula 13 (Exemplo objeto compartilhado com sincronismo). Utilizando este código como referência
escreva um programa que: a) defina um buffer compartilhado como sendo um VETOR DE INTEIROS, de tamanho N (passe este valor
via construtor na classe apropriada). Escreva duas threads: CONSUMIDOR E PRODUTOR. Ambas rodam indefinidamente e fazem o
seguinte: O PRODUTOR escreve no vetor (da posicao 0 até N-1) enquanto o vetor não estiver cheio. Quando encher, deve pausar.
O CONSUMIDOR retira sempre o ultimo elemento do vetor enquanto houver elementos nele. A sua saida deve ser algo como
relatado abaixo (supondo N = 6 e um número arbitrário de execuções:
Produtor escreveu o valor [1]. Vetor atual = 1 0 0 0 0 0
Produtor escreveu o valor [2]. Vetor atual = 1 2 0 0 0 0
Produtor escreveu o valor [3]. Vetor atual = 1 2 3 0 0 0
Produtor escreveu o valor [4]. Vetor atual = 1 2 3 4 0 0
Consumidor leu o valor [4]. Vetor atual = 1 2 3 0 0 0
Consumidor leu o valor [3]. Vetor atual = 1 2 0 0 0 0
Consumidor leu o valor [2]. Vetor atual = 1 0 0 0 0 0
Consumidor leu o valor [1]. Vetor atual = 0 0 0 0 0 0
Produtor escreveu o valor [5]. Vetor atual = 5 0 0 0 0 0
Produtor escreveu o valor [6]. Vetor atual = 5 6 0 0 0 0
Consumidor leu o valor [6]. Vetor atual = 5 0 0 0 0 0
Consumidor leu o valor [5]. Vetor atual = 0 0 0 0 0 0
Produtor escreveu o valor [7]. Vetor atual = 7 0 0 0 0 0
Produtor escreveu o valor [8]. Vetor atual = 7 8 0 0 0 0
Consumidor leu o valor [8]. Vetor atual = 7 0 0 0 0 0
Produtor escreveu o valor [9]. Vetor atual = 7 9 0 0 0 0
Consumidor leu o valor [9]. Vetor atual = 7 0 0 0 0 0
Produtor escreveu o valor [10]. Vetor atual = 7 10 0 0 0 0
Produtor escreveu o valor [11]. Vetor atual = 7 10 11 0 0 0
Consumidor leu o valor [11]. Vetor atual = 7 10 0 0 0 0
Produtor escreveu o valor [12]. Vetor atual = 7 10 12 0 0 0
Produtor escreveu o valor [13]. Vetor atual = 7 10 12 13 0 0
Produtor escreveu o valor [14]. Vetor atual = 7 10 12 13 14 0
Consumidor leu o valor [14]. Vetor atual = 7 10 12 13 0 0
Produtor escreveu o valor [15]. Vetor atual = 7 10 12 13 15 0
Consumidor leu o valor [15]. Vetor atual = 7 10 12 13 0 0
Produtor escreveu o valor [16]. Vetor atual = 7 10 12 13 16 0
Consumidor leu o valor [16]. Vetor atual = 7 10 12 13 0 0
Produtor escreveu o valor [17]. Vetor atual = 7 10 12 13 17 0
Produtor escreveu o valor [18]. Vetor atual = 7 10 12 13 17 18
Consumidor leu o valor [18]. Vetor atual = 7 10 12 13 17 0
Produtor escreveu o valor [19]. Vetor atual = 7 10 12 13 17 19
Consumidor leu o valor [19]. Vetor atual = 7 10 12 13 17 0
Consumidor leu o valor [17]. Vetor atual = 7 10 12 13 0 0
Produtor escreveu o valor [20]. Vetor atual = 7 10 12 13 20 0
Consumidor leu o valor [20]. Vetor atual = 7 10 12 13 0 0
Produtor escreveu o valor [21]. Vetor atual = 7 10 12 13 21 0
Consumidor leu o valor [21]. Vetor atual = 7 10 12 13 0 0
Produtor escreveu o valor [22]. Vetor atual = 7 10 12 13 22 0
Produtor escreveu o valor [23]. Vetor atual = 7 10 12 13 22 23
Produtor vai escrever...
Vetor esta cheio. Produtor vai dormir .... Vetor atual = 7 10 12 13 22 23
Consumidor leu o valor [23]. Vetor atual = 7 10 12 13 22 0
Produtor escreveu o valor [24]. Vetor atual = 7 10 12 13 22 24
Consumidor leu o valor [24]. Vetor atual = 7 10 12 13 22 0
Produtor escreveu o valor [25]. Vetor atual = 7 10 12 13 22 25
Consumidor leu o valor [25]. Vetor atual = 7 10 12 13 22 0
Produtor escreveu o valor [26]. Vetor atual = 7 10 12 13 22 26
Consumidor leu o valor [26]. Vetor atual = 7 10 12 13 22 0
Consumidor leu o valor [22]. Vetor atual = 7 10 12 13 0 0
.
.
.
[Índice]
Bibliografia Básica
H.M. Deitel, P.J. Deitel. - Java: Como programar 6a Edição, Pearson Prentice Hall, 2005. http://wps.prenhall.com/esm_deitel_javahtp_6/
Programação Orientada a Objetos com Java. Uma introdução prática usando BLUEJ. David J. Barnes; Michael Kolling. Pearson, 2004
Bruce Eckel - Thinking in Java http://www.mindview.net/Books/TIJ/
Cox,B.J. Object-Oriented Programming, Addison Wesley, 1986. (Nacional: Makron 1991).
John Lewis, William Loftus - Java Software Solutions: Foundations of Program Design, 5/E Addison-Wesley. 2007
[Índice]