Buscar

Aulas 01a10 Projeto de TCC Estacio


Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Aula 01
Reflexões Iniciais Sobre o Trabalho de Conclusão de Curso
Menu
01
02
03
04
05
06
07
08
09
10
Ao final desta aula, o aluno será capaz de:
1- Apresentar o conceito de TCC;
2- Discutir os aspectos elementares relacionados ao TCC; 
3- Apresentar estratégias para escolha do tema e estruturação do trabalho.
Introdução
A aprovação nesta disciplina é imprescindível para que você obtenha o título de Bacharel em Sistemas de Informação. O TCC deve ser um projeto que demonstre sua capacidade de aplicar no contexto real os conhecimentos adquiridos, principalmente, nas disciplinas de modelagem de dados, modelagem de sistemas e programação. O que se espera é que você seja capaz de propor uma solução para um problema real, através da utilização da tecnologia.
3
Reflexões Iniciais Sobre o Trabalho de Conclusão de Curso
	 Sumário:
Objetivo
Composição
Regras
Tipos
	Projeto de Software
	Artigos Científicos
Critérios de Avaliação
Critérios de correção
Autoria
Consolidar e aprofundar os conhecimentos na área de formação;
Habilitar futuros profissionais a desenvolver projetos com competência técnica e científica;
Despertar interesse pela atividade de pesquisa.
Oportunizar reflexão crítica sobre temas profissionais e acadêmicos, a partir da compreensão de seu papel no contexto político-sócio-econômico.
Desenvolver a capacidade de expressão oral e escrita, para elaboração de trabalhos acadêmicos;
Motivar a busca por inovações, por meio dos resultados alcançados em pesquisa social aplicada;
Possibilitar ao aluno vivenciar as dificuldades nas diversas etapas do projeto lógico e físico no desenvolvimento de um software.
4
OBJETIVO
COMPOSIÇÃO:
Dividido em 2 disciplinas:
	Projeto TCC + TCC
As entregas são parciais a partir de um calendário apresentado no início do semestre letivo pelos tutores.
REGRAS:
Não se pode frequentar as duas disciplinas ao mesmo tempo;
O trabalho deve ser individual;
Não é necessário desenvolver programas; (Documentação de projeto lógico e físico).
Devem ser seguidas as regras da ABNT;
Fóruns não são avaliados – devem ser utilizados para esclarecimento de dúvidas;
Deve-se utilizar os templates disponíveis na Biblioteca Virtual da disciplina.
5
COMPOSIÇÃO e REGRAS
O PROJETO TCC consiste na documentação do Projeto Lógico
Passos do Projeto TCC:
1 – Apresentação do tema para aprovação
2 – Desenvolvimento da parte I
3 – Desenvolvimento da parte II
Projeto de Software
Consiste no desenvolvimento das etapas da engenharia de software a partir de um tema de negócio.
Composição		
Situação Atual
Situação Proposta
6
TIPOS - Projeto de Software
Apresentação de um experimento realizado em função de uma temática proposta.
Composição		
O que experimentar?
Como?
A experiência e,
Resultados.
7
TIPOS – Artigos Científicos
O aluno deve ter desenvolvido a experimentação para demonstração da evolução da pesquisa, aplicação e resultados.
A parte I do trabalho —> Entregue antes da AV, em data a ser estabelecida, valendo 4,5 para a AV.
O trabalho final —> Entregue no período da AV, em data a ser estabelecida, valendo 5,5 para a AV.
Reprovado o aluno que não entregar o trabalho final até a data estipulada.
Alunos que entregarem o trabalho final e não obtiverem nota para aprovação na AV deverão realizar ajustes no “trabalho final”, apontados pelo professor orientador, e entregar o trabalho final corrigido para nova avaliação, em data a ser estabelecida no período de AVS.
8
CRITÉRIOS DE AVALIAÇÃO – PROJETO TCC
Aula 08
Threads e Concorrência
Para esta aula sugiro as seguintes tarefas:
Leitura do Capítulo 23 (23.1 até 23.5) do livro Java como programar, 
6ª Edição, de H. Deitel e P. Deitel, Editora Pearson Education, 2005. 
Resolução dos exercícios de 23.5 até 23.9 do capítulo 23 do mesmo livro.
Menu
01
02
03
04
05
06
07
08
09
10
O aluno é responsável única e exclusivamente por todo o conteúdo apresentado na elaboração de seu TCC.
É vedada ao aluno a utilização indevida de fonte ou outro recurso que o professor orientador e a coordenação classifiquem como plágio.
Por utilização indevida ou plágio entende-se
1) inclusão de texto cuja autoria de terceiros não esteja claramente identificada.
2) Texto supostamente produzido pelo aluno, mas que se trata de texto adaptado em parte ou totalmente.
3) Texto produzido por terceiros, no qual não constem elementos debatidos no ambiente virtual com o professor orientador;
4) Projeto de sw já desenvolvido por terceiros e de conhecimento público, sendo ou não patenteado.
5) Texto supostamente produzido pelo aluno sem que ele consiga responder perguntas acerca do tema, ou sem que ele consiga elucidar seu conteúdo de forma sistemática, seja em parte ou na sua totalidade.
10
AUTORIA
Aula 10
Desenvolvendo aplicativos com 
threads, concorrência e GUI Swing
Para esta aula sugiro as seguintes tarefas:
Leitura do Capítulo 23 (23.6 até 23.7) do livro Java como programar, 
6ª Edição, de H. Deitel e P. Deitel, Editora Pearson Education, 2005.
Resolução dos exercícios de 23.5 até 23.9 do capítulo 23 do mesmo livro.
Menu
01
02
03
04
05
06
07
08
09
10
Instrução para autores da Conferência SBC xxxx¹, yyy²
¹Instituto de Informática - xxxxxxxxxxxxx (XXXXXXXXX)
Endereço – Brazil
Department of Computer Science – University of Durham
Durham, U.K.
{xxxxx}@xxxx.br, {xxxxxx}@xxxx.br
Abstract. This yadda yadda yadda...
Resumo. Este blá blá 
1. Introdução
Xxxxxxxxxx
2. Contextualização
3. Metodologia de Trabalho
Xxxxxxxx
3.1. Subseções
Xxxxxxxxx
4. Desenvolvimento do Trabalho
Xxxxxxxxxxxxxxx
5. Apresentação dos Resultados
Xxxxxxxxxxxxxxx
6. Conclusão
Xxxxxxxxxxxxxxx
12
Exemplo Artigos
...
Referências
Xxxxxxxxxxxxxxx
Ao longo desta disciplina, trabalharemos na fase que antecede a elaboração do trabalho em si e construiremos o projeto do TCC. A intenção deste curso é permitir que você estruture seu trabalho e parta para sua elaboração já tendo feito algumas reflexões e escolhas importantes a respeito do tema e dos objetivos a serem alcançados.
Como o acrônimo sugere, a ideia é que ao longo deste curso você seja capaz de produzir um projeto daquele que se tornará o seu trabalho de finalização da graduação em Sistemas de Informação.
13
Trabalho de Conclusão de Curso
 Um TCC pode assumir diferentes formas e costuma ser exigido ao final de cursos de graduação, especialização, mestrado e doutorado. Trata-se de um estudo baseado em uma pesquisa rigorosa, que visa a atualizar o estado da arte sobre determinado tema de interesse profissional.
Escopo e formato do TCC
O escopo e o formato do TCC variam conforme o curso do aluno e seu nível de estudo. Veja a seguir um exemplo referente a complexidade:
14
PRIMEIRAS ETAPAS (aula 2 gravada)
TEMA (Escolha e Aprovação)
Consiste na definição do negócio a ser trabalhado. O primeiro passo para a conclusão do TCC é decidir o tema de seu projeto. O ideal é que seu tema esteja relacionado a uma área sobre a qual você já tenha algum conhecimento ou pela qual esteja bastante interessado. 
Definiu > Apresentar ao tutor que deverá aprovar para a continuidade. A orientação do tutor é determinante para que o escopo seja bem definido. (* Para art. Cient., regras do slide 7)
ESCOPO
Outro aspecto importante é que o projeto deve ter um escopo bem delimitado. A ideia é usar o bom senso, de modo a não englobar uma área muito ampla de problemas a serem resolvidos pelo projeto, nem ser específico demais a ponto de ficar sem funcionalidades o suficiente para compor um sistema.
PROBLEMÁTICA
O projeto deve tratar de um ou mais problemas dentro de um tema específico, e sua tarefa será apresentar a solução mais apropriada para tais problemas. Deverá ser possível justificar a necessidade de resolução do problema, ressaltando o valor agregado por sua proposta.
15
Etapas de construção do Projeto TCC sl 11
Parte I (50% do conteúdo) (1º e 2º capitulos)
Representa
50% do conteúdo.
Pode-se apresentar versões intermediárias até 7 dias antes da entrega final.
Tutor tem prazo de até 5 dias úteis para retorno da versão intermediária com as sugestões de ajustes
Parte II (50% do conteúdo)(3º e 4º e 5º(conclusão)
Representa a revisão nos ajustes sugeridos pelo tutor na revisão da Parte I acrescido do conteúdo restante.
Pode-se apresentar versões intermediárias até 7 dias antes da entrega final.
Tutor tem prazo de até 5 dias úteis para retorno da versão intermediária com as sugestões de ajustes
1) Proposta de Trabalho
2) Caracterização da Empresa e do Negócio.
16
Projeto de Software - Conteúdo
Parte I (50% do conteúdo) (1º e 2º capítulos)
Parte II (50% do conteúdo)(3º e 4º e 5º(conclusão)
3) O Sistema Atual;
4) O Sistema Proposto (projeto lógico).
5) Conclusão
REFERÊNCIAS BIBLIOGRÁFICAS
Anexo I – Glossário
Anexo II – Título do Anexo
1.3 Cronograma de Trabalho (utilizar o Project *sugestão)
 Planejar o tempo de duração de cada tarefa que será desenvolvida, distribuindo-a ao longo dos meses no prazo estimado:
