Prévia do material em texto
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
1
Disciplina:
Programação Orientada a Objetos / Java
=====================================================================
Apostila destinada ao Curso Técnico de Nível Médio em Informática das Escolas Estaduais de
Educação Profissional – EEEP
Equipe de Elaboração - 2012
Adriano Gomes da Silva
Cíntia Reis de Oliveira
Evandilce do Carmo Pereira
Fernanda Vieira Ribeiro
Francisco Aislan da Silva Freitas
João Paulo de Oliveira Lima
Juliana Maria Jales Barbosa
Liane Coe Girão Cartaxo
Mirna Geyla Lopes Brandão
Moribe Gomes de Alcântara
Niltemberg Oliveira Carvalho
Paulo Ricardo do Nascimento Lima
Renanh Gonçalves de Araújo
Renato William Rodrigues de Souza
Valbert Oliveira Costa
Colaboradores
Maria Analice de Araújo Albuquerque
Maria Danielle Araújo Mota
Sara Maria Rodrigues Ferreira Feitosa
Atualização – 2018
Paulo Ricardo do Nascimento Lima
=====================================================================
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
2
SUMÁRIO
APRESENTAÇÃO ....................................................................................................................................... 5
1.0 Introdução a Sistemas ........................................................................................................................ 6
1.1 Modelagem de Sistemas ..................................................................................................................... 7
1.2 Dado, Conhecimento e Informação. .................................................................................................... 8
1.3 O que é um sistema .............................................................................................................................. 9
1.4 Como construir um Sistema de informação baseado em computador ................................................. 11
1.5 O papel do Analista de Sistemas ......................................................................................................... 12
1.6 Fases do desenvolvimento de sistemas ............................................................................................. 13
2.0 Requisitos .............................................................................................................................................. 17
2.1 Análise de Requisitos ........................................................................................................................ 19
2.1.1 Requisitos Funcionais ................................................................................................................ 19
2.1.2 Requisitos não Funcionais ......................................................................................................... 19
2.1.3 Requisitos do usuário ................................................................................................................. 19
2.1.4 Requisitos do sistema ................................................................................................................. 20
2.1.5 Especificação de Software ......................................................................................................... 20
3.0 História e evolução da UML .................................................................................................................. 21
3.1 Diagramas Estruturais da UML ....................................................................................................... 23
3.1.1 Diagrama de Classe .................................................................................................................... 23
3.1.2 Diagrama de Objeto ................................................................................................................... 24
3.1.3 Diagrama de Componentes ........................................................................................................ 25
3.1.4 Diagrama de Implantação .......................................................................................................... 26
3.1.5 Diagrama de Pacotes .................................................................................................................. 27
3.2 Diagramas Comportamentais da UML ........................................................................................... 27
3.2.1 Diagrama de Caso de Uso ........................................................................................................... 28
3.2.2 Diagrama de Sequência .............................................................................................................. 29
3.2.3 Diagrama de Estados .................................................................................................................. 30
3.2.4 Diagrama de Atividades ............................................................................................................. 30
3.3 Relacionamentos em UML ................................................................................................................ 31
3.3.1 Relacionamento de Dependência ................................................................................................ 31
3.3.2 Relacionamento de Associação .................................................................................................. 32
3.3.3 Relacionamento de Generalização .............................................................................................. 33
4.1 Histórico da Linguagem .................................................................................................................... 35
4.2 Uso da linguagem no mercado atualmente (especificação das tecnologias). ................................... 36
4.3 Principais características da linguagem de programação java .......................................................... 37
4.4 Ambientes e ferramentas de desenvolvimento com Java .................................................................. 42
4.5 Meu primeiro programa em java....................................................................................................... 43
4.6 Comentários em Java: ....................................................................................................................... 45
4.7 Compilando meu primeiro programa em Java .................................................................................. 45
4.8 Erros comuns em programas java ..................................................................................................... 47
4.9 NetBeans ........................................................................................................................................... 48
4.10 Visão de outras IDEs para o desenvolvimento com Java................................................................ 48
4.11 Identificadores e palavras-chaves. ................................................................................................ 50
4.12 Operadores em Java: ....................................................................................................................... 55
4.13 Operadores aritméticos. .................................................................................................................. 62
5.0 Controle de fluxo em Java .................................................................................................................... 70
5.1 Utilizar código que use instruções if ................................................................................................. 70
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
3
5.2Expressões válidas para instruções switch e case. ............................................................................ 74
5.3 Loops e iteradores (usando os loops for, while e do while). ............................................................. 77
5.4 Loop for aprimorado (para arrays). ................................................................................................... 80
5.5 Uso de break, continue e return. ....................................................................................................... 81
6.0 Tipos de Variáveis, Constantes e Casting ............................................................................................. 84
6.1 O que é uma variável: ....................................................................................................................... 84
6.2 Variáveis estáticas: ............................................................................................................................ 85
6.3 Constantes ......................................................................................................................................... 86
6.4 Conversão ou Cast (explícita e implícita das variáveis de tipos primitivos). ................................... 87
6.5 Atribuindo uma variável de referência à outra. ................................................................................. 89
7.0 POO com Java....................................................................................................................................... 91
7.1 Introdução ......................................................................................................................................... 91
7.2 Construindo uma Classe. .................................................................................................................. 93
7.3 Encapsulamento. ............................................................................................................................... 94
7.4 Retorno .............................................................................................................................................. 94
7.5 Estanciando (Construindo um Objeto).............................................................................................. 95
7.6 Variáveis Estáticas ............................................................................................................................ 96
7.7 Métodos Estáticos ............................................................................................................................. 97
8.0 Herança e Interface ............................................................................................................................... 98
8.1 Introdução ......................................................................................................................................... 98
8.2 Herança ............................................................................................................................................. 98
8.3 Object: A superclasse cósmica do Java ............................................................................................. 99
8.3.1 Classe Abstrata ......................................................................................................................... 104
8.4 Interface .......................................................................................................................................... 107
9.0 Herança (Polimorfismo)...................................................................................................................... 109
9.1 Introdução ....................................................................................................................................... 109
9.2 SobreEscrita .................................................................................................................................... 109
10.0 Tratamento de Exceções ................................................................................................................... 112
10.1 Capturando uma exceção usando o bloco (try e catch) ................................................................. 112
11.0 Criando Diagrama UML ................................................................................................................... 117
Introdução ............................................................................................................................................. 117
12.0 Fila e Pilha ........................................................................................................................................ 121
12.1 Fila ................................................................................................................................................ 121
12.2 Pilha .............................................................................................................................................. 123
13.0 Coleções: List e Map ........................................................................................................................ 126
13.1 Collection List ou Coleção Lista................................................................................................... 127
13.2 Collection Map ou Coleção Mapa ................................................................................................ 136
13.3 HashMap ....................................................................................................................................... 136
14.0 Interface Gráfica com usuário - GUI ................................................................................................ 142
14.1 Bibliotecas AWT e SWING .......................................................................................................... 143
14.2 JFrame ........................................................................................................................................... 143
14.3 Criando uma classe com propriedades JFrame ............................................................................. 145
14.4 JLabel ............................................................................................................................................ 147
14.5 JButton .......................................................................................................................................... 149
14.6 JTextField ...................................................................................................................................... 150
14.6 Icon ............................................................................................................................................... 151
14.7 Editando fonte com o setFont()..................................................................................................... 153
14.8 JMenuBar, JMenu e JMenuItem ................................................................................................... 153
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
4
14.9 JCheckBox .................................................................................................................................... 155
14.10 JRadioButton............................................................................................................................... 157
15.0 Gerenciadores de Layout .................................................................................................................. 160
15.1 BorderLayout ................................................................................................................................ 160
15.2 BoxLayout.....................................................................................................................................161
15.3 FlowLayout ................................................................................................................................... 163
15.4 GridLayout .................................................................................................................................... 164
15.5 GridBabLayout ............................................................................................................................. 165
16.0 Eventos (Listeners) ........................................................................................................................... 167
16.1 FocusListener ................................................................................................................................ 169
16.2 KeyListener ................................................................................................................................... 171
16.3 MouseListener............................................................................................................................... 172
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
5
APRESENTAÇÃO
A disciplina de POO/Java faz parte do eixo de programação Java para Desktop e segue um fio condutor
iniciado pela Lógica de Programação e será seguida pela disciplina de Banco de Dados, e posteriormente
por Laboratório de Software.
A Programação Orientado a Objeto constitui em um conjunto de regras de programação. Estudamos
anteriormente como programar de forma estruturada, iniciávamos a execução do código e finalizando
todos os processos na mesma página. Com a Programação Orientada a Objetos podemos usar algoritmos
já feitos por alguém, ou criar novos algoritmos interagindo com os que já foram desenvolvidos por
alguém com objetivo de resolver problemas mais complexos gerando um novo produto final. Vamos fazer
uma comparação no o dia a dia para entendermos melhor.
O principal objetivo deste manual é apresentar para o aluno uma alternativa para o processo de
desenvolvimento de software orientado a objetos, embora existam outros processos, outros padrões, em
fim, outras alternativas que, certamente, eles irão se deparar no mundo do trabalho. Esta experiência o
fará entender a importância do processo de desenvolvimento de software para termos produtos eficiente e
eficaz.
Sendo assim, temos a apresentação da UML, ferramenta de documentação de projetos de software mais
usada pelo mercado atualmente. Descrevemos alguns itens complementares da linguagem Java que não
foram abordados no manual de Lógica de Programação, mas julgamos importantes. Em seguida teremos
os conceitos de Orientação a Objetos. Por fim iremos implementar modelos usando Java.swing, como a
essa altura os conceitos de banco de dados ainda não foram aprendidos, usaremos uma simulação do
banco baseada em vetores de objetos.
Este material teve como grande contribuição e referência para alguns capítulos o material do projeto
MEDIOTEC – SEDUC, como apostilas do módulo II e III, em uma verificação e adaptação do material,
por ser um material muito importante e de altíssima qualidade, aproximando bastante a experiência à
pratica do técnico em informática na área de desenvolvimento para web.
Outras referências de pesquisa e adaptação, foram de matérias de sites e artigos confiáveis da internet.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
6
1.0 Introdução a Sistemas
Programação Orientado a Objeto constitui em um conjunto de regras de programação. Estudamos
anteriormente como programar de forma estruturada, iniciávamos a execução do código e finalizando
todos os processos na mesma página. Com a Programação Orientada a Objetos podemos usar algoritmos
já feitos por alguém, ou criar novos algoritmos interagindo com os que já foram desenvolvidos por
alguém com objetivo de resolver problemas mais complexos gerando um novo produto final. Vamos fazer
uma comparação no dia a dia para entendermos melhor.
A Programação orientado a objeto é uma metodologia que os programadores utilizam com objetivo de
atingir alguns requisitos importantes na construção de um bom programa ou site como:
• Organizar o código: Com o nosso código dividido, podemos facilmente dar manutenção ou encontrar
algum erro mais facilidade.
• Reutilização do código: Não precisamos reescrever todo o código, quando necessitamos dele
novamente.
• Manter Padrões: Utilização de um mesmo padrão conceitual durante todo o processo de criação do
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
7
código.
Até o final do curso iremos aprender e trabalhar nessa metodologia. Então, bastante atenção nesse e nos
próximos capítulos.
1.1 Modelagem de Sistemas
Modelar é:
Representar de forma gráfica ou textual partes reais ou imaginárias do sistema.
Por no papel a concepção que se tem de como funcionará o sistema concebido.
Documentar de forma gráfica ou em texto um sistema existente (engenharia reversa).
Por que é importante modelar?
Se observarmos tudo que será construído primeiro passa por uma fase de modelagem, isso ocorre em
todas as áreas. Exemplo: um engenheiro primeiro constrói a planta de uma casa e só então começa a
construção do imóvel. A planta o guiará durante toda a construção.
Em desenvolvimento de sistema não é diferente primeiro o analista deve estruturar toda a modelagem do
sistema, conversando com o usuário, colhendo informações e requisitos do sistema, depois ele deve
desenhar o sistema para realizar essa fase ele precisará de uma linguagem padrão para desenhar o sistema,
essa linguagem deve ser conhecida por todos da área, pois assim qualquer pessoa que trabalhe com
desenvolvimento de sistemas pode dar andamento ao projeto. A última fase da modelagem é a aprovação
do projeto, após isso passamos para etapa de construção do software. Note que assim como a planta da
casa para o engenheiro o guiará durante toda a construção do imóvel, para a equipe que desenvolve o
software a modelagem do sistema será importante em todas as fases de desenvolvimento.
Inicialmente, vamos definir alguns conceitos básicos para posteriormente assimilarmos o conteúdo de
Análise de sistemas.
O que é dado?
“Dados são itens referentes a uma descrição primária de objetos, eventos, atividades e transações que são
gravados, classificados e armazenados, mas não chegam a ser organizados de forma a transmitir algum
significado específico” (Turban, McLean e Wetherbe, 004, pg. 63).
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
8
Resultado do processo cognitivo, iniciado por um novo estímulo
qualquer. Informação valiosa da mente humana. Inclui reflexão,
síntese e contexto. Frequentemente tácito. De difícil estruturação,
captura em máquinas e transferências.
Capítulo 8 -
Tratamento
de Exceções
São dados dotados de relevância e propósito. Requer
unidade de análise. Exige consenso em relação ao
significado e é necessária a mediação humana.
Simples observações sobre o estado do
mundo. Facilmente estruturado, obtido por
máquina e
O que é uma informação?
“Informação é todo conjunto de dados organizados de forma a terem sentido e valor para seu destinatário.
Este interpreta o significado, tira conclusões e faz deduções a partir deles. Os dados processados por um
programa aplicativo têm uso mais específico e maior valor agregado do que aqueles simplesmente
recuperados de um banco de dados. Esse aplicativo pode ser um sistema de gerenciamento de estoques,
um sistema dematrículas online de uma universidade, ou um sistema de Internet para compra e venda de
ações”. (Turban, McLean e Wetherbe, 2004, pg. 63).
O que é conhecimento?
“Conhecimento consiste de dados e informações organizados e processados para transmitir compreensão,
experiência, aprendizado acumulado e técnica, quando se aplicam a determinado problema ou atividade.
Os dados processados para extrair deduções críticas e para refletir experiência e perícia anteriores
fornecem a quem os recebe conhecimento organizacional, de alto valor potencial”. (Turban, McLean e
Wetherbe, 2004, pg. 63).
1.2 Dado, Conhecimento e Informação.
Observe nas imagens abaixo a distinção entre Dados, Informações e Conhecimento:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
9
DADO INFORMAÇÃO CONHECIMENTO
Simples observações sobre o
estado do mundo
Dados dotados de relevância e
propósito
Informação valiosa da mente
humana. Inclui reflexão,
síntese, contexto.
Facilmente estruturado Requer unidade de análise De difícil estruturação
Facilmente obtido por máquinas Exige consenso em relação ao
significado
De difícil captura em máquinas
Frequentemente quantificado Exige necessariamente a
mediação humana
Frequentemente tácito
Facilmente transferível De difícil transferência
EXEMPLO
Através dos conceitos acima, já podemos ter uma ideia do significado de dados, informações e
conhecimentos para um Sistema de Informação. Vamos analisar um exemplo:
Milena é aluna de uma EEEP. Assim como todos os demais, possui um boletim com notas de diversas
disciplinas. Essas notas nada mais são do que números que de alguma forma foram friamente calculados,
gerados e impressos em um papel através de uma programação. As notas ali contidas são nada mais do
que dados.
Se analisarmos seu boletim, podemos observar que todas as suas notas são boas, pois estão bem acima da
média. Contextualizando esses dados, obtemos uma informação: Milena é uma ótima aluna.
Indo mais além, analisando o seu comportamento, temos que ela é uma aluna proativa em sala de aula,
administra bem o seu tempo, utiliza as aulas de estudo para de fato estudar e pratica a TESE como sua
filosofia de vida. Contextualizando essas informações chegamos a um conhecimento sobre a pessoa de
Milena.
1.3 O que é um sistema
Para termos uma real compreensão do que é um Sistema de Informação, faz-se necessário anteriormente
entender o que é um Sistema. Nesse sentido, é válida a definição apontada no site Wikipédia, em junho de
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
10
2012: “Sistema (do grego sietemiun) é um conjunto de elementos interconectados, de modo a formar um
todo organizado. É uma definição que acontece em várias disciplinas, como biologia, medicina,
informática, etc. Vindo do grego o termo “sistema” significa “combinar”, “ajustar”, “formar um
conjunto”.
Segundo Chiavenato (1999) e Oliveira (2002), o sistema apresenta os seguintes componentes:
Objetivos: é a finalidade para o qual o sistema foi criado;
Entradas do Sistema: é o que inicia o sistema, traz a informação para a operação do sistema;
Processamento: fenômeno que realiza as mudanças, é o mecanismo que converte as entradas em
saídas;
Saídas do Sistema: são os resultados do processamento.
Retroalimentação ou feed back do sistema: é a informação gerada pelo sistema que informa sobre
o comportamento do mesmo;
Ambiente: é o meio que envolve externamente o sistema.
De posse da definição podemos definir o Sistema de Informação ou simplesmente SI, como sendo um
conjunto organizado de dados, cujo elemento principal é a informação. Sua função principal é o
armazenamento, tratamento e fornecimento de informação que de forma organizada servem de apoio a
funções ou processos de uma empresa, por exemplo. Um SI não necessita, necessariamente, ser
computadorizado. As fichas organizadas dos alunos em uma academia de musculação formam, por
exemplo, um sistema de informações.
Os sistemas de Informação podem ser divididos em subsistemas e, em muitos modelos aparecem dois
deles, sendo um com processos, pessoas, documentos e informações, enquanto o outro apresenta os meios
automatizados como, por exemplo, as máquinas, redes de comunicação e computadores. Ao primeiro
chamamos de subsistema social e o segundo denomina-se subsistema automatizado. Do apresentado até
aqui fica fácil perceber que o Sistema de Informações é conteúdo bastante amplo, já que inclui pessoas,
dados, processos, programas (softwares), maquinários (hardware), etc.
Todos os aspectos que envolvem o Sistema possuem importância significativa, já que funcionam como
uma verdadeira engrenagem, ou seja, uma fase depende da outra, uma peça ajuda a outra, enfim, todos se
complementam. Assim, hardware, software, fator humano e qualidade das informações, são igualmente
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
11
válidos para o funcionamento com excelência.
Tomemos por exemplo uma lanchonete que buscou implantar um Sistema de Informação com o intuito de
garantir maior agilidade no atendimento dos clientes. Para tanto pensou em um cardápio fixo, comprou
computadores eficazes e alocou código de barras nas embalagens. Aparentemente esta medidas poderiam
sim agilizar o atendimento, porém, se os colaboradores não forem capacitados para utilizar as
ferramentas, certamente ao invés de garantir maior agilidade no atendimento, pode até mesmo causar
maior embaraço.
Os sistemas de informação são poderosas ferramentas e, nesta concepção apresentam diversas aplicações
e benefícios, dentre eles podemos citar: organizar/incrementar a produtividade; fortalecer estratégias de
marketing; formatar a qualificação dos colaboradores; estabelecer rotinas de controle de produtos
(entrada e saída – preços – lucros, etc.).
1.4 Como construir um Sistema de informação baseado em computador
Dizemos que um Sistema de informação é baseado em computador quando ele realiza parte - ou mesmo
todas – as tarefas desejadas por meio da computação. Para que um sistema de informação obtenha
sucesso na realização de suas rotinas, é preciso que se entenda todos os processos e procedimentos
relacionados à tarefa a ser executada. Ou seja, é indispensável que se tenha um convívio direto com os
problemas e soluções diárias naquele contexto em que o sistema será implantado, pois esse conhecimento
profundo é o que vai dar embasamento para o desenvolvimento de um Sistema de Informação que seja
realmente eficiente.
Em posse de um objetivo, qual seja planejar e desenvolver a construção de um Sistema de Informação
eficiente para determinada situação, devemos analisar outros fatores decisivos nesse processo. O
ambiente no qual o sistema será implantado é um deles, e pode influenciar de forma direta ou indireta no
funcionamento de um sistema.
Por exemplo, poderemos obter resultados completamente diferentes ao implantar um sistema on-line em
uma cidade capital de estado, onde o acesso à internet é incorporado ao cotidiano dos supostos usuários, e
em uma pequena cidade do interior onde o acesso à rede ainda é um privilégio restrito a poucos. Nesse
caso, o fator internet é determinante para o sucesso ou insucesso do Sistema de Informação.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
12
Outro fator que influencia de forma direta o desenvolvimento do sistema são os chamados recursos de
sistema, que são os recursos indispensáveis à construção de um Sistema de Informação. São exemplosdeles: dinheiro, máquinas, pessoas capacitadas, ambiente físico, papéis, etc.
Além dos fatores citados, outro a ser considerado é a análise dos dados relevantes para o Sistema de
Informação. Tais dados devem ser cuidadosamente examinados, ponderados e utilizados de forma
consistente, a fim de gerarem informações que de fato sejam úteis aos usuários. Um sistema que
considera a entrada de dados inconsistentes em seu funcionamento, como data em branco ou preços com
valores nulos, certamente não chegará a uma saída interessante.
Mas, afinal, a quem compete este trabalho?
1.5 O papel do Analista de Sistemas
O profissional da Tecnologia da Informação responsável por todo este trabalho é o Analista de Sistemas.
Ele é, na prática, um solucionador de problemas e exerce uma função bastante complexa, que é
concretizar em um software todo um sistema de informação.
Um bom analista de sistemas tem como principais características:
Conhecimento teórico e prático de computação;
Ampla visão organizacional e empresarial;
Bom senso na tomada de decisões;
Bom relacionamento interpessoal para lidar com todos envolvidos no projeto;
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
13
“É muito difícil criar produtos usando grupos foco. Muitas vezes, as pessoas
não sabem o que elas querem até que você mostre a elas.”
Steve Jobs
1.6 Fases do desenvolvimento de sistemas
Já sabemos o que é um sistema de informação, quais seus fatores principais e quem é o responsável por
desenvolvê-lo. Vamos agora entender como se dá todo esse processo, desde o início da ideia até a
conclusão de seus trabalhos.
Como vimos, a construção de um software é um processo complexo e para que se obtenha sucesso, seu
desenvolvimento deve seguir uma exigente metodologia de trabalho. Vejamos cada uma das fases desse
processo:
CONCEPÇÃO DO SISTEMA
É uma fase de descobertas. Requer que todos os envolvidos – desenvolvedores e usuários - mantenham
postura colaborativa para que os requisitos levantados sejam o mais próximo possível da realidade.
Baseado nessas informações, o analista de sistemas consegue fazer um diagnóstico da situação e uma
previsão de ações.
ESTUDO DA VIABILIDADE
Após a apropriação do contexto na fase anterior, é feito um estudo para avaliar se o projeto é ou não
viável de ser implementado, do ponto de vista organizacional, tecnológico e financeiro. A decisão da
continuidade ou não do projeto cabe aos analistas e aos gestores da organização que será beneficiada.
Nessa fase, são analisados os seguintes questionamentos:
O sistema poderá contribuir de fato para realização dos objetivos previstos?
O sistema poderá ser implementando, apesar de restrições de cunho tecnológico, organizacional e
temporais?
Existe outro modo eficiente de realização dessas tarefas sem a necessidade de criação desse
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
14
sistema?
O sistema atual realmente pode resolver os problemas não solucionados pelos anteriores?
É possível sua integração a sistemas já em funcionamento?
Caso os responsáveis optem pela continuidade do projeto, o mesmo será submetido à fase seguinte. Caso
contrário, o ciclo termina aqui.
PROCESSO DE ANÁLISE
Essa etapa consiste em realizar um levantamento de dados e de fatos, a fim de entender o que realmente
precisa ser feito para solucionar o problema. O contato entre analista de sistemas e usuários deve se
estreitar nesse momento, pois é preciso um entendimento detalhado e técnico por parte do analista. Caso
já exista algum sistema em funcionamento, este é o momento em que o analista se apropria de maiores
detalhes do mesmo.
Deverá ser criado um modelo lógico do sistema, constituído, entre outros, do diagrama de fluxo de dados,
dicionário de dados e principais algoritmos.
Até o término dessa fase, já devem ser de conhecimento do analista os objetivos principais do sistema em
questão, quais setores da empresa serão impactados pelo sistema, como este deverá funcionar, qual será o
fluxo de dados, quais serão os arquivos utilizados e a forma como serão atualizados, qual setor será
responsável pela população do sistema, qual o prazo para que esses dados sejam processados e
apresentado algum resultado aos usuários.
PROJETO DO SISTEMA
Nesse momento, o analista propõe soluções para o problema baseado em conclusões das fases anteriores.
Para cada alternativa sugerida, apresenta-se aos gestores da organização um diagrama de fluxo de dados,
para que seja feita uma escolha baseada em custos e benefícios. O modelo lógico foi sendo transformado
em modelo físico.
Ao final da fase, já deverá estar definido pelo analista um relatório contendo qual tipo de banco de dados
será adotado pelo sistema, os arquivos que serão utilizados, a definição dos arquivos de dados e seus
layouts, relatórios a serem emitidos e os tipos de dispositivos de armazenamento de dados.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
15
PROJETO DETALHADO
Tomada a decisão, é hora de dar início a implementação do sistema. O analista de sistemas já sabe o que
deve ser feito, tecnicamente, para dar inicio a esse processo.
Nesse momento, os relatos dos usuários ainda podem ser de grande valia para a condução do sistema. O
analista de sistemas deve definir quais programas irão compor o sistema, e produzir as especificações
referentes a cada um deles, especificações essas que serão posteriormente entregues e codificadas pelos
programadores.
Exemplos de especificações definidas nesta fase:
Aprimoramento do fluxo de dados da alternativa escolhida;
Identificação do banco de dados ou arquivos a serem utilizados;
Detalhamento de arquivos de dados e seus layouts;
Criação de layouts de relatórios a serem emitidos pelo sistema;
Especificação de todos os programas que irão compor o sistema;
Revisão na estimativa de custos;
Preparação da documentação inicial do sistema;
Definição dos tipos de dispositivo de armazenamento;
Elaboração de um plano de testes;
IMPLEMENTAÇÃO
A fase de implementação é quando de fato o programa começa ser construído na plataforma escolhida,
tendo como base as especificações produzidas. É, de todas, a fase mais cara.
Os programas que se referem ao gerenciamento do sistema em geral deverão ser os primeiros a serem
construídos, e só após, os demais.
Inicia-se, após a finalização dos programas, os testes. Todo o sistema deve ser testado exaustivamente
antes de ser posto em funcionamento. Ainda nesta fase, os erros detectados na homologação (testes) são
corrigidos e testados novamente.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
16
Uma vez sem erros, a equipe deve dedicar-se a escrever os manuais do usuário, um tutorial contendo
todas as informações necessárias para seu funcionamento.
IMPLANTAÇÃO E MANUTENÇÃO
Finalmente, chegamos à implantação e manutenção, última fase da criação de um sistema. Implantar
significa colocar o sistema em fase de operação, ou seja, realizar as instalações necessárias para o uso do
sistema no local predefinido. Uma vez implantado, os usuários deverão ser treinados a operar
corretamente o sistema.
Ao ser submetido ao uso real, o sistema ainda poderá apresentar alguma falha, portando a equipe de
analista e programadores ainda pode realizar ajustes.
Agora, é apenas manter em pleno funcionamento, desenvolvendo pequenas melhorias e adequações
quando necessário.
TESTES
Diversas atividades de testes são executadas a fim de se validaro produto de software, testando cada
funcionalidade de cada módulo, buscando, levando em consideração a especificação feita na fase de
projeto. Onde o principal resultado é o relatório de testes, que contém as informações relevantes sobre
erros encontrados no sistema, e seu comportamento em vários aspectos. Ao final dessa atividade, os
diversos módulos do sistema são integrados, resultando no produto de software.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
17
2.0 Requisitos
Os requisitos de um sistema são os elementos que a equipe de desenvolvimento precisa conhecer para que
o software seja desenvolvido. São as necessidades que deverão ser atendidas pelo sistema de informação
que será proposto. Em posse dessas informações, o analista tem propriedade para propor soluções,
especificar e desenvolver um sistema de informação. Segundo Sewbok, “Um requisito de software é uma
propriedade que deve ser implementada para resolver um problema do mundo real”.
Acontece que tomar conhecimento desses requisitos é uma tarefa que, na prática, não é tão simples como
parece. Muitas vezes os próprios gestores e usuários não conseguem expressar claramente seus objetivos.
Por desconhecerem os procedimentos técnicos que regem um Sistema de Informação, muitas vezes eles
ocultam informações de extrema importância, fundamentais para o planejamento da solução.
Nesse ponto, a atuação do analista de sistemas é decisiva para o sucesso ou não do trabalho. Dificilmente
todas essas informações irão estar reunidas em uma pessoa só, portando o analista tem que conversar com
pessoas de todos os setores que irão utilizar o sistema, pois precisa ter uma visão de todas as
funcionalidades que irá implementar. É preciso conhecer a dinâmica de trabalho de cada envolvido. Por
exemplo, dificilmente o gerente de vendas de uma empresa saberá com precisão como o almoxarifado
controla a saída de produtos, ou como exatamente a cozinha mantém o controle sobre seu estoque,
portando, é atribuição do analista capturar esse processo pessoalmente.
LEVANTAMENTO DE REQUISITOS
Como vimos, o analista de sistemas é o responsável intermediar e identificar os requisitos. Para isso, ele
dispõe de algumas técnicas que o auxiliam a estreitar as relações com os usuários, visando obter dos
clientes o máximo de informações úteis. Entre as técnicas utilizadas para este processo, podemos
destacar, entre outras, as seguintes:
ENTREVISTA
É uma das formas mais eficientes de se obter as informações desejadas. Não existe uma fórmula ou
receita certa para a sua condução, mas, para obter um melhor resultado, o analista deve atuar de forma
racional e metódica, com certa flexibilidade, porém, sem improvisações desnecessárias.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
18
O analista deve ter manter na entrevista um clima amistoso, deixando o entrevistado à vontade. Ele deve
entender que a entrevista não é um julgamento, pois se por algum motivo se sentir acanhado, poderá não
prezar pela veracidade das informações.
Outros fatores importantes em uma entrevista são: bom relacionamento interpessoal do entrevistador,
habilidade ao se comunicar e humildade.
PESQUISA
Embora a entrevista seja uma técnica altamente eficaz, não deve ser a única fonte de levantamento de
requisitos. Outra forma de se obter dados interessantes é a pesquisa. O analista poderá analisar
documentos e relatórios gerados em diversos setores, além de arquivos, e baseado neles tirar outras
conclusões, que podem vir a somar com o resultado já obtido na entrevista.
QUESTIONÁRIO
Quando o sistema envolve um número muito grande de usuários, a aplicação de questionários é uma boa
estratégia de pesquisa. Com perguntas sucintas, objetivas e sem dubiedade, é possível observar o padrão
de respostas e dele retirar pertinentes conclusões.
REUNIÕES
São encontros com a participação de alguns usuários envolvidos, para discussões em grupo. Deve ser
conduzida de forma hábil pelo mediador, mantendo sempre o foco, qual seja a discussão sobre as rotinas
da organização para uma maior percepção dos requisitos por parte do analista.
OBSERVAÇÕES
Mesmo utilizando técnicas como entrevista ou reunião, algumas informações podem passar
despercebidas. Observar o comportamento e o ambiente de trabalho dos usuários pode ser uma técnica
eficaz para perceber alguma dessas informações que porventura não foi levada em consideração em outro
momento.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
19
2.1 Análise de Requisitos
2.1.1 Requisitos Funcionais
Requisitos funcionais são aqueles que descrevem funcionalidades que o sistema deve ter para atender às
expectativas dos usuários. Por exemplo:
O software deverá calcular a média de notas dos alunos;
O software deverá enviar, a cada semestre, um email para os pais com o boletim de seus filhos em
anexo;
O software deverá emitir relatório de compras quinzenalmente;
O software deverá alertar ao chefe do restaurante quando o estoque estiver abaixo do estabelecido.
2.1.2 Requisitos não Funcionais
Já os requisitos não funcionais são aqueles que descrevem as características do sistema, como
usabilidade, desempenho, confiabilidade, custo, etc. São exemplos de requisitos não funcionais:
O acesso às funcionalidades de gestão deve ser restrito aos diretores da empresa;
Se o tempo de resposta ultrapassar 30 segundos, redirecionar para página de erro;
O software deverá ser desenvolvido para sistema operacional Linux;
O prazo de entrega do sistema ao cliente deve ser de 2 anos.
2.1.3 Requisitos do usuário
Requisitos de usuário são declarações escritas, em linguagem natural, das funcionalidades que o sistema
oferece. No documento, deve constar basicamente a descrição dos requisitos funcionais, requisitos não
funcionais, devendo conter inclusive as restrições operacionais do sistema. Este material destina-se ao
cliente, portanto deve ser escrito em linguagem clara e compreensível, além de conter tabelas e
diagramas, visto que os usuários não possuem conhecimentos técnicos em desenvolvimento de sistemas.
A quem interessa:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
20
Gerentes de clientes
Usuários finais do sistema
Engenheiros do cliente
Gerentes do fornecedor
Arquitetos do sistema
2.1.4 Requisitos do sistema
Consiste em um documento estruturado, que estabelece detalhes das funcionalidades e restrições do
sistema. Pode ser elaborado como forma de contrato entre o cliente e contratante.
A quem interessa:
Usuários finais do sistema
Engenheiros da organização cliente
Arquitetos do sistema
Desenvolvedores de software
2.1.5 Especificação de Software
É um documento que consiste em uma minuciosa descrição do sistema, que vem a servir como base para
a implementação do mesmo. As especificações de software são destinadas aos próprios desenvolvedores.
A quem interessa:
Engenheiros da organização cliente
Arquitetos do Sistema
Engenheiros de Software
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
21
3.0 História e evolução da UML
A UML é uma linguagem para modelagem de softwares, ela é utilizada no processo de definição do
software, na análise e estruturação de como o programa será implementado. Ela permite que os
desenvolvedores de software possam modelar seus programas de forma unificada, isso quer dizer que
qualquerpessoa que entenda UML poderá entender a especificação de um software. O Objetivo da UML
é descrever “o que fazer”, “como fazer”, “quando fazer” e “porque deve ser feito”.
Para modelar os sistemas a UML possui um conjunto de diagramas que devem ser utilizados em
combinação para obter todas as visões do sistema.
A UML é utilizada para modelar sistemas escritos no padrão orientado a objetos, portanto para todas as
definições existentes na orientação a objetos haverá um diagrama correspondente. Exemplo: Uma classe,
um objetos, a comunicação dos objetos e etc.
Na criação da UML estão envolvidos três personagens: Jim Rumbaugh, Grady Booch e, Ivar Jacobson.
Jim Rumbaugh e Grady Booch combinaram dois métodos populares de modelagem orientada a objeto:
Booch e OMT (Object Modeling Language), mas tarde, IvarJacobson, o criador do método Objectory
uniu-se aos dois para a concepção da primeira versão da linguagem UML (Unified Modeling Language).
Em 1997 a UML foi adotada como padrão pela OMG (Object Management Group). Que é uma
organização internacional que aprova padrões abertos para aplicações orientadas a objetos.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
22
Em 1995 ocorre a união de vários métodos de modelagem como OOSE, BOOCH, OMT e outros.
Em 1996 surge a UML 0.9
Em 1997 surge a UML 1.0 que no mesmo ano evoluiu para a UML 1.1. Nesse ano a OMG que é
uma organização mundial de padrões orientados a objetos reconhece a UML.
Em 2001 a UML passa por revisões e é lançado a UML 1.4
Em 2002 a UML é reestruturada e da origem a UML 2.0.
A UML divide seus diagramas em Estruturais e Comportamentais, como demonstrado pela Figura 5. No
sentido horário, a partir do Diagrama de Caso de Uso, até o Diagrama de Interação, temos os diagramas
Comportamentais. Os demais são os Diagramas Estruturais.
Aqui vamos estudar apenas alguns diagramas, em toda a apostila você irá encontrar exemplos com
codificação em Java e seu respectivo diagrama. Então é muito importante que entendam os diagramas
estudados e saiba reconhecê-los.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
23
3.1 Diagramas Estruturais da UML
Usados para visualizar, especificar, construir e documentar aspectos estáticos de um sistema.
3.1.1 Diagrama de Classe
Este diagrama é fundamental e é o mais utilizado na UML, serve de apoio aos outros diagramas. O
Diagrama de Classe mostra o conjunto de classes com seus atributos e métodos e os relacionamentos
entre classes. Em todo sistema baseado na orientação a objetos as um dos princípios fundamentais são as
classes que definem o sistema.
Representa uma coleção de classes e seus inter-relacionamentos.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
24
3.1.2 Diagrama de Objeto
O diagrama de objeto está relacionado com o diagrama de classes e, é praticamente um complemento
dele. Fornece uma visão dos valores armazenados pelos objetos de um diagrama de classe em um
determinado momento da execução do processo do software. São muito úteis para exemplificar
relacionamentos complexos entre objetos em determinado momento
Observe na imagem abaixo que o objeto da classe cliente guarda os valores armazenados pelo objeto no
momento atual da execução.
Representa um retrato, em tempo de execução, dos objetos do software e seus inter-
relacionamentos.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
25
3.1.3 Diagrama de Componentes
Está associado à linguagem de programação e tem por finalidade indicar os componentes do software e
seus relacionamentos.
Um componente é elemento externo de software que compõe programa que estamos implementando, é
como um código externo que é reaproveitado. Esse componente pode ser substituído por outro
componente, como, por exemplo: executáveis, bibliotecas, tabelas, pastas e documentos.
Na figura abaixo temos um exemplo de diagrama de componente, perceba comunicação entre
componentes executáveis, bibliotecas (DLL), arquivos XML, imagens, tabelas e arquivos de texto. Tudo
isso é considerado um componente do software.
Representa uma coleção de componentes de software e seus inter-relacionamentos.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
26
3.1.4 Diagrama de Implantação
Diagrama de Implantação é usado para mostrar a organização do hardware e a ligação do software aos
dispositivos físicos, Como processador, impressora, memória, disco; é necessário para que o engenheiro
de software especifique a plataforma em que o sistema é executado.
O diagrama de implantação ao lado demonstra a plataforma física que o software será implantado.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
27
3.1.5 Diagrama de Pacotes
Representa os pacotes que o sistema está divido, demonstrando a interação lógica entre as partes.
Observe a comunicação entre os pacotes de parte do sistema.
Representa uma coleção de outros elementos de modelagem e diagramas.
3.2 Diagramas Comportamentais da UML
Usados para visualizar, especificar, construir e documentar aspectos dinâmicos de um sistema.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
28
3.2.1 Diagrama de Caso de Uso
É o diagrama comportamental mais utilizado na modelagem de sistemas, ele representa uma
funcionalidade do sistema.
O diagrama de caso de uso ajuda a definir a sequência de ações executadas por um ou mais atores e pelo
próprio sistema para produzir resultados para um ou mais atores. Seu foco é identificar os objetivos do
usuário, em vez das funções do sistema através da análise de como o ator, de forma externa, interage com
as funcionalidades do sistema. Cada caso de uso no diagrama deve ter um documento correspondente
determinando o seu comportamento.
Para identificar os atores do diagrama o analista deve primeiro identificar as áreas da empresa que serão
afetadas pelo software. Existem algumas perguntas básicas que podem ajudar a descobrir os atores.
Que órgãos, empresas ou pessoas utilizarão o sistema?
Existem outros sistemas que irão se comunicar com o sistema que será construído?
Alguém deve ser informado de alguma ocorrência do sistema.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
29
3.2.2 Diagrama de Sequência
Descreve a ordem temporal em que as mensagens são trocadas entre os objetos.
A função desse diagrama é estabelecer como os objetos interagem e seus relacionamentos dentro de um
contexto.
A leitura desse diagrama é feito em duas dimensões: horizontal, onde estão representados os objetos, e
vertical que representa a linha do tempo. A interação entre os objetos é feita através de mensagens,
representas através de linhas sólidas direcionadas, partindo o objeto solicitando para o solicitado.
Cada objeto, representado no diagrama por um retângulo contendo seu nome, corresponde à uma coluna.
Cada objeto possui uma linha tracejada vertical, que indica o seu tempo de vida.
A linha de vida de um objeto tem a função de:
Apresentam o tempo de vida dos objetos
Pode apresentar a ativação ou a desativação dos objetos
Indicam que os objetos estão executandoalgo
Indica chamada de método do próprio objeto
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
30
Podem representar a criação e a destruição de objetos
3.2.3 Diagrama de Estados
Procura acompanhar as mudanças sofridas por um objeto dentro de um processo no sistema, dando ênfase
aos estados dos objetos e as transições entre os estados. Costuma ser empregado para modelar os aspectos
dinâmicos do sistema e possui o seu comportamento orientado por eventos, onde cada evento gera um
novo estado no diagrama.
Temos um diagrama de estado genérico, com o único estado, representado na Figura - Diagrama de estado.
Observando a imagem identificamos o estado (como o objeto está naquele momento) representado por
um retângulo com bordas arredondadas, as transições (mudança de estado do objeto) representadas por
linhas orientadas por setas, ponto inicial (onde o objeto nasce) representado por um círculo totalmente
hachurado e o ponto final (onde o objeto morre) representado por um círculo parcialmente hachurado.
3.2.4 Diagrama de Atividades
Descreve os passos a serem percorridos para a conclusão de uma atividade.
O diagrama de atividade da ênfase as fluxo de controle de uma atividade para outra e identifica as
atividades existentes no sistema. A descrição dos elementos diagramas de atividades encontra-se na figura
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
31
abaixo:
O diagrama inicia com o círculo hachurado e o primeiro estado é solicitação do código do cliente, em
seguida verifica se o cliente já existe, nesse momento cai em uma tomada de decisão, se o cliente já
existe, informa para o usuário mostrando uma mensagem na tela e termina a atividade. Se não solicita os
dados do novo cliente, salva os dados e termina a atividade.
3.3 Relacionamentos em UML
Em UML, os relacionamentos são conexões entre itens. Ou seja, temos relacionamentos em vários
diagramas da UML, como relacionamento entre classes e relacionamento entre atores e casos de uso.
Em UML existem 3 tipos de relacionamento:
Dependência
Generalização
Associação
3.3.1 Relacionamento de Dependência
É um relacionamento de utilização, ou seja, um item é dependente do outro, dessa forma alteração de um
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
32
item pode afetar o outro. Por exemplo, o relacionamento de dependência entre classes indica que os
objetos de uma classe usam funcionalidades dos objetos de outra classe.
Representado por uma reta tracejada entre duas classes
Uma seta na extremidade indica o dependente
Tipo menos comum de relacionamento
Identifica uma ligação fraca entre objetos de duas classes
3.3.2 Relacionamento de Associação
É um relacionamento estrutural que especifica a associação de objetos, classes e casos de uso.
Nome: pode ser utilizado para descrever a natureza do relacionamento. Pode-se atribuir direção
para o nome, fornecendo um triângulo de orientação que aponta a direção como nome deve ser
lido
Cardinalidade: a quantidade de objetos que podem ser conectados pela associação.
Descreve um vínculo entre duas classes Chamado Associação Binária.
Determina que as instâncias de uma classe estão de alguma forma ligadas às instâncias da outra
classe.
Na leitura do diagrama acima dizemos que um cliente pode ser de nenhum ou muitos DVD’s, já um DVD
pode ser composto de um ou muitos clientes.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
33
3.3.3 Relacionamento de Generalização
A generalização é um relacionamento de herança, ou seja, existe uma superclasse (classe pai) e uma
subclasse (classe filha).
A classe filha herda característica da classe pai e pode também possuir suas próprias características, dessa
forma as subclasses compartilham a estrutura e comportamento das superclasses
Generalizações são relacionamentos “é-umtipo-de, ou seja, só é possível dizer que existe um
relacionamento de generalização quando a subclasse é um tipo da superclasse.
Vejamos como é possível identificar se existe um relacionamento de Generalização entre duas classes.
Imagine a classe Veiculo e avião. Então devemos fazer a pergunta: avião é um tipo de veiculo?
Resposta: SIM, então significa que avião é uma subclasse de veiculo.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
34
No exemplo acima a classe cliente é a superclasse e Pessoa Física e Pessoa Jurídica são suas subclasses.
Note que as subclasses possuem características próprias além de herdar as características da sua
superclasse.
A Generalização pode ainda ser demonstrada de duas formas
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
35
4.0 O que é a Linguagem Java?
Bem vindos ao futuro! Java não é somente uma linguagem de programação, mas também uma tecnologia
que tem como objetivo construir programas que possam ser utilizados em qualquer plataforma ou
computador, com o mínimo possível de dependência com um sistema operacional ou ambiente de
desenvolvimento.
Java possui uma sintaxe extremamente similar à do C++, e com diversas características herdadas
de outras linguagens, como Smalltalk e Modula-3. É antes de tudo é uma boa linguagem, simples, com
um ambiente de execução de alta qualidade e uma vasta biblioteca de classes disponíveis. Essa
combinação é que torna Java uma proposta irresistível para tantos programadores. Além de contar c
om as seguintes características: totalmente orientada a objetos, fortemente tipada, independente de
arquitetura, robusta, segura, portável, bem estruturada, suporta programação distribuída, multithreaded e
conta com garbage collection.
4.1 Histórico da Linguagem
Em 1991, na empresa Sun MicroSystems , foi iniciado o Green Project, o berço do Java uma linguagem
de programação orientada a objetos. Os mentores do projeto eram Patrick Naughton, Mike Sheridan,
e James Gosling. O objetivo do projeto não era a criação de uma nova linguagem de programação, mas
antecipar e planejar a “próxima onda” do mundo digital. Eles acreditavam que em algum tempo haveria
uma convergência dos computadores com os equipamentos e eletrodomésticos comumente usados pelas
pessoas no seu dia a dia.
James Gosling especificou uma nova linguagem de programação para o seu novo projeto e decidiu batizá-
la de “Oak”, que quer dizer carvalho, uma
árvore que ele podia observar quando olhava pela sua janela. O próximo passo era encontrar um mercado
para o *7. A equipe achava que uma boa ideia seria controlar televisões e vídeo por demanda com o
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
36
equipamento. Eles construíram um demo chamado MovieWood, mas infelizmente era muito cedo para
que o vídeo por demanda bem como as empresas de TV a cabo pudessem viabilizar o negócio. A ideia
que o *7 tentava vender, hoje já é realidade em programas interativos e também na televisão digital.
Permitir ao telespectador interagir com a emissora e com a programação em
uma grande rede a cabos, era algo muito visionário e estava muito longe do que as empresas de TV a
cabo tinham capacidade de entender e comprar.
O protótipo se chamava *7 (leia-se “StarSeven”),um controleremoto com uma interface gráfica
touchscreen. Para o *7 foi criado um mascote, hoje amplamente conhecido no mundo Java, o Duke. O
trabalho do Duke no *7 era ser um guia virtual ajudando e ensinando o usuário a utilizar o equipamento.
O *7 tinha a habilidade de controlar diversos dispositivos e aplicações.
A ideia certa, na época errada. A sorte é que o bom da Internet aconteceu, e rapidamente uma grande rede
interativa estava se estabelecendo. Era este tipo de rede interativa que a equipe do *7 estava tentando
vender para as em presas de TV a cabo. E, da noite para o dia, não era mais necessário construir a
infraestrutura para a rede, em um golpe de sorte, ela simplesmente estava lá. Gosling foi incumbido de
adaptar o Oak para a Internet e em janeiro 1995 foi lançada uma nova ver são do Oak que foi rebatizada
para Java. A tecnologia Java tinha sido projetada para se mover por meio das redes de
dispositivos heterogêneos, redes como a Internet. Agora aplicações poderiam ser executadas dentro dos
Browsers nos Applets Java e tudo seria disponibilizado pela Internet instantaneamente. Foi o estático
HTML dos Browsers que promoveu a rápida disseminação da dinâmica tecnologia Java. A velocidade dos
acontecimentos seguintes foi assustadora, o número de usuários cresceu rapidamente, grandes p layers,
como a IBM anunciaram suporte para a tecnologia Java.
4.2 Uso da linguagem no mercado atualmente (especificação das
tecnologias).
Desde seu lançamento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que
qualquer outra linguagem de programação na história da computação. Em 2003 Java atingiu a marca de 4
milhões de desenvolvedores em todo mundo. Java continuou e continua crescendo e hoje é com certeza
um padrão para o mercado oferecendo qualidade, performance e segurança ainda sem nenhum
competidor a altura. Atualmente Java é a escolha para construir sistemas robustos, confiáveis e
distribuídos,rodando desde grandes servidores,por isso tornou -se popular pelo seu uso na Internet e hoje
possui seu ambiente de execução presente em web browsers, mainframes, SOs, celulares, palmtops e
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
37
cartões inteligentes,entre outros dispositivos.
4.3 Principais características da linguagem de programação java
ORIENTAÇÃO A OBJETOS: Java é uma linguagem orientada a objetos que segue a linha purista
iniciada por Smalltalk que é considerada puramente O.O e que tudo nesta são objetos. Com a exceção dos
tipos primitivos da linguagem (char, int, float, etc.), a maior parte dos elementos de um programa Java
são objetos.
No que rege esse paradigma, o projeto orientado a objetos é uma técnica de programação que se
concentra nos dados (= objetos) e nas interfaces para este objeto. O código é organizado em classes, que
podem estabelecer relacionamentos de herança simples entre si, somente a herança simples é permitida
em Java. Há uma forma de "simular" herança múltipla em Java com o uso de interfaces.
SIMPLICIDADE: Java, é muito parecida com C++, mas muito mais simples. Java não possui
sobrecarga de operadores, structs, unions, aritmética de ponteiros, herança múltipla,arquivos.h, diretivas
de pré-processamento e a memória alocada dinamicamente é gerenciada pela própria linguagem que usa
algoritmos de garbage collection para desalocar regiões de memória que não estão mais em uso. Outro
aspecto da simplicidade do Java é o tamanho pequeno. Um dos objetivos do Java é permitir a
construção de software que possa rodar independentemente em qualquer máquina de pequeno porte. O
tamanho do interpretador básico e do suporte a classes é de cerca de 40K bytes; adicionando as
bibliotecas básicas padrão e o suporte a linhas de execução
(essencialmente um microkenel auto-contido), têm-se outros 175 K.
SEGURA: Java foi elaborada para ser usada em ambientes de rede distribuída, por isso permite a
construção de sistemas l ivres de vírus e intrusões. A presença de coleta automática de lixo, evita erros
comuns que os programadores cometem quando são obrigados a gerenciar diretamente a memória (C,
C++, Pascal).
A eliminação do uso de ponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas
traz benefícios em termos de segurança. O programador é proibido de obter acesso à memória que não
pertence ao seu programa, além de não ter chances de cometer erros comuns tais como “reference
aliasing” e uso indevid o de aritmética de ponteiros. Estas medidas são particularmente úteis quando
pensarmos em aplicações comerciais desenvolvidas para a internet.
ROBUSTA: Java foi elaborada para a produção de programas que devam ser confiáveis em vários
sentido. Java põe bastante ênfase na verificação
rápida de possíveis problemas, na verificação dinâmica posterior (em tempo de execução), e em eliminar
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
38
situações propensas a erros. A principal diferença entre Java e C/C++ é que Java possui um modelo de
ponteiros que elimina a possibilidade de sobrescrever a memória e corromper dados.
PROCESSAMENTO DISTRIBUÍDO: A linguagem de programação Java possui uma extensa
biblioteca de rotinas para lidar com protocolos TCP/IP, como HTTP e FTP. As aplicações Java podem
abrir e acessar objetos através da rede via URLs, com a mesma facilidade com que acessa um
sistema de arquivos local.
MULTITHREADING: Múltiplas linhas de execução. Em Java é uma surpresa agradável e fácil.
Linhas de execução em Java podem também beneficiar -se de sistemas multiprocessadores se o sistema
operacional de base o fizer. O lado ruim é que as implementações de linhas de execução nas plataformas
mais importantes diferem radicalmente, e o Java não faz nenhum esforço para ser neutro em relação às
plataformas nesse aspecto. Somente o código para chamar o multhreading permanece o mesmo para todas
as máquinas.
EXCEÇÕES: Todo programador em geral está bastante acostumado com o computador "travando" por
causa de um erro em um programa. Em C++, por exemplo, a simples tentativa de abertura de um arquivo
inexistente pode obrigar ao programador a reiniciar o computador. Programas Java, contudo, não "dão
pau" no computador, já que a máquina virtual Java faz uma verificação em tempo de execução quanto aos
acessos de memória, abertura de arquivos e uma série de eventos que podem gerar uma "travada" em
outras linguagens, mas que geram exceções em programas Java. Em geral, ao escrever programas
Java utilizando-se de herança de classes predefinidas, força -se em geral ao programador escrever
algumas rotinas de tratamento de exceção, um trabalho que, se de início pode parecer forçado, irá poupar
o programador de bastante dor de cabeça no futuro.
GARBAGE COLLECTOR: Em Java, os programadores não necessitam
preocupar-se com o gerenciamento de memória como em C++. Em C++, todo bloco de memória alocado
dinamicamente (com new, malloc ou função similar) deveria ser liberado quando não fosse mais usado
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
39
(com free, delete e parentes próximos). Isso acarretava diversos problemas mesmo ao programador mais
experiente, que tinha que manter sempre um controle das áreas de memória alocadas para poder liberá -
las em seguida. Java, ao contrário, utiliza-se de um conceito já explorado pela linguagem Smalltalk, que é
o de garbage collection (coleta de lixo). Sua função é a de varrer a memória de tempos em tempos,
liberando
automaticamente os blocos que nãoestão sendo utilizados. Se por um lado isso pode deixar o aplicativo
um pouco mais lento, por manter uma thread paralela que dura todo o tempo de execução do programa,
evita problemas como referências perdidas e avisos de falta de memória quando sabe-se que há megas e
megas disponíveis na máquina.
COMPILADA E INTERPRETADA: Uma das características de Java que a tornou ideal para seu uso
na elaboração de aplicativos distribuídos foi a sua independência de plataforma. Isso porque o compilador
gera um formato de arquivo de objetos neutro em relação a arquitetura, o código compilado é executável
em vários processadores, desde que haja a presença do sistema em tempo de execução Java. O
compilador Java consegue isso gerando instruções bytecode que não tem nada a ver com uma arquitetura
computacional específica. Ao contrário eles são elaborados para ser de fácil interpretação em qualquer
máquina e de fácil tradução para código de máquina nativo imediatamente.
MÁQUINA VIRTUAL: É uma máquina imaginária que é implementada através de um software
emulador em uma máquina real.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
40
A JVM provê especificações de plataforma de hardware na qual se compila todo código de tecnologia
Java. Essas especificações permitem que o software Java seja uma plataforma independente, pois a
compilação é feita por uma máquina genérica conhecida como JVM.
PORTÁVEL: Ao contrário do C e C++ que não existem aspectos da especificação
que sejam dependentes da implementação. Os tamanhos dos tipos de dados primitivos são
especificados,bem como o comportamento da aritmética neles. Por exemplo, em Java um int é
sempre um número inteiro de 32 bits, enquanto que em C/C++, int pode significar um inteiro de 16 bits
ou um inteiro de 32 bits. Com o tamanho fixo para tipos numéricos elimina-se a causa de grandes dores
de cabeça relacionadas à portabilidade. A portabilidade em Java é atingida através da utilização de
bytecodes. Bytecode é um formato de código intermediário entre o código fonte, o texto
que o programador consegue manipular, e o código de máquina, que o computador consegue executar.
Na plataforma Java, o bytecode é interpretado por uma máquina virtual Java. A portabilidade do
código Java é obtida à medida que máquinas virtuais Java estão disponíveis para diferentes plataformas.
Assim, o código Java que foi compilado em uma máquina pode ser executado em qualquer máquina
virtual Java, independentemente de qual seja o sistema operacional ou o processador que executa o
código.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
41
JAVA E A INTERNET: Os programas Java que rodam em páginas web são chamados applets.
Para usar applets, você precisa de um navegador web habilitado para Java, o qual executará os bytecodes
para você. Em particular servidores de aplicação podem usar as capacidades de monitoramento da
máquina virtual Java para realizar o equilíbrio automático de carga, controle de conexões a banco de
dados, sincronização de objetos, desligamento e reinicialização seguros, além de outros serviços
necessários para aplicações escaláveis de serviços, mas que são notoriamente difíceis de implementar
corretamente. Em Java, é possível escrever aplicações completas, inclusive acessando bancos de dados
relacionais independentemente do servidor web, bem como é possível implementar os níveis de interface
com o usuário e de lógica do negocio, utilizando um servidor de banco de dados para implementar o nível
de acesso aos dados.
DISTRIBUIÇÃO DA TECNOLOGIA JAVA: O J2SE (Java 2 Standard Edition) ou Java SE é uma
ferramenta de desenvolvimento para a plataforma Java. Ela contém todo o ambiente necessário
para a criação e execução de aplicações Java, incluindo a máquina virtual Java (JVM), o compilador Java,
as APIs do Java e o utras ferramentas utilitárias.
JME, Java Plataforma, Micro Edition (Java ME), ainda conhecida por J2ME, é uma tecnologia que
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
42
possibilita o desenvolvimento de software para sistemas e aplicações embarcadas, ou seja, toda aquela
que roda em um dispositivo de propósito específico, desempenhando alguma tarefa que seja útil para o
dispositivo. É a plataforma Java para dispositivos compactos, como telemóveis, PDAs, controles remotos,
e outra gama de dispositivos.
Java EE (ou J2EE, ou Java 2 Enterprise Edition, ou em português Java Edição Empresarial) é uma
plataforma de programação de computadores que faz parte da plataforma Java. O JEE (Java Enterprise
Edition) é a plataforma Java voltada para redes, internet, intranets e afins. Assim, ela contém bibliotecas
especialmente desenvolvidas para o acesso a servidores, a sistemas de e-mail, a banco de dados, etc. Por
essas características, o JEE foi desenvolvido para suportar uma grande quantidade de usuários
simultâneos. A plataforma JEE contém uma série de especificaç ões, cada uma com funcionalidades
distintas. Que são:
JDBC (Java Database Connectivity), utilizado no acesso a banco de dados.
JSP (Java Server Pages),um tipo de servidor Web. Os servidores web são as aplicações que
permitem a você acessar um site na internet.
Servlets, para o desenvolvimento de aplicações Web,isto é,esse recurso "estende" o funcionamento
dos servidores web, permitindo a geração de conteúdo dinâmico nos sites.
4.4 Ambientes e ferramentas de desenvolvimento com Java
A tecnologia Java fornece como ambiente de desenvolvimento um grande conjunto de ferramentas
que engloba: um compilador, um interpretador, um gerador de documentação, ferramenta de
empacotamento de classes de arquivos e outros.
INSTALAÇÃO DO JDK OU SDK E JRE E SUAS CONFIGURAÇÕES
A Sun a empresa proprietária do Java que atualmente pertence a empresa (Oracle). Ela
disponibiliza, basicamente, duas versões de sua máquina virtual: o JRE (Java Runtime Environment) e
JDK (Java Development Kit). O JRE contém a máquina virtual que permite rodar programas feitos na
linguagem Java em uma máquina. O JDK, por sua vez,é um pacote para desenvolvedores programarem
suas aplicações em Java, possuindo vários utilitários, inclusive compilador e bibliotecas. Uma das versões
mais usadas do Java foi a 1.4.x, que possuía inclusive um visual um pouco (para ser modesto) rústico.
Mais para frente a Sun lançou a versão 1.5.0, com várias melhorias em termos de programação e um
visual um pouco melhor. Foi lançado em dezembro do de 2006 o Java 1.6.0, conhecido também como
Java 6, que trouxe, finalmente, uma integração total com o desktop em termos visuais, e várias melhorias
também para quem é programador.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
43
Mustang é o nome dado para a nova versão 6 de Java, que saiu no final do ano passado. Entre as
novidades mais conhecidas estão o suporte a linguagens de script, melhores ferramentas para o
monitoramento de aplicações Java e mais integração com o sistema operacional. Mas o qual é realmente a
diferença entre o JDK e Java SDK? : O kit de desenvolvimento para Java (Sofware Development Kit).
Trata-se de um conjunto de softwares para programadores em Java que você não precisa instalar se sua
intenção for apenas usar os programas feitos em Java. Para rodar os programas em Java basta
instalar o JRE (Java Runtime Environment).
4.5 Meu primeiro programa em java
Como Java é uma linguagem que é primeiramentecompilada e em seguida interpretada. Para
compilar e executar um programa escrito nessa linguagem devemos o primeiro construir o arquivo como
o código fonte, que deve ter como extensão .java. Que no caso do exemplo o arquivo foi chamado de
HelloWorld.java. Em seguida, o código fonte é compilado e um programa fonte em bytecodes
(HelloWorld.class) é gerado. Durante a compilação, há uma checagem de erros do código fonte. O código
fonte em bytecodes só será gerado se nenhum erro tiver sido detectado. Por fim, qualquer dispositivo que
execute Java será capaz de interpretar este novo arquivo fonte e executar a aplicação. Os bytecodes são
lidos e executados (ou seja, interpretados) pela Máquina Virtual Java (JVM – Java Virtual Machine) em
um computador, em um celular, etc., além de serem independentes de plataforma.
A geração dos bytecodes ou, para o exemplo, do arquivo HelloWorld.class é feita a partir da execução do
comando javacHelloWorld.java. Então, o próximo passo é fazer com que a JVM execute o arquivo
HelloWorld.java, através do comando java HelloWorld.class . Dessa maneira, a JVM traduz o código
compilado para uma linguagem que a máquina entenda e o programa é executado, por isto os programas
em Java podem executar em qualquer plataforma de hardware ou software que possua uma versão da
JVM. A Máquina Virtual Java é definida como uma máquina imaginária implementada através da
emulação em um software executado em uma máquina real. Ela possui uma arquitetura que permite
garantir segurança. Quando um programa Java é executado, seus bytecodes são verificados pela JVM
para que estejam de acordo com os seus requisitos de segurança, impedindo a execução de código com
alguma irregularidade. Assim, códigos-fonte com instruções que acessem áreas restritas da memória ou
até mesmo recursos do hardware não são executados pela JVM.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
44
A palavra public indica que a classe terá um nível de acesso público, ou seja, que ela será acessível por
qualquer classe. A palavra class indica que uma classe está sendo declarada e seu nome é HelloWorld. A {
delimita o limite inicial da classe.
A palavra public já foi descrita, portanto permite que o método seja acessado publicamente. A palavra
static será descrita posteriormente. O lugar onde fica a palavra void é onde se deve indicar o tipo de
retorno do método. Neste caso, não retorna nenhu m valor, dessa maneira o método é declarado como
void.
O conjunto String[] args presentes entre ( ) são os argumentos do método. Neste exemplo, o método
possui um único argumento (um vetor de Strings denominado args. A { delimita o limite inicial do
método.
A terceira linha consiste no conteúdo do método principal, formado apenas por um comando, ou uma
instrução que é composta de uma ou mais linhas terminadas por ponto e vírgula. Exemplo:
O System.out.println é usado para exibir algo na saída padrão, por padrão, na linha de comando. Será
exibido o que tiver entre (“”), no caso, Hello world. No final deste comando, tem-se um; que o finaliza.
Por fim, há duas “fecha chaves” } } , que delimitam o fim do método e da classe, respectivamente.
Blocos de código: Um bloco é formado por uma ou mais instruções agrupadas entre chaves indicando
que formam uma só unidade. Blocos podem ser organizados em estruturas aninhadas
Indefinidamente. Qualquer quantidade de espaços em branco é permitida. Um exemplo de bloco código
mostrado ao lado ilustra perfeitamente como são organizadas as estruturas de blocos.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
45
4.6 Comentários em Java:
Comentários são notas escritas pelo programador para fins de documentação. Estas notas não fazem parte
do programa e não afetam o fluxo de controle . Java suporta três tipos de comentários: comentário de
linha estilo C++,comentário de bloco estilo C e um comentário estilo Javadoc (utilizado compor a
documentação do programa).
Comentário de linha: Comentários com estilo em C++ se iniciam por "//". Todo e qualquer texto
colocado após as // é ignorado pelo compilador e tratado como comentário. Por exemplo:
Comentário de bloco: Comentários com estilo em C, também chamados de comentários multi-linhas, se
iniciam com /* e terminam com */. Todo o texto posto entre os dois delimitadores é tratado como
comentário. Diferente do comentário estilo C++, este pode se expandir para várias linhas. Por exemplo:
Comentário estilo Javadoc: Este comentário é utilizado na geração da documentação em HTML dos
programas escritos em Java. Para se criar um comentário em estilo Javadoc deve se iniciar o comentário
com /** e terminá-lo com */. Assim como os comentários estilo C, este também pode conter várias
linhas. Este comentário também pode conter certas tags que dão mais informações à documentação. Por
exemplo:
4.7 Compilando meu primeiro programa em Java
1°- Passo: Para compilarmos o nosso primeiro programa em Java utilizamos o seguinte comando javac
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
46
seguindo do nome da classe (ponto).java.
2°- Passo: Para executarmos o nosso primeiro programa em Java utilizamos o seguinte comando Java,
seguido do nome da classe.
Nesse segundo exemplo vamos usar um editor de texto qualquer para editor o código-fonte do nosso
segundo exemplo e vamos compilar usando terminal (Konsole) do sistema operacional.
Compilando nosso 2° exemplo com o comando → javac:
Executando nosso 2° exemplo com o comando → java:
Obs.: Cuidados importantes a serem tomados:
Se o javac reclamar que não acha a classe HelloWorld.java, é porquê você não está no diretório
correto ou salvou o arquivo em outro lugar.
Se o javac reclamar de algum erro no fonte, é porque você digitou algo errado. Não troque letras
maiúsculas por minúsculas e vice -versa, em nenhuma parte do código!
Finalmente, ANTES de chamar o seu instrutor para ele inserir um ; ou fechar uma chave no seu
código, revise mais uma vez o seu código completamente.
DICAS PARA RESOLUÇÃO DE PROBLEMAS EM PROGRAMAS JAVA
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
47
Se digitar o programa na mão, certifique-se de prestar atenção as letras maiúsculas e minúsculas.
Em particular um nome de classe por exemplo.
Se receber uma mensagem como “Bad command or file name” ou “javac command not found”,
volte e verifique novamente a sua instalação, em particular a configuração do caminho de
execução.
O compilador requer um nome de arquivo (Teste.java) por exemplo. Quando você rodar o
programa, você especifica um nome de classe (Teste) sem a extensão .java nem .class.
Se o compilador javac relatar um erro “connot read”: “Teste.java” , você deve ve rificar se esse
arquivo está presente no diretório.
Se houver erros demais em seu programa todas as mensagens de erros voarão pela sua tela muito
rapidamente. O compilador envia as mensagens de erro para a saída padrão, então, é um pouco
complicado capturá -las se elas ocuparem mais espaço do que a janela pode exibir.
4.8 Erros comuns em programas java
ERROS EM JAVA:
Durante o desenvolvimento de programas, é muito comum que ocorram erros, em Java pode ser em dois
domínios: tempo de compilação e tempo de execução.
ERRO EM TEMPO DE COMPILAÇÃO:
Erros ocorridos durante a fase de compilação ocorrem quando se executa o
javac, e são fáceis de corrigir. Há dois tipos:
Erros de processamento do arquivo (parsing): ponto e vírgulafaltando, parênteses, aspas, chaves
ou colchetes descasados. Identifica apenas o arquivo e a linha onde o erro pode ter iniciado. Um
erro causa vários outros e nem sempre a mensagem é precisa.
Erros de compilação do código, realizada depois do parsing: além da linha e do arquivo,
identificam a classe e método. Geralmente as mensagens são bastante elucidativas.
ERRO EM TEMPO DE EXECUÇÃO:
Erros que ocorrem durante o tempo de execução (runtime) ocorrem quando se executa o interpretador
java, e são muito mais difíceis de localizar e consertar.
Exception in thread "main": NoClassDefFoundError: Classe: a classe "Classe" não foi encontrada
no CLASSPATH.
Exception in thread "main": NoSuchMethodError: main: o sistema tentou chamar main() mas não
o encontrou.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
48
ArrayIndexOutOfBoundsException: programa tento u acessar vetor além dos limites definidos,ou
negativo.
NullPointerException: referência para objeto é nula,ou variável de um tipo objeto foi declarada
mas não inicializada.
4.9 NetBeans
O termo IDE sigla para (Integrated Development Environment). O NetBeans
I DE é um ambiente de desenvolvimento integrado e está disponível para Windows, Mac, Linux e Solaris.
O projeto NetBeans consiste em um IDE de código-fonte aberto e uma plataforma de aplicações que
permitem que os desenvolvedores criem rapidamente aplicativos web, corporativos, desktop e aplicações
móveis utilizando a plataforma Java,bem como JavaFX,
PHP, JavaScript e Ajax Ruby e Ruby on Rails , Groovy e Grails, e C / C + +. O projeto do NetBeans é
apoiado por uma vibrante comunidade de desenvolvedores e ofe rece uma extensa documentação e
treinamento de recursos, bem como uma diversificada seleção de terceiros plugins.
IDE 6.9 introduz o JavaFX, Compositor uma ferramenta visual para construção de layout visual JavaFX
aplicativos, interface gráfica semelhante ao construtor de GUI Swing para aplicações Java. SE
NetBeans Outros destaques incluem OSGi Plataforma de interoperabilidade para aplicações NetBeans
e apoio para o desenvolvimento de bundles OSGi com Maven, o apoio à JavaFX SDK, Framework Zend
para PHP e Ruby on Rails 3.0, bem como melhorias no editor de Java, Java Debugger problema de
rastreamento, e muito mais. Para baixar o NetBeans acesse o site do link:
http://www.netbeans.org/
4.10 Visão de outras IDEs para o desenvolvimento com Java
IDE ECLIPSE
O Eclipse é uma IDE para o desenvolvimento aplicações Java, ele também pode ser usado para o
desenvolvimento de aplicações utilizando outras linguagens como PHP, C++, etc. O Ambiente de
desenvolvimento multi linguagens de programação cujo projeto é patrocinado pela IBM. É bastante
flexível e integra com vários projetos bastante comuns na comunidade Java tais como cvs
(versionamento), ant(scripts) e junit (testes unitários). Não possui ainda um bom editor visual de interface
http://www.netbeans.org/
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
49
gráfica. O atual, chamado visual editor (VE) funciona com SWT e Swing mas ainda está na versão 0.5. O
desenvolvimento J2EE é viável com o uso de plugins obtidos de terceiros. Nesta apostila não iremos nos
aprofunda r nessa IDE, mas pode baixar e instalar no seu sistema par criar seus projetos de programação
com Java usando a IDE Eclipse. O Eclipse atualmente encontra-se na versão 3.6 chamada de HELIOS,
para baixá-lo acesse o seguinte link ao lado: http://www.eclipse.org/
IDE BLUEJ
BlueJ é um ambiente de desenvolvimento Java projetado especificamente para o ensino em um nível
introdutório. BlueJ foi projetado e implementado pelas equipes das universidade Monash
University,Melbourne, Australia e The University of Southern Denmark, Odense. Maiores informações
sobre BlueJ estão disponíveis no site oficial (http://www.bluej.org). O BlueJ é um
excelente ambiente para o fim a que se destina: a aprendizagem da progra mação orientada pelos objetos
utilizando a linguagem Java. No entanto e especialmente quando é utilizada uma linguagem muito
popular como a linguagem Java, o desenvolvimento de programas é feito utilizando IDEs muito
mais complexos e sofisticados. Tal é ne cessário para lidar com a complexidade de muitos dos programas
atuais.
Estes atingem frequentemente dezenas de milhares de linhas de código e, em alguns casos, muitas, muitas
mais. Tal implica a utilização de várias ferramentas de auxílio ao desenvolvimento de código. BlueJ
3.0.4,uma versão de manutenção que inclui uma série de correções de erros importantes, está agora
disponível para download.
IDE GEL
É um editor pequeno e rápido.Escrito em Delphi para computadores com Windows. Destaca sintaxe para
java,jsp,xml, html entre outras gramáticas, facilita o gerenciamento de projetos, mantém histórico local de
mudanças, possui suporte a CVS, JUnit e Ant entre outras facilidades. Livre para uso
comercial.Mais informações sobre essa IDE visite o site: http://www.dukeduck.com.br/
IDE JDEVELOPER
Uma das principais opções open source, uma terceira boa opção existe desde que a Oracle tornou seu
http://www.eclipse.org/
http://www.bluej.org/
http://www.dukeduck.com.br/
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
50
IDE Jdeveloper totalmente gratuito. Isso devido ao fato de a Oracle tornar open source dois frameworks
de desenvolvimento Java: o mecanismo de
persistência Oracle TopLink (se tornou a base da implementação de referência JPA do Glassfish) e os
componentes JavaServer Faces (JSF) Oracle ADF Faces, parte do Oracle Aplication Development
Framework. São dois ótimos recursos e o seu uso no desenvolvimento está totalmente integrado e
suportado no Oracle JDeveloper.
O Oracle JDeveloper é assim uma opção gratuita abrangente e amadurecida para o desenvolvimento Java
corporativo, principalmente em ambientes onde produtos Oracle já são utilizados (Database Server, BI,
Application Server, Portal). http://www.oracle.com/
4.11 Identificadores e palavras-chaves.
Java é uma linguagem centrada nos pacotes; os desenvolvedores da linguagem assumiram que, para uma
boa organização de nomes, seria fundamental na estrutura de programas em java. Imagine o seguinte
pesadelo: três programadores, na mesma empresa, mas trabalhando em diferentes partes de um projeto,
escrevem cada um uma classe chamada Utilitários. Se essas três classes Utilitários não tiverem sido
declaradas em nenhum pacote explícito, e estiverem no classpath, não seria possível dizer ao compilador
ou à JVM qual das três classes está tentando referenciar.
Identificadores legais são regras que o compilador usa para determinar se um dado nome é legal. Em
Java, os identificadores devem ser compostos apenas por caracteres. Unicode, números, símbolos de
moedas e caracteres de conexão como underscore.
REGRAS VÁLIDAS:
Devem iniciar com uma letra, símbolo comercial cifrão ($) ou underscore (_);
Após o primeiro carácter podem ter qualquer combinação de letras, caracteres e números;
Não possuem limite de tamanho;
Não podem ser palavras reservadas restritas da linguagem;
Em Java os identificadores são case-sensitive isto é, “JAVA” é totalmente diferente de “java” isso porque
o compilador diferencia maiúsculos de minúsculos.
Palavras-chave: São identificadores que, em Java, foram pré -definidas com propósitos específicos.
Não se pode usar esses identificadores como nomes de variáveis, métodos, classes, etc. A seguir, temos a
lista com as palavras -chave emJava.
http://www.oracle.com/
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
51
TIPOS PRIMITIVOS:
Todo programa de computador deve ser capaz de lidar com dados para conseguir fazer seus processos
como, por exemplo, somar, multiplicar, dividir, etc. Usar atributos é a melhor forma de manipular os
dados. Os tipos de dados são o que definem a quantidade de memória do computador que será utilizado
para guardar tal dado. As variáveis primitivas podem ser declaradas como variáveis de classe (static),
variáveis instâncias, parâmetros de métodos ou variáveis locais. Uma vez declarado, seu tipo primitivo
não pode nunca ser modificado, embora na maioria dos casos seu valor possa se modificar. Java é uma
linguagem fortemente tipada. Isso significa que toda variável deve ter um tipo declarado. Existem oito
tipos primitivos em Java. Quatro deles são do tipo inteiro; dois são do tipo de números de ponto
flutuante; um é o tipo de caracteres char, usado para unidades de código no esquema de codificação
Unicode e um deles é do tipo lógico para valores true/false (verdadeiro/falso).
Uso de valores literais de todos os tipos de dados existentes.
Um literal primitivo é simplesmente a representação do código -fonte dos tipos dados primitivos em
outras palavras um inteiro, um número de ponto flutuante, um booleano ou caracteres que você digite
enquanto escreve um código.
true, false e null não são palavras-chave, porém, são palavras reservadas, e, da mesma
maneira, não é permitido seu uso na atribuição a nomes de variáveis, métodos ou
classes.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
52
LITERAIS INTEIROS:
Há três maneiras de representar números na linguagem Java: decimal (base 10), octal (base 8) e
hexadecimal (base 16).
Literais decimais:
Os inteiros decimais não precisam de explicação, eles são representados da maneira tradicional, sem
prefixo de nenhum tipo, como no exemplo abaixo:
LITERAIS OCTAL:
Os inteiros octais usam somente dígitos de 0 a 7. Em Java, o inteiro é representado na forma
octal com a inclusão de um zero na frente do número, veja o exemplo abaixo:
LITERAIS HEXADECIMAIS:
Os números hexadecimais são construídos com o uso de 16 símbolos distintos. Já que não foram criados
símbolos numéricos unitários para os algarismos que vão de 10 a 15, usamos caracteres alfanuméricos
para representar esses dígitos.
Na Java linguagem todos os literais inteiros (octal, decimal e hexadecimal) são definidos como int (ou
seja inteiros) por padrão, mas também podem ser representados como Long com a inclusão de um sufixo
L ou l depois do número:
Exemplos:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
53
Os tipos de dados inteiros que são os mais conhecidos e mais simples. Em Java, os números inteiros são
divididos em quatro tipos: byte, short, int e long.
O tipo byte é o de menor alcance entre os inteiros. Como o próprio nome sugere, ele consome apenas um
byte (8 bits) e pode guardar val ores entre -128 e 127.
O tipo short guarda inteiros de 2 bytes (16 bits) e pode guardar números entre - 32.768 a 32.767.
O tipo int é o tipo de dado mais comum. Ele consome 4 bytes (32 bits) e guarda valores entre -
2.147.483.648 e 2.147.483.647.
Long é o tipo de dado com maior alcance entre os inteiros. Consequentemente,também é o que ocupa
mais espaço (8 bytes ou 64 bits). Tem um grande alcance que fica entre -9,22E+18 (exatos -
9.223.372.036.854.775.808) e 9,22E+18 (exatos 9.223.372.036.854.775.807).
LITERAIS DE PONTO FLUTUANTE:
Os números de ponto flutuante são definidos com um número, um símbolo decimal e os outros números
que representam a fração. Para número decimais fracionários com grande precisão ou valores
extraordinários (geralmente utilizad os em matemática aplicada e complexa como cálculos físicos,
químicos, astrológicos, meteorológicos, etc) utilizamos o tipo de dado double.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
54
Double é o tipo de dado mais complexo que existe em Java e o maior valor possível de se
armazenar é 1,797.693.134.862.315.7E+308. Muito mais do que qualquer programador precisa.
Float os literais de ponto flutuante são definidos Double (64 bits) por padrão, portanto, se desejarmos
atribuir um literal de ponto flutuante a uma variável float (32 bits), terá que anexar o sufixo F ou f ao
número. Se não o fizer, o compilador reclamará de uma possível falta de precisão, porque estará tentando
inserir em um container (potencialmente) menos preciso.
LITERAIS BOOLEANOS:
Os literais booleanos são a representação do código -fonte para valores boolean.
Um valor booleano só poderá ser definido como true ou false.
LITERAIS DE CARACTERES:
O literal char é representado por um único caractere entre aspas simples. Eles podem também representar
valores Unicode do caractere, usando a notação Unicode que acrescenta o prefixo \u ao valor, atribuir um
literal numérico, contanto que ele esteja no intervalo de 16 bits sem sinal (65535 ou menor).
Válidos:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
55
Inválidos:
LITERAIS PARA STRING:
O literal de string é a representação do código-fonte para o valor de um objeto String. Embora as strings
não sejam primitivas, foram incluídas neste capitulo porque são utilizadas para representar valores
literais, em outras palavras, digitadas diretamente no código. Veremos
mais sobre Strings no capitulo 9.
Exemplo 01:
4.12 Operadores em Java:
Os operadores em Java produzem novos valores a partir de um ou mais valores, os quais são itens á
esquerda ou a direita do operador. O resultado da maioria das operações é um valor boleano ou numérico.
É importante lembrar que na linguagem Java não é possível sobrecarregar os operadores. Um dos
objetivos da linguagem Java é a portabilidade. Por isto muitos processadores da Intel computam x *
y e deixam em registrador de 80 bits, em seguida dividem por z e finalmente truncam o resultado de volta
para 64 bits. Isso pode gerar um resultado mais preciso e pode evitar o estouro de exponentes. Mas o
resultado pode ser diferente de uma computação que usa 64 bits o tempo todo.
Por esse motivo a especificação inicial da máquina virtual Java exigia que todas as computações fossem
truncadas. Não somente as computações truncadas podem causar estouro, como também são, na verdade
mais lentas do que as computações mais precisas, porque a operação de truncamento é demorada. Por
essa razão, a linguagem de programação Java foi atualizada para reconhecer as exigências
conflitantes de desempenho otimizado e reprodutibilidade perfeita.
OPERADORES DE ATRIBUIÇÃO COMPOSTO.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
56
Os operadores de atribuição compostos permitem que os programadores preguiçosos economizem algum
trabalho de digitação. Na verdade, existem cerca de 11 operadores de atribuição composto, mas apenas os
4 mais comumente usados são:(+=, -= , *= , /= ).
Exemplo sem usar operador composto:
Exemplo usando operador composto:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
57
Nota: Importantelembrar que as duas atribuições mostradas dão no mesmo resultado que as duas
primeiras.
OPERADORES DE COMPARAÇÃO.
= = igual a.
! = diferente de.
Na linguagem Java são utilizados dois operadores de comparação (chamados também de operadores
de igualdade ou desigualdade) que compara dois itens semelhantes e retornam um valor booleano que
representa o que é verdadeiro sobre os dois itens serem iguais.
Exemplo utilizando o operador de igualdade:
Exemplo 01:
Exemplo utilizando o operador de diferente:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
58
Exemplo 02:
IGUALDADE DE TIPOS PRIMITIVOS.
A maioria dos programadores Java está familiarizada com a comparação de valores primitivos. Isso
porque cada comparação pode envolver dois valores números (incluindo o tipo char), dois valores
booleanos ou duas variáveis de referências de objetos. O que não pode ser comparado: não é possível
comparar tipos dados incompatíveis, por exemplo, se um tipo booleano é igual a um tipo char. Existem
quatro tipos de itens que podemos testar:
Números
Caracteres
Tipos booleanos primitivos
Variáveis de referências de objeto; porém é importante lembrar que o operador (==) examina o
valor da variável, ou seja, o padrão de bits.
IGUALDADE DE VARIÁVEIS DE REFERÊNCIAS.
As variáveis de referências podem ser testadas com o operador (==) para sabermos se estão referenciando
um objeto em comum. Mas é muito importante ressaltar que o mesmo operador estará examinando os bits
da variável, portanto com relação as variáveis de referências, se os bits das duas variáveis forem
idênticos, elas estarão referenciando (apontando) o mesmo objeto.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
59
Neste exemplo do código acima, foi criado três variáveis de referência a partir da classe Funcionário. As
duas primeiras f1 e f2 são objetos de Funci onário diferentes, que por acaso tem o mesmo valor inicial, a
terceira variável de referência f3, é inicializada para referenciar o mesmo objeto que a variável f1 está
referenciando. O operador == não testará se dois objetos são significativamente equivale ntes, isso porque
ele compara os bits das variáveis, então as referências de memórias das variáveis não soam iguais.
OPERADOR INSTANCEOF:
Permite-nos saber se um objeto pertence a uma classe ou não, ou seja, se o objeto passa no teste é-um.
Este operador é usado somente com variáveis de referências de objetos, e pode ser empregado para
verificar se um objeto é do tipo específico. Quando tratamos de tipos, queremos dizer tipo de interface ou
classe. Em outras palavras, se o objeto referenciado pela variáve l à esquerda do operador passaria no
teste é-um do tipo de interface ou classe do lado direito do operador.
Sintaxe do operador instanceof:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
60
Exemplo 01:
Exemplo 02:
Nota: Neste exemplo acontece um erro de compilação; isso porque a variável [ e ] é do tipo String e
não do tipo Funcionário, nesse caso as classes não participam da árvore de herança.
Exemplo 03:
OPERADOR CONCATENAÇÃO DE STRINGS:
O sinal de adição (+) também pode ser usado para concatenar duas strings. Se um dos valores for uma
String, o operador + atuará como um operador de concatenação de Strings. E se os dois valores forem
números, o operando + funcionará como o operador de adição.
Exemplo 01.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
61
Resultado do código acima, executado dentro de uma classe que possua o método main().
Exemplo 01. Resultado do código será mostrado ao lado, executado dentro de uma classe que possua o
método main().
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
62
4.13 Operadores aritméticos.
Eles podem ser usados da maneira padrão. Exemplos:
OPERADOR RESTO (%):
O operador resto da divisão divide o operando a esquerda pelo direito com o resultado sendo o resto dessa
divisão.
OPERADORES DE INCREMENTO E DECREMENTO:
São os operadores que nos permitem incrementar as variáveis em uma unidade. Podem ser usados diante
ou atrás da variável dependendo das necessidades, ou seja, se precisarmos que se incremente ou vice-
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
63
versa antes de utilizar ou o contrário.
Exemplo 01:
OBS:
R1 temos o resultado = 5, pois nesse caso, primeiro imprimimos o valor original da variável, logo em
seguida incrementamos o valor.
R2 temos o resultado = 6, pois nesse caso, mostramos a variável incrementada pelo comando interior,
porém nesse momento não alteramos o valor da variável.
R3 temos o resultado = 7, pois nesse caso, incrementamos primeiro a variável, depois mostramos a
variável incrementada.
Podemos ter um processo semelhando com o decremento. Exemplo 02:
OBS: A diferença que nesse caso podemos visualizar os resultados, 5,4 e 3;
Exercício resolvido
01 – Crie um programa em Java que decremente uma variável 4 vezes e mostre cada parte do calculo,
sendo que a variável se inicia com valor igual a 5.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
64
OPERADORES RELACIONAIS:
Os operadores de relacionais de comparação sempre resulta em um valor booleano (true ou false). Esse
valor booleano é usado com mais frequência em teste if. Java possui quatro operadores de comparação
que podem ser usados para comparar quaisquer valores inteiros, numéricos de pontos flutuantes ou
caracteres.
OPERADORES LÓGICOS.
Expressões lógicas são aquelas que realizam uma operação lógica (ou, e, não, etc...) e retorna
verdadeiro ou falso. A linguagem Java especificam seis operadores lógicos (! , & , | , ^ , && , || ).
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
65
OS OPERADORES BITWISE :
Os operadores (^ , & , | ) são chamados de operadores de Bitwise. Esses operadores comparam duas
variáveis bit por bit, e retornam uma variável cujos bits foram definidos com base em se as duas variáveis
sendo comparadas tinham bits correspondentes. Eles podem ser: ambos ligados (&), outro ligado (|), ou
exatamente um ligado (^).
OPERADORES LÓGICOS DE ABREVIAÇÃO:
O operador de abreviação (&&) consiste no fato de ele não perder seu tempo avaliações inúteis.O
operador de abreviação (&&) avaliará o lado esquerdo da operação (operando um) e se esse operando
tiver um resultado false, ele não examinará o lado direito da equação(operando dois),já que o operador
saberá que a expressão completa não será true.
AND abreviação (&&)
OR abreviação (||)
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
66
Exemplo:
OPERADORES LÓGICOS ^ E !:
O operador lógico ^ (ou exclusivo) avalia valores booleanos. O operador ^ relaciona-se com os
operadores de não-abreviação, no sentido de que sempre avalia ambos os valores, o do lado direito e o do
lado esquerdo, em uma expressão. Para uma expressão OU exclusivo (^) ser verdadeira, exatamenteum
operando precisa ser true. Exemplo.
^ OR exclusivo (xor)
! inversão boleana.
Exemplos:
Nota: A expressão acima avalia como false porque tanto o primeiro operando (2<3) quanto o segundo
(4>3) avaliam como true.
Exemplo 01:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
67
Exemplo 02:
OPERADORES CONDICIONAIS.
O operador condicional é um operador ternário tem três valores usado para avaliar expressões boleanas de
modo semelhante a instrução IF, exceto por em vez de executar um bloco de código se o resultado do
teste for true, atribuir um valor à variável. Ou seja, objetivo do operador condicional é decidir qual dos
valores atribuir a uma variável. Ele é constituído dos símbolos ? (ponto de interrogação) e : (dois pontos),
os parênteses são opcionais. Veja a sintaxe:
Exemplo 01:
Exemplo 02:
X = (expressão boleana) ? valor a atribuir se true : valor atribuir se false
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
68
Exemplo 03:
OPERADOR TERNÁRIO
Operador ternário ou operador condicional tem objetivo de atribuir um valor a uma variável de acordo
com o resultado de um teste lógico.
Vejamos a sintaxe:
Teste lógico (?) valor se for verdadeiro (:) valor se for falso.
O teste lógico é qualquer expressão que pode ser avaliado como verdadeiro ou falso
Exemplo 01:
PRECEDÊNCIA DE OPERADORES
A precedência serve para indicar a ordem na qual o compilador interpretará os diferentes tipos de
operadores, para que ele sempre tenha como saída um resultado coerente e não ambíguo.
ordem operador
1 () parênteses
2 ++ pós-incremento e - - pós-decremento
3 ++ pré-incremento e - - pré-decremento
4 ! negação lógica
5 * Multiplicação e / divisão
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
69
6 % Resto da divisão
7 + soma e - subtração
8 < menor que, <= menor igual, > maior que, >= maior igual
9 == igual e ! = não igual
10 & AND binário
11 | OU binário
12 ^ OU exclusivo binário
13 && AND lógico
14 || OU lógico
15 ?: condicional
16 = atribuição
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
70
5.0 Controle de fluxo em Java
As estruturas de controle definem a sequência de execução das instruções. Não é possível implementar
um algoritmo que não seja trivial em uma linguagem de programação que não tenha um conjunto mínimo
de estruturas de controle. As estruturas de controle podem ser divididas em seleção, repetição e
sequência. A sequência é simplesmente definida pela execução sequencial dos comandos, de cima para
baixo.
5.1 Utilizar código que use instruções if
A expressão entre parênteses deve ter como resultado um valor booleano true ou false. Normalmente
testará algo para saber se é verdadeiro, seguida executará um bloco de código (uma ou mais instruções) se
o resultado for mesmo verdadeiro e opcional outro bloco de código se não false. Sintaxe da declaração if:
Fluxograma da declaração if:
EXPRESSÕES VÁLIDAS PARA INSTRUÇÕES IF
Exemplo 01:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
71
Neste exemplo, ambas as instruções são avaliadas como verdadeira tanto a do lado direito quanto a do
lado esquerdo, pois, o valor da variável x for maior do que o valor da variável y, então o bloco de
instrução é executado, e a mensagem será impressa na saída padrão.
Exemplo 02:
Neste outro exemplo a instrução é avaliada como true, pois, o valor da variável teste é false, mas quando
o fluxo entra no if a variável teste recebe true, l ogo bloco de instrução será executado e resultando
impresso na saída padrão.
EXPRESSÕES VÁLIDAS PARA INSTRUÇÕES IF-ELSE
A declaração if-else é usada quando queremos executar determinado conjunto de instruções se a condição
for verdadeira e outro conjunto se a condição for falsa.
Sintaxe da declaração if-else:
Fluxograma da declaração if – else:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
72
Notas: Nestes exemplos a instrução do lado esquerdo é avaliada como verdadeira, pois, o valor da
variável x não é maior do que o valor da variável y e a instrução do lado direito também é avaliada como
verdadeira, pois a variável teste tinha valor inicial „false‟, mas dentro da instrução é atribuído um novo
valor igual a „true‟, logo bloco de instrução tanto da esquerda como o da direita serão executados, atribui
ndo um novo valor para a variável y igual a 25 imprimindo o valor de y na saída padrão.
Exemplo 01:
Notas: Nesses exemplos ambos os códigos do if serão avaliados como verdadeiros, então ele executa a
instrução imprimindo teste 1. Se a instrução if foss e falsa eles executariam imprimindo teste 2,mas no
nosso caso foram verdadeiras.
EXPRESSÕES VÁLIDAS PARA INSTRUÇÕES IF-ELSE-IF.
A declaração else pode conter outra estrutura if -else. Este cascateamento de estruturas permite ter
decisões lógicas muito mai s complexas.
A sintaxe da declaração if-else-if:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
73
Podemos ter várias estruturas else-if depois de uma declaração if. A estrutura else é opcional e pode ser
omitida. No exemplo mostrado acima, se a expressão_lógica1 é verdadeira, o programa executa a
instrução1 e salta as outras instruções. Caso contrário, se a expressão_lógica1 é falsa, o fluxo de controle
segue para a análise da expressão_lógica2. Se esta for verdadeira, o programa executa a instrução2 e salta
a instrução3. Caso contrário, se a expressão_ lógica2 é falsa, então a instrução3 é executada.
FLUXOGRAMA DA INSTRUÇÃO IF-ELSE-IF:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
74
Exemplo 01:
5.2 Expressões válidas para instruções switch e case.
Sintaxe da declaração switch:
Onde: variável_inteira é uma variável de tipo byte, short, char ou int. valor1, valor2, e assim por diante,
são valores constantes que esta variável pode assumir. Quando a declaração switch é encontrada, o fluxo
de controle avalia inicialmente a variável_inteira e segue para o case que possui o valor igual ao da variá
vel. O programa executa todas as instruções a partir deste ponto, mesmo as do próximo case, até
encontrar uma instrução break, que interromperá a execução do switch.
Se nenhum dos valores case for satisfeito, o bloco default será executado. Este é um bloco opcional. O
bloco default não é obrigatório na declaração switch.
Fluxograma da declaração switch:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
75
Exemplo 01:
Exemplo 02:
Solução Incorreta.
As constantes CASE são avaliadas de cima para baixo, e a primeira constante CASE
que bater com a expressão SWITCH será o ponto de entrada da execução.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
76
Solução Correta:
Este exemplo é perfeitamente válido para a declaração switch -case, porque mesmo a variável sendo do
tipo String, porém quando entrar na instruçãoswitch, o método invocado pela variável s.length que
retornará um valor inteiro, ou seja o tamanho da string, que no nosso caso é igual a 7.
Exemplo 03:
No exemplo acima, quando fornecido argumento, a aplicação identifica se o primeiro caractere deste é
uma vogal. Se o argumento não for iniciado por uma vogal ocorre à execução da seção default da diretiva
switch. Caso não exista argumentos fornecido o programa imprime uma mensagem correspondente.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
77
5.3 Loops e iteradores (usando os loops for, while e do while).
Os comandos de repetição, ou de iteração, executam um comando ou um bloco de comandos várias
vezes. É uma das formas para executar repetidamente um comando.
A outra é a recursão que é a chamada direta ou indireta de um método durante a execução do próprio
método. Em Java existem três formas de comandos de repetição: o while; o do-while; e o for.
Sintaxe: loop while Fluxograma: loop while
A declaração while executa repetidas vezes um bloco de instruções enquanto uma determinada condição
lógica for verdadeira.
Exemplo 01:
Como em todos os loops a expressão (teste) terá que resultar em um valor booleano. O corpo de loop
while só será executado se a expressão (também conhecida como condição) resultar em um valor true
(verdadeiro ). Uma vez que entramos no loop, seu conteúdo será repetido até que a condição não possa
mais ser atendida e seja avaliada como false (falsa), encerrando o loop.
Exemplo 02:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
78
Neste exemplo a variável x é inicializada com 0 ao entrar no loop a condição é verificada como sendo
verdadeira, isso porque 0 é menor do que 5,então o bloco de código é executado, imprimindo na tela a
string x e o valor da variável x que no caso é 0,depois a execução do código passa para a próxima linha
que é o incremento da variável x, passando a valer 1. Agora a execução volta ao inicio do loop para
verificar novamente a condição e assim por diante até que a condição seja avaliada como falsa.
LOOP DO WHILE:
A declaração do-while é similar ao while. As instruções dentro do laço do -while serão executadas pelo
menos uma vez. Inicialmente, as instruções dentro do laço do - while são executadas. Então, a condição
na expressão lógica é avaliada. Se for verdadeira, as instruções dentro do laço do-while serão executadas
novamente.
Exemplo 01:
Neste exemplo a variável x é inicializada com 0, o bloco de código é executado pelo menos uma vez
antes que a condição seja verificada. Após a condição ser avaliada como verdadeira, a variável será
incrementada em 1 e a execução do código volta para o inicio do bloco e isso se repetirá até que a
condição seja avaliada como falsa.
LOOP FOR:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
79
A declaração for, como nas declarações anteriores, permite a execução do mesmo bloco de código uma
quantidade determinada de vezes.
Sintaxe: do loop for:
Fluxograma: loop For.
Exemplo 01:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
80
5.4 Loop for aprimorado (para arrays).
O comando FOREACH é utilizado quando você quantas vezes precisa fazer a interação. Ele é composto
por três expressões, sendo elas: a) Declaração e inicialização, b) Expressão condicional e c) Expressão de
interação. Exemplo 01:
Exemplo 02:
Nota: A saída dos exemplos anteriores, depois de compilado e executado, deverá ser uma exibição dos
números inteiros do arranjo com nome “semana”. Esta estrutura otimiza a interação no arranjo ou coleção
passada para a expressão podendo ser efetuada a navegação sem a necessidade de ín dices ou interadores.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
81
5.5 Uso de break, continue e return.
BREAK:
A instrução break fará com que o programa encerre a execução do loop atual e inicie o processamento na
linha de código posterior ao bloco.,isso porque este comando serve para interromper a sequência de
execução dos comando e sair do comando switch. Isto não acontece apenas no comando switch. Toda vez
que um break é encontrado, o fluxo de execução “salta” para fora do bloco onde está contido o break,
sendo retomado no comando após o bloco.
É a declaração de desvio usada para sair de um laço antes do normal. O tipo determina para onde é
transferido o controle. O break transfere o controle para o final de uma construção de laço (for, do, while
ou switch). O laço vai encerrar independentemente de seu valor de comparação e a declaração após o laço
será executada. Exemplo:
Nota: Vamos analisar este exemplo acima que tem como resultado a impressão de todos os números cuja
o módulo da divisão por 10 seja igual a 0. Daí o resultado é o mostrado abaixo:
[ i = 100, i = 90, i= 80, i = 70, i= 60, i = 50, i = 40, i= 30, i = 20, i = 10 ]
Exemplo 02:
Agora vamos analisar o exemplo 02, que mostra o mesmo programa com uma pequena diferença que é a
inclusão do comando break depois do comando System.out.println();
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
82
Nota: Depois de analisarmos chegamos a seguinte conclusão: Este comando interrompe a execução do
loop satisfazendo a condição no bloco if. Então o resultado é a impressão de apenas o primeiro que
satisfaz a condição,que no nosso caso é o 100.
[ i = 100]
Continue:
A instrução continue fará com que somente a iteração atual do loop seja encerrada e que a próxima
iteração do mesmo loop seja iniciada deste que for atendida. Quando usar uma instrução continue em um
loop for, você terá que considerar seus efeitos na iteração do loop. A declaração continue faz com que a
execução do programa volte imediatamente para o início do laço, porém para a próxima interação. O
continue faz o interpretador pular para a próxima iteração e obriga -o a testar a condição. Exemplo:
A pergunta é: Esse é um loop infinito? A resposta é não. Quando a instrução continue for atingida, a
expressão de iteração ainda será executada! Ela será exatamente como se a iteração atual terminasse de
maneira natural. Portanto, no exemplo anterior, ainda aumentará o valor antes da condição (i < 10) ser
verificada novamente. Mas geralmente a instrução continue é usada dentro de um teste if como segue
abaixo:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
83
Nota: Estes dois comandos também podem ser usados como instruções rotuladas. As instruções rotuladas
estão além do escopo do nosso curso, mas, embora muitas instruções em Java possam ser rotuladas, é
mais comum usar rótulos com instruções loop tais como for e while, em conjunto com instruções break
e continue. Uma instrução de rótulo deve ser colocada antes da instrução sendo rotulada, e consiste de um
identificador válido que termina com dois pontos (:). As instruções rotuladas serão necessárias somente
nas situações em que você tiver um loop aninhado e precisa indicar qual quer encerrar ou a partir do qual
deseja continuar a próxima iteração.
Return:
A declaração return é utilizada para sair de um método. O fluxo de controle retorna para a declaração que
segue a chamada do método original. A declaração deretorno possui dois modos: o que retorna um valor
e o que não retorna nada.
Exemplo:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
84
6.0 Tipos de Variáveis, Constantes e Casting
6.1 O que é uma variável:
Variável: É um espaço na memória usado para
armazenar o estado de um objeto. Uma variável d eve ter um nome e um
tipo. O tipo da variável indica o tipo de dado que ela pode conter. O nome
das variáveis deve seguir as mesmas regras de nomenclatura que os
identificadores.
TIPOS DE VARIÁVEIS:
Variáveis de instância: Estas variáveis são não estáticas, ou seja, declaradas sem o modificador static.
Variáveis de instância são assim chamadas porque seus valores são únicos para cada instância da classe.
Assim, as variáveis podem armazenar valores diferentes para cada cópia de objetos da classe.
Variáveis de classes: Estas variáveis são declaradas com o modificador static. Isso informa ao
compilador que há exatamente uma única cópia desta variável, independente do número de instâncias da
classe.
Variáveis locais: São usadas para armazenar o estado temporário de um método. Variáveis locais são
acessíveis somente dentro do método em que são declaradas, e automaticamente abandonadas na saída do
método.
Parâmetros: São os parâmetros de métodos. Tais variáveis são acessíveis somente ao código no corpo do
método.
Exemplo de variáveis locais:
Na linguagem de programação Java não é permitido o uso de variáveis indefinidas. Variáveis
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
85
definidas dentro do método são chamadas de variáveis locais, temporárias ou estáticas e devem ser
inicializadas antes do uso. Vejamos a tabela abaixo com os seguintes valores iniciais.
Exemplo 02:
Atribuir um valor a uma variável parece bem simples; simplesmente insira o valor á direita do sinal (=)
para atribuí-lo á variável que estará à esquerda.
6.2 Variáveis estáticas:
É um membro que pertence a classe, uma variável estática é compartilhada por todas as instâncias de
classe, por que isto é apenas uma cópia da variável estática é mantida e somente a própria classe é
suficiente para acessar a variável marcada como estática.
Exemplo 01:
Exemplo 02:
Exemplo 03:
Neste exemplo vamos mostrar através de um programa como usar as variáveis estáticas.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
86
6.3 Constantes
O valor de uma variável pode ser alterado durante a execução do programa. Mas, o valor de uma
constante não é alterado jamais. Por padrão, recomendamos que criem constantes sempre com letras
maiúsculas por seguirem as normas da SUN, as constantes trazem algumas vantagens, entre elas o fato de
que nomes descritivos para constantes podem tornar o programa mais fácil de ser lido.
Sintaxe:
Exemplo 01:
final static tipo_de_dado IDENTIFICADOR = valor;
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
87
6.4 Conversão ou Cast (explícita e implícita das variáveis de tipos
primitivos).
A conversão permitirá que sejam transformados valores primitivos de um tipo em outro. As conversões
podem ser implícitas ou explícitas das variáveis de tipos primitivos. Uma conversão implícita ocorre
quando fazemos uma transformação que envolve ampliação. Em outras palavras, quando inserimos um
item menor (exemplo, um tipo byte) em um container maior (como um tipo int). A transformação valor
maior em um container menor é conhecida como compactação e requer uma conversão explícita, em que
será informado ao compilador que conhece o perigo e aceita toda a responsabilidade. O Jav a converte
automaticamente valores de um tipo numérico para outro tipo maior. Vejamos algumas conversões
válidas em Java.
Utilizamos o casting para converter um objeto ou uma variável de um tipo primitivo para outra de um
tipo também primitivo. Podemos co nverter um double em um int, ou uma subclasse em uma superclasse.
A regra fundamental para o cast é: o casting não modifica o objeto ou valor que está sendo moldado;
porém, o receptor do cast constitui um novo objeto ou um novo tipo. O casting de dados primitivos ocorre
com bastante frequência. A maneira pelo qual o casting age depende da precisão dos dados envolvidos.
Por sua vez, a precisão depende da quantidade de informações que um tipo pode conter; assim, um tipo
de ponto flutuante double tem maior precisão que um float, pois o primeiro é um tipo de 64 bits e o
segundo, de 32 bits.
Um byte pode ser convertido em um short, int, long, float ou double
Um short pode ser convertido em um int, long, float ou double
Um char pode ser convertido em um int, long, float ou double
Um int pode ser convertido em um long, float ou double
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
88
Um long pode ser convertido em um float ou double
Um float pode ser convertido em um double
Sempre que houver uma transferência de dados de um tipo menos preciso para um mais preciso, o casting
explícito não é obrigatório.
REGRAS PARA CASTING:
Já a transferência de dados de um tipo mais preciso para um menos preciso requer um casting explícito.
Isso ocorre porque pode haver perda de dados durante a moldagem. Java pretende alertar o programador
do possível perigo de uma conversão desse tipo:
Exemplo 01:
Exemplo 02:
Exemplo 03:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
89
Exemplo 04:
Exemplo 05:
O Java não faz automaticamente o “downcast”.
O casting entre objetos requer um pouco mais de cuidado. Veremos no decorrer da apostila como fazer o
casting de objetos.
6.5 Atribuindo uma variável de referência à outra.
As variáveis de referências são usadas para se referir (ou acessar) um objeto. Uma variável de referência
é declarada como sendo de um tipo específico, e esse tipo não pode nunca ser modificado. Uma variável
de pode ser usada para referir -se a qualquer objeto do tipo declarado, ou de um subtipo do tipo declarado
(um compatível). Variáveis de referência podem ser
declaradas como variáveis estáticas, variáveis de instâncias, parâmetros de métodos ou variáveis locais.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
90
ESCOPO DE VARIÁVEIS.
Depois que declarou e inicializou uma variável, uma questão natural e muito importante é por quanto
tempo essa variável vai existir? Essa é uma pergunta que se refere ao escopo das variáveis em Java. O
escopo define onde uma variável é acessível durante a execução de um programa e quando a variável é
criada e destruída. A localização de uma variável dentro do programa estabelece seu escopo. Existem
quatro categorias de escopo de variáveis na linguagem Java, são elas:
Variáveis de instâncias de tipos primitivos.
As variáveis de instâncias são definidas dentro da classe, mas fora de qualquer método, e só são
inicializadas quando a classe é instanciada. As variáveis de instâncias são os campos que pertencem a
cada objeto único.
Exemplos:
Ou,
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
91
7.0 POO com Java
7.1 Introdução
Programação Orientadaa Objetos se constitui em um conjunto de regras de programação. Estudamos
anteriormente como programar de forma estruturada, iniciávamos a execução do código e finalizando
todos os processos na mesma classe. Porém sem saber estávamos usando algumas regras de POO
(Programação Orientada a Objetos) como, por exemplo, usando a classe “System” ou “JOptionPane”.
Essas classes não foram criadas por nós, porém elas foram reaproveitadas em nosso código com objetivo
de resolver os nossos algoritmos. Vamos fazer uma comparação com o dia - a - dia para entendermos
melhor.
Imagine que você trabalha com digitação de textos. Você não precisa saber como o computador foi
criado, nem como o Software que usa para digitar o texto foi desenvolvido. O seu objetivo é usar desses
recursos e criar um novo produto final. Um relatório de texto.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
92
A Programação orientada a objeto é uma metodologia que os programadores utilizam com objetivo de
atingir alguns requisitos importantes na construção de um bom programa como:
Organizar o código: Com o nosso código dividido, podemos facilmente dar manutenção ou
encontrar algum erro mais fa cilidade.
Reutilização do código: Não precisamos reescrever todo o código, quando necessitamos dele
novamente.
Manter Padrões: Utilização de um mesmo padrão conceitual durante todo o processo de criação
do código.
Até o final do curso iremos aprender e tra balhar nessa metodologia. Então, bastante atenção nesse e nos
próximos capítulos.
Classe, Atributos e Métodos.
Como estamos trabalhando com POO (Programação Orientada a Objetos), o nosso objetivo final é
construir um Objeto que tenha suas características. Um Objeto é criado a partir de uma “Classe”. Ela irá
servir como modelo para criação do Objeto. Vamos fazer uma comparação com o dia- a -dia para
entendermos melhor.
Iremos aprender como criar uma “Classe”, ou seja, referencia para futuros “Objetos”. Imagine que
queremos criar um “Pessoa”. Para poder criar uma “Pessoa” teremos antes que responder duas perguntas
básicas.
Um prédio não é construído de qualquer forma, o pedreiro irá construir o prédio de acordo
com as instruções da planta. Tamanho do banheiro, quantos quartos, porta de entrada. A
planta do prédio seria uma “Classe” ele serve como referencia na construção do prédio que é
um “Objeto”.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
93
Anote tudo que uma pessoa pode ter, como nome, data de nascimento, RG, CPF, etc . Para a
resposta da primeira pergunta, nós temos o que chamamos de “ Atributos da classe Pessoa”
Anote Tudo que uma pessoa pode fazer, ou seja, suas ações, como acordar, dormir, falar o seu
nome, etc. Para a resposta da segunda pergunta nós temos o que chamamos de “Métodos da classe
Pessoa”
Com o conceito de Classe, atributos e métodos. Podemos agora criar uma classe em código Java, veja no
próximo tópico como iremos criá-la.
7.2 Construindo uma Classe.
Para criar uma classe, clicaremos com o botão direito do mouse no pacote do Projeto > novo > Classe
Java.
Agora construímos a nossa classe, mas o que significa este “public” antes dos atributos e métodos e o que
O que poderei
ter? O que poderei
fazer?
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
94
significa o “void”? Para entender melhor, temos que aprender sobre “Encapsulamento” e “tipo de retorno
de dados”. Assunto que iremos ver no próximo tópico.
7.3 Encapsulamento.
Encapsulamento é uma forma de proteção do nosso código, existem informações que queremos que
outras classes vejam e outras não. Imagine a sua conta de e-mail. A conta do seu usuário poderá ser vista
por outras pessoas, pois ele irá identificar o seu e-mail dos demais, porém a sua senha é algo “privado”
onde só você poderá ter acesso a ela. Da mesma forma que queremos mostrar ou proteger os nossos
dados, uma classe também tem as mesmas necessidades e podemos defini-las através do encapsulamento.
public - ou publico, qualquer classe pode ter acesso)
private - ou privado, apenas os métodos da própria classe pode manipular o atributo)
protected - ou protegido, pode ser acessado apenas pela própria classe ou pelas suas subclasses).
Assim podemos alterar o “public” da nossa classe por outro valor de encapsulamento, dependendo da
necessidade de proteção dos nossos atributos ou métodos. Por boas práticas de programação, os atrib utos
da nossa classe Pessoa estarão como “private”.
7.4 Retorno
Os métodos podem realizar uma ação interna e podem influenciar em outros métodos através do seu
Retorno. Ele pode representar os tipos primitivos de dados que conhecemos como: int, string, double,
float, chat, boolean por exemplo, ou pode retornar vazio, simbolizado por “void”. Os métodos que tiver
retorno deverá ter dentro do seu corpo um “return” que irá representar o resultado final da minha
operação.
Veja o exemplo abaixo:
Neste exemplo alteramos o método “falarNome” da classe pessoa. O tipo de retorno desse método é
String. Então além da classe imprimir a frase, ele deverá guardar a String em uma variável chamada
“minhaFrase” e retornar ela para ser usada em outras classes na linha 23.
Construtores, métodos seteres e geteres
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
95
CONSTRUTORES
São métodos especiais, que são acionados no momento da construção da classe, ela deverá ter o mesmo
nome da Classe criada. Imagine que para que uma pessoa possa existir, ele precise inicialmente de um
nome e data de nascimento. Então podemos construir o nosso construtor da seguinte forma:
Nesse código o nosso construtor é responsável por alimentar os atributos nome e data de nascimento da
pessoa. também garantimos que ao momento da construção do objeto, uma “Pessoa” não poderá existir se
não tiver um nome e uma data de nascimento.
Mas como eu poderei alterar o meu CPF, RG, e como poderei mostrar esses valores de atributos? Assunto
que veremos no próximo tópico.
MÉTODOS SETERES E GETERES
Os métodos nomeados como “set” e “get” são responsáveis respectivamente por alterar um atributo e
mostrar um atributo da minha classe. Para que o NetBeans possa gerar esse código, iremos digitar: ALT+
INSERT > INSERIR CÓDIGO e marcar os atributos, “nome”, “cpf”, “rg”.
Como eu poderei usar o meu construtor, meus métodos do tipo “set” e “get”?
Este assunto veremos no próximo tópico.
7.5 Estanciando (Construindo um Objeto)
Agora estamos prontos para construir o nosso objeto usando a nossa classe “Pessoa” como referencia.
Então, iremos voltar à classe que tenha o método main e realizar a seguinte operação:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
96
Agora estou estanciando o meu objeto e de acordo com meu construtor, eu preciso obrigatoriamente de
um nome = “Fabrício” e uma data de nascimento = “17/02/87” todos eles do tipo String. Vamos agora
usar os métodos da nossa classe criada.
Dessa forma podemos modificar e acessar qualquer variável dependendo das nossas necessidades. Todas
as informações do “Fabrício” estão dentro de uma variável do tipo “Pessoa” chamada de “x”. Se eu quiser
criar uma nova pessoa, posso chamá -la de qualquer outro valor.
7.6 Variáveis Estáticas
Variáveis estáticas são valores que se for alterado em um objeto de uma determinada classe todos os
objetos da estanciadosda mesma classe, automaticamente terá o mesmo valor Ele normalmente é usado
quando todas as classes tem algo em comum. Imagine a seguinte situação.
A Classe “Pessoa” terá um atributo chamado: ondeVivo = “Planeta Terra”
Todas as pessoas moram em um planeta que conhecemos por “Planeta Terra”. Porém pesquisas mais
recentes mostram que o nome do nosso planeta deveria ser chamado de “Planeta Água”, pois nele
encontra-se mais água do que a terra.
Se tivermos 300 objetos estanciados do tipo pessoa, como alterar ondeVivo = “Planeta Água” em todos
os objetos em uma única instrução sem precisar percorrer todos eles?
Basta criar uma variável estática no atributo “ondeVivo”, assim se alteramos em 1 dos objetos essa
variável, todas elas sofrerão a mesma alteração. Veja como criá -lo:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
97
Concluímos então que as variáveis estáticas não pertencem especificamente a nenhuma instancia de
objeto e sim uma referencia da classe. O que explica a substituição do termo “this” para o nome da classe
que contém a variável estática, no exemplo acima alteramos o termo “this” no método setOndeVivo pelo
nome da classe que contém a variável estática (Pessoa).
7.7 Métodos Estáticos
Os Métodos Estáticos se caracterizam por ser um referencia de método da Classe, sem a necessidade de
instanciarmos um objeto para utilizá -lo. Se quisermos, por exemplo, alertar ou mostrar o habitat das
pessoas sem precisar construir um objeto, podemos realizar essa ação apenas adicionando a palavra
reservada static nos métodos, dessa forma:
Obs.: Métodos estáticos aceitam apenas variáveis estáticas.
Para que possamos utilizar os métodos estáticos precisamos inserir o nome da classe com o método
estático criado.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
98
8.0 Herança e Interface
8.1 Introdução
Estudamos como estruturar as nossas classes, agora precisamos gerar uma interação entre classes criadas.
Para isso no conceito de POO também temos que saber Interface e herança. Iremos aprender cada uma
delas, seu conceito e como implementá-las.
8.2 Herança
É fundamental para Java e outras linguagens de programação orientadas a objetos, o conceito de
herança, que permite ao código definido em uma classe ser reutilizado em outras classes.
Sintaxe de herança em Java:
Em Java, pode ser definida uma superclasse geral (mais abstrata), e depois estendê-la com
subclasses mais específicas. A superclasse não sabe nada sobre as classes que herdam dela, mas todas as
subclasses precisam declarar explicitamente a relação de herança. Uma superclasse recebe
automaticamente as variáveis de instâncias acessíveis e os métodos definidos pela superclasse, mas é
class NomeDaClasseASerCriada extends NomeDaClasseASerHerdada
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
99
também livre para substituir métodos da superclasse para definir comportamento mais específico. Os
objetos de uma mesma classe podem tirar proveito de relações de herança, onde objetos recém-criados
absorvem características de outros já existentes e adicionam -se novas características.
8.3 Object: A superclasse cósmica do Java
A class Object: A classe Object é o último ancestral – toda classe em Java estende de Object.
Entretanto, nunca será preciso gerar sua herança diretamente:
A superclasse terminal Object é automaticamente inclusa se nenhuma superclasse for mencionada
explicitamente. Pelo fato de todas as classes em Java estenderem Object, é importante familiarizar -
se com os serviços fornecidos pela classe Object. Remeteremos ao leitor a pesquisarem em artigos na
internet ou até mesmo ver a documentação on-line que lista os vários métodos da classe Object, mas que
só aparecem quando lidamos com threads (linhas de execução). Você pode usar variáveis do tipo Object
para referir-se a objetos de qualquer tipo.
É claro que uma variável do tipo Object somente será útil como um marcador genérico para valores
arbitrários. Para fazer qualquer coisa específica com o valor, você precisa ter algum conhecimento sobre
o tipo original e, então, aplicar uma conversão: Em Java, somente os tipos primitivos (números,
caracteres e valores lógicos) não são objetos. Todos os tipos de arrays, independentemente de serem
arrays de objetos ou arrays de tipos primitivos, são tipos de classes que estendem a classe Object.
Super: A palavra super seguida imediatamente de parênteses chama o construtor da superclasse de
mesma assinatura, deve ser a primeira instrução dentro de um construtor da subclasse.
Super-classe: É uma classe da qual se herda outras classes. A cláusula opcional estende em uma
declaração de classe especifica a superclasse diretamente da classe atual. Uma classe é dito ser uma
subclasse direta da classe, que se estende. A superclasse direta é a classe a partir de cuja aplicação à
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
100
implementação da classe atual é derivada. A cláusula extends não deve aparecer na definição da classe
java.lang.Object,pois é primordial a classe e não tem nenhuma superclasse direta. Se a declaração de
classe para qualquer outra classe não tem nenhuma cláusula extends, então a classe tem a classe
java.lang.Object como implícita superclasse direta.
Sub-classes: É uma classe que herda de uma classe ou de uma interface. Uma subclasse herda estado e
comportamento de todos os seus antepassados. A superclasse o termo refere-se ancestral direto de uma
classe, assim como todas as suas classes ascendentes. Essa hierarquia de classes segue uma apresentação
na forma de árvore, em que a raiz é a superclasse de todo o sistema. Cada nível abaixo dessa superclasse
do sistema acrescenta funções específicas.
Exemplo 01: Neste exemplo vamos mostrar como proceder com esse poderoso recurso do Java o qual
chamamos de herança simples.
Código da superclasse Conta.
Código da subclasse CPoupanca que estende da superclasse Conta.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
101
Código da subclasse CEspecial que estende da superclasse Conta.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
102
Diagrama de classes representando a herança entre as classes citadas acima.
Nota: Java permite que uma classe herde apenas as características de uma única classe, ou seja, não
pode haver heranças múltiplas. Porém, é permitido heranças em cadeias, por exemplo: se a classe
Mamífero herda a classe Animal, quando fizermos a classe Cachorro herdar a classe Mamífero, a classe
Cachorro também herdará as características da classe Animal.
Como estamos tratando de herança de classes, toda classe tem seu método construtor. Portanto, se
estamos trabalhando com duas classes, temos dois métodos construtores. Para acessarmos o método
construtor da classe que está sendo herdada usamos o super().
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
103
Exemplo 02:
Para demonstrar como definir o relacionamento de herança, considera-se o contexto de ter que
desenvolver um programa que simule o comportamento de vários tipos de animais como mostrado na
figura aolado em um determinado ambiente.
Inicialmente, apenas um grupo de animais estará presente neste ambiente e cada animal deve ser
representado por um objeto. Além disso, os animais movem -se no ambiente ao seu modo e podem fazer
um conjunto de coisas. O programa deverá prever que novos tipos de animais poderão ser incluídos no
ambiente.
O primeiro passo é observar cada animal e definir o que cada objeto do tipo animal tem em comum no
que diz respeito aos atributos e comportamentos (métodos). Deve-se definir também como os tipos de
animais se relacionam. Inicialmente, o programa deve simular o comportamento dos animais ilustrados
na fi gura, ou seja, de um leão, de um lobo, de um gato, de um hipopótamo, de um tigre e de um cachorro.
O segundo passo consiste em projetar a superclasse, ou seja, a classe que representa o estado e o
comportamento em comum a todos os animais. Para este exemplo, como todos os objetos são animais, a
superclasse foi denominada como Animal e as variáveis e métodos em comuns a todos os animais foram
atribuídos a ela, como ilustrado na Figura. Neste exemplo, cinco variáveis foram definidas: (o tipo de
comida que o animal come), (o nível de fome do animal), (representação da altura e largura do espaço
que o animal vagará ao seu redor) e (as coordenadas X e Y do animal no espaço). Além disso, quatro
métodos foram definidos para definir o comportamento dos animais: (comportamento do animal ao fazer
algum ruído), (comportamento 57 do animal ao comer), (comportamento do animal dormindo) e
(comportamento do animal quando não está nem dormindo nem comendo, provavelmente vagueando no
ambiente).
O terceiro passo é o de decidir se alguma subclasse precisa de comportamentos (métodos) específicos ao
seu tipo de subclasse. Analisando a classe Animal, pode -se extrair que os métodos devem ter
implementações diferentes em cada classe de animais, afinal, cada tipo de animal tem comportamento
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
104
distinto ao comer e fazer ruídos. Assim, esses métodos da superclasse devem ser sobrescritos nas
subclasses, ou seja, redefinidos. Os métodos não foram escolhidos para serem redefinidos por achar que
esses comportamentos podem ser generalizados a todos os tipos de animais.
CONSTRUTORES DA SUBCLASSE
Os construtores da superclasse não são herdados pela subclasse, logo, esta deverá ter seus próprios
construtores para inicializar seus atributos. Todavia, ao instanciar um objeto da subclasse, devemos
inicializar aqueles atributos que ela está herdando, e o fazemos chamando algum construtor da
superclasse, usando a chamada super(...).
8.3.1 Classe Abstrata
Para entender o conceito de herança, precisamos primeiro entender No Português, a palavra “Abstrata”
refere-se a algo que não existe fisicamente, então se convertermos essa expressão em Java podemos dizer
que Classe Abstrata é uma classe que não pode ser um Objeto. Assim ela precisará ser herdada ou
implementada, no próximo tópico iremos ver como funciona em um exemplo de código.
Imagine que você tenha uma classe Carros que tenha métodos genéricos comuns a todos os veículos. Mas
você não quer que alguém de fato crie um objeto carro genérico, abstrato. Como se inicializaria o seu
estado? De que cor ele seria? Quantos assentos? Ou, mais importante, de que forma ele se comportaria?
Em outras palavras, como os métodos seriam implementados? Temos certeza de que o dono de uma
BMW lhe diria que o carro dele é capaz de fazer coisas que o GOL apenas sonha em fazer.
A implementação pode ser dessa forma mostrada acima, como também pode ser como segue no exemplo
abaixo:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
105
Dessa forma podemos dizer que “MeuCarro” que poderá ser um Objeto, herda de “Carro” que é uma
classe abstrata.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
106
Na Classe que contém o método Main, nós temos:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
107
8.4 Interface
Interface é uma espécie de superclasse 100% abstrata que define os métodos que uma subclasse deve
suportar, mas não como esse suporte deve ser implementado. Isso porque ao criar uma interface, estará
definindo um contrato com o que a classe pode fazer, sem mencionar nada sobre como o fará. Uma
interface é um contrato. Qualquer tipo de classe (concreta) e de qualquer árvore de herança pode
implementar uma interface.
Exemplo 01:
Exemplo 02:
Exemplo 03:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
108
Regras para as interfaces:
Uma interface em Java é uma coleção de métodos abstratos que pode ser implementada por
uma classe.
Uma interface na pode implementar outra interface ou classe.
Os tipos de interface podem ser usados polimorficamente
Os métodos de uma interface não devem ser estáticos.
Uma interface deve ser declarada com a palavra -chave interface.
Todos os métodos de uma interface são implicitamente public e abstract. As interfaces só podem
ser declaradas. Uma interface pode estender uma ou mais interfaces diferentes.
Todas as variáveis definidas em uma interface devem ser public, static e final.
As interfaces só podem ser declarar constantes e não variáveis de instância.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
109
9.0 Herança (Polimorfismo)
9.1 Introdução
Neste capitulo veremos como funciona a interação com classes em Polimorfismo. Usamos esse recurso
quando queremos modificar métodos herdados para isso temos que aprender o conceito e prática de
sobrecarga e sobrescrita. Veremos estes assuntos no próximo tópico.
Sobrecarga
Usamos sobrecarregar de métodos quando temos um determinado método com o mesmo nome, porém
com assinaturas diferentes, sou seja, parâmetros diferentes, dessa forma quando usamos um determinado
método com sobrecarga podemos escolher qual método sobrecarregado será usado de acordo com o nú
mero e tipo de dados dos parâmetros oferecidos. Veja um exemplo abaixo:
Na Classe animal criamos dois métodos chamados comer, o método que não contém nenhum parâmetro,
o animal apenas mostra a ação de comer, estado da carne. O nosso segundo método, também se chama
comer, porém ele tem um assinatura diferente, ele recebe como parâmetro um valor boleano que se refere
ao estado da carne, dessa forma o animal pode simplesmente comer ou verificar o tipo de alimento antes
de se alimentar.
9.2 SobreEscrita
Usamos sobrescrita de métodos quando temos que modificar um método herdado da classe pai, para
sobrescrever os métodos teremos que criar o mesmo método herdado na classe filha com o nome
assinaturas igual. Levando em consideração a classe Animal criada no tópico anterior, veja no exemplo
abaixo
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
110
No exemplo anterior, o cachorro já herda o método comer, porém o animal come qualquer alimento, este
nosso cachorro não comer qualquer alimento, ele só come ração. O termo “@Override” no exemplo, não
é obrigatório, apenas para avisar a IDE que este é um método de sobrescrita.
Polimorfismo
Podemos dizer que polimorfismoé quanto temos métodos de sobrescritas distintos entre classes filhas
que referencia um mesmo Pai.
Veja o exemplo abaixo.
Note as roupas que eles usam. A pessoa por padrão tem um estilo de roupa, porém dependendo da
situação, temos que usar roupas específicas para cada situação. Um professor também é uma pessoa,
porém do tipo “Professor” e ele precisa de um tipo específico de uniforme para dar suas aulas. O aluno
também é uma Pessoa, porém ele precisa de um fardamento adequado para assistir as aulas. Assim nós
temos a classe “Professor” e “Aluno” herdando de “Pessoa” Porém cada uma delas tem métodos
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
111
diferentes quando nos referimos como eles se vestem. Vamos ver como ficaria em código Java o nosso
Polimorfismo.
Classe Pai:
Classe Filha de "Pessoa" que sobrescreve método vestirRoupa.
Classe Filha de "Pessoa" que sobrescreve método vestirRoupa.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
112
10.0 Tratamento de Exceções
10.1 Capturando uma exceção usando o bloco (try e catch)
A linguagem Java fornece aos desenvolvedores um mecanismo sofisticado para manipulação de erros que
produz códigos de manipulação eficientes e organizados: a manipulação de exceções. A manipulação de
exceções permite que os desenvolvedores detectem erros facilmente sem escrever um código especial
para testar valores retornados. Permite também manter o código de manipulação de exceções nitidamente
separado do código que gerará a exceção. Além disso, permite que o mesmo código de manipulação de
exceções lide com as diferentes exceções possíveis.
A classe Throwable é a única classe cujas instâncias diretas ou indiretas podem ser usadas para serem
lançadas. A classe Throwable é pré -definida na linguagem Java, juntamente com várias outras classes
definindo um grande número de categorias de erro. Os programadores Java, por convenção, caso
queiram criar novas exceções devem estender a classe Exception que é uma subclasse de Throwable.
Duas classes descendentes da classe Throwable podem ser consideradas especiais: a classe Error e a
classe RuntimeException.
A linguagem Java não obriga o programador a tratar os lançamentos de exceção envolvendo instâncias da
classe Error, da classe RuntimeException e das classes delas derivadas, todos os outros lançamentos de
exceção devem ser tratados pelo programador. Capturando uma exceção com o bloco try e catch.
Vejamos a sintaxe.
O termo exceções significa „‟condição excepcional‟‟, e é uma ocorrência que altera o fluxo normal
do programa. Várias coisas podem levar a exceções, incluindo falhas do hardware, exaustão de recurso e
os famosos erros. Quando isso acontece, ou seja quando ocorre um evento excepcional ocorre em
Java, diz se que uma exceção será lançada.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
113
Exemplo 01:
Nota: O método calc se for chamado com y igual zero (0), gerará um erro e uma exceção será lançada,
esse erro poderá ser sinalizado no bloco try-catch, então a execução do método pulará para o bloco de
código catch, onde será impressa uma mensagem de erro.
Exemplo 02:
Caso 01: Neste exemplo vamos chamar o método converteStr(), passando uma string numérica, que no
nosso caso é 8 e o resultado é a conversão da string em um número de ponto flutuante, daí a divisão é
feita e a execução do programa acontece sem nenhum problema.
Caso 02: Neste mesmo exemplo vamos chamar agora o método converteStr(), passando uma string não
numérica, que no nosso caso é a caractere 'n' e o resultado é o lançamento de uma exceção, jogando o
fluxo de execução do programa para o bloco catch, onde imprime uma mensagem na no console.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
114
FINALLY
Finally: É o trecho de código final. A função básica de finally é sempre executar seu bloco de dados
mesmo que uma exceção seja lançada. É muito útil para liberar recursos do sistema quando utilizamos,
por exemplo, conexões de banco de dados e abertura de buffer para leitura ou escrita de arquivos.
Resultado do código acima:
LANÇADO UMA EXCEÇÃO COM O THROWS
O objeto de exceção é uma instância da classe Exception ou de uma de uma de suas subclasses. A
cláusula catch usa, como parâmetro, uma instância de objeto de um tipo derivado da classe Exception. A
linguagem Java exige que todo método capture a exceção verificada que pode vir a lançar ou então
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
115
declare que lançará a exceção. A declaração da exceção faz parte da interface pública do método. Na
declaração de uma exceção que poderá ser lançada, a palavra-chave throws é usada em uma definição do
método, junto com uma lista de todas as exceções verificadas que poderão ser lançadas.
Exemplo 01:
Exemplo 02:
CRIANDO UMA EXCEÇÃO COM THROW
A máquina Virtual Java lança referências para instâncias de maneira implícita utilizando as classes pré-
definidas. O programador pode utilizar o comando throw de forma explícita. Quando o fluxo de controle
atinge o comando throw <expressão>, a expressão é avaliada. Esta expressão corresponde em geral à
criação de um objeto e resulta numa referência, p. ex. throw new ErroDoTipoX();. A partir daí o fluxo de
controle será desviado para uma cláusula catch apropriada de algum comando try-catch.
O fluxo de controle segue a cadeia dinâmica dos registros de ativação das invocações dos métodos, ou
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
116
seja a execução de um método pode terminar (i) por que o fluxo de controle atingiu o final do método
(return implícito, somente no caso d e métodos do tipo void!), (ii) porque o fluxo de controle atingiu um
comando return, ou (iii) porque foi executado um throw implícito ou explícito que não foi apanhado por
um comando try -catch daquele método. A procura por um try-catch apropriado é propagada até o ponto
em que há um retorno para o método main, neste caso a execução do programa será finalizada, com
mensagem de erro provida pela MVJ dizendo que uma exceção foi lançada sem que fosse apanhada. E
deverá ser mostrado algo como:
Exemplos de exceções já definidas no pacote java.lang:
ArithmeticException: indica situações de erros em processamento aritmético, tal como uma
divisão inteira por 0. A divisão de um valor real por 0 não gera uma exceção (o resultado é o valor
infinito).
NumberFormatException: indica que tentou-se a conversão de uma string para um formato
numérico,mas seu conteúdo não representava adequadamente um número para aquele formato. É
uma subclasse de IllegalArgumentException;
IndexOutOfBounds: indica a tentativa de acesso a um elemento de um agregado aquém ou além
dos limites válidos. É a superclasse de ArrayIndexOutOfBoundsException, para arranjos, e de
StringIndexOutOfBounds, para strings.
NullPointerException: indica que a aplicação tentou usar uma referência a um objeto que não foi
ainda definida.
ClassNotFoundException: indica que a máquina virtual Java tentou carregar uma classe
mas não foi possível encontrá-la durante a execução da aplicação.
Escola Estadual de Educação Profissional [EEEP] EnsinoMédio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
117
11.0 Criando Diagrama UML
Introdução
Neste capítulo iremos aprender como, instalar e criar uma diagramação de classes usando o Netbeans
para a linguagem Java. UML significa: “Unified Modeling Language”, ou seja “Linguagem de
Modelagem unificada”. Modelar nosso código com objetivo de documentar e visualizar melhor o projeto.
Para realizar a instalação é simples, basta ir em Ferramentas > Plugins e buscar por UML. Este plugin
está disponível livremente a partir da versão 6.7.
Antes de começarmos a trabalhar com eles, precisamos lembrar quais os tipos de diagramas que podemos
desenvolver e qual a utilidade de cada uma dentro de um projeto de qualquer escala, visto no começo da
apostila.
Logo iremos aprender como exemplo a trabalhar com Diagrama de Classe, pois esse diagrama é bem
próximo da criação e estruturação de classes e herança entre as classes criadas.
Abrindo o Projeto na IDE Netbeans.
Criando um Novo Projeto Diagrama.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
118
Nomeando Projeto de Diagrama.
Escolhendo Diagrama de Classe.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
119
Entrando no Diagrama criado, podemos visualizar no Lado direto da IDE Netbeans, um botão chamado
“Paleta” ele será responsável abrir uma aba onde podemos montar os pacotes de classe.
Veja a interface da aplicação:
Na direita Clicando em “Class”, clique no palco principal que será gerado uma nova classe indefinida.
Para alterar a Classe, basta clicar em Create Atributes para criar os atributos , e Create Operation para
criar os métodos, lembre-se que para o diagrama, primeiro vem o nome da variável ou método, em
seguida vem o seu tipo:
Exemplo: nome : String
Veja como criar uma classe simples com o tipo, pessoa:
Dessa forma podemos criar qualquer classe com os seus atributos e métodos de forma a poder visualizar
melhor a estrutura do projeto.
Para criar interface ou Herança, basta clicarmos em uma classe ao qual você quer montar uma relação e
aparecerá o seguinte menu:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
120
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
121
12.0 Fila e Pilha
Iremos estudar Alguns estilos de agrupamento e organização de dados, onde podemos listar, retirar ou
colocar elementos desse grupo de dados de forma organizada, levando em consideração a sua posição no
grupo, para isso podemos estudar conceitos de Fila e Pilha para essas aplicações, veremos nos próximos
tópicos como trabalhar com cada uma delas.
12.1 Fila
Imagine que você tem uma Fila de atendimento em um Banco. O que podemos observar em uma Fila?
A fila poderá está vazia, onde o caixa não irá ter que trabalhar.
A fila poderá está cheia, onde não poderá entrar ninguém mais na fila até que pelo menos saia uma
pessoa dela.
Quando alguém novo chega, ele vai para o final da fila.
A pessoa que é atendida é sempre o primeiro em uma fila e logo depois de ser atendido, ele sai da
fila, dando lugar a outras pessoas alterando a ordem de chamada de todo mundo. Quem era o
terceiro, passa a ser o segundo, quem era o segundo passa a ser primeiro na fila.
Tudo o que acontece em uma fila normal também pode ser implementado na Programação Java.
IMPLEMENTANDO FILA EM JAVA
Para que possamos implementar uma fila em Java temos que usar os métodos da interface “Queue” da
classe “LinkedList” Dessa forma:
O Objeto “fila” será responsável por conter método ao qual poderemos incluir, retirar, e mostrar o
próximo elemento da fila, veja na tabela abaixo os seus métodos e suas funções:
Queue fila = new LinkedList();
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
122
Método Função
element(Object); Mostra o primeiro elemento da fila sem removê-lo
offer(); Insere um novo elemento da fila
poll(); Retorna e retira o próximo elemento da fila. Retorna “null” se a fila
estiver vazia
Veja a implementação abaixo:
Os elementos nesse exemplo estão inseridos na seguinte ordem:
5 6 1 7 3
Retirando os 3 primeiros elementos da Fila com o método “Poll”, temos:
7 3
Inserindo o Elemento 10 e 1 na Fila usando o método “offer”, temos:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
123
7 3 10 1
Sendo assim, se usarmos o método “Poll” mais 5 vezes, estes elementos seriam retornados e retirados da
fila nessa ordem mantendo a fila vazia. Quando a Fila estiver vazia, o comando “Poll” passará a retornar
“null”.
Vários sistemas usam esse recurso, como sistema de atendimento ao cliente, um sistema de fila de
impressora onde os primeiros documentos a serem impressos terão prioridade em relação aos outros
documentos que serão impresso em seguida. Pesquise por mais implementações usando o recurso de Fila.
12.2 Pilha
Imagine uma Pilha de Pratos a ser lavados. O que podemos observar?
A pilha poderá está vazia, onde não precisamos lavar nenhum prato.
A pilha poderá está cheia, onde não poderá entrar nenhum prato a mais, até ser lavado algum.
O prato que chegar na pilha estará logo acima dos demais.
O prato a ser lavado é justamente o de cima, ou seja, o ultimo prato da pilha, então os últimos
pratos a entrarem na pilha, serão os primeiro a ser lavados, logo que eles forem lavados eles sairão
da pilha, dando espaço para os pratos de baixo a ser lavados.
Claramente podemos perceber o velho ditado “Os últimos serão os primeiros” e esta regra também poderá
ser implementado em JAVA.
IMPLEMENTANDO PILHA EM JAVA
Para que possamos implementar uma pilha em Java temos que usar a Classe Stack, dessa forma:
O Objeto “pilha” será responsável por conter método ao qual poderemos incluir, retirar, e mostrar o
Stack pilha = new Stack();
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
124
ultimo elemento da pilha, veja na tabela abaixo os seus métodos e suas funções:
Método Função
empty() Verifica se a pilha está vazia retornando um Boolean
push(); Insere um novo elemento da pilha
pop(); Retorna e retira o ultimo elemento da pilha.
peek(); Retorna o ultimo elemento da pilha sem retirá-lo.
Veja na prática:
Os elementos nesse exemplo estão inseridos na seguinte ordem:
5 6 1 7 3
Retirando os 3 primeiros elementos da pilha com o método “pop”, temos:
5 6
Inserindo o Elemento 10 e 1 na Pilha usando o método “push”, temos:
5 6 10 1
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
125
Sendo assim, se usarmos o método “pop” mais quatro vezes, esses elementos seriam retornados e
retirados da pilha na ordem inversa mantendo a pilha vazia. O Comando “pop” não retorna null quando a
pilha estiver vazia, então recomenda -se sempre verificar se contém elementos na pilha usando o método
“empty”.
Vários sistemas usam esse recurso, um deles é bem usado por nós sem percebermos, imagine que está
digitando um texto e precisa “desfazer” uma operação. Cada elemento de “Input” é posto em uma pilha e
quando usamos o “CTRL+Z” é como usar um “pop” na pilha de retirandoapenas o ultimo elemento
digitado. Pesquise por mais implementações usando o recurso de Pilha.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
126
13.0 Coleções: List e Map
Introdução a Coleções/Collections
Aprendemos em capítulos anteriores que existe uma estrutura de dados chamada Array. Essa estrutura de
dados ela foi criada para guardar na memória do computador dados primitivos ou objetos do mesmo tipo,
de maneira organizada (bloco de dados contínuo), em que cada informação pode ser acessada por índices
(index),
A estrutura de dados Array é muito inflexível, é preciso definir seu tamanho assim que nós a criamos. E
isso pode gerar um problema para nós programadores Java.
Vamos analisar a seguinte situação:
Criaremos um Array para guardar os nomes de uma lista de 10 alunos do Curso
de Java:
Mas se no meio do meu programa eu precisar acrescentar a minha lista mais 20 alunos. Como o tamanho
do Array alunosNomes foi definido com 10 posições então não seria possível adicionar os 20 novos
alunos a essa estrutura, teríamos que tratar isso. Uma das alternativas para fazer isso é acrescentar o
seguinte código:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
127
Como facilitar isso?
Como usar o conceito de Array, porém com um pouco mais de flexibilidade?
Coleções podem ser a saída para este problema. Uma das formas de pensar nas coleções é como Arrays
turbinadas, incrementadas com várias funcionalidades e regras.
A definição formal de Coleções é: estruturas de dados utilizadas para a rmazenar e manipular
informações, ou seja, são objetos que representam um grupo de objetos.
Esse capítulo tem como objetivo abordar as principais funcionalidades e regras de duas das principais
coleções do Java: List e Map.
13.1 Collection List ou Coleção Lista
Uma lista é uma coleção de elementos arrumados numa ordem linear, isto é, onde cada elemento tem um
antecessor (exceto o primeiro) e um sucessor (exceto o último). Normalmente implementada como
"Array" ou "Lista Encadeada". A Lista pode ser mantida ordenada ou não e as operações mais
importantes de uma coleção do tipo Lista são:
Adição de elementos
Adicionar um objeto em qualquer lugar da lista, fornecendo o índice desejado;
Remoção de elementos
Remover um objeto presente em qualquer lugar da lista, fornec endo o índice desejado;
Acesso aos elementos
Obter o elemento de qualquer posição da lista, fornecendo o índice desejado;
Iterar sobre os elementos;
Pesquisa de elementos
Descobrir se certo elemento está na lista;
Descobrir o índice de certo elemento na lista (onde está);
Indagar sobre atributos
Obter o número de elementos da coleção;
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
128
Em Java existem três classes que trabalham com a Coleção do tipo Lista ou List elas se encontram no
pacote/package java.util . São elas:
Vector
ArrayList
LinkedList
Escolhemos explanar nesse capítulo a classe Java mais utilizada para implementar listas que é
a classe ArrayList.
ArrayList
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
129
Acessando a documentação do Java 7 podemos visualizar todas as especificações dessa classe,
usada para programar coleções do tipo lista. Abaixo tabela com todos os métodos da classe ArrayList:
Desses métodos listados na documentação do Java 7 iremos estuda r os métodos principais, os quais
fazem as ações de adição de elementos, remoção de elementos, acesso aos elementos, pesquisa de
elementos e indagar sobre atributos de uma determinada lista.
CRIANDO UMA LISTA EM JAVA USANDO A CLASSE ARRAYLIST
Para criar uma lista usando a Classe ArrayList do Java, escreva em seu programa a seguinte linha
de código:
tipo: tipo do objeto que você quer guarda na lista. Ex: Integer, String, Carro, Pessoa, etc,
Exemplo:
Na versão 7 do Java você também pode criar uma lista de ssa forma:
ADICIONANDO ELEMENTOS EM UMA LISTA
Agora que você já criou seu objeto Lista você pode adicionar elementos dentro dela. As Listas quando
criadas elas não possuem nenhum elemento, ou seja, elas são Listas Vazias.
Na Lista, diferente do Array, você não especifica seu tamanho, ela cresce de forma dinâmica à medida
que você acrescenta dados a ela.
Vamos aprender como adicionar elementos a uma Lista, para isso iremos usar o método add() que
pertence a classe ArrayList.
Todas os códigos que trabalharem com listas usando a classe ArrayList precisam importar a
classe ArrayList. Isso pode ser feito adicionando a seguinte instrução no cabeçalho da
classe:
import java.util.ArrayList;
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
130
Exemplo:
O método add(), usado da forma mostrada acima ele se mpre coloca o novo dado adicionado à lista na
ultima posição da mesma, mas podemos utilizá-lo de outra maneira, de tal forma que podemos escolher a
posição em que queremos adicionar o novo elemento.
Vamos ver como fica essa outra forma de usar método add( ).
Exemplo:
Para visualizar todos os lados da lista na forma de uma String use o método toString(), desta forma:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
131
Vamos aplicar esse método no exemplo em que criamos uma lista de anos, ficará desta maneira:
Saída do programa:
REMOVENDO ELEMENTOS DE UMA LISTA
Para remover um dado da lista utilizamos o método remove() da classe ArrayList. O método remove()
funciona da seguinte forma:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
132
Vamos aplicar esse método no exemplo em que criamos uma lista de anos, ficará desta maneira:
Outra forma de usar o método remove() é passando para o método o objeto que você quer remover.
Ficando desta forma:
Exemplo:
Saída do programa sem o método remove():
Saída do programa aplicando o método remove():
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
133
ACESSANDO ELEMENTOS DA LISTA
Para acessar um valor de uma determinada lista usamos o método get() da classe ArrayList dessa forma:
Exemplo:
Temos métodos na classe ArrayList para auxiliar na interação da lista, ou seja, percorrer a lista acessando
os seus valores em todas as direções possíveis.
Esses métodos precisam, além da lista que iram auxiliar a percorre, um objeto do tipo ListIterator onde
esse objeto será como um leitor de posições da lista que pode percorrer a lista em todos os sentidos
possíveis.
Vamos entender melhor com o seguinte exemplo:
Vamos criar uma lista em Java, usando a classe ArrayList, para guardar o nome das linhas de ônibus de
Fortaleza.
Agora vamos criar um objeto do tipo ListIterator, onde esse objeto será como um leitor de posições da
lista que pode ser deslocado para frente e para trás ao longo de uma lista. Para criar um objeto do tipo
ListIterator precisamos importar a classe que cria esse objeto para o nosso programa, pois esse objeto não
pode ser instanciado pela classe ArrayList. A importação da classe é feita adicionando a seguinte
instrução no cabeçalho de sua classe:import java.util.ListIterator;
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
134
Após importar o método podemos criar nosso objeto do tipo ListIterator da seguinte maneira:
Por fim, podemos usar os métodos da classe ArrayList que nos ajudam a percorrer uma lista, da seguinte
forma:
Saída do programa:
De forma semelhante ao método hasNext() e o método next() podemos ainda usar em nossos programas
Java os seguintes métodos:
Métodos para auxiliar percorrendo uma Lista usando a classe ArrayList
hasNext(): retorna true se o elemento lido pelo percorredorLista tem sucessor, caso contrário
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
135
retorna false;
hasPrevious(): retorna true se o elemento lido pelo percorredorLista tem antecessor, caso contrário
retorna false;
next(): faz o percorreLista avançar para a posição seguinte da lista e retornar o novo valor lido;
previous(): faz o percorreLista retroceder para a posição anterior da lista e retornar o novo valor
lido;
nextIndex(): retorna o índice do elemento sucessor ao elemento l ido pelo percorreLista;
previousIndex(): retorna o índice do elemento antecessor ao elemento lido pelo percorreLista;
PESQUISANDO ELEMENTOS DA LISTA
Pesquisar um elemento na lista é bastante simples. Vamos usar o método indexOf() que se encontra na
classe ArrayList para pesquisa em uma lista. Esse método retorna o valor do índice do objeto procurado
se ele existir na lista, caso contrário retorna -1.
Exemplo:
Saída do programa:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
136
13.2 Collection Map ou Coleção Mapa
Um mapa armazena pares (chave, valor) chama dos itens, essas chaves e valores podem ser de qualquer
tipo, portanto, a chave é utilizada para achar um elemento rapidamente. Estruturas especiais são usadas
para que a pesquisa seja rápida, como "Tabela Hash" ou "Árvore". Os dados armazenados nos mapas
podem ser mantidos ordenados ou não (com respeito às chaves).
A coleção do tipo Mapa difere das Listas por diversas características, as principais são:
as estruturas de dados que as implementam;
na coleção do tipo Mapa podemos escolher o tipo e o valor q ue terão as chaves(índices), através
delas teremos acesso aos dados. As chaves (índices) e dados dos Mapas podem ser de qualquer
tipo, inclusive um objeto. Já nas Listas somente os valores armazenados podem ser de qualquer
tipo, seus índices são sempre números inteiros indexados a partir do zero de forma automática, à
medida que vamos adicionando elementos à coleção.
As operações mais importantes de uma coleção do tipo Mapa são:
Adição de elementos
Adicionar um item no mapa (fornecendo chave e valor)
Remoção de elementos
Remover um item com chave dada
Acesso aos elementos
Iterar sobre os itens
Pesquisa de elementos
Descobrir se um elemento com chave dada está na coleção
Indagar sobre atributos
Obter o número de elementos
Observe que o acesso à coleção sempre é feita conhecendo a chave
Vamos utilizar a classe HashMap para trabalhar com coleções do tipo mapa ou map.
13.3 HashMap
A classe HashMap é uma implementação da interface Map do pacote java.util, e possibilita trabalhar com
mapeamento de objetos no esque ma chave/valor, ou seja, informada a chave, resgato o valor.
Acessand a documentação do Java 7 podemos visualizar todas as especificações dessa classe, usada
para programar coleções do tipo mapa/map. Abaixo tabela com todos os métodos da classe HashMap:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
137
Vamos explanar os principais métodos da classe HashMap, métodos que nos permitirá criar, adicionar,
remover, selecionar e pesquisar itens em uma coleção do tipo Map.
CRIANDO UMA COLEÇÃO DO TIPO MAPA USANDO A CLASSE HASHMAP
Para criar um mapa usando a Classe HashMap do Java, escreva em seu programa a seguinte linha
de código:
tipo_da_chave: coloque o tipo que terá a chave/índice do seu Map, essa chave será usada para acessar os
valores guardados no Map;
tipo_do_valor: coloque o tipo que terá os valores que serão guardados em seu Map;
Pronto, dessa forma já instanciamos uma coleção do tipo Map usando a classe HashMap.
Agora temos que inserir elementos a coleção do tipo Map , pois só criamos o Map, mas não há elementos
dentro dele.
Lembre se de importar a Classe HashMap para seu programa, já que estamos usando-a para implementar
e trabalhar com Coleções do tipo Mapa. Podemos importar a classe colocando a seguinte instrução no
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
138
cabeçalho do programa o qual estamos escrevendo:
import java.util.HashMap;
ADICIONANDO ELEMENTOS EM UMA COLEÇÃO DO TIPO MAPA
Após criar o seu Map, podemos adicionar um elemento usando o método put() da Classe HashMap da
seguinte forma:
objeto_chave: valor do objeto que será a chave de acesso para os valores do mapa;
objeto_valor: valor do objeto que será guardado no mapa;
Exemplo:
Vamos criar um Map para guardar estados e suas respectivas capitais. Os
estados serão as chaves e as capitais serão os valores guardados no Mapa, ambos serão do tipo String.
Agora vamos adicionar os valores ao nosso mapa usando o método put, da seguinte forma:
Vamos usar o método toString() para visualizar como estão os dados dentro do nosso mapa, da seguinte
forma:
Saída do Programa:
REMOVENDO ELEMENTOS EM UMA COLEÇÃO DO TIPO MAPA
Para remover elementos de uma coleção do tipo Mapa usando os métodos da Classe HashMap usamos o
método remove().
objeto_chave: chave de acesso do elemento a ser removido do mapa;
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
139
O método remove() retorna uma String com o valor removido do mapa ou retorna o valor null se não for
achado nenhum valor associado a chave passada no argumento do método.
Exemplo:
Saída do programa:
SELECIONANDO/PESQUISANDO ELEMENTOS EM UMA COLEÇÃO DO TIPO MAPA
O método de seleção get() da classe HashMap é o mesmo método usado para se pesquisar um valor
dentro de um mapa. Esse método funciona da seguinte forma:
objeto_chave: chave de acesso do elemento a ser selecionado/pesquisado do mapa;
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
140
Exemplo:
Saída do programa:
NÚMERO DE ELEMENTOS EM UMA COLEÇÃO DO TIPO MAPA
Para sabermos o número de elementos contido em um mapa podemos utilizar o método size(), esse
método pode ser usado de maneira semelhante com coleções do tipo Lista usando a classe ArrayList.
O método size() funciona da seguinte forma:
A chamada ao método size() nos retorna um valor inteiro que é a quantidade de elementos de um mapa.
Exemplo:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
141
Saída do programa:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
142
14.0 Interface Gráfica com usuário - GUI
A Interface Gráfica com o Usuário, também conhecido como GUI -Graphical User Interface, em Java,
é feita através de bibliotecas de classes, sendo que a primeira a surgir foi a AWT(Abstract Window
Toolkit). A AWT surgiu já na vers ão 1.0, mas se tornou confiável a partir da versão 1.1. A maneira como
as classes dessa biblioteca trabalham garante a criação dos elementos da interface de usuário seguindo o
comportamento destinado às ferramentas GUI nativas de cada plataforma (Windows, Mac, Solaris, ...).
Alguns exemplos destes elementos são: botões, listas, menus, componentes de textos, contêineres (janelas
e barras de menus), caixas de diálogo para abrir ou salvar arquivos, além de elementos para manipulação
de imagens, fontes e cores.
A portabilidade de plataforma funcionava bem em aplicações simples, mas aplicações que envolviam
elementos mais complexos, como menus e barras de rolagem, por exemplo, apresentavam diferenças de
comportamento conforme a plataforma. O que aconteceu foi que as aplicações visuais feitas em Java não
se pareciam, e nem tinham as mesmas funcionalidades, com as aplicações convencionais de cada
plataforma.
A partir da versão 2 do Java, a JFC (Java Foundation Classes) apresentou novos recursos para a
construção da GUI das aplicações, o que melhorou muito os problemas de portabilidade. São eles:
Java 2D: novas funções para desenhos e gráficos.
Drag & Drop: clicar, arrastar, copiar e colar.
Swing: biblioteca de classes extensão da AWT, onde são apresentados novos componentes de
interface e o que é conhecido por look and feel, que é uma adaptação perfeita da GUI ao sistema
operacional específico de desenvolvimento.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
143
É bom salientar que o Swing não substitui o AWT, mas é o kit de ferramentas GUI mais utilizado para
desenvolvimento de aplicações visuais. O AWT continua existindo, mantendo a mesma arquitetura criada
para o Java versão 1.1.
O Swing possui muito mais recursos, além de garantir maior portabilidade e, em boa parte dos casos, é
mais fácil de usar. Isso não significa que ou se utiliza AWT ou se utiliza Swing, normalmente o que
acontece é que elementos das duas bibliotecas são utilizados conjuntamente nas aplicações.
14.1 Bibliotecas AWT e SWING
São as fontes das classes que utilizaremos a partir daqui. Nelas moram os componentes gráficos para
Java, e por isso devemos importá -las no início de nossas classes gerenciadoras de telas:
import javax.swing.*;
import java.awt.*;
14.2 JFrame
Pode parecer estranho para quem vem de outras linguagens, como o Delphi ou o VB, mas em Java, cada
tipo de componente gráfico é uma classe com atributos e métodos próprios. E para utilizá-las, devemos
instanciá-las.
CAMADAS JFRAME
Antes que possamos criar nossa primeira ja nela precisamos conhecer como funciona a hierarquia dos
elementos que são responsáveis pela visualização gráfica.
Onde:
RootPane – Representa uma camada que irá gerenciar todas as camadas internas.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
144
LayeredPane – Contém uma região para Barra de Menu e o ContentPane
ContentPane – Contém todos os Componentes como um campo de texto,campo de seleção de opções,
etc.GlassPane – Camada que por padrão é invisível, porém pode ser usado para mostrar algum
componente por cima das demais, como uma imagem.
Agora que sabemos como funciona um Jframe iremos criar nossa primeira janela em Java.
Nossa primeira Janela com JFrame
A primeira e mais simples chama-se JFrame, e cria telas retangulares sem nada dentro, um espaço onde
trabalharemos logo depois.
O método SetBounds trabalha com a localização e tamanho da tela, sendo a seguinte ordem: distância do
canto esquerdo da tela, distância do topo da tela, largura e altura.
tela.getContentPane().setBackground(Color.RED);
Aqui, invocamos o método que verifica qual é o campo d e Content do JFrame, ou seja, a região onde não
está o menu nem as bordas, e muda sua cor a partir do método set Background. Eu usei uma biblioteca de
cores, a Color, e defini a janela como vermelha; Poderia ter usado azul, cinza, verde, etc.
tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Aqui, eu determino qual a ação a executar quando este JFrame for fechado. No caso, ele fecha o
programa todo, num efeito de BREAK. A instrução DISPOSE_ON_CLOSE apenas levará o JFrame a
fechar sem derrubar o programa todo.
tela.setLayout(null);
Aqui, escolhi um Layout para o meu JFrame. Ou melhor, escolhi que seja nenhum. Existem
Layouts prontos para JFrames, onde os botões ficam dispostos em forma de fileira, ou nos cantos,
ou expandidos. A maioria tem um resultado grotesco. Se quisermos desenhar nossa tela com liberdade
para fazê-la bonita, temos que escolher o NULL;
tela.setVisible(true);
Depois de preparado, o JFrame pode já ficar visível. Este passo vem no final de toda a sua montagem.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
145
Agora vamos ver como ficou nossa janela.
14.3 Criando uma classe com propriedades JFrame
No tópico anterior aprendemos como construir uma Janela usando as propriedades do JFRAME
diretamente. Para a nossa janela criada, o método main tinha a responsabilidade direta de criar uma
janela. Para essa situação, se quiséssemos criar uma nova janela tínhamos que chamar novamente a
Classe JFrame e atribuir todas as características novamente linha a linha. Podemos construir uma janela
de uma forma melhor criando um próprio modelo com métodos, encapsulamento, herança e os demais
recursos aprendidos sobre orientação a objetos. Para criar o nosso modelo de JFrame precisamos primeiro
criar uma classe e herdá-la de JFRAME dessa forma:
Assim nossa classe chamada “MinhaJanela” herda todas as propr iedades de JFrame através da
classe Pai.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
146
Podemos definir um padrão para qualquer janela criada partindo de “MinhaJanela”, vamos agora definir
que toda janela nossa terá obrigatoriamente um título. Basta inserirmos um construtor e redirecionar esse
valor para classe que tem a responsabilidade de receber o título de uma Janela.
No construtor podemos também definir qualquer outra propriedade na sua chamada, como coordenadas,
cor do plano de fundo, procedimento utilizado quando for fechada a janela, layout, visibilidade, etc. Veja
o Exemplo abaixo ainda no mesmo construtor:
Agora indicamos que qualquer instancia de “MinhaJanela” terá as mesmas propriedades, sendo
diferenciadas apenas pelo seu Título.
Vamos instanciar no método main a classe que acabamos de definir:
Temos então o mesmo resultado do tópico anterior, perceba que se quisermos criar uma 2 janela por
exemplo, não precisamos definir todas as propriedades novamente, basta instanciar uma nova
“MinhaJanela” definindo um segundo título, assim teremos uma nova janela.
Usando herança, podemos através da nossa classe definida, acessar os elementos do Jframe baseado no
seu nível de encapsulamento. No Exemplo abaixo usaremos o método setLocation() para alterar a
localização da nosssa janela. Esse método não foi criado por nós, mas foi definido pelas classes Pai nas
definições de herança da Classe Jframe.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
147
Temos então o seguinte resultado final:
Iremos usar o exemploda Classe Minha Janela para criar os componentes nos próximos tópicos.
14.4 JLabel
É um pequeno componente com o qual colocamos pedaços de texto sem nenhuma função, a não ser a de
indicar para quê servem os campos de uma tela qualquer.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
148
O código acima não apresenta grandes novidades. Apenas instanciamos o Jlabel , dando-lhe um texto
qualquer para exibir. Depois, demos o mesmo setBounds nele, em seguida fizemos a ação realmente
revolucionária:
super.getContentPane().add(texto);
Adicionamos o objeto “texto” na tela usando super.getContentPane(). Note que o setBounds do “texto”
passa a usar como bordas as bordas do JFrame. E fica contido nele.
O JLabel pode ter desenhos por dentro, mas veremos isso mais adiante, quando tratarmos do Icon, outro
tipo de objeto Java.
O resultado de nossa janela é esse:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
149
14.5 JButton
O JButton é, finalmente, o botão. Colocamos ele nas telas com inúmeras funções. Estas funções
serão tratadas mais adiante, quando chegarmos às aulas sobre Eventos. Por enquanto, basta-nos desenhar
os botões.
O JButton poderá ser instanciado de três formas diferentes:
JButton() – aqui, teremos depois que rodar um método setText(“algum texto”) para dar-lhe um
conteúdo(um conteúdo que aparece para o usuário).
JButton(String) – aqui, escrevemos algum texto para aparecer no botão e o usuário saber do que se trata.
JButton(icon) – neste caso, adicionamos uma figura ao botão para dar -lhe uma aparência personalizada.
Veja este código:
No exemplo acima, usamos praticamente a mesma tela criada antes, porém adicionamos as rotinas de
criação de um botão. Primeiro, instanciam os a classe JButton e usamos os métodos já conhecidos
setBounds para definir suas coordenadas.
A nossa janela ficará assim:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
150
14.6 JTextField
O JTextField é uma caixa utilizada para que o usuário possa escrever um texto de uma linha só. Trata-se
de um componente bastante simples, que tem basicamente as mesmas especificações do que acabamos de
ver nos componentes anteriores.
Enriquecendo o código anterior, adicionando um JTextField:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
151
O tratamento do texto de um JTextField dar-se-á por meio de dois métodos bastante simples:
getText() – servirá para capturar o quê o usuário digitou no campo.
setText() – servirá para determinarmos que texto deve ir no campo. Muito útil quando se abre um registro
de um banco de dados e o campo JTextField deve receber um campo de registro para alteração.
A nossa janela ficará assim após acrescentar o JTextField:
14.6 Icon
A classe Icon tem um uso bastante simples, mas muito importante. Com ela, podemos carregar uma
imagem (devidamente criada em um arquivo JPG ou PNG), para dentro do programa, utilizando esta
imagem como quisermos.
Primeiro temos que inserir uma imagem no seu projeto, crie uma pasta dentro do seu projeto chamada
“img” e nela coloque qualquer imagem, em seguida insera uma imagem chamada “logo.png”;
Em sua Janela faça o seguinte código:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
152
No exemplo acima carregamos as informações da Imagem que importamos, em seguida partindo da
construção de uma ImageIcon passando como argumento url indicada, capturamos apenas as informações
de Icon para ser utilizada nos nossos componentes, alguns componentes aceitam Icon como argumento no
construtor, como Jbutton, Jpanel, etc.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
153
14.7 Editando fonte com o setFont()
Podemos formatar as fontes de nossos botões e rótulos.
Vamos usar o método setFont dessa forma:
Nossa janela ficará assim:
14.8 JMenuBar, JMenu e JMenuItem
Estas classes são utilizadas sempre em conjunto, para criar um menu na parte superior do JFrame, e
deixar seu software com aquela facilidade de uso que os usuários modernos exigem.
Aqui, começamos a trabalhar uma modalidade de programação que costumo chamar informalmente de
“empilhamento de objetos”, pois os objetos só funcionam quando colocamos um dentro do outro em uma
espécie de pirâmide.
O objeto que serve de base é o JMenuBar, adicionad o diretamente ao JFrame, e sobre ele vão todas as
coisas. Ele é a barra clara no alto do JFrame, dentro da qual os menus ficarão.
Depois, temos os JMenu, que ficam dentro da MenuBar e podem, inclusive, ficar um dentro do outro.
Dentro dos JMenu, ficam os JMenuItem, que têm uma função cada um. Para ativar suas funções,
utilizaremos os Listeners, mais adiante. Deixemos isso para outro capítulo.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
154
Criando uma janela, um JMenuBar(container de menus), Menus(JMenu) e por fim itens de
menus(JMenuItem).
Agora vamos adicionar o JMenuBar dentro da janela, depois adicionar os JMenus dentro do JmenuBar, e
por fim adicionar dentro do JMenu itens de menus(JMenuItem).
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
155
A ultima linha de código representa um método que será responsável pelas configurações da janela
Principal, veja a baixo a sua implementação.
Agora vamos ver como ficou nossa janela:
14.9 JCheckBox
Uma JCheckBox é um daqueles componentes em que vemos uma caixinha quadrada com uma
frase ao lado, e podemos marcar ou desmarcar a caixinha quadrada.
As CheckBoxes não são usadas para fazer escolhas com apenas uma opção válida, podendo ser todas
marcadas ou todas desmarcadas livremente, desde que o programador não coloque restrições no próprio
código.
Veja como trabalhar com JCheckBox no exemplo de código abaixo:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
156
Depois, para termos um retorno do valor de cada JCheckBox, utilizamos o método isSelected(),
que retorna um valor booleano.
Assim:
boolean x = cbPizza.isSelected();
Ou ainda:
if (cbPizza .isSelected()) {
- Funções a serem executadas.
}
Veja como ficou nossa janela:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
157
14.10 JRadioButton
O JRadioButton funciona apenas quando pensamos nele inserido em um grupo. Eu posso colocar quantas
opções quiser, formando um menu, e se todos os meus JRadioButtons estiverem no mesmo grupo, o
usuário só poderá marcar um deles. Ao marcar um, os outros perdem a marcação. Para isso, temos
que adicionar também um ButtonGroup.
Veja o código abaixo e saiba como trabalhar com JRadioButton. Veja como ficou nossa janela:
JComboBox
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
158
A JComboBox desenha uma caixinha parecida com a JTextField, só que ao invés determos um texto a
escrever, temos uma seta com a qual abrimos uma fileira de possibilidades de preenchimento para a caixa.
Veja como trabalhar como trabalhar com JcomboBox, observando o exemplo abaixo:
Para obter o retorno das informações, temos uma série de métodos que nos dizem o que, afinal, o usuário
escolheu. Os mais usados são os seguintes:
comb.getSelectedItem()
Este retorna o texto que está na caixa do Combo. Poderá ser usado especialmente para quando colocamos
o setEditable em TRUE, ou seja, quando o usuário pode escrever na caixa. O retorno deste método é uma
String, com o texto da caixa.
comb.getSelectedIndex();
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
159
Este método retorna o índice do item selecionado (como se as opções fossem um
vetor).
Veja abaixo o resultado:
Existem mais componentes Swing, além dos mostrados até aqui. Foram mostrados os
principais componentes. Caso você precise ou deseje conhecer mais componentes Swing
acesse:
http://docs.oracle.com/javase/7/docs/api/
http://docs.oracle.com/javase/7/docs/api/
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
160
15.0 Gerenciadores de Layout
Gerenciamento de layout ( Layout Management ) é o processo de determinar o tamanho e a posição dos
componentes na janela gráfica do programa. É ele o responsável por determinar onde o componente irá
ficar como irá ficar, qual o comportamento a ser tomado na hora de redimensionar a tela.
Por padrão o Java vem com cinco gerenciadores de layout: BorderLayout, BoxLayout,
FlowLayout, GridBagLayout, GridLayout e um adicional chamado CardLayout. São os gerenciadores de
layout que determinam como os componentes ir ão ficar em seu programa, portanto um bom
conhecimento sobre o funcionamento dos mesmos faz -se necessário para ter domínio de programação
gráfica em Java.
Geralmente, quando chamamos o método "add" para adicionar um componente na tela, ele será
posicionado de acordo com o gerenciador de layout previamente configurado. A maior parte
simplesmente vai adicionando os componentes com base na ordem em que foram programados, porém
alguns outros, como o BorderLayout, necessitam que você informe a posição relativa no container.
A escolha do gerenciador de layout depende muito das necessidades do programa. Por padrão todos os
objetos Containers são configurados para usar o FlowLayout, enquanto um JFrame e JDialog já usam o
BorderLayout como padrão.
Em ambos os casos é usado o método "setLayout" para especificar um novo layout manager, sendo
necessário passar para este método o tipo que desejamos. Abaixo há um exemplo para cada tipo de
gerenciador de layout, ficando assim fácil para vermos como cada um se comporta.
15.1 BorderLayout
BorderLayout trabalha como algumas coordenadas predefinidas , como norte, sul, leste, oeste e centro.
Para poder usar esse recurso temos que antes usar o método setLayout que antes era definido como “null”
para uma nova instancia de Border Layout.
Veja o Exemplo abaixo.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
161
Veja como ficou nossa janela:
15.2 BoxLayout
Um BoxLayout coloca os componentes em uma única linha ou coluna, permitindo ainda que você
especifique o alinhamento deles. Para que um BoxLayout possa existir temos que passar como argumento
no seu construtor o container que será aplicado e um alinhamento que poderá ser horizontal ou vertical,
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
162
representado pelas constantes estáticas da classe BoxLayout : X_AXIS (para alinhamento horizontal dos
meus componentes) e Y_AXIS (para alinhamento horizontal).
Nossa janela ficará dessa forma:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
163
15.3 FlowLayout
Como dito anteriormente, um FlowLayout é o gerenciador padrão de todo Container, caso não seja
especificado outro. FlowLayout posiciona os componentes lado a lado. Ela se diferencia de um
BoxLyout pois seus componentes podem se alinha horizontalmente e verticalmente baseando-se nas
dimensões do container. Veja o exemplo de sua aplicação.
Veja como ficou nossa janela:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
164
15.4 GridLayout
Um GridLayout atua como uma grade de uma planilha de cálculo, colocando os componentes em linhas e
colunas pré-determinadas e deixando os componentes com o mesmo tamanho, para isso precisamos
definir um limite de linhas e colunas para esse layout. Veja isso no exemplo abaixo:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
165
Veja como ficou nossa janela:
15.5 GridBabLayout
O mais flexível gerenciador de layout é o GridBagLayout. Ele permite colocar componentes em grades de
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
166
colunas, sendo possível um componente ocupar mais de uma coluna ao mesmo tempo. As linhas também
não precisam necessariamente ter os mesmos tamanhos, ou seja, você pode configurar diferentes larguras
e alturas de acordo com a necessidade. Eis o exemplo abaixo.
Veja como ficou nossa janela:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
167
16.0 Eventos (Listeners)
Eventos em Java nada mais é que métodos especiais que são realizados baseados em alguma ação
de um usuário seja ele, um clique, um digitar de uma tecla, ao passar o mouse, etc.. Iremos ver nos
próximos tópicos como utilizar esses métodos especiais em nossos projetos.
ActionListener
O ActionListener. Trata-se de uma classe que detecta se houve uma ação em uma referencia a que ela está
associada (um botão, por exemplo) e que, dependendo da ação, executará uma função. ActionListener é
representado por uma interface, então para que a minha classe possa realizar tratamento de eventos, a
primeira implementação que iremos fazer é dar um “implements” na classe que queremos ter essa
funcionalidade , vejamos o exemplo abaixo:
Iremos também criar uma caixa de texto e um botão para utilizar um evento que irá capturar o que foi
digitado e imprimir na tela.
A Implementação ActionListener irá obrigar a minha classe a conter um método chamado,
actionPerformed, com um parâmetro do tipo “ActionEvent”. Veja a implementação abaixo.
Logicamente é possível fazer muito mais com os gerenci adores de layout, há várias
maneiras de configurar e utilizar. Para obter mais informações sobre os métodos
disponíveis para cada um consulte a API, disponível em:
http://docs.oracle.com/javase/7/docs/api/
http://docs.oracle.com/javase/7/docs/api/
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
168
Agora iremos construir nosso layout:
Os métodos que iremos utilizar para criar o evento são, addActionLIstener e setActionCommand, eles
serão responsáveis por redirecionar e enviar um comando para o método que nós criamos
actionPerformed.
addActionListener:Método que irá receber uma classe que irá conter uma implementação
actionListener, no nosso caso, nossa própria classe terá esse método, o motivo do argumento “this” no
exemplo anterior.
SetActionCommand: Método que irá enviar uma instrução para o método actionPerformed, com esse
recurso, podemos por exemplo criar outros outros botões enviando outros comandos para o mesmo
método realizando assim outras funções em uma mesma janela. No exemplo acima utilizamos um
comando que definimos como “OK”.
Iremos agora ver como irá iremos implementar o método actionPerformed: O processo é bem simples,
caso o ActionCommand do evento “e” seja igual a “OK” (comando que definimos usando
setActionCommand), uma caixa com uma mensagem aparecerá na tela informando o nome digitado.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
169
Se para modificar um comando utilizamos o método setActionCommando , para que possamos resgatar o
que foi modificado usaremos os método getActionCommando e compararemos com o comando que
queremos acionar.
Agora iremos capturar o que foi digitado na caixa de texto, o exemplo acima mostra que chamamos o
atributo txtNome que foi definindo com JtextField e utilizar o método getText() que tem como retorno
uma String, essa String será capturada impressa na tela no momento do clique do botão.
Vejamos o resultado dessa operação:
16.1 FocusListener
O FocusListener se parece com o ActionListener em seu modo de construção, mas serve para detectar
quando o foco (ou seja, o cursor, a seleção, não o ponteiro do mouse) está sobre um objeto ou não.
Ele possui dois métodos que precisam ser implementados: o focusGained e o focusLost, um para quando
o objeto ganha foco e outro para quando perde.
Importante: Antes de passa para o próximo tópico, tenha certeza que entendeu todos os
processos envolvidos, pois os próximos eventos serão implementações semelhantes.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
170
Para ativar o método, usamos addFocusListener. Usando esse recurso iremos mostrar um exemplo de
alteração da cor de um plano de fundo baseado em um foco em uma caixa de texto. Veja o exemplo
abaixo:
O resultado Final:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
171
16.2 KeyListener
O KeyListener é uma interface que serve para que possamos coordenar as ações do usuário com o teclado
quando ele está escrevendo em algum espaço ou utilizando alguma função. Posso atribuir KeyListener a
qualquer objeto gráfico do J ava e detectar quando e o que o usuário está teclando.
A implementação KeyListener obriga a ter 3 métodos :
keyTyped: Será ativado ao pressionar um botão caractere ou numérico do teclado.
keyPressed: Será ativado ao segurar um botão, como SHIFT, CTRL, ALT etc.
keyReleased: Será ativo ao deixar de pressionar o botão.
Para ativar o método, usamos addKeyListener. No exemplo abaixo alteramos a cor de plano de fundo da
caixa de texto para cada uma das ações realizadas pelo usuário.
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
172
NOTA: Pode-se detectar qual o botão apertado pelo usuário explorando a variável “KeyEvent e”, que
retornará o código da tecla apertada com o método: getKeyChar().
16.3 MouseListener
O MouseListener, como seu nome obviamente revela, serve para tratarmos eventos relacionados ao uso
do mouse.
A implementação MouseListener obriga a ter 5 métodos :
mouseClicked: Será ativado no clique simples do mouse.
mousePressed: Será ativado ao segurar o clique no mouse.
mouseReleased: Será ativado ao deixar o clique do mouse.
mouseEntered : Será ativado ao entrar na região do componente pelo mouse.
mouseExited: Será ativa ao deixar a região do componente pelo mouse.
Para ativar o método, usamos addMouseListener. O código abaixo mostra como alterar o plano de fundo
do Container usando event os do mouse Veja a implementações dos métodos abaixo:
Escola Estadual de Educação Profissional [EEEP] Ensino Médio Integrado à Educação Profissional
Informática – Programação Orientada a Objetos / Java
173
Nós podemos saber qual é a localização do ponteiro do mouse utilizando dois métodos:
getX() – retorna a posição do mouse no eixo X (horizontal) dentro do objeto a que estamos atribuindo
o MouseListener.
getY() – Faz o mesmo, só que com a posição do eixo Y (vertical).
Hino do Estado do Ceará
Poesia de Thomaz Lopes
Música de Alberto Nepomuceno
Terra do sol, do amor, terra da luz!
Soa o clarim que tua glória conta!
Terra, o teu nome a fama aos céus remonta
Em clarão que seduz!
Nome que brilha esplêndido luzeiro
Nos fulvos braços de ouro do cruzeiro!
Mudem-se em flor as pedras dos caminhos!
Chuvas de prata rolem das estrelas...
E despertando, deslumbrada, ao vê-las
Ressoa a voz dos ninhos...
Há de florar nas rosas e nos cravos
Rubros o sangue ardente dos escravos.
Seja teu verbo a voz do coração,
Verbo de paz e amor do Sul ao Norte!
Ruja teu peito em luta contra a morte,
Acordando a amplidão.
Peito que deu alívio a quem sofria
E foi o sol iluminando o dia!
Tua jangada afoita enfune o pano!
Vento feliz conduza a vela ousada!
Que importa que no seu barco seja um nada
Na vastidão do oceano,
Se à proa vão heróis e marinheiros
E vão no peito corações guerreiros?
Se, nós te amamos, em aventuras e mágoas!
Porque esse chão que embebe a água dos rios
Há de florar em meses, nos estios
E bosques, pelas águas!
Selvas e rios, serras e florestas
Brotem no solo em rumorosas festas!
Abra-se ao vento o teu pendão natal
Sobre as revoltas águas dos teus mares!
E desfraldado diga aos céus e aos mares
A vitória imortal!
Que foi de sangue, em guerras leais e francas,
E foi na paz da cor das hóstias brancas!
Hino Nacional
Ouviram do Ipiranga as margens plácidas
De um povo heróico o brado retumbante,
E o sol da liberdade, em raios fúlgidos,
Brilhou no céu da pátria nesse instante.
Se o penhor dessa igualdade
Conseguimos conquistar com braço forte,
Em teu seio, ó liberdade,
Desafia o nosso peito a própria morte!
Ó Pátria amada,
Idolatrada,
Salve! Salve!
Brasil, um sonho intenso, um raio vívido
De amor e de esperança à terra desce,
Se em teu formoso céu, risonho e límpido,
A imagem do Cruzeiro resplandece.
Gigante pela própria natureza,
És belo, és forte, impávido colosso,
E o teu futuro espelha essa grandeza.
Terra adorada,
Entre outras mil,
És tu, Brasil,
Ó Pátria amada!
Dos filhos deste solo és mãe gentil,
Pátria amada,Brasil!
Deitado eternamente em berço esplêndido,
Ao som do mar e à luz do céu profundo,
Fulguras, ó Brasil, florão da América,
Iluminado ao sol do Novo Mundo!
Do que a terra, mais garrida,
Teus risonhos, lindos campos têm mais flores;
"Nossos bosques têm mais vida",
"Nossa vida" no teu seio "mais amores."
Ó Pátria amada,
Idolatrada,
Salve! Salve!
Brasil, de amor eterno seja símbolo
O lábaro que ostentas estrelado,
E diga o verde-louro dessa flâmula
- "Paz no futuro e glória no passado."
Mas, se ergues da justiça a clava forte,
Verás que um filho teu não foge à luta,
Nem teme, quem te adora, a própria morte.
Terra adorada,
Entre outras mil,
És tu, Brasil,
Ó Pátria amada!
Dos filhos deste solo és mãe gentil,
Pátria amada, Brasil!