Período letivo (colocar os limites de tempo)
Atividades distribuídas ao longo do tempo. Itens do sumário.
1 Proposta de Trabalho
 Apresentar o planejamento para o trabalho
1.1 Método de Trabalho
 Relacionar as formas utilizadas para o levantamento do sistema, quanto a:
Coleta de Dados (elicitação: Entrevistas, Brain Storm, Questionário...)
Estudo do Documento Existente (Estudar o sw existente)
Estudo dos Procedimentos e Dados (Vou usar a metodologia OO – descrever * Descrever o que vou usar para modelar meu sistema
17
Projeto de Software - Parte I - 1 
1.2 Previsão de Alocação de Recursos
 Considerar os recursos (Humanos e Materiais) envolvidos:
Humanos: Usuários e TI (sem nome mas com FUNÇÃO do profissional)
Materiais: equipamentos e material de escritório 
2 Caracterização da Empresa e do Negócio
 Conhecer a empresa como um todo: atividades, integração entre departamentos e aspirações para o futuro, perfil de consumidor do projeto...
2.1 Histórico da empresa
 Descrever como foi criada, localização, qde de funcionários, há quanto tempo atua no mercado, e a importância de cada departamento da empresa.
2.2 Atividades da empresa
 Apresentar as atividades da empresa, destacando suas atividades-fim.
2.3 Organograma
 Apresentar e diagramar a disposição hierárquica dos departamentos.
2.4 Mercado consumidor
 Definir onde atua a empresa e quem utiliza seus produtos.
2.5 Concorrência
 Descrever se possui concorrência e como se coloca frente às outras do ramo.
2.6 Premissas e Restrições ao projeto
 Descrever qqr caract. da empresa que influencie no desenvolvi/o do sistema (equipamentos existentes, ambiente de trabalho, aspectos políticos, custos, prazo...)
REFERÊNCIAS BIBLIOGRÁFICAS
Anexo I – Glossário (dicionário e documentos. Se não usados, pode retirar.)
Anexo II – Título do Anexo
18
Projeto de Software - Parte I - 2
3 O Sistema Atual
 3.1 Justificativa de Escolha do Sistema
	 3.1.1 O Sistema - Descrever o que é o sistema, o que representa para a
	 empresa e pode ainda apresentar características especiais, caso existam.
	 3.1.2 O Funcionamento do Sistema - Apresentar um passo a passo de 
	 funcionamento do Sistema Atual.
	 3.1.3 O Ambiente do Sistema - Apresentar onde o sistema funciona, que
	 usuários ele atende, quais as interfaces com outras áreas da empresa.
	 3.1.4 A Definição do Escopo - Descrever a extensão do sistema que será
	 analisada e definida previamente com o usuário. Definir o limite (tamanho).
 3.2 Motivação para o novo Sistema
	 Citar em tópicos os motivos que levaram a empresa a desejar o
 desenvolvimento/reformulação de um novo sistema.
 3.3 Situação Desejada
	 Citar em tópicos o que o usuário espera que o sistema lhe forneça.
 3.4 Problemas do Sistema Atual
	 Relacionae em tópicos todos os problemas que existem no sistema analisado,
 bem como as consequências.
19
Projeto de Software - Parte II - 1 
4 O Sistema Proposto – Passo a passo do funciona/o do Sist. Proposto
 4.1 Lista de Requisitos do Sistema. 
 Relacionar requisitos funcionais e não funcionais.
 4.2 Diagrama de Casos de Uso
 Construir o modelo segundo a UML para representação dos requisitos.
 4.3 Especificações de Casos de Uso
 Descrever o caso de uso segundo o template disponível na Biblioteca Virtual.
 4.4 Modelo Conceitual de Classes
 Construir o modelo, segundo a UML, para a representação dos dados, o
 Diagrama de Classes – Modelo de Domínio..
 4.5 Modelo Conceitual de Dados
 Construir o modelo de Entidade e Relacionamento.
5 Conclusões – Apresentar um fechamento geral das impressões da evolução dos pontos desenvolvidos no Projeto TCC.
20
Projeto de Software - Parte II - 2
REFERÊNCIAS BIBLIOGRÁFICAS
Anexo I – Glossário (dicionário e documentos. Se não usados, pode retirar.)
Anexo II – Título do Anexo
21
PESQUISE SEMPRE
Dependendo do tipo do problema escolhido, pode ser necessário especificar objetivos, perguntas ou hipóteses. 
Seja qual for sua intenção, o ideal é que você faça algumas pesquisas e, consequentemente, uma série de leituras sobre o que anda sendo discutido na área, os problemas correntes ainda não solucionados e quais as tendências atuais em termos de desenvolvimento de soluções. 
Fique atento, contudo, para não perder tempo demais na pesquisa que antecede a escolha do tema, ou pode comprometer seu cronograma.
22
Planejamento
É preciso estabelecer um plano no qual estejam definidas não somente as atividades, mas também o tempo a ser investido em cada uma delas.
Será necessário considerar as leituras para aprofundamento do tema, a condução das fases de análise e implementação do sistema, testes, avaliações etc. 
Registre as atividades, os recursos necessários para implantá-las e os resultados intermediários a serem alcançados e mantenha controle sobre eles ao longo da realização do projeto.
Para ficar ainda mais bem preparado, seu planejamento pode incluir uma análise de riscos dos possíveis problemas indesejados que você pode encontrar ao longo do projeto e que podem comprometer sua qualidade ou sua completude.
23
Análise de riscos
O objetivo da análise de riscos é prepará-lo para enfrentar os possíveis riscos e minimizar os danos que podem causar. Para fazer essa análise, você precisa identificar:
os riscos particulares;
seu grau de severidade;
a probabilidade de ocorrerem;
abordagens para sua prevenção;
formas de eliminar esses riscos caso a prevenção não seja possível.
DICA:
Determinar o público-alvo de seu trabalho é outro ponto importante. Que indivíduos ou grupos você espera que leiam seu projeto, que conhecimento técnico eles possuem e o que eles devem conseguir extrair de conhecimento após a leitura de seu trabalho? Responder a essas perguntas lhe ajudará a definir o tipo de linguagem a ser usada na redação de seu projeto e a importância, ou não, da inclusão de um glossário de termos técnicos, por exemplo.
24
Análise de riscos
Depois de definido o seu tema, você precisará manter sua trilha de pesquisa estruturada e deverá adotar um método de trabalho, de modo a não se perder nas inúmeras tarefas que envolvem a construção de seu projeto. 
Uma boa ideia é selecionar seu material logo após a escolha do tema e prender-se a ele ao longo do trabalho de modo a não perder tempo em leituras inúteis ou que agregarão poucas informações relevantes ao que você já sabe.
25
Estruturação do trabalho
Veja algumas orientações para uma boa estruturação do TCC:
Esteja atento também às normas de estruturação do texto no que diz respeito a margens, numeração de página, fontes etc. Em geral, os trabalhos de conclusão de curso utilizam as normas da ABNT (Associação Brasileira de Normas Técnicas) para a formatação das diferentes partes que compõem
o documento. Se você não conhece as regras, familiarize-se com elas antes de iniciar o trabalho, pois o ideal é aplicar as formatações recomendadas ao longo da redação do projeto, e não ao final dela.
Versão Final
Estrutura
Independentemente da área à qual se aplica, um bom TCC deve ser muito bem estruturado, com seções logicamente delimitadas e escritas de forma clara e objetiva. Se estiver em dúvida sobre a estruturação de seu trabalho, esboce um diagrama que estabeleça a relação entre as seções e os conceitos por elas apresentados.
Normas
Cuidado com a versão final de seu projeto. Ela deve estar livre de erros conceituais, de erros de ortografia e de gramática. Recorra aos corretores gramaticais e ortográficos automáticos para lhe auxiliarem nessa tarefa.
26
NORMAS - ABNT
A ABNT publicou um conjunto de normas (denominadas NBR – Normas Brasileiras) que definem os padrões relacionados a trabalhos científicos. As mais importantes para o êxito na redação do TCC são as seguintes: 
NBR 10520 – Características relacionadas à inclusão de citações;
NBR 14724 – Princípios gerais para a elaboração de trabalhos científicos;
NBR 6023 – Características relacionadas às referências bibliográficas;
NBR 6027 – Aspectos envolvidos na apresentação do sumário do trabalho;
NBR 6028 – Forma de apresentação do resumo e do abstract do trabalho. 
Os textos dessas normas listadas estão disponíveis na Biblioteca do Aluno.
SAIBA MAIS...
ABNT:
	http://www.abnt.org.br/ 
27
Atividade Proposta – aula 2
Exemplo de Projeto de TCC
28
Atividade Proposta – aula 3
Exemplo de Projeto de TCC
29
Atividade Proposta – aula 3
Exemplo de Projeto de TCC
30
Sistema TorneiosTM
TEMA
Hoje em dia o sistema da CBTM para gestão de torneios está deficitário em alguns pontos importantes como cálculo automático do desempate nos grupos, design ultrapassado, não há possibilidade de automação de resultados e acompanhamento simultâneo pela web nem opções para publicidade, o que pode gerar retorno financeiro.
ESCOPO
Criar a automação de classificação em casos de tríplice empate, não previsto no projeto atual, bem como redesenhar a apresentação para que fique mais agradável, permita automação de resultados automaticamente (árbitros entrando com os resultados via smartphone ou tablet) e permita fazer publicidade.
PROBLEMÁTICA
O sistema atual não calcula o desempate em casos de tríplice empate, o que gera perda de tempo e até mesmo erros humanos, gerando desconforto, desgaste e pontuações errôneas no ranking e rating. A ideia é inserir o cálculo que deixará os torneios mais ágeis e redesenhar a apresentação na web para permitir acompanhamento simultâneo e inserção de publicidade, o que irá gerar retorno financeiro para a federação.
Introdução
Nesta segunda aula, vamos identificar os estilos de pesquisa atualmente desenvolvidos na área de Ciência da Computação. 
Uma pesquisa na área de Informática normalmente direciona-se a um dos seguintes aspectos:
32
Apresentação de um produto;
Apresentação de algo novo;
Apresentação de algo presumivelmente melhor;
Apresentação de algo reconhecidamente melhor;
Apresentação de uma prova.
Vamos ver a seguir de que se trata cada um desses tipos de investigação?
Apresentação de um produto
As pesquisas que resultam na apresentação de um produto costumam ser realizadas em áreas emergentes da Computação, ou seja, áreas consideradas novas. Nelas, ainda existem aspectos a serem investigados e apresentados. 
Normalmente, trata-se de uma pesquisa exploratória na qual não existem trabalhos anteriores nos quais seja possível se basear.
33
A pesquisa exploratória costuma ser realizada quando um problema ainda não está totalmente definido ou quando seu escopo real ainda não está claro. A pesquisa permite que o investigador se familiarize com o problema ou conceito sendo estudado e pense em hipóteses a serem testadas.
DICA:
Trata-se de um estágio inicial que antecede a realização de uma pesquisa conclusiva. Uma razão comum para a realização de uma pesquisa exploratória é o teste de conceitos antes que eles sejam disponibilizados no mercado. Nessa situação, os consumidores recebem o conceito escrito ou o protótipo de um produto, serviço ou estratégia classificado como novo, revisado ou remodelado.
LEITURA
“O desenvolvimento de um sistema e sua apresentação podem ser considerados um trabalho relevante em cursos de graduação ou especialização, desde que fique evidente que o aluno aplicou técnicas no sistema ou no processo de desenvolvimento do sistema aprendido durante o curso”. 
WAZLAWICK, Raul Sidnei. Metodologia de pesquisa para Ciência da Computação. Rio de Janeiro: Elsevier, 2008. Pág. 8.
Solução para um problema relevante
É importante observar que a pesquisa deve apresentar a solução para um problema relevante, ou acaba sendo classificada apenas como mais uma solução em meio a tantas outras.
34
Se sua pesquisa trata de um problema já resolvido anteriormente, trace comparativos com as pesquisas e soluções já existentes e deixe claro que o resultado de sua investigação é uma forma de resolver um problema, e não a forma de fazê-lo.
Apresentação de algo diferente
35
Um resultado de pesquisa que apresenta algo diferente surge como culminância de uma investigação que consiste em uma forma diferente de resolver um problema já conhecido. 
Em geral, trata-se de uma comparação entre técnicas, para a solução de um problema que ressalta o que há de melhor em relação à técnica apresentada e às técnicas já conhecidas. Esta abordagem normalmente apresenta estudos de caso para aplicação das técnicas consideradas.
Estudo de caso
36
Agregando valor ao que já existe
Neste caso, é preciso muito empenho para convencer o público-alvo de que a pesquisa tem valor. Lembre-se de que o problema não é novo e já existem soluções propostas para ele. Portanto, sua investigação deve resultar em algo que agregue valor ao que já existe.
Um estudo de caso permite a exploração e a compreensão de questões complexas através do relato de estudos anteriores. Através do estudo de caso, o pesquisador consegue ir além dos dados estatísticos fornecidos pelas pesquisas quantitativas para compreender questões comportamentais a partir da perspectiva do ator, ou grupo de atores observado. 
Esta abordagem de pesquisa explica tanto o processo quanto o resultado obtido por meio de observação, reconstrução e análise dos casos particulares sob investigação. O estudo de caso permite que o investigador analise os dados de um contexto em particular, claramente delimitado para a pesquisa.
É importante observar que a nova abordagem proposta pelo pesquisador deve ser comparada a outra que não seja muito antiga.
Comparar uma nova técnica a uma implantada há vinte anos faz pouco sentido diante de tantas inovações tecnológicas, não acha?
Ao fazê-lo, a única coisa certa de se conseguir é o descrédito.
Apresentação de algo presumivelmente melhor
37
Na apresentação de algo presumivelmente melhor, a nova abordagem proposta precisa ser comparada quantitativamente com as outras abordagens já publicadas na literatura da área.
Esse tipo de pesquisa somente será bem aceito se o investigador esclarecer detalhadamente as formas como foram aplicadas as técnicas e a maneira como procedeu para isolar os fatores que poderiam afetar os resultados e, assim, produzir uma avaliação tendenciosa.
Estabelecendo métricas
Para proceder às comparações, é preciso estabelecer métricas. 
Dizer que o sistema A é mais fácil que usar do que o sistema B e que, por isso, o sistema B é melhor não é uma métrica válida.
Pense que o que é fácil para uns pode ser bastante difícil para outros e, portanto, “facilidade” é uma métrica subjetiva, e métricas assim são facilmente renegadas.
“Um exemplo de definição nesse caso poderia ser a quantidade de mouseclicks que o usuário tem de usar para executar uma tarefa em um ou outro sistema” 
(WAZLAWICK, 2008:12).
Teoricamente,
o sistema no qual foi necessário uma menor quantidades de cliques para execução da tarefa deve ser o mais fácil de ser usado. Veja que essa métrica, ao contrário da métrica “facilidade”, independe do indivíduo. Seu resultado será um valor numérico que não mantém nenhuma relação com o grau de inteligência do usuário ou com sua proficiência no uso dos sistemas avaliados.
38
LEITURA
"Poderá ser de muita valia se o autor possuir conhecimentos em outras áreas que muitas vezes nem estejam relacionadas ao problema em questão. Algumas vezes, técnicas de áreas distintas aplicadas a um problema produzem resultados muito interessantes. Porém, deve-se lembrar que apenas aplicar uma técnica diferente para um problema remete o trabalho para ‘apresentar algo diferente’. Quando se opta por utilizar uma técnica alienígena em um problema conhecido, é necessário que se tenha bons motivos para acreditar que a técnica possa produzir resultados melhores do que as técnicas correntes”. 
WAZLAWICK, Raul Sidnei. Metodologia de pesquisa para Ciência da Computação. 
Rio de Janeiro: Elsevier, 2008. Pág. 13. 
Apresentação de algo reconhecidamente melhor  
39
Neste tipo de pesquisa, o investigador não precisa comparar a abordagem proposta com as anteriormente publicadas para tratar do problema analisado. Esse nível de trabalho costuma ser alcançado em pesquisas de doutorado, onde os alunos têm interesse em fazer avançar o estado da arte da linha de investigação na qual estão inseridos.
Se você for o responsável por um estudo publicado no qual o resultado apresenta algo reconhecidamente melhor, todas as outras pesquisas relacionadas passam a se aproveitar das informações disponíveis na sua pesquisa. 
Isto porque ela passa a ser o estado da arte.
LEITURA
“[Na apresentação de uma prova,] deve ser construída uma teoria afirmando claramente quais são os conceitos utilizados e mostrando que a aplicação desses conceitos leva, logicamente, a determinados resultados. 
Esses resultados podem ser a demonstração de que um determinado algoritmo é o melhor possível para resolver um determinado tipo de problema ou que um algoritmo para resolver um determinado tipo de problema não existe. Pode ser ainda que a complexidade de qualquer algoritmo que resolve um determinado tipo de problema não pode ser menor do que um determinado polinômio”. 
WAZLAWICK, Raul Sidnei. Metodologia de pesquisa para Ciência da Computação. 
Rio de Janeiro: Elsevier, 2008. Pág. 14. 
Apresentação de uma prova
40
A apresentação de uma prova implica na construção de uma teoria e na sua testagem, de modo a comprovar que os resultados esperados podem ser alcançados.  Trata-se de uma área de investigação mais direcionada ao que chamamos de Computação Científica, na qual existe interesse na construção de modelos matemáticos e técnicas numéricas para a solução de problemas através do computador.
Grosso modo, é uma nova maneira de se obter conhecimento sem que se dependa de uma teoria ou de um experimento.
Para cada estilo apresentado nesta aula, tente imaginar uma ou mais pesquisas que possam ser classificadas conforme a proposta discutida. Caso não consiga pensar em muitas possibilidades de investigação, recorra à internet para consultar as pesquisas atuais na área de Computação. 
Estabeleça uma relação entre as pesquisas que encontrar e os tipos de apresentação citados nesta aula.
Sugestões de Projetos:
Apresentação de um produto: 
Validador de acessibilidade segundo as heurísticas de Nielsen.
Apresentação de algo diferente: 
Algoritmo otimizado para solução do problema do caixeiro viajante.
Apresentação de algo presumivelmente melhor: 
Compactador de arquivos com taxa de compactação mais alta do que os existentes.
Apresentação de algo reconhecidamente melhor: 
Validador de acessibilidade com maior número de validações do que as versões brasileiras existentes.
41
Atividade Proposta
“O segredo de um trabalho de pesquisa de sucesso consiste em ter um bom objetivo. Uma vez definido o objetivo do trabalho, tudo o mais gravita em redor dele. A justificativa vai dizer por que vale a pena buscar esse objetivo; o método informa como esse objetivo pode ser alcançado; os resultados esperados mostram o que muda no mundo após o objetivo ser atingido; o capítulo de revisão bibliográfica vai apresentar os conceitos necessários para a compreensão do objetivo e os trabalhos relacionados ao objetivo”.
WAZLAWICK, Raul Sidnei. Metodologia de pesquisa para Ciência da Computação. 
Rio de Janeiro: Elsevier, 2008. Página 18. 
 Embora possa parecer uma recomendação óbvia, é importante ressaltar que o trabalho de pesquisa deve anteceder a redação da pesquisa em si. 
 Movidos pela ansiedade, muitos alunos começam a escreverseus trabalhos sem fazer pesquisa alguma sobre o temano qual estão trabalhando. 
 O resultado disso não é outro senão apercepção de que não se sabe o suficientepara produzir o texto do TCC.
 O trabalho de pesquisa sobre o qual estamos falando é denominado “revisão bibliográfica”. Sua intenção é permitir que você revisite os conceitos já estudados e preencha as lacunas deixadas no lugar dos conhecimentos que ainda lhe faltam para a produção de seu trabalho. Não há como fazer uma revisão bibliográfica adequada, entretanto, sem que já se tenha definido o objetivo da pesquisa. Afinal de contas, como é possível selecionar o material para a leitura sem saber o que se pretende alcançar com ela, não é verdade? Assim sendo, vamos discutir a seguir como proceder de forma a definir o objetivo de sua pesquisa.
43
INTRODUÇÃO
“Um objetivo algumas vezes encontrado é a forma ‘propor...’. Algo é proposto, normalmente um método, uma abordagem, uma técnica, um algoritmo, uma comparação, ou qualquer outra opção. A questão é: se o autor fizer a proposta, então o objetivo será atingido? Se o aluno se propõe a propor e propôs, então está proposto! O que for proposto não é necessariamente melhor ou diferente daquilo que já existia antes.” 
WAZLAWICK, Raul Sidnei. Metodologia de pesquisa para Ciência da Computação. Rio de Janeiro: 
Elsevier, 2008. Página 18. 
Definindo o objetivo do trabalho
A definição do objetivo da pesquisa que se realiza ou do trabalho que se apresenta é uma das fases mais difíceis, pois o ideal é que o objetivo convença o público-alvo de que o que se está mostrando é melhor do que as soluções já existentes ou resolve um problema ainda não tratado.
44
REFLEXÃO:
É sempre importante lembrar que o objetivo do trabalho deve estar relacionado ao estado da arte da área abordada. Você se lembra sobre o que falamos na primeira aula sobre propor uma solução computadorizada para o controle de locadoras? 
Como já vimos, a ideia não parece nada inovadora, mas toma uma nova forma quando se propõe implantar nesse sistema a gestão de relacionamento com os clientes. 
Poderíamos pensar em inúmeros outros exemplos, na área de Informática e em muitas outras, que já foram solucionados, mas que podem ganhar uma nova roupagem se incorporarem recursos do mundo contemporâneo que contemplem as novas demandas dos seres humanos.
Na primeira aula, dissemos que o ideal é que o tema escolhido para o trabalho esteja relacionado a uma área sobre a qual você já tenha algum conhecimento ou pela qual esteja bastante interessado. 
É igualmente importante que seu professor orientador tenha algum conhecimento sobre o tema selecionado, para que ele possa lhe ajudar na modelagem da solução para o problema. 
Muitas vezes, a escolha do tema é um momento no qual o aluno vivencia muita angústia, pois não sabe o que escolher. Se você está nessa situação, ou seja, ainda não tem a menor ideia do que deseja fazer em seu TCC, talvez uma boa decisão seja revisitar as disciplinas pela quais passou ao longo da graduação para rever os trabalhos produzidos em cada uma delas.
45
Um pouco mais sobre a escolha do tema 
“O tema pode ser especializado a partir de uma grande área em subáreas cada vez mais específicas. Por exemplo:
Ciência
da Computação
     1.1 Inteligência Artificial
          1.1.1 Métodos de busca
               1.1.1.1 Busca heurística
                    1.1.1.1.1 Algoritmo A*. 
Nessa lista, cada item é uma especialização do item anterior, mas cada um é apenas um tema de pesquisa, embora cada vez mais específico.” 
WAZLAWICK, Raul Sidnei. Metodologia de pesquisa para Ciência da Computação. Rio de Janeiro: 
Elsevier, 2008. Página 22. 
Opte primeiro pelas disciplinas de modelagem de dados e de sistemas e siga para as disciplinas de programação. Pode ser que seu professor tenha sugerido algum projeto ou comentado sobre alguma melhoria que poderia ser feita em soluções já executadas. Os projetos elaborados nas disciplinas podem ser continuados e aprimorados no trabalho de conclusão.
Lembre-se também de que a delimitação do escopo de seu projeto deve estar claramente definida. Tenha bom senso na hora de definir o que se propõe a apresentar e não prometa “o mundo”, ou pode não conseguir entregá-lo. 
Da mesma forma, não proponha algo simples demais e que não faça jus ao título de trabalho de conclusão de curso. Na dúvida, lembre-se sempre de recorrer ao seu orientador para lhe ajudar a definir o que seria um trabalho adequado para fechar sua graduação “com chave de ouro”.
46
Delimitação do escopo do projeto
DICA:
“Algumas propostas de pesquisa são apresentadas inicialmente sem ter um problema claramente identificado. Por exemplo: ‘este trabalho propõe usar a metáfora de formigueiro para modelar pacotes em uma rede’. Esse tema até pode vir a ser um trabalho interessante, mas qual é o problema que essa modelagem vai resolver? O que há de errado com as outras formas de modelagem, sejam elas quais forem, que essa metáfora do formigueiro vai possivelmente resolver?” 
WAZLAWICK, Raul Sidnei. Metodologia de pesquisa para Ciência da Computação. Rio de Janeiro: 
Elsevier, 2008. Página 24. 
1 Se você está preocupado com o grau de complexidade de seu projeto, pode relaxar. A intenção de seu TCC não é apresentar algo novo e nunca antes inventado, mas sim propor a solução para um problema claramente identificado e delimitado.
47
Pensando o problema
2 Sua preocupação deve girar em torno dessa clara delimitação do problema, de modo que as pessoas possam perceber valor na sua proposta. É importante também entender que, se não é possível identificar um problema, dificilmente será possível propor uma solução.
3 “Um problema não pode ser solucionado se não for apresentado de maneira clara e precisa. Com frequência são apresentados problemas tão desestruturados e formulados de maneira tão vaga que não é possível imaginar nem mesmo como começar a resolvê-los.
”GIL, Antônio Carlos. Como elaborar projetos de pesquisa.São Paulo: Editora Atlas, 2002. Página 27. 
Conforme já vimos, a revisão bibliográfica, ou revisão da literatura, tem a intenção de permitir que você revisite os conceitos já estudados e preencha as lacunas deixadas no lugar dos conhecimentos que ainda lhe faltam para a produção de seu trabalho.
Trata-se de uma descrição da literatura relevante em um determinando campo de pesquisa ou tópico, e cujo objetivo é fornecer:
Uma visão geral do que já foi publicado sobre o tema;
Quem são os autores principais na área;
Quais as hipóteses e teorias predominantes;
Quais perguntas estão sendo feitas;
Quais os métodos e metodologias apropriados e úteis.
Fontes de pesquisa: Há muitas fontes de pesquisa que podem ser usadas na revisão bibliográfica. Em geral, os livros são os mais recomendados, porque costumam ser mais completos e mais didáticos.
Ao longo da sua graduação, você recebeu uma série de capítulos de livros relacionados às diferentes disciplinas cursadas. Esse material será de grande valia ao longo da elaboração de seu projeto, pois poderá ajudar a esclarecer as dúvidas que certamente vão surgir.
Independente do tema escolhido, as leituras sobre modelagem de dados e modelagem de sistemas, mais especificamente sobre UML, serão bastante elucidadoras quando as dúvidas lhe visitarem. Assim sendo, trate de pôr em dia a leitura sobre esses assuntos, para que não lhe falte conhecimento quando chegar a hora de modelar seu sistema.
48
A revisão bibliográfica
Ao longo da leitura, lembre-se de tomar notas ou marcar nos textos os trechos que podem lhe ajudar a esclarecer mais rapidamente as dúvidas que possam voltar a surgir sobre aquele assunto.
DICA: Alguns verbos interessantes que podem ser utilizados na definição de objetivos são: diminuir, aumentar, fortalecer, melhorar, aprimorar. Por outro lado, dentre os verbos pouco adequados à definição de objetivos estão: treinar, fornecer, produzir, estabelecer, criar.“Os problemas propostos para a investigação geralmente o são de maneira bastante geral. Todavia, para que se possa realizar a pesquisa com a precisão requerida, é necessário especificá-los. Os objetivos gerais são pontos de partida, indicam uma direção a seguir, mas, na maioria dos casos, não possibilitam que se parta para a investigação. Logo, precisam ser redefinidos, esclarecidos e delimitados. Daí surgem os objetivos específicos da pesquisa. Os objetivos específicos tentam descrever, nos termos mais claros possíveis, exatamente o que será obtido num levantamento. Enquanto os objetivos gerais referem-se a conceitos mais ou menos abstratos, os específicos referem-se a características que podem ser observadas e mensuradas em determinado grupo.” 
GIL, Antônio Carlos. Como elaborar projetos de pesquisa. São Paulo: Editora Atlas, 2002. Páginas 111 e 112. 
49
ESPECIFICAÇÃO DOS OBJETIVOS
Regra para ajudar a especificar os objetivos: pensar que eles devem ser do tipo SMART
ESpecíficos: Os objetivos informam exatamente o que, onde e como os problemas ou necessidades serão tratados.
Specific
Measurable
Attainable
Relevant
Time-bound
Mensuráveis: Os objetivos explicitam a porção do problema a ser resolvida.
Orientados à Ação: Os objetivos empregam indicadores de atividades para garantir que algo será feito.
Realistas: Os objetivos são passíveis de serem alcançados dentro do tempo proposto.
Limitados pelo Tempo: Existe um tempo dentro do qual os objetivos devem ser alcançados.
Tratamentos de Eventos em Java
Quase todos os componentes propagam eventos. Estes eventos devem ser tratados em algum ponto do código da aplicação. Os eventos nunca são tratados no próprio componente. Para ligar o código do tratamento de eventos ao componente existem, no Java, um conjunto de interfaces chamadas listeners. Um listener é uma interface que especifica os métodos que uma aplicação deve ter para ser notificada da ocorrência de um determinado evento. Os componentes que geram eventos permitem que sejam adicionados ou removidos listeners em qualquer altura. 
51
Quem detecta o evento é o SO.
Funcionamento do tratamento de eventos
O componente que produz eventos possui métodos especiais do tipo addXXListener(XXListener) que permite adicionar ou remover listeners. XX representa o nome do evento. O método addXXListener recebe por parâmetro o objeto que implementa a interface XXListener; 
A implementação do método addXXListener no componente apenas adiciona o objeto passado por parâmetro a uma lista interna. Sempre que ocorrer um evento (ex. botão pressionado), o componente percorre a lista e invoca, para cada elemento, o método definido na interface XXListener. 
52
Hierarquia dos Eventos
53
Eventos Prontos
54
AÇÃO DO USUÁRIO
Evento disparado
LISTENER
Clicarem um botão -JButton
ActionEvent
ActionListener
Abrir, minimizar ou fechar uma janela -JFrame
WindowEvent
WindowListener
Clicarem um componente–Jcomponent
MouseEvent
MouseListener
Alteração de texto em um campo de texto –JTextField
TextEvent
TextListener
Digitaruma tecla
KeyEvent
KeyListener
Clicarem um item de escolha -Checkbox
ItemEvent
ItemListener
No botão, adicionamos um listener (“escutador” de eventos), que é um objeto criado neste momento. Este objeto possui o seu tratamento, que é o actionPerformed para o
evento em questão. Este método é chamado toda vez que o ActionListener detecta o evento que o botão foi pressionado. Para manter uma programação mais elegante, criamos um método de tratamento que será chamada dentro do actionPerformed(). Este método pode ser escrito em qualquer parte da sua classe e reaproveitado quantas vezes você quiser. Com isso, tratamos o evento Action. Os outro eventos funcionam analogicamente.
Passo a Passo
Vamos implementar um programa simples para incrementar um valor numérico. Quando apertamos o botão Incrementar, o valor incrementa e quando apertamos o botão Zerar, o valor volta para zero.
Para isso, precisamos de um JFrame, dentro dele teremos um JLabel, um JTextField e dois JButton.
55
Abaixo, o código pronto: 
jButton1.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(java.awt.event.ActionEvent evt) {                
trataEventoBt1ActionPerformed(evt); //método de tratamento            
}        
});
 A Interface ActionListener 
Esta interface disponibiliza o tratamento através do método ActionPerformed.
Este tratamento é feito da seguinte forma:
● Adicionamos o ActionListener ao objeto em questão;
● Criamos o objeto que irá tratar este evento instanciando um objeto ActionListener para implementar o método de tratamento;
● Implementamos o método actionPerformed, que é o método de tratamento.
56
 Interface WindowListener
57
Métodos
Função
windowActivated( WindowEvent e)
Invocada quando a janela recebe o foco
windowClosed( WindowEvent e)
Invocado quando a janela foi fechada
windowClosing( WindowEvent e)
Invocado quando a janela está fechando
windowDeactivated( WindowEvent e)
Invocado quando a janela perde o foco
windowDeiconified( WindowEvent e)
Invocado quando a janela é maximizada
windowIconified( WindowEvent e)
Invocado quando a janela éminimizada
windowOpened( WindowEvent e)
Invocado quando a janela éaberta
public class Tela extends JFrame implements WindowListener {
 private JTextField textField = null;
 public Tela() {
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 textField = new JTextField(20);
 addWindowListener(this);
 add(textField, BorderLayout.NORTH);
 pack();
 setLocationRelativeTo(this);
 }
 @Override
 public void windowOpened(WindowEvent e) { //trata abertura da janela
 JOptionPane.showMessageDialog(rootPane, "windowOpened");
 }
 @Override
 public void windowClosing(WindowEvent e) {//trata confirmação de fechamento da janela
 JOptionPane.showMessageDialog(rootPane, "windowClosing");
 }
 @Override
 public void windowClosed(WindowEvent e) {//trata fechamento da janela
 }
 @Override
 public void windowIconified(WindowEvent e) {//trata iconização da janela (encolhimento)
 JOptionPane.showMessageDialog(rootPane, "windowIconified");
 }
 @Override
 public void windowDeiconified(WindowEvent e) {//trata deiconização da janela (voltar ao tamanho normal)
 JOptionPane.showMessageDialog(rootPane, "windowDeiconified");
 }
 @Override
 public void windowActivated(WindowEvent e) {//trata ativação da janela
 }
 @Override
 public void windowDeactivated(WindowEvent e) {//trata desativação da janela
 }
}
 Interface WindowListener
58
Código para o tratamento destes principais eventos em nosso exemplo anterior. Nesta alteração, foi colocado um campo Jlabel com o nome de jLblMsg onde colocamos o estado da janela.
 Interface MouseListener
59
Métodos
Função: invocada quando...
mouseClicked( MouseEvent e)
Botãoé pressionado e solto sobre o componente
mouseEntered( MouseEvent e)
Mouseentra na região gráfica do componente
mouseExited( MouseEvent e)
Mousesai da região gráfica do componente
mousePressed( MouseEvent e)
Botãodo mouse é apertado
mouseReleased( MouseEvent e)
Botãodo mouse é solto
mouseDragged( MouseEvent e)
Mousese movimenta e o seu botão principal está apertado
mouseDragged( MouseEvent e)
Botãoé pressionadoemovimentado com o componente
mouseMoved( MouseEvent e)
Mousese moveu para a região gráfica do componente sem nenhum dos botões pressionados
Disponibiliza 14 métodos de tratamento para os diferentes comportamentos possíveis para as funções do mouse. Os principais são:
Disponibiliza 2 métodos de tratamento para os diferentes comportamentos possíveis para a janela. 
 public Tela() {
 setTitle("Simple Frame");
 setLayout(new BorderLayout());
 setSize(450, 200);
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 lblMensagem = new JLabel("Mensagem: ");
 lblCoordX = new JLabel("X");
 lblCoordY = new JLabel("Y");
 painelSul = new JPanel();
 addMouseListener(this);
 painelSul.add(lblMensagem);
 painelSul.add(lblCoordX);
 painelSul.add(lblCoordY);
 add(painelSul, BorderLayout.SOUTH);
 setLocationRelativeTo(null);
 }
 public void mouseClicked(MouseEvent e) {
 setMensagem("Mouse foi clicado nas coordenadas: ", e.getX(), e.getY());
 }
 public void mouseEntered(MouseEvent e) {
 setMensagem("Mouse entrou nas coordenadas: ", e.getX(), e.getY());
 }
 public void mouseExited(MouseEvent e) {
 setMensagem("Mouse saiu nas coordenadas: ", e.getX(), e.getY());
 }
 public void mousePressed(MouseEvent e) {
 setMensagem("Mouse esta sendo pressionado nas coordenadas: ", e.getX(), e.getY());
 }
 public void mouseReleased(MouseEvent e) {
 setMensagem("Mouse solto nas coordenadas: ", e.getX(), e.getY());
 }
 private void setMensagem(String msg, int x, int y) {
 lblMensagem.setText(msg);
 lblCoordX.setText("X" + x);
 lblCoordY.setText("Y" + y);
 }
}
 Interface MouseListener
60
Acrescentando o tratamento de evento para o mouse para o componente Botão Zerar no programa, teremos:
Tratamentos de Eventos em Java
62
Quase todos os componentes propagam eventos. Estes eventos devem ser tratados em algum ponto do código da aplicação. Os eventos nunca são tratados no próprio componente. 
Para ligar o código do tratamento de eventos ao componente existem, no Java, um conjunto de interfaces chamadas listeners. Um listener é uma interface que especifica os métodos que uma aplicação deve ter para ser notificada da ocorrência de um determinado evento. Os componentes que geram eventos permitem que sejam adicionados ou removidos listeners em qualquer altura. 
Eventos Prontos
63
Ação do Usuário
Evento disparado
Listener
Clicar em um botão -JButton
ActionEvent
ActionListener
Abrir, minimizar ou fechar uma janela -JFrame
WindowEvent
WindowListener
Clicar em um componente -JComponent
MouseEvent
MouseListener
Alteração de texto em um campo de texto –AWT
TextEvent
TextListener
Digitar uma tecla
KeyEvent
KeyListener
Clicar em um item de escolha –Checkbox
ItemEvent
ItemListener
Interface TextListener
64
Métodos
Função
textValueChanged( TextEvent e)
Invocado quando o texto do componente AWT sofre alguma alteração
Este tratamento é feito da seguinte forma:
Adicionamos o TextListener no objeto texto, que é um TextField;
Criamos o objeto que irá tratar este evento, instanciando um objeto TextListener para implementar o método de tratamento;
Implementamos o método textValueChanged, que é o método de tratamento invocado.
Interface KeyListener
65
Métodos
Função
KeyTyped( KeyEvent e)
Invocado quando uma tecla é apertada e o componente está no foco
KeyPressed( KeyEvent e)
Invocado quando uma tecla é apertada e o componente está no foco
KeyReleased( KeyEvent e)
Invocado quando uma tecla é solta e o componente está no foco
Interface ItemListener
66
Interface FocusListener 
Métodos
Função
itemStateChanged( ItemEvent e)
Invocada quando um componente de seleção muda de estado.
Métodos
Função
focusGained( FocusEvent e)
Invocada quando o componente ganha
o foco
focusLost( FocusEvent e)
Invocado quando o componente perde o foco
Tratamento da mudança de estados
67
private void trataMudancaEstado(ItemEvent e) {
  Object[] i = jCheckBox2.getSelectedObjects();
 if(i!=null)
 jLabel2.setText("Caixa de Texto Está selecionada");
 else
 jLabel2.setText("Caixa de Texto não está selecionada");
 }
JComboBox
68
É um componente que combina um botão ou um campo de edição com uma caixa de lista tipo drop-down. 
As principais características são:
Podemos editar ou não seu texto;
Definimos a lista de elementos da lista;
Validando Expressões
69
Java fornece um conjunto de classes para validar expressões regulares, como telefone, CEP, email, etc. São muito úteis para validar entrada de dados, principalmente quando é necessário efetuar a crítica. Estas classes são Pattern e Matcher. 
 
Exemplo:
 private boolean validaEmail(String email{
 //Define o padrão da entrada de dados
 Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
 //Valida a cadeia de caracteres com o padrão definido
 Matcher m = p.matcher(email);
 return (m.matches());
 }
 
Passo a Passo
70
Exemplo de cadastro de pessoa
Fazer um programa para cadastrar elementos da classe pessoa, colocando em uma lista de elementos.
Este pequeno programa deverá criticar se existem elementos digitados, o email precisa estar nos padrões corretos (ex.: pessoa@hotmail.com).
A navegação se dará através dos botões Início e Próximo. Ao clicar na caixa Habilita Navegação, os botões serão habilitados e os botões de cadastro desabilitados. 
Passo a Passo
71
Como só podemos autorizar cadastro com emails com a estrutura correta, o botão inclui só ficará habilitado quando a crítica do texto do email estiver correta. Caso o email não esteja no padrão, o usuário terá que informar um email no formato correto. O usuário ficará preso no campo email até digitar um email válido. Para sair do campo, basta limpar a caixa de texto que será autorizado a sair. Observe na imagem que o botão inclui está desabilitado.
private void trataLimpa(java.awt.event.ActionEvent evt) { limpaCampos();} 
private void trataMudancaEstado(java.awt.event.ItemEvent evt) { 
Object[] obj = jCBHabilita.getSelectedObjects(); 
if(obj!=null){ 
habilitaInclusao(true); 
i=pessoas.iterator(); 
mostraElemento(); } 
else 
habilitaInclusao(false); } 
private void trataTeclaApertada(java.awt.event.KeyEvent evt) { jBtLimpa.setEnabled(true);} 
private void verificaEmail(java.awt.event.FocusEvent evt) { 
String email = jTFEmail.getText(); 
Color c = new Color(0,255,0); 
if(validaEmail(email)){ 
c=Color.BLUE; 
jLblValida.setText("Válido"); 
jBtInclui.setEnabled(true); 
jBtInclui.requestFocus(); 
else{ 
c=Color.RED; 
jLblValida.setText("Email Inválido"); 
if(jTFEmail.getText().equals("")) 
jLblValida.setText(""); 
else jTFEmail.requestFocus(); } 
jLblValida.setForeground(c); } 
private void trataInicio(java.awt.event.ActionEvent evt) { 
i=pessoas.iterator(); 
jBtProximo.setEnabled(true); 
jLblMsg.setText(""); 
mostraElemento(); } 
private void trataProximo(java.awt.event.ActionEvent evt) { mostraElemento(); } 
private boolean validaEmail(String email){//Define o padrão da entrada de dados 
Pattern p = Pattern.compile(".+@.+\\.[a-z]+"); //Valida cadeia de caracteres c/ padrão definido 
Matcher m = p.matcher(email); 
return (m.matches()); } 
private void habilitaInclusao(boolean b) { 
jBtAnterior.setEnabled(b); 
jBtProximo.setEnabled(b); 
jBtInclui.setEnabled(!b); 
jBtLimpa.setEnabled(!b); 
limpaCampos(); } 
private void limpaCampos(){ 
jTFNome.setText(""); 
jTFEmail.setText(""); 
jLblValida.setText(""); 
jBtLimpa.setEnabled(false); 
jBtInclui.setEnabled(false); 
jRBMasc.setSelected(true); } 
private void mostraElemento() { 
Pessoa auxPessoa; 
if(i.hasNext()){ auxPessoa = (Pessoa) i.next(); 
jTFNome.setText(auxPessoa.getNome()); 
jTFEmail.setText(auxPessoa.getEmail()); 
if(auxPessoa.isSexo()) {jRBMasc.setSelected(true); 
else jRBFem.setSelected(true); } 
else { jLblMsg.setText("Não existe mais elemento"); jBtProximo.setEnabled(false); } } 
public static void main(String args[]) {/** * @param args the command line arguments */ 
java.awt.EventQueue.invokeLater(new Runnable() { 
public void run() { new CadastroPessoa().setVisible(true); } }); } 
private javax.swing.ButtonGroup buttonGroup1; // Variables declaration - do not modify 
private javax.swing.JButton jBtAnterior; 
private javax.swing.JButton jBtInclui; 
private javax.swing.JButton jBtLimpa; 
private javax.swing.JButton jBtProximo; 
private javax.swing.JCheckBox jCBHabilita; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JLabel jLabel2; 
private javax.swing.JLabel jLabel3; 
private javax.swing.JLabel jLblMsg; 
private javax.swing.JLabel jLblValida; 
private javax.swing.JRadioButton jRBFem; 
private javax.swing.JRadioButton jRBMasc; 
private javax.swing.JTextField jTFEmail; 
private javax.swing.JTextField jTFNome; // End of variables declaration } 
Passo a Passo
72
Classe Pessoa: package Modelo; /** @author Eduardo */ 
public class Pessoa { 
private String nome; 
private String email; 
private boolean sexo; 
public String getNome() { return nome; } /** * @return the nome */ 
public void setNome(String nome) { this.nome = nome; } /** @param nome to set */ 
 public String getEmail() { return email; } /** @return the email */ 
public void setEmail(String email) { this.email = email; } /** @param email to set */ 
public boolean isSexo() { return sexo; } /** @return the sexo */ 
public void setSexo(boolean sexo) { this.sexo = sexo; } /** * @param sexo the sexo to set */ 
} 
Classe CadastroPessoa 
package projaula5pooead; 
import Modelo.Pessoa; import java.awt.Color; import java.util.ArrayList; 
import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; 
import java.util.regex.Pattern; /** @author Eduardo */ 
public class CadastroPessoa extends javax.swing.JFrame { 
List pessoas; 
Iterator i; 
public CadastroPessoa() {/** Creates new form CadastroPessoa */ 
initComponents(); 
pessoas = new ArrayList(); } 
/** This method is called from within the constructor to initialize the form. */
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 
buttonGroup1 = new javax.swing.ButtonGroup(); 
jLabel1 = new javax.swing.JLabel(); 
jTFNome = new javax.swing.JTextField(); 
jRBMasc = new javax.swing.JRadioButton(); 
jRBFem = new javax.swing.JRadioButton(); 
jLabel2 = new javax.swing.JLabel(); 
jLabel3 = new javax.swing.JLabel(); 
jTFEmail = new javax.swing.JTextField(); 
jLblValida = new javax.swing.JLabel(); 
jBtInclui = new javax.swing.JButton(); 
jBtLimpa = new javax.swing.JButton(); 
jBtAnterior = new javax.swing.JButton(); 
jBtProximo = new javax.swing.JButton(); 
jCBHabilita = new javax.swing.JCheckBox(); 
jLblMsg = new javax.swing.JLabel(); 
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
setTitle("Exercício Cadastro"); 
jLabel1.setText("Nome:"); 
jTFNome.addKeyListener(new java.awt.event.KeyAdapter() { 
public void keyTyped(java.awt.event.KeyEvent evt) { trataTeclaApertada(evt); } }); 
buttonGroup1.add(jRBMasc); 
jRBMasc.setSelected(true); 
jRBMasc.setText("Masculino"); 
buttonGroup1.add(jRBFem); 
jRBFem.setText("Feminino"); 
jLabel2.setText("Sexo:"); 
jLabel3.setText("email:"); 
jTFEmail.addFocusListener(new java.awt.event.FocusAdapter() { 
public void focusLost(java.awt.event.FocusEvent evt) { verificaEmail(evt); } }); 
jTFEmail.addKeyListener(new java.awt.event.KeyAdapter() { 
public void keyTyped(java.awt.event.KeyEvent evt) { trataTeclaApertada(evt); } }); 
jBtInclui.setText("Inclui"); 
jBtInclui.setEnabled(false); 
jBtInclui.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(java.awt.event.ActionEvent evt)
{ trataInclui(evt); } }); 
jBtLimpa.setText("Limpa"); 
jBtLimpa.setEnabled(false); 
jBtLimpa.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(java.awt.event.ActionEvent evt) { trataLimpa(evt); } }); 
jBtAnterior.setText("Início"); 
jBtAnterior.setEnabled(false); 
jBtAnterior.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(java.awt.event.ActionEvent evt) { trataInicio(evt); } }); 
jBtProximo.setText("Próximo"); 
jBtProximo.setEnabled(false); 
jBtProximo.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(java.awt.event.ActionEvent evt) { trataProximo(evt); } }); 
jCBHabilita.setText("Habilita Navegação"); 
jCBHabilita.addItemListener(new java.awt.event.ItemListener() { 
public void itemStateChanged(java.awt.event.ItemEvent evt) { trataMudancaEstado(evt); } }); 
jLblMsg.setFont(new java.awt.Font("Tahoma", 3, 12)); // NOI18N 
jLblMsg.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
getContentPane().setLayout(layout); 
layout.setHorizontalGroup( 
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
.addGroup(layout.createSequentialGroup() 
.addGap(2, 2, 2) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRA ILING) 
.addComponent(jLblMsg, javax.swing.GroupLayout.PREFERRED_SIZE, 254, javax.swing.GroupLayout.PREFERRED_SIZE) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) 
.addGroup(layout.createSequentialGroup() 
.addGap(2, 2, 2) ;.addComponent(jCBHabilita).addGap(18, 18, 18) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) 
.addGroup(layout.createSequentialGroup().addComponent(jBtInclui) 
.addGap(18, 18, 18) .addComponent(jBtLimpa)) 
.addGroup(layout.createSequentialGroup().addComponent(jBtAnterior) 
.addGap(49, 49, 49) 
.addComponent(jBtProximo)))) 
.addGroup(layout.createSequentialGroup() 
.addGap(85, 85, 85) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRA ILING) 
.addComponent(jLabel3).addComponent(jLabel1).addComponent(jLabel2)) 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING, false) 
.addComponent(jRBFem).addComponent(jRBMasc) 
.addComponent(jTFNome, javax.swing.GroupLayout.DEFAULT_SIZE, 132, Short.MAX_VALUE).addComponent(jTFEmail)) 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
.addComponent(jLblValida, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)))) 
.addGap(50, 50, 50)) ); 
layout.setVerticalGroup( 
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
.addGroup(layout.createSequentialGroup() 
.addGap(57, 57, 57) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS ELINE) 
.addComponent(jLabel1) 
.addComponent(jTFNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS ELINE) 
.addComponent(jRBMasc).addComponent(jLabel2)) 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
.addComponent(jRBFem).addGap(8, 8, 8) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS ELINE) 
.addComponent(jLabel3).addComponent(jTFEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLblValida, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 45, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS ELINE) 
.addComponent(jBtInclui).addComponent(jBtLimpa)) 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
.addComponent(jLblMsg, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS ELINE) 
.addComponent(jBtProximo).addComponent(jCBHabilita).addComponent(jBtAnterior)) 
.addGap(14, 14, 14)) ); 
pack(); }// </editor-fold> 
private void trataInclui(java.awt.event.ActionEvent evt) { 
Pessoa p = new Pessoa(); 
p.setNome(jTFNome.getText()); 
p.setEmail(jTFEmail.getText()); 
p.setSexo(jRBMasc.isSelected()); 
pessoas.add(p); 
limpaCampos(); 
jTFNome.requestFocus(); 
i=pessoas.iterator(); } 
JDBC
Java Database Connectivity define um conjunto de classes e interfaces para escrever programas ou sistemas em Java que utilizem Banco de Dados. Estas classes e interfaces efetuam as conexões entre a aplicação e o Sistema Gerenciador de Banco de Dados (SGBD).
Ao utilizar o JDBC, podemos enviar comandos SQL ou PL/SQL para quase todos os bancos de dados relacionais.
74
Principais Características
Disponibiliza ao programador de aplicações Java abrir conexões em um SGBD, consultando ou modificando algum dado de um determinado BD, utilizando comandos SQL.
Implementa o isolamento entre a aplicação e os dados, baseado na abordagem da Microsoft para a sua API ODBC.
 
Características: 
Portabilidade 
API independente do Banco de Dados utilizado 
Permite o desenvolvimento de aplicações independente do banco de dados escolhido 
Implementa a Estrutura em Camadas 
75
Estrutura de Acesso ao Banco de Dados através do JDBC
Fornece um conjunto de API’s de acesso para executar comandos SQL 
É implementado no pacote padrão java.sql, que é fornecido no SDK 
Funciona para qualquer tipo de Banco de Dados relacional que seu fabricante disponibilizou o Driver específico
Interface foi baseada no X/OPEN SQL / CLI 
É independente de API ou da Linguagem proprietária dos fabricantes de SGBD 
76
Arquitetura JDBC
77
Aplicação Java
Gerenciador de Drivers JDBC
Ponte JDBC - ODBC 
Driver ODBC
SGBD
SGBD
Driver JDBC
A Responsabilidade do JDBC
Estabelecer conexão com o SGBD
Enviar comandos SQL
Receber os resultados
Processar os resultados
78
Carregar os drivers JDBC 
Obter uma conexão
Criar os comandos SQL
Enviar comandos SQL
Receber os resultados
Processar os resultados
A Classe Driver
Para efetuar conexão à um SGBD, é necessário carregar o driver compatível. Estas classes não estão incluídas e precisam ser obtidas com o fabricante do banco de dados.
79
Registrando um Driver
É utilizado o método estático:
Class.forName(<nome_da_classe_driver>);
O nome da classe driver consta na documentação do mesmo.
SGBD
DRIVER
JDBC-ODBC:
sun.jdbc.odbc.JdbcOdbcDriver
mySQL:
com.mysql.jdbc.Driver
PostGresql:
org.postgresql.Driver
Oracle:
oracle.jdbc.driver.OracleDriver
SqlServer:
com.jnetdirect.jsql.JSQLDriver
DB2:
com.ibm.db2.jdbc.app.DB2Driver
É possível registrar vários drivers em uma mesma aplicação. O Driver Manager gerencia cada um deles.
java.sql.DriverManager 
Provê serviços básicos para gerenciar diversos drivers JDBC 
java.sql.Connection 
Representa uma conexão estabelecida com o BD. 
java.sql.Statement 
Representa sentenças onde são inseridos os comandos SQL 
Permite realizar todo o tratamento das consultas (select) e dos comandos de atualizações (insert, delete, update)
Interface JDBC
O JDBC pode ser visto como um conjunto de interfaces cuja implementação deve ser fornecida por fabricantes de SGBD. 
Cada fabricante deve fornecer implementações de: 
java.sql.Connection 
java.sql.Statement 
java.sql.PreparedStatement 
java.sql.CallableStatement 
java.sql.ResultSet 
java.sql.Driver 
O objetivo é que fique transparente para o programador qual a implementação JDBC está sendo utilizada.
80
Interface JDBC
java.sql.ResultSet 
Representa o cj de registros resultantes de uma consulta. 
Permite manipular os resultados 
Permite realizar coerção (cast) entre tipos Java e SQL 
Exemplo: 
tipo no banco DateTime, tipo de retorno String 
Colunas de um objeto ResultSet podem ser referenciadas por um número posicional ou pelo nome da coluna do resultado. 
ResultSet rs.getString("Endereco") ou 
ResultSet rs.getString(3)
 
81
A Instalação JDBC
82
O pacote JDBC vêm incluso com as distribuições Java. As suas classes estão no pacote java.sql e javaxsql.
Conectando em um Banco
83
Abrindo uma Conexão
Ponte ODBC-JDBC:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
Connection conn = DriverManager.getConnection("jdbc:odbc:db_teste",“usuario","senha"); 
No MySql:
Class.forName("org.gjt.mm.mysql.Driver"); 
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/db_teste“,usuario,senha); 
84
O código acima precisa estar circundado por um try and catch, 
ou ter um throws no método. 
No PostgreSQL
Class.forName("org.postgresql.Driver"); 
Connection conn = DriverManager.getConnection( "jdbc:postgresql:db_teste“,usuario,senha); 
No Oracle
Class.forName("oracle.jdbc.driver.OracleDriver"); 
Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:db_teste", usuario,senha);
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;
import java.sql.SQLException;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JFrame; import javax.swing.JLabel;import javax.swing.JOptionPane;
public class Tela extends JFrame implements ActionListener {
 private JButton btnConectar = null; private JLabel lblTitulo = null; private JLabel lblMensagemConexao = null; private JLabel lblMensagemSQL = null;
 public Tela() {
 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setSize(500, 300); setLayout(null);
 lblTitulo = new JLabel(); lblTitulo.setText("Conectando no Banco"); lblTitulo.setBounds(80, 50, 140, 28); lblMensagemConexao = new JLabel("");
 lblMensagemConexao.setFont(new java.awt.Font("Tahoma", 1, 10)); 
 lblMensagemConexao.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 lblMensagemConexao.setBounds(20, 150, 450, 28); 
 lblMensagemSQL = new JLabel("xxxxx"); lblMensagemSQL.setFont(new java.awt.Font("Tahoma", 1, 10)); 
 lblMensagemSQL.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 lblMensagemSQL.setBounds(20, 200, 450, 28); 
 btnConectar = new JButton(); btnConectar.setText("Conectar"); btnConectar.setBounds(280, 50, 140, 28); btnConectar.addActionListener(this);
 add(lblTitulo); add(btnConectar); add(lblMensagemConexao); add(lblMensagemSQL);
 }
 private void conectaBanco() {
 try {
 setMensagem("Vou abrir conexao");
 Class.forName("org.apache.derby.jdbc.ClientDriver");
 Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/Aula6 ", "aluno", "123");
 lblMensagemConexao.setText("Conexão OK");
 Statement st = con.createStatement();
 String sql = "SELECT * FROM PESSOA";
 ResultSet rs = st.executeQuery(sql);
 lblMensagemSQL.setText("SQL OK");
 rs.close(); st.close(); con.close();
 } 
 catch (ClassNotFoundException e) { lblMensagemConexao.setText(e.getMessage()); } 
 catch (SQLException e) { lblMensagemSQL.setText(e.getMessage()); }
 catch (Exception e) { JOptionPane.showMessageDialog(this, e.getMessage());}
 }
 private void setMensagem(String string) { }
 public void actionPerformed(ActionEvent e) {
 conectaBanco();
 }
}
Passo a passo
85
Não esqueça de instalar o JDBC na pasta Bibliotecas
Manipulando os dados através do JDBC
O JDBC utiliza o SQL para manipular dos dados armazenados no SGBD. 
Cada JDBC fornecido pelo fabricante deverá implementar os mecanismos de execução e de conversão de dados para que seja possível acessar os dados. 
Através de uma conexão estabelecida com o banco de dados, utilizamos a Interface Statement para enviar os comandos SQL ao Banco. 
87
As classes de Manipulação
 O JDBC disponibiliza 
 3 tipos de tratamento para comandos SQL:
Statement
Envia o texto SQL para o SGBD.
Possui duas subinterfaces:
PreparedStatement
Monta o SQL com parâmetros para depois enviar para o SGBD
CallableStatement
Similar ao Prepared Statement, mas permite executar procedimentos SQL
88
Interface Statement
 Objeto usado para executar um comando SQL estático e retornar o resultado produzido. Suas características são:
É criado a partir do método createStatement() da classe Connection.
Só se pode criar um Statement após ter estabelecido uma conexão com o objeto Connection
Pode enviar quantos SQL’s quantos forem necessários através do mesmo Statement.
A partir de uma conexão, pode-se criar quantos objetos Statements forem necessários.
Padrão: cada Statement pode gerar apenas um objeto ResultSet por vez. Não há possibilidade manter mais de um ResultSet’s aberto para o mesmo Statement. 
 Para se trabalhar com mais de um ResultSet simultaneamente, é
 preciso ter mais de um objeto Statement.
89
Existem duas possibilidades para se executar o SQL através do objeto Statement: 
executeUpdate – Efetua modificações na base de dados. Deve ser usado principalmente com os comandos INSERT, UPDATE, DELETE ou outros que alterem a base de dados e não retornem dados. 
executeQuery – Efetua consultas na base de dados. Seu retorno gera um ResultSet.
Os Principais métodos
90
Método
Descrição
ResultSetexecuteQuery(String SQL)
Executa o comando SQL, que retorna um objeto ResultSet
intexecuteUpdate(String SQL)
Executa ocomandoSQL, que deverá ser um INSERT, UPDATE ou DELETE ouumcomando SQL que nada retorna, como SQL do tipo DDL
Boolean execute(String SQL)
Executa o comando SQL, que pode retornar vários resultados
ConnectiongetConnection()
Devolve o objeto Connection que produziu este objeto Statement
ResultSetgetResultSet()
Retorna o objeto ResultSet corrente
intgetMaxRows()
Retorna onº máximode linhas produzido dentro deste ResultSet para este Statement
Ex: 
Connection con = DriverManager.getConnection("jdbc:postgresql:clientes");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(“SELECT * from CLIENTES”);
st.executeUpdate(“DELETE FROM CLIENTES”);
st.close();
con.close(); 
O objeto Statement criado pode ser reusado várias vezes para executar diferentes comandos SQL. Isto é até recomendado. Porém, o Statement só pode ser liberado com o método close() ao final das execuções de todos os comandos SQL.
Interface ResultSet
Uma tabela de dados que representa o resultado de uma consulta em uma base de dados. Geralmente gerada através de uma consulta enviada pelo objeto Statement.
O objeto ResultSet mantém um cursor apontando para a linha corrente de dados. Inicialmente, este cursor aponta para a linha anterior a primeira. 
O método next movimenta o cursor sempre para a próxima linha. Retornando false quando não existir tal informação. Este método é comumente usado em um laço while para varrer todo o conjunto de dados.
91
Tipo (java.sql.Types)
Método para recuperar dados
Tipo Java
TINYINT / SMALLINT
getByte() / getShort()
byte / short
INTEGER / BIGINT
getInt() / getLong()
int / long
REAL / FLOAT / DOUBLE
getFloat() / getDouble() / getDouble()
float / float / double
DECIMAL, NUMERIC
getBigDecimal()
java.math.BigDecimal
CHAR, VARCHAR,LONGVARCHAR
getString()
String(java.lang.String)
LONGVARCHAR
getAsciiStream()
String
LONGVARCHAR
getUnicodeStream()
java.io.InputStream
LONGCHAR
InputStream getAsciiStream()
String (java.lang.String)
BINARY,
VARBINARY
getBytes()
byte[]
DATE
getDate()
java.sql.Date
TIME / TIMESTAMP
getTime() / getTimestamp()
java.sql.Time / java.sql.Timestamp
LONGVARBINARY
getBinaryStream()
java.io.InputStream
BIT
getBoolean()
boolean
Todos os tipos
getObject()
 
Interface ResultSet
92
Interface PreparedStatement
É um objeto que representa um comando SQL pré-compilado. Utilizado para executar um comando repetidas vezes. Tais comandos podem conter parâmetros a serem definidos em tempo de execução.
O PreperadStatement é um subtipo do Statement. É gerado com o método prepareStatement() da Connection.
Em um comando SQL de um objeto PreparedStatement pode haver parâmetros. Estes parâmetros são identificados como pontos de interrogação. Estes pontos deverão ser definidos com os comandos setXXX, informando nos parâmetros, o número do ponto e seu valor.
93
EX:
Sql=“UPDATE EMPREGADOS SET SALARIO = ? WHERE ID = ?”;
PreparedStatement pst = con.prepareStatement(sql);
pst.setBigDecimal(1, 153850.00);
pst.setInt(2, 110590);pst.executeUpdate(); 
Como a Interface PreparedStatement herda de Statement, todos os métodos explicados anteriormente valem aqui também.
Interface CallableStatement
Quando precisamos executar stored procedures (Comandos SQL armazenados em forma de procedimentos), utilizamos a Interface CallableStatement. Ela é um subtipo de PreparedStatement que, além de permitir a passagem de parâmetros, também permite o retorno de valores.
É válido lembrar que esta interface só estará disponível nos bancos que disponibilizam este tipo de procedimento.
Como é permitido passar parâmetros tanto para entrada IN como para saída OUT, esta Interface funciona exatamente igual para os parâmetros IN e numera os parâmetros de saída que deverão ser definidos.
94
 Diferentemente das outras interfaces Statement, a CallableStatement pode 
 devolver mais de um resultSet. 
 Esta interface exige um conhecimento mais aprofundado de banco de dados
 e não será tratada dentro do escopo deste curso.
Para complementar, “Aprenda Fazendo”. Clique.
Para esta aula sugiro as seguintes tarefas:
Leitura do Capítulo 28 (28.9 até 28.14) do livro Java como programar, 8ª Edição, de H. Deitel e P. Deitel, Editora Pearson Education, 2010.
Resolução dos exercícios de 28.5 até 28.9 do capítulo 28 do livro Java Como Programar – 8ª Edição. 
Passo a Passo
Fornece um conjunto de API’s de acesso Com o exercício feito na aula 6, vamos fazer um CRUD completo para a tabela Cliente no banco de dados dbCliente.
A Interface a ser 
 desenvolvida deverá seguir 
 o padrão apresentado abaixo:
CRUD – Acrônimo para Create,
 Read, Update e Delete, que
 são as 4 operações básicas 
 utilizadas em um banco de dados 
 relacional. 
95
Processos
O processamento de hoje ainda é feito na maioria das vezes por um único processador da máquina. Só que na maioria dos sistemas, vários processos são executados no mesmo intervalo de tempo, dando a impressão de simultaneidade de execução. Esta capacidade é chamada de multiprocessamento, e muito estudada em sistemas operacionais. 
Um processo é basicamente um programa em execução. Eles são independentes dos outros.
97
Processos - mais de um núcleo
Processos - um núcleo
Quando temos mais de um núcleo, o SO pode balancear a carga dos núcleos dividindo os processos.
Na tentativa de reduzir o tempo gasto para troca de contexto de processos nas aplicações concorrentes e economizar recursos do sistema, foi criado o conceito de Thread.
Processos - mais de um núcleo
98
Para entender melhor, se atribuirmos um thread para uma longa sequência de cálculos, outro para uma entrada de texto e um terceiro para uma verificação ortográfica, o programa multithreaded pode fazer os cálculos requisitados enquanto o usuário digita o texto. Além disso, enquanto o texto é digitado, a ortografia do mesmo é verificada. Isto é multithreading e a impressão que se tem é de que tudo ocorre ao mesmo tempo.
Threads
São subprocessos no Sistema Operacional. O thread pode ser visto como uma parte de um processo, que permite compartilhar a sua área de dados com o programa ou outros threads. Seu início de execução é muito mais rápido do que um processo, e o acesso a sua área de dados funciona como um único programa.
99
Também podem ser definidos como fluxos sequenciais de execução de um programa. Logo, um programa pode dividir em partes sequenciais não concorrentes de sua execução em threads distintas, implementando paralelismo na sua execução. Com isso, um processo pode ter múltiplos threads que parecem executar ao mesmo tempo. As linguagens Java e Ada possuem funcionalidades MULTITHREADING na própria estrutura da linguagem.
Cada processo tem, no mínimo, um thread. 
 As Vantagens do uso Threads
- Torna-se menos custoso em termos de processamento criar um thread que um processo;
- São necessárias poucas variáveis para criação de um thread; 
- Podem compartilhar o mesmo espaço de processo; 
- Podem compartilhar os mesmos recursos de seus processos.
Os estados de uma Thread
A execução de um thread pode passar por quatro estados: novo, executável, bloqueado e encerrado. 
100
O thread está no estado de novo – New Thread, quando é criado, ou seja, quando é alocada área de memória para ele através do operador new. Ao ser criado, o thread passa a ser registrado dentro da JVM, para que o mesmo possa ser executado. 
O thread está no estado de executável - Runnable, quando for ativado. O processo de ativação é originado pelo método start(). É importante frisar que um thread executável não está necessariamente sendo executado, pois quem determina o tempo de sua execução é a JVM ou o Sistema Operacional. 
Estado de bloqueado – Not Runnable, quando for desativado. Para desativar, deve ocorrer uma das quatro operações:
1º Foi chamado o método sleep(long tempo) da thread;  
2º Foi chamado o método suspend() da thread (método em desuso)  
3º O trhead chamou o método wait();
4º O thread chamou uma operação de Entrada / Saída (I/O) que bloqueia a CPU;  
Para o thread sair do estado de bloqueado – Not Runnable - e voltar para o estado de executável, uma das seguintes operações deve ocorrer, em oposição às ações acima:   
1º Retornar após o tempo especificado, caso o thread estiver adormecido;  
2º Retornar através do método resume(), caso o thread tiver sido suspenso (método em desuso);  
3º Retornar com o método notify() (ou notifyAll()), caso o thread estiver em espera;  
4º Retornar após a conclusão da operação de I/O. 
O thread está no estado de encerrado - Dead, quando encerrar a sua execução. Isto pode acorrer pelo término do método run(), ou pela chamada explícita do método stop(). 
Thread em Java
Cada Thread está associado a uma instância da classe Thread. 
A máquina virtual Java permite que uma aplicação tenha diversos fluxos sequencias de execução rodando concorrentemente . Para se utilizar esta funcionalidade, a API Java disponibiliza a classe Thread e a interface Runnable.
A Interface Runnable: define um único método – run – que deve conter o código de execução da thread.
A Classe Thread: Implementa o Runnable, logo seu método run nada faz. Uma aplicação pode herdar de thread fornecendo a sua própria implementação do método run.
101
Observe que em ambos os exemplos o método Thread.start é chamado para iniciar a thread.
Qual devo Usar
Segundo a Sun, “a linguagem de programação Java não permite herança múltipla”, no entanto há uma alternativa para o uso de mais de uma superclasse, que é a utilização de interfaces. Com base neste conceito, desde a API 6.2 existe a interface Runnable, que possui um funcionamento bem semelhante ao da classe Thread, ao exigir a implementação do método run().
É mais comum utilizar a Interface Runnable, pois este objeto pode herdar comportamentos de outra classe, que não a Thread. O segundo exemplo pode ser usado em aplicações mais simples, pois é limitada pelo fato de que a classe precisa ser

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando