Linguagem de Programação Java
Brasília-DF.
Elaboração Leandro Rubim de Freitas
Produção Equipe Técnica de Avaliação, Revisão Linguística e Editoração
Sumário Apresentação.................................................................................................................................. 4 Organização do Caderno de Estudos e Pesquisa..................................................................... 5 Introdução.................................................................................................................................... 7 Unidade i Orientação a Objetos..................................................................................................................... 11 capítulo 1 Conceitos de orientação a objetos aplicados no desenvolvimento de Softwares. 11 Unidade iI PROGRAMAçÃO JAVA......................................................................................................................... 16 capítulo 1 Programação java – ponta pé inicial............................................................................. 16 capítulo 2 Programação java – sintaxe básica................................................................................ 26 capítulo 3 Programação java – comandos de lógica.................................................................. 40 Para (não) Finalizar...................................................................................................................... 53 Referências................................................................................................................................... 54
Apresentação Caro aluno A proposta editorial deste Caderno de Estudos e Pesquisa reúne elementos que se entendem necessários para o desenvolvimento do estudo com segurança e qualidade. Caracteriza-se pela atualidade, dinâmica e pertinência de seu conteúdo, bem como pela interatividade e modernidade de sua estrutura formal, adequadas à metodologia da Educação a Distância – EaD. Pretende-se, com este material, levá-lo à reflexão e à compreensão da pluralidade dos conhecimentos a serem oferecidos, possibilitando-lhe ampliar conceitos específicos da área e atuar de forma competente e conscienciosa, como convém ao profissional que busca a formação continuada para vencer os desafios que a evolução científico-tecnológica impõe ao mundo contemporâneo. Elaborou-se a presente publicação com a intenção de torná-la subsídio valioso, de modo a facilitar sua caminhada na trajetória a ser percorrida tanto na vida pessoal quanto na profissional. Utilize-a como instrumento para seu sucesso na carreira. Conselho Editorial
4
Organização do Caderno de Estudos e Pesquisa Para facilitar seu estudo, os conteúdos são organizados em unidades, subdivididas em capítulos, de forma didática, objetiva e coerente. Eles serão abordados por meio de textos básicos, com questões para reflexão, entre outros recursos editoriais que visam a tornar sua leitura mais agradável. Ao final, serão indicadas, também, fontes de consulta, para aprofundar os estudos com leituras e pesquisas complementares. A seguir, uma breve descrição dos ícones utilizados na organização dos Cadernos de Estudos e Pesquisa. Provocação Textos que buscam instigar o aluno a refletir sobre determinado assunto antes mesmo de iniciar sua leitura ou após algum trecho pertinente para o autor conteudista. Para refletir Questões inseridas no decorrer do estudo a fim de que o aluno faça uma pausa e reflita sobre o conteúdo estudado ou temas que o ajudem em seu raciocínio. É importante que ele verifique seus conhecimentos, suas experiências e seus sentimentos. As reflexões são o ponto de partida para a construção de suas conclusões.
Sugestão de estudo complementar Sugestões de leituras adicionais, filmes e sites para aprofundamento do estudo, discussões em fóruns ou encontros presenciais quando for o caso.
Praticando Sugestão de atividades, no decorrer das leituras, com o objetivo didático de fortalecer o processo de aprendizagem do aluno.
Atenção Chamadas para alertar detalhes/tópicos importantes que contribuam para a síntese/conclusão do assunto abordado.
5
Saiba mais Informações complementares para elucidar a construção das sínteses/conclusões sobre o assunto abordado.
Sintetizando Trecho que busca resumir informações relevantes do conteúdo, facilitando o entendimento pelo aluno sobre trechos mais complexos.
Exercício de fixação Atividades que buscam reforçar a assimilação e fixação dos períodos que o autor/ conteudista achar mais relevante em relação a aprendizagem de seu módulo (não há registro de menção). Avaliação Final Questionário com 10 questões objetivas, baseadas nos objetivos do curso, que visam verificar a aprendizagem do curso (há registro de menção). É a única atividade do curso que vale nota, ou seja, é a atividade que o aluno fará para saber se pode ou não receber a certificação. Para (não) finalizar Texto integrador, ao final do módulo, que motiva o aluno a continuar a aprendizagem ou estimula ponderações complementares sobre o módulo estudado.
6
Introdução A Tecnologia da Informação tendo sido a área de maior crescimento desde as duas últimas décadas do século passado, quando todos os processos manuais passaram por automatização, ou seja, o computador passou a realizar tarefas antes realizadas à base de CPM (caneta, papel e mão). A grande quantidade de processos manuais a serem automatizados trouxe à tona diversas modalidades tecnológicas para a criação de sistemas, passando de planilhas e arquivos até grande servidores nas “nuvens” disponibilizando informações a qualquer momento, em qualquer lugar, por meio da Internet. Ao mesmo passo, surgiram diversas formas de criação dos sistemas com linguagens próprias para entendimentos dos bits computacionais, as chamadas “Linguagens de Programação”, que hoje, ultrapassam o numero de duzentas linguagens, sendo vinte delas as mais utilizadas e que compõe todos os sistemas atualmente em execução, segundo índice TIOBE. Dentre estas linguagens, a linguagem de programação Java, foco deste conteúdo, é a linguagem mais utilizada no mundo para desenvolvimento de sistemas, principalmente para Sistemas para Internet (Web) e Sistemas Móveis (tablets, smartphones, TV digital, entre outros). Surgida em meados de 1991, por um grupo de pesquisadores da empresa Sun Microsystems, hoje pertencente a Oracle, a linguagem Java inicialmente batizada de Oak, ganhou o mundo em 1995 com o advento da Internet. Em seu projeto original, chamado de Green Project, os mentores James Gosling, Patrick Naughton e Mike Sheridan, tinham por objetivo permitir a convergência dos computadores com os equipamentos eletrodomésticos utilizados no dia a dia, o que acabou favorecendo a entrada do Java como principal linguagem de programação para Internet, justamente por permitir que os sistemas criados a partir dela fossem executados a partir de qualquer plataforma de software e hardware. Esta técnica, até hoje vigente e também exercida por outras linguagens de programação, é chamada de JVM (Java Virtual Machine). A Java Virtual Machine, ou, Máquina Virtual Java, é responsável por traduzir os programas escritos em Java (bytescodes) na linguagem da máquina em execução, independentemente do fabricante, configurações ou softwares, ou seja, totalmente portável. Eis que o lema do Java é: “Write once, run anywhere”, na tradução: “Escreva uma vez e execute em qualquer lugar”. A estrutura de funcionamento do Java é apresentado na figura 1. A partir do código escrito em Java (arquivo com extensão.java), feito o processo de compilação (comando javac), no qual é realizada a fase de análise sintática e semântica, verificando se a escrita e o sentido escritos estão de acordo com as regras da linguagem. Se a compilação estiver ok, é gerado o conjunto de bytecodes, códigos estes que são interpretados pela JVM permitindo a execução em qualquer hardware e software.
7
É importante ressaltar que a JVM deve estar instalada no local de execução, exemplo: se a execução ocorrer em Sistema Operacional Windows, é necessário que a JVM para Windows esteja instalada.
Figura 1. Estrutura de funcionamento do Java.
Figura adaptada e disponível em: <http://www.devmedia.com.br/entenda-como-funciona-a-java-virtual-machinejvm/27624>. Acesso em: 20 ago. 2013)
Um profissional desenvolvedor de sistemas, não somente deve ter o domínio da linguagem, mas deve também ser capaz de entender as necessidades de um cliente, modelar estas necessidades e transformar em um sistema faz parte hoje do coração e do crescimento das organizações, sejam de pequeno, médio ou grande porte. Por isso, o profissional que detém o conhecimento de Java é um dos mais valorizados neste cenário. O curso irá propiciar a compreensão dos conceitos fundamentais de Sistemas de Informação e Banco de Dados, que convergem no alicerce de todos os sistemas computacionais. Serão abordados todos os itens da Engenharia de um Software, desde a análise das necessidades cruciais para a criação de um sistema e a modelagem do sistema no padrão UML, até como realizar a Gestão de Projetos. Todo este alicerce disponibiliza ao aluno a preparação necessária para se aprofundar nos conceitos fundamentais de Java e na utilização do Java para a criação de Sistemas para Internet. O curso também apresenta comparativos com diversas linguagens de programação legadas, presentes e futuras, e mostra onde o Java está incluído no cenário de Sistemas Móveis.
8
Objetivos »» Entender os conceitos de Orientação a Objetos aplicados à Java. »» Compreender a estrutura da linguagem de programação Java. »» Entender como codificar, compilar e executar programas em Java. »» Analisar padrões de programação. »» Compreender a sintaxe de lógica de programação para Java. »» Compreender os princípios da criação de um sistema baseado em Java.
9
10
Orientação a Objetos
Unidade i
capítulo 1 Conceitos de orientação a objetos aplicados no desenvolvimento de Softwares
O que é a orientação a objetos A programação em computadores, apesar de ser criada muito antes, passou a ter uso nas empresas em meados dos anos 1970, com objetivos da automatização de processos manuais. O formato que dominava a programação dos sistemas é a chamada programação linear e estruturada, onde a sequência lógica é realizada em um único arquivo ou em poucos arquivos, contendo inicio, meio e fim, não podendo ser reaproveitado por outros sistemas, a não ser por meio de “copy & paste”, ou seja, copia explícita de trechos do código. Com o aumento na produção de sistemas e com a expressa necessidade de reaproveitamento de códigos, este processo antes – inicialmente tão positivo– passou a se tornar repetitivo e trabalhoso, pois toda e qualquer atualização no sistema deveria ser realizada em todas as partes que eram replicadas. Pois bem,mediante a esta situação que causava além do desgaste técnico, peso financeiro às empresas, novas técnicas surgiram para otimizar estes problemas. Eis que surge o modelo de objetos, baseado nos moldes já milenares da vida do ser humano. Trazer para a programação os conceitos de objetos e mais do que isso, a criação de moldes de objetos, capazes de representar uma série de objetos, favoreceu toda uma nova linha de sistemas otimizados, facilmente reaproveitáveis e de fácil atualização. Para melhor representar a diferença, façamos a analogia com uma fábrica de sapatos. Para fabricar sapatos, é necessário que seja desenhado um molde do sapato, com todas as propriedades que os sapatos fabricados terão, tais como medida, tipo de material a ser utilizado, cores, entre outros. A partir de um único molde, é possível fabricar um, dois ou um milhão de sapatos, cada qual com sua medida, material e cor. Portanto, um mesmo molde é utilizado para a criação de vários objetos.
11
UNIDADE I │ Orientação a Objetos Esta analogia é, a longo tempo, aplicada na criação de sistemas por meio da Programação Orientada a Objetos, nos quais os moldes são criados pensando no mundo real e são chamadas de Classes e – em tempo de execução (fabricação)– os objetos são gerados cada qual com suas informações. Caso uma atualização seja necessária, a Classe é alterada, e a mudança é refletida para todos os sistemas que utilizam este molde, e consequentemente, a todos os objetos gerados também. A figura abaixo representa as Classes e Objetos de um sistema Orientado a Objetos, no qual o molde é representado pelo quadrante (Classe) Pessoa e os objetos pelos quadrante Objeto #1, #2 e #3.
Figura 2. Sistema Orientado a Objetos.
12
Orientação a Objetos │
UNIDADE I
Programação orientada a objetos Para entender uma linguagem de programação orientada a objetos, é necessário antes o entendimento de dois itens cruciais: linguagem de programação e objeto. »» Uma linguagem de programação é um método padronizado para expressar instruções para um computador, ou seja, é uma forma para o computador entender e interpretar o que é solicitado. O entendimento e a interpretação são realizados por meio de um conjunto de regras sintáticas (gramatical) e semânticas (significado) usadas para definir um programa de computador. As regras sintáticas representam a gramática a ser entendida para a linguagem, enquanto as regras semânticas conduzem o significado, ou seja, o sentido que a linguagem quer dar para o computador entender. »» Um objeto, como descrito já anteriormente, é gerado a partir de um molde, ou classe, seguindo os princípios do mundo real. Um objeto representa uma entidade que pode ser física, conceitual ou de software.Física quando representa um modelo físico, como um caminhão, óculos, prédio, etc.; conceitual quando representa formas abstratas, não palpáveis, como a matemática, o pensamento, o sentimento, entre outros; e de software quando representa sistemas, como um usuário, e-mail, acesso, entre outros. Portanto, a programação orientada a objetos é a um sequência de instruções enviadas ao computador que utiliza e manipula objetos em seu funcionamento. É também definido como um paradigma de análise, projeto e programação de sistemas de informação, pois não é resumido somente em “codificação” de lógicas manipulando objetos. A base de sucesso é que as fases de analise das necessidades do sistema e de projeto sejam analisadas dentro dos mesmos princípios que a programação.
Princípios de orientação a objetos O alicerce da Programação Orientada a Objetos é baseado em quatro princípios, dos quais devem ser pensados e refletidos nas três fases de análise, projeto e programação: »» Abstração: entendimento e análise das necessidades do sistema abstraindo o mundo real. Ex.: Se o sistema é de cadastro de alunos, os moldes (classes) devem ser pensados com base nas características reais de um aluno (registro, nome, endereço, curso, etc.) e que sejam relevantes para o sistema, por exemplo, para este sistema não é necessário a informação do nome da tia avó do aluno. Realize o processo de abstração para o cadastro de professores de um sistema acadêmico.
13
UNIDADE I │ Orientação a Objetos »» Encapsulamento: as classes devem possuir proteção em seus acessos, tal como os objetos do mundo real possuem. Ex.: Quando um cliente compra um liquidificador e deseja utilizá-lo, basta o cliente acionar os botões do liquidificador. Estes botões irão acionar os circuitos elétricos e placas internos, sem que o cliente tenha a necessidade de conhecimento do que ocorre dentro da “CAPSULA” do liquidificador. As classes devem possuir a mesma proteção, permitindo que outras classes somente acessem as suas funcionalidades, sem a necessidade de conhecimento da lógica que ocorre nela. »» Hierarquia: a organização das classes deve ser realizada em nível hierárquico, e duas perguntas são básicas para esta organização: IS-A (É-UMA) e HAS-A (TEMUMA). É necessário perguntar se uma classe É-UMA parte hierárquica de outra, ou se contem outra classe. Exemplo: supondo as classes Aluno, Professor, Pessoa e Disciplina. »» Aluno É-UM Professor? Aluno TEM-UM Professor? Em ambos os casos a resposta é “NÃO”, portanto Aluno e Professor não possuem uma ligação direta. »» Aluno É-UMA Pessoa? Aluno TEM-UMA Pessoa? O primeiro questionamento tem “SIM” como resposta, portanto Aluno possui uma ligação hierárquica de “Herança” com Pessoa (Herança é um conceito que será visto mais adiante). »» Aluno É-UMA Disciplina? Aluno TEM-UM Disciplina? O segundo questionamento tem “SIM” como resposta, portanto Aluno possui uma ligação direta com Disciplina, havendo a necessidade da declaração de uma referencia de Disciplina dentro da classe Aluno. Experimente realizar esta organização a partir da classe Professor.
»» Modularização: assim como no mundo real, a programação orientada a objetos permite a criação de componentes modulares, que podem ser reutilizados para diversos sistemas distintos. Ex.: a classe Aluno, se muito bem criada nos princípios citados anteriormente, pode ser utilizada tanto para o sistema de cadastro de alunos, quanto para o sistema financeiro, consulta ao boletim, entre outros.
Terminologias de orientação a objetos Algumas terminologias em Orientação a Objetos são essenciais para o entendimento e composição do Java. As terminologias, segundo conceitos no site da Oracle, são: »» Herança (ou generalização) é o mecanismo pelo qual uma classe (subclasse) pode estender outra classe (superclasse), aproveitando seus comportamentos (métodos)
14
Orientação a Objetos │
UNIDADE I
e variáveis possíveis (atributos). Um exemplo de herança: mamífero é superclasse de humano,ou seja, um humano é um mamífero. Há herança múltipla uma subclasse possui mais de uma superclasse. Essa relação é normalmente chamada de relação «é um». »» Polimorfismo consiste em quatro propriedades que a linguagem pode ter (atente para o fato de que nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo): Universal: »» Inclusão: um ponteiro para classe mãe pode apontar para uma instância de uma classe filha (exemplo em Java: “List lista = new LinkedList();” (tipo de polimorfismo mais básico que existe). »» Paramétrico: restringe- se ao uso de templates (C++, por exemplo) e generics (Java/C♯). Ad-Hoc: »» Sobrecarga: duas funções/métodos com o mesmo nome, mas assinaturas diferentes. »» Coerção: a linguagem que faz as conversões implicitamente (como, por exemplo, atribuir um int a um float em C++, isto é aceito mesmo sendo tipos diferentes, pois a conversão é feita implicitamente) »» Interface é um contrato entre a classe e o mundo externo. Quando uma classe implementa uma interface, ela está comprometida a fornecer o comportamento publicado pela interface1. Já segundo (Classe - programação), uma classe abstrata é desenvolvida para representar entidades e conceitos abstratos. A classe abstrata é sempre uma superclasse que não possui instâncias. Ela define um modelo (template) para uma funcionalidade e fornece uma implementação incompleta – a parte genérica dessa funcionalidade – que é compartilhada por um grupo de classes derivadas. Cada uma das classes derivadas completa a funcionalidade da classe abstrata adicionando um comportamento específico. Uma classe abstrata normalmente possui métodos abstratos. Esses métodos são implementados nas suas classes derivadas concretas com o objetivo de definir o comportamento específico. O método abstrato define apenas a assinatura do método e, portanto, não contém código. Por outro lado, as classes concretas implementam todos os seus métodos e permitem a criação de instâncias. Uma classe concreta não possui métodos abstratos e, geralmente, quando utilizadas neste contexto, são classes derivadas de uma classe abstrata.
15
PROGRAMAçÃO JAVA
Unidade iI
capítulo 1 Programação java – ponta pé inicial Neste capítulo você conhecerá quais ferramentas são necessárias para desenvolver a programação Java e realizar o primeiro exemplo utilizando a ferramenta Eclipse. Além disso conhecerá toda a estrutura básica do Java, como o desenvolvimento de classes, atributos e métodos, e geração de Javadoc.
Ponta pé inicial Para desenvolvimento Java isso é necessário conhecer sobre IDEs (Integrated Deveploment Environments) ou Ambiente de Desenvolvimento Integrado, que é um programa de computador que reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo. Geralmente os IDEs facilitam a técnica de RAD (Rapid Application Development, ou “Desenvolvimento Rápido de Aplicativos”), que visa a maior produtividade dos desenvolvedores. Exemplos de IDEs para desenvolvimento na plataforma Java: »» Eclipse; »» NetBeans; »» Jdeveloper; »» IBM RAD (Rational Application Developer for WebSphere Software). As características e ferramentas mais comuns encontradas nos IDEs são: »» Editor- edita o código-fonte do programa escrito na(s) linguagem suportada(s) pela IDE. »» Compilador- compila o código-fonte do programa. »» Debugger (Depurador)- auxilia no processo de encontrar e corrigir defeitos no código-fonte do programa.
16
PROGRAMAçÃO JAVA │
UNIDADE II
»» Modelagem- criação do modelo de classes, objetos, interfaces, associações e interações dos artefatos envolvidos no software com o objetivo de solucionar as necessidades-alvo do software final. »» Geração de código- geração de código a partir de templates de código comumente utilizados para solucionar problemas rotineiros. »» Deploy (Distribuição)- auxilia no processo de criação do instalador do software, ou outra forma de distribuição. »» Testes Automatizados- realiza testes no software de forma automatizada, com base em scripts ou programas de testes previamente especificados, gerando um relatório, assim auxiliando na análise do impacto das alterações no código-fonte. »» Refactoring (Refatoração)- consiste na melhoria constante do código-fonte do software, seja na construção de código mais otimizado, mais limpo e/ou com melhor entendimento pelos envolvidos no desenvolvimento do software. Eclipse é um IDE desenvolvido em Java, seguindo o modelo open source de desenvolvimento de software. O projeto Eclipse foi iniciado na IBM que desenvolveu a primeira versão do produto e doou-o como software livre para a comunidade. O Eclipse possui como características marcantes o uso da SWT e não do Swing como biblioteca gráfica, a forte orientação ao desenvolvimento baseado em plug-ins e o amplo suporte ao desenvolvedor com centenas de plug-ins que procuram atender as diferentes necessidades de diferentes programadores. Com o uso de plug-ins, pode ser usado não só para desenvolver em Java, mas também em C/C++, PHP, ColdFusion e até mesmo Python. Abaixo segue uma visão lógica de uma IDE:
Figura 3. Visão lógica de uma IDE (visão macro).
17
UNIDADE II │ PROGRAMAçÃO JAVA Figura 4. Visão lógica de uma IDE (visão detalhada).
Vamos agora praticar um pouco por meio do ambiente Eclipse. Para isso, segue a sequência de passos abaixo, desde o download até a execução do primeiro programa.
»» Para realizar o download do Eclipse, basta acessar <http://www.eclipse.org/ downloads/> e escolher a versão “Eclipse IDE for Java EE Developers” para o Sistema Operacional de sua escolha. O Eclipse não é um software instalável, é necessário simplesmente realizar o download e acessar o arquivo principal de execução.
»» Abra o Eclipse e selecione um diretório do seu computador como Espaço de Trabalho (workspace).
Figura 5. Escolha da Workspace (diretório de trabalho).
18
PROGRAMAçÃO JAVA │
UNIDADE II
»» Vamos criar um novo projeto: no menu “FILE” acesse “NEW” e logo após o item “PROJECT”, conforme figura abaixo.
Figura 6. Criação de um novo projeto (parte 1).
»» No item “JAVA” selecione a opção “JAVA PROJECT” para criar um projeto Java (JSE – Java Standart Edition).
Figura 7. Criação de um novo projeto (parte 2).
19
UNIDADE II │ PROGRAMAçÃO JAVA »» Dê um nome ao projeto, no caso a sugestão é “Primeiro Projeto” e finalize o procedimento. Note na figura abaixo que é utilizada a versão “jre6” (ou JavaSE-1.6) do Java. Mas a escolha da versão sempre fica a critério do programador. Até a data de confecção deste material o Java está na versão 7, com lançamento próximo da versão 8. Mas as versões mais utilizadas no mercado são as versões 4 (para sistemas mais antigos) e versões 5 e 6 para sistemas mais novos, por se tratarem de versões bem estáveis.
Figura 8. Criação de um novo projeto (parte 3).
»» Na figura abaixo é apresentado o ambiente de desenvolvimento de Java no Eclipse. Do lado esquerdo é localizado o “Package Explorer”, no qual a estrutura e organização dos projetos serão visualizados. Na parte central (em cinza) é localizado o editor de código Java e na parte inferior central são localizadas abas gerenciais, tais como identificação de problemas, visualização Javadoc e console de saída. Como o Eclipse é uma IDE, toda a composição da tela pode ser alterada pelo usuário bastante arrastar cada item de um lado para o outro.
20
PROGRAMAçÃO JAVA │
UNIDADE II
Figura 9. Ambiente de Desenvolvimento.
»» Vamos começar a programar! O primeiro passo para programar é começar pela arquitetura do programa, ou seja, criar pastas, o que dentro de programação orientada a objetos chamamos de pacotes, que é uma forma de organizar melhor a estrutura e organização das classes que compõe o sistema. Para isso clique bom o botão direito na pasta “src” do seu projeto e selecione a opção “package”, conforme figura abaixo.
Figura 10. Criação de pacote (parte 1).
21
UNIDADE II │ PROGRAMAçÃO JAVA »» Nomeie o pacote, sempre separando as “pastas” por ponto (.), como na figura abaixo, em que será criada uma pasta superior chamada “com” e uma subpasta chamada “exemplo”.
Figura 11. Criação de pacote (parte 2).
»» Agora sim! Projeto criado, organização de pastas criada, vamos criar uma classe, a primeira classe. Com o botão direito no pacote recém-criado, selecione a opção “new” e logo após o item “Class”.
Figura 12. Criação de classe (parte 1).
»» Nomeie a classe. Como sugestão: “PrimeiraClasse”. E finalize o procedimento.
22
PROGRAMAçÃO JAVA │
UNIDADE II
Figura 13. Criação de classe (parte 2).
»» Abaixo você pode acompanhar que a classe foi criada e já aberta pelo editor com uma codificação básica que são os comandos “package” para a criação do pacote (que fizemos pela IDE anteriormente) e da “public class” para a criação da classe.
Figura 14. Criação de classe (parte 3).
23
UNIDADE II │ PROGRAMAçÃO JAVA »» Vamos agora escrever o conteúdo da classe conforme segue abaixo. A instrução “System.out.println” é utilizada para imprimir informações na console do Java.
Figura 15. Criação de classe (parte 4).
»» Pronto. Salve esta classe com o atalho “CTRL+S” ou o botão tradicional de gravação localizado nos ícones de menu. »» Vamos executar a classe criada. Basta clicar com o botão direito na classe, logo após escolher a opção “Run as” e o item “Java Application”. É possível também executar por meio do botão “play” localizado nos ícones de menu ou por meio do atalho “F11”. Note que tudo é passível de configuração no Eclipse.
Figura 16. Execução da classe.
24
PROGRAMAçÃO JAVA │
UNIDADE II
»» O resultado aparecerá na aba console conforme abaixo. Figura 17. Resultado esperado.
Pronto! Seu primeiro projeto foi executado! O Java não é uma programação tão complicada o quanto se imagina. Os ambientes de IDE são ferramentas poderosíssimas para o desenvolvimento produtivo.
Antes de partir para o próximo passo do material, “brinque” dentro do Eclipse. Faça diversos testes. Observe o “poder” dos atalhos “CTRL+ESPAÇO”, “CTRL+SHIT+O”, “CTRL+A – CTRL+I”, entre outros.
25
capítulo 2 Programação java – sintaxe básica
Sintaxe Toda classe na orientação a objetos, independentemente da linguagem de programação, contém uma estrutura básica, composta pelo nome, atributos que caracterizem a classe e operações (métodos) que funcionalizam a classe e todos os objetos que por ela forem gerados. Neste capítulo, você fará a imersão no entendimento e nos comandos em Java para criação de classes, atributos, métodos, construtores, e também na sintaxe para codificação de pacotes, modificadores de acesso e operadores aritméticos.
Pacote e importação Pacote é um mecanismo de propósito geral da orientação a objetos para organizar elementos em grupos. De forma análoga, pacotes são criados na programação tal como pastas são criadas em um computador pessoal, ou seja, para melhor organizar os arquivos e de mais fácil acesso ao buscá-los. Em Java, o pacote é o primeiro item a ser declarado no corpo da classe. As subpastas (subpacotes) são criadas pelo mesmo comando por meio da utilização de um ponto (.) responsável por esta criação. Exemplo:
Figura 18. Estrutura de pacotes.
A partir da organização das classes em pacotes, faz- se necessário um processo para que uma classe passe a enxergar classes de pacotes diferentes. Para isso existe o comando “import”, responsável por importar as referencias das classes de um pacote para que a classe chamadora possa utilizar. Para realizar a importação, basta utilizar o comando “import” após a declaração de pacotes. É possível realizar a referencia de uma única classe: Exemplo: import com.tiposdados.TiposDados;
26
PROGRAMAçÃO JAVA │
UNIDADE II
ou de todas as classes do pacote por meio da utilização do asteriscos (*): Exemplo: import com. tiposdados.* ;
Figura 19. Utilização do “import”.
Instanciação Um objeto, em resumo, é uma instância de uma classe. Um objeto é uma entidade concreta - apesar de sua concepção abstrata - que possui: »» Identidade própria: característica que o distingue dos demais objetos. »» Estado: conjunto de valores de seus atributos em um determinado instante. »» Comportamento: reação apresentada às solicitações feitas por outros objetos com os quais se relaciona. Para instaciar um objeto em Java é utilizado operador new, conforme exemplos abaixo: »» Carro carro = new Carro(); »» Carro carroNovo = new Carro(); »» Profissão profissão = new Profissão(); »» String descrição = new String(); O elemento escrito após o operador new é a classe do qual o objeto terá a base para criação. O elemento escrito antes do operador igual (=) é a declaração da variável que irá controlar o objeto. Na maioria das instanciações pode ser observado que o nome da classe se repete tanto como base para criação do objeto (apos o operador new) quanto para a declaração da variável (antes do operador igual). Isso ocorre, pois, para controlar um objeto é necessário que este controle tenha a estrutura da classe que gerou o objeto ou esteja na mesma hierarquia. Uma analogia de fácil entendimento é se pensarmos em um televisor e seu controle remoto. Para controlar as funções do televisor é necessário ter um controle remoto específico para aquele televisor ou um controle que se compatível.
27
UNIDADE II │ PROGRAMAçÃO JAVA
Classe Na programação orientada a objetos, a classe é a unidade básica de programação. Todos os programas são escritos como um conjunto de classes, e todos os códigos que você escrever devem fazer parte de uma classe. Em Java, as definições de classe são armazenadas em arquivos separados com a extensão .java e o nome do arquivo deve ser igual ao nome da classe que tiver sido definida dentro dele Por convenção, uma classe em Java é sempre escrita em UpperCamelCase. Exemplos: »» Carro; »» Funcionário Padrão; »» Funcionário Padrão Terceirizado. UpperCamelCase: o modelo de escrita no formato de um camelo, em que os substantivos e nomes utilizados serão iniciados sempre com letras maiúsculas, com o objetivo de facilitar o entendimento. Exemplo sem UpperCamelCase: Funcionarioescritoriocomercial Com UpperCaselCase: FuncionarioEscritorioComercial A sintaxe básica para declaração de uma classe em Java: <modificador> class <NomeDaClasse>{ »» [declaracao de atributos] »» [declaracao dos construtores] »» [declaracao dos metodos] } Exemplo:
Figura 20. Estrutura de uma classe.
28
PROGRAMAçÃO JAVA │
UNIDADE II
Atributos O atributo é a caracterização de uma classe. Uma classe pode conter nenhum ou vários atributos, desde que sintetize adequadamente o sentido de existência da classe. Todo atributo armazenará valores quando os objetos forem gerados, para tanto o atributo necessita ser “tipado”, ou seja, declarado qual o tipo de informação que ele armazenará. O tipo definido para um atributo pode ser definido por meio da utilização de um tipo primitivo ou um tipo de referência da linguagem de programação a ser utilizada na implementação. Exemplo de declarações de atributos:
Figura 21. Estrutura de atributos.
Os tipos primitivos em Java são divididos em quatro categorias: booleanos, characteres, inteiros e pontos flutuantes. Os tipos de referencia são, nada mais nada menos, que a referencia a outras classes, que é a base de objetos ligados a objetos. »» Exemplo: String, Casa, Carro, Contrato Aluguel, Aluno, Professor. O quadro 1 apresenta os tipos mais utilizados e os exemplos de valores, e o quadro 2 representa todos os tipos de dados primitivos de Java.
Quadro 1. Tipos de dados mais utilizados.
Tipo
Descrição
Valores de exemplos
boolean
Valor verdadeiro ou falso
true ou false
char
Caractere
a, b, c, 1, 2, 3, @, !, #
int
Número inteiro
1, 2, 3, 1000, 5687
double
Número real
45.78, 0.5, 8.9324, 0.00089
String
Texto de qualquer tamanho
João Paulo, 09985-361, 28@
29
UNIDADE II │ PROGRAMAçÃO JAVA Quadro 2. Tipos de dados primitivos.
t Os atributos ou variáveis são nomes atribuídos a endereços na memória de um computador onde se guardam dados. A declaração de uma variável consiste em dar um nome para a posição de memória a ser usada e especificar qual tipo de dado que será armazenado na memória Para declarar uma variável, utiliza-se a seguinte sintaxe: <tipo> <nome da variável> É possível atribuir um valor a variável no momento da declaração, utiliza-se a seguinte sintaxe: <tipo> <nome da variável> = <valor da variável> No Java, também é possível declarar mais de uma variável do mesmo tipo de uma só vez, utiliza-se a seguinte sintaxe: <tipo> <nome da variável 1>, <nome da variável 2> Exemplos:
Figura 22. Declaração de atributos/variáveis.
30
PROGRAMAçÃO JAVA │
UNIDADE II
Para declarar uma String, utilizaremos por enquanto a seguinte sintaxe: String <nome da variável> = new String(); É possível atribuir o valor da String no momento da sua declaração, utiliza-se a seguinte sintaxe: String <nome da variável> = <valor da variável> Exemplos:
Figura 23. Declaração de atributos/variáveis.
Crie uma nova classe dentro do seu projeto com o nome “TipoString” e “brinque” de criar variáveis String. Utilize o comando “System.out.println” para imprimir na console os valores das strings criadas.
Operadores aritméticos Durante a programação, o programador se deparará com operações matemáticas tradicionais e necessárias para efetuar algumas lógicas. Abaixo segue um quadro que resume todos os operadores matemáticos e mais adiante exemplos da programação Java na utilização destes operadores e os resultados da execução.
Quadro 3. Operadores matemáticos
31
UNIDADE II │ PROGRAMAçÃO JAVA Figura 24. Exemplos de operações aritméticas.
Figura 25. Resultado esperados.
Crie uma nova classe dentro do seu projeto com o nome “OperacoesAritmeticas” e produza operações conforme o exemplo anterior.
Métodos e parâmetros Um método pode ser entendido como uma operação ou serviço oferecido por um objeto. O método é um comportamento específico, residente no objeto, que define como ele deve agir quando exigido. Portanto, os métodos definem as habilidades dos objetos. Um método em uma classe é apenas uma definição. A ação só ocorre quando o método é invocado (chamado) por meio do objeto. Do ponto de vista da implementação, em um programa orientado a objetos os métodos são implementados em funções colocadas no nível do objeto ao qual pertencem.
32
PROGRAMAçÃO JAVA │
UNIDADE II
Por convenção, o nome de um método em Java, assim como de um atributo, é sempre escrito em lowerCamelCase. Por exemplo: exibirTotal, calcularAreaTriangulo Sintaxe básica para declaração de um método: <modificador> <tipo de retorno> <nomeDoMetodo>(<[lista de argumentos]>){ [instrucoes]; } Exemplo:
Figura 26. Estrutura de métodos.
A tag <tipo de retorno> indica o tipo de valor que o método retornará. Se o método não for retornar nenhum valor, deve-se declarar o retorno como void. Para retornar o valor, utiliza-se a instrução return. Exemplo:
Figura 27. Estrutura de métodos e tipo de retorno.
33
UNIDADE II │ PROGRAMAçÃO JAVA A tag [lista de argumentos] permite passar valores para o interior de um método. Os elementos da lista ficam separados por vírgula e, cada um pode ter um tipo de dado distinto. Exemplo:
Figura 28. Passagem de parâmetros.
Construtor Construtor, como o próprio nome diz, é uma técnica de programação orientada a objetos para auxiliar na construção de objetos a partir da estrutura de uma classe. Desempenha papel essencial no processo de instanciação de uma classe e também é utilizado para inicializar os atributos com valores padrão ou com valores informados. O construtor é um método especial que é invocado quando o operador new é acionado pela classe chamadora. Mas apesar de ter a estrutura de um método, um construtor não possui valor de retorno (nem mesmo void) e possui o mesmo nome da classe. Toda classe tem pelo menos um construtor sempre definido. Quando o construtor não é especificado, a linguagem Java fornece um construtor default (padrão) - vazio - que não recebe parâmetros. Mas se for declarado algum construtor na classe, o construtor padrão não será mais declarado, ou melhor, fornecido pelo Java. Exemplo de criação de um construtor:
Figura 29. Exemplo de Construtor.
34
PROGRAMAçÃO JAVA │
UNIDADE II
Exemplo da utilização de um construtor: »» Carro carro = new Carro() Exemplo de criação de um construtor para parâmetros:
Figura 30. Exemplo de Construtor de Classe.
Exemplo da utilização de um construtor com parâmetros: »» Carro carro = new Carro(“GOL”) Uma classe pode possuir nenhum ou vários construtores, conforme exemplo abaixo. Tudo depende da quantidade de opções para geração de objetos que são estipuladas. Quanto mais opções, maior usabilidade a classe terá.
Figura 31. Exemplo de criação de mais de um Construtor na Classe.
Modificadores de acesso Uma classe, um atributo, um método ou um construtor possuem em sua sintaxe um controle de acesso, comumente chamado de “modificador de acesso”, do qual permite a configuração do nível de
35
UNIDADE II │ PROGRAMAçÃO JAVA acesso que outras classes poderão ter a este item. O quadro abaixo resume quais os modificadores, onde podem ser utilizados e qual o nível de acessibilidade que ele permite.
Quadro 4. Tipos de dados primitivos
Símbolo
Palavra Reservada
-
private
+
Atributos e métodos são acessíveis somente nos métodos da própria classe. Este é o nível mais rígido de encapsulamento. Atributos e métodos são acessíveis somente nos métodos das classes que pertencem ao pacote em que foram criados.
~
#
Descrição
protected
public
Atributos e métodos são acessíveis nos métodos da própria classe e suas subclasses e também nos métodos das classes que pertencem ao pacote em que foram criados. Atributos e métodos são acessíveis em todos os métodos de todas as classes. Este é o nível menos rígido de encapsulamento.
Comentários e javadoc Comentários são notas que podem ser incluídas no código fonte para descrever o que se quiser. Assim, não modificam o programa executado e servem somente para ajudar o programador a melhor organizar os seus códigos. Existem três tipos de comentários em Java: »» Comentário de uma linha, utiliza-se a seguinte sintaxe: // <comentário> »» Comentário de uma ou mais linhas, utiliza-se a seguinte sintaxe: /* <comentário> */ »» Comentário de documentação,utiliza-se a seguinte sintaxe: /** <comentário> */ Exemplos: //Este é um comentário de uma linha /* Este é um comentário de uma ou mais linhas */
36
PROGRAMAçÃO JAVA │
UNIDADE II
/** Este é um comentário de documentação Javadoc @param x O valor de X @return O valor de Y @see java.util.String */ Javadoc é um gerador de documentação, criado pela Sun, para documentar a API do Java, a partir do código-fonte. A partir de um comando javadoc, é possível criar a documentação no formato HTML das classes, exibindo comentários de classes, construtores e métodos. Os comentários destinados à documentação do código-fonte deverão estar escritos no formato: /** <comentario> */ Nos comentários Javadoc algumas tags são utilizadas para dar um significado próprio a trechos do comentário, as tags mais comuns são: @param, @return, @throws, @see É possível gerar a documentação pelo comando javadoc, exemplo: javadoc *.java
Tabela 1. Tabela de Tags de Javadoc.
37
UNIDADE II │ PROGRAMAçÃO JAVA Exemplo:
Figura 32. Exemplo de desenvolvimento de Javadoc.
Para mostrar a aba de Javadoc, siga os seguintes passos: Selecione a opção “Windows” no Menu, logo após a opção “Show View” e em seguida “Javadoc”. Caso mesmo assim não apareça, selecione em “Show View” a opção “Other” e digite “Javadoc” para selecionar o item.
Figura 33. Visualização da aba Javadoc.
38
PROGRAMAçÃO JAVA │
UNIDADE II
Já para gerar a versão de documentação Javadoc para Web basta clicar com o botão direto na classe (ou no projeto), selecione a opção “Export” e depois “Javadoc”. Siga os passos até finalizar. Será gerada uma pasta “doc” no seu projeto. Logo após, basta acessar o arquivo index.html (abrir em um navegador) para visualizar a documentação conforme figura abaixo.
Figura 34. Visualização da documentação Web Javadoc.
39
capítulo 3 Programação java – comandos de lógica Neste capítulo você conhecerá os comandos em Java para efetuar lógica de programação, tal como o famoso IF-ELSE, comandos de repetição e vetores.
Programação java – comandos de lógica Até este momento do material, foi explicado toda a parte estrutural e conceitual do Java. Já é possível o desenvolvimento de um projeto, mas falta a parte lógica, ou seja, a sequência funcional de desenvolvimento que será incluída dentro dos métodos a serem criados. Comandos de decisão, estruturas de repetição, vetores e tratamento de erros, são os itens a serem abordados neste capítulo.
Comandos de decisão Para efetuar a lógica funcional dos sistemas, é necessário atribuir comandos de tomada de decisão, os famosos IF-ELSE, e outras técnicas que o Java permite. Para utilização de comandos de decisão, é necessário seguir a seguinte sintaxe: if( <condição lógica> ) { <instruções> } Exemplo: if(x > 10){ System.out.println(“X eh maior que 10”); System.out.println(“ ***** FIM ***** “); } Já para trabalhar com comandos de decisão compostos, a sintaxe é: if( <condição lógica> ){ <instruções> } else { <instruções> }
40
PROGRAMAçÃO JAVA │
UNIDADE II
Exemplos: if (x > 10){ System.out.println(“X eh maior que 10”); } else { System.out.println(“X eh menor ou igual a 10”); } if(x > 10){ System.out.println(“X eh maior que 10”); } else if(x == 10) { System.out.println(“X eh igual a 10”); } else { System.out.println(“X eh menor que 10”); } Existe também, além do famoso IF-ELSE, comando mais bem estruturado, chamado SWITCHCASE, conforme segue a sintaxe: switch(<variável inteira>) { case <constante 1> :{ <instruções> break; } case <constante 2> : { <instruções> break; } case <constante N> :{ <instruções> break; } default:{ <instruções> } }
41
UNIDADE II │ PROGRAMAçÃO JAVA No exemplo abaixo, é possível perceber que a analogia é extremamente parecida com o IF-ELSE, em que a condição a ser testada é colocada entre os parênteses. switch(opcao){ case 1: { System.out.println(“Opcao 1(Novo) - selecionada”); break; } case 2: { System.out.println(“Opcao 2(Imprimir) - selecionada”); break; } case 3: { System.out.println(“Opcao 3(Sair) - selecionada”); break; } default: { System.out.println(“Opcao invalida, selecione 1,2 ou 3”); } } Vale ressaltar que a partir da versão Java 7 é possível utilizar qualquer String como elemento de teste de decisão no SWITCH-CASE, o que nas versões anteriores não era possível, sendo utilizados somente tipos primitivos. Exemplo: switch(opcao){ case “windows”: { System.out.println(“Windows XP - selecionado”); break; } case “linux”: { System.out.println(“Ubuntu 12.10 - selecionado”); break; }
42
PROGRAMAçÃO JAVA │
UNIDADE II
default: { System.out.println(“Nenhum SO foi selecionado”); } }
Estruturas de repetição Assim como condições lógicas são bases integrantes de uma boa lógica funcional para o sistema, estruturas de repetição favorecem uma lógica dinâmica. Estruturas de repetição são utilizadas para percorrer uma sequência diversas vezes até que um ponto de parada seja atingido. Dentro de Java existem 3 formas de lógica de repetição: while, do while e for. Sintaxe do comando while: while( <condição lógica> ){ <instruções> } Exemplo: int i = 0; while(i < 100){ System.out.println(“i=” + i); i++; } Sintaxe do comando do while: do{ <instruções> } while( <condição lógica> ); Exemplo: int i = 0; do{ System.out.println(“i=” + i); i++; }while(i < 100);
43
UNIDADE II │ PROGRAMAçÃO JAVA
Os comandos WHILE e DO WHILE possuem os mesmos objetivos. A grande diferença é que no comando DO WHILE o condicionamento é realizado sempre após a lógica ter sido executada uma vez. Já no WHILE a condição é realizada sempre antes da primeira passagem pela lógica. Sintaxe do comando FOR: for( <inicialização>; <condição lógica> ; <incremento ou decremento> ){ <instruções> } Exemplos: for(int i = 0; i < 100; i++){ System.out.println(“i=” + i); } int j; for(j = 100; j > 0; j--){ System.out.println(“j=” + j); } O comando FOR possui o mesmo objetivo dos comandos WHILE e DO WHILE. A grande diferença é que no comando FOR as variáveis que controlam a quantidade de repetição bem como o seu controle de incremento ou decremento, são realizadas no próprio comando, diferentemente dos demais do qual é necessário criar e controlar estas variáveis for dos comandos. Para complementar o estudo do comando FOR, vale a pena assistir ao vídeo em: <https://www.youtube.com/watch?v=rf754an8xvU>
Vetores No desenvolvimento Java, existem duas maneiras de se trabalhar com vetores, ou seja, armazenamento de mais uma informação. Podemos trabalhar com os vetores tradicionais, ou seja, na raiz da linguagem, ou vetores otimizados e dinâmicos dentro do Collections Framework. Independentemente da estrutura de vetores utilizada dentro do Java, é importante lembrar que as regras são as mesmas para quaisquer linguagens de programação, que são:
44
PROGRAMAçÃO JAVA │
UNIDADE II
»» estruturas de dados que podem armazenar mais de um valor do mesmo tipo de dado; »» os arrays têm comprimento fixo e não podem ser alterados; »» o tamanho de um vetor é obtido por meio da propriedade length; »» em Java, os arrays são objetos; »» têm comportamento de instâncias de classes; »» precisam ser declarados, instanciados e inicializados; »» existem dois tipos de arrays: vetores (arrays unidimensionais) e matrizes (arrays multidimensionais). Os vetores são arrays unidimensionais. Você pode imaginar como uma linha de uma tabela composta por várias células. Na figura abaixo, temos 8 células armazenando os números de 1 a 8.
Figura 35. Vetor unidimensional.
Declaração de um vetor: <tipo>[ ] <nome>; ou <tipo> <nome>[ ]; Exemplos: int[ ] x; ou int x[ ]; Depois de declarar um vetor, é necessário instanciá-lo. A instanciação é o processo pelo qual um endereço de memória é alocado para um objeto. A sintaxe para instanciação de vetores é: <nome> = new <tipo>[<posições>]; Exemplo: x = new int[8];
45
UNIDADE II │ PROGRAMAçÃO JAVA É possível declarar e instanciar um vetor num único passo: »» Exemplos: ›› byte[ ] vetorByte = new byte[10]; ›› short[ ] vetorShort = new short[10]; ›› char[ ] vetorChar = new char[10]; ›› int[ ] vetorInt = new int[10]; ›› long[ ] vetorLong = new long[vetorInt.length]; ›› float[ ] vetorFloat = new float[10]; ›› double vetorDouble[ ] = new double[10]; ›› boolean vetorBoolean[ ] = new boolean[10]; ›› String vetorString[ ] = new String[10]; Já para realizar a inicialização de vetores, ou seja, começar os vetores com informações, existem 3 maneiras: int[ ] primos = new int[5]; primos[0] = 2; primos[1] = 3; primos[2] = 5; primos[3] = 7; primos[4] = 11; ou int[ ] primos = {2, 3, 5, 7, 11}; ou int[ ] primos = new int[ ]{2, 3, 5, 7, 11}; Já para obter valores de um vetor basta acessar o nome do vetor criado indicando qual a posição do vetor que deseja obter, utilizando conchetes ([ ]), conforme exemplo abaixo: int[ ] primos = new int[ ]{2, 3, 5, 7, 11}; System.out.println(“[2] = “ + primos [2]); System.out.println(“[4] = “ + primos [4]);
46
PROGRAMAçÃO JAVA │
UNIDADE II
No console teremos: [2] = 5 [4] = 11 Para obter os valores com laços de repetição, basta utilizar um comando de repetição associado ao vetor, conforme exemplo abaixo: //vetor de String a ser exibido String[ ] arrayNomes = new String[ ]{“Jose”, “Paulo”, “Alice”, “Marcos”}; for(int i=0; i < arrayNomes.length; i++) { System.out.println(“nome[“ + i + “] = “ + arrayNomes[i]); } Ou // Forma mais comum no Java utilizando o FOR-EACH for(String nome: arrayNomes) { System.out.println(“nome = “ + nome); } Vimos no conteúdo acima a matéria sobre Vetores, no qual foi citado que vetores são arrays unidimensionais e matrizes são arrays multidimensionais. Os vetores são utilizados em larga escala no mercado de desenvolvimento Java, enquanto as matrizes em menor escala. A partir do vídeo a seguir, sinta-se instigado a entender em quais área da computação que matrizes são mais utilizadas. Vídeo: <https:// www.youtube.com/watch?v=EYmmi7JCw6I>
Para complementar o estudo do Collections Framework, vale a pena a leitura do material em: <http://javafree.uol.com.br/artigo/847654/Collections-Framework.html>
Pacote é um mecanismo de propósito geral da orientação a objetos para organizar elementos em grupos. De forma análoga, pacotes são criados na programação tal como pastas são criadas em um computador pessoal, ou seja, para melhor organizar os arquivos e de mais fácil acesso ao buscá-los.
Tratamento de erros Durante a execução, as aplicações podem incorrer em vários tipos de exceções e erros de vários graus de severidade. Exceções e erros são problemas encontrados pelo computador ao tentar executar um comando. Alguns problemas comuns de execução ocorrem devido:
47
UNIDADE II │ PROGRAMAçÃO JAVA »» Falha na aquisição de um recurso. Exemplo: abrir um arquivo, conectar com o banco de dados. »» Tentativa de fazer algo impossível. Exemplo: divisão de um número por zero, acessar um índice inválido. »» Outras condições inválidas. Exemplo: evocar um método de um objeto que não foi instanciado, passagem de um parâmetro com um tipo incorreto durante a execução. A maioria dos programadores não testam todas as condições que podem gerar erros. O tratamento de exceções fornece uma maneira de verificar erros sem prejudicar o fluxo do programa. É uma maneira simples e clara de lidar com as “situações excepcionais” que podem surgir em tempo de execução. Em linhas gerais, o fluxo para tratamento de exceções no Java ocorre em três passos: »» Uma exceção é lançada ou disparada quando uma condição inesperada de erro é encontrada. »» A exceção é capturada em algum ponto do programa. »» Um tratamento adequado é realizado em algum pronto do programa. Figura 36. Processo de tratamento de erro.
Exceções não capturadas provocam a finalização do programa. Uma exceção é um objeto do tipo Exception. De acordo com o polimorfismo, um objeto do tipo Exception pode ser uma instância de qualquer subclasse de Exception, portanto, as exceções podem ser tratadas polimorficamente. Apenas as exceções definidas nas subclasses da classe Exception podem ser tratadas durante a execução do programa. Erros são problemas que não podem ser tratados durante a execução do programa, devendo o programa ser finalizado. Abaixo segue a figura contendo a hirarquia de Exception.
48
PROGRAMAçÃO JAVA │
UNIDADE II
Figura 37. Hierarquia de classes para tratamento de erro.
O Java classifica as exceções em duas categorias: »» checked (Exception); »» possível exceção na execução de um programa; »» deve ser tratada pelo programador; »» unchecked (Error, Runtime exception); »» error: Erro crítico que faz com que não seja mais possível executar a aplicação; »» runtime exception: Exceção provocada por código mal escrito/testado ou pela operação inadequada do sistema. Pode ser tratada pelo programador. Para tratar as exceções em tempo de execução, elas devem ser capturadas e manipuladas.
49
UNIDADE II │ PROGRAMAçÃO JAVA O Java tem duas estruturas importantes para tratamento de exceções: – try-catch – try-catch-finally Estas duas estruturas tem a finalidade de separar o código que executa as tarefas desejadas, das rotinas de tratamento de erros eventuais. Por meio destas diretivas é delimitado o trecho de código que será monitorado pela JVM. Quando um erro for gerado, o fluxo de execução é desviado de forma seletiva uma rotina de tratamento. Uma exceção pode ser tratada ou simplesmente lançada. O código dentro do bloco try representa um código que poderá gerar uma exceção, ou seja, um código “perigoso” para execução. Um bloco try é seguido por um ou mais blocos catch. Caso uma exceção seja lançada, o bloco try é finalizado e o fluxo de execução procura um bloco catch adequado para tratar a exceção. Cada bloco catch trata um tipo específico de exceção. Depois de executar um bloco catch, o fluxo de execução do programa continua na primeira instrução depois do último bloco catch. Uma exceção não capturada é uma exceção para a qual não existe nenhum bloco catch correspondente. A captura das diferentes exceções pelos blocos catch funciona da seguinte forma: »» Apenas o primeiro catch que se encaixar com o tipo da exceção lançada é executado; por isso, as exceções mais específicas – de nível mais baixo na hierarquia de classes – devem ser escritas nos primeiros catch. »» A exceção do tipo Exception é a mais geral possível – ancestral de todas as exceções –, então um bloco catch que receba uma exceção desse tipo pode capturar qualquer tipo de exceção que for lançada. »» Por isto sempre aparece por último numa sequência de blocos catch. »» Se nenhum catch capturar a exceção, acontecerá o mesmo que aconteceria caso os comandos try-catch não fossem usados. Formato geral: try{ //fluxo normal, codigo que pode gerar uma Exception }catch(Exception1 e){ //fluxo alternativo, caso a Exception1 seja gerada }catch(Exception2 ex){ //fluxo alternativo, caso a Exception2 seja gerada }
50
Exemplo: Scanner scann = new Scanner(System.in); int dividendo = scann.nextInt(); int divisor = scann.nextInt(); try{ int resultado = dividendo/divisor; System.out.println(“Resultado: “ + resultado); }catch(ArithmeticException e){ System.err.println(“Erro ao dividir: “ + dividendo + “ por “+ divisor); } No Java 7, é possível tratar mais de uma exceção no mesmo bloco catch. Formato geral: try{ //fluxo normal, codigo que pode gerar uma Exception }catch(Exception1 | Exception2 ex){ //fluxo alternativo, caso a Exception1 ou Exception2 seja
//gerada
} Exemplo: try{ int resultado = dividir(dividendo, divisor); System.out.println(“Resultado: “ + resultado); }catch(ArithmeticException | IllegalArgumentException ex){ System.err.println(“Erro ao dividir:” + dividendo + “ por “ + divisor); } Já o bloco finally é executado sempre, independente de ter ocorrido ou não uma exceção: »» Se um bloco try falhar– gerar uma exceção –, o fluxo passará para o bloco catch correspondente. Após a execução do catch, o bloco finally será executado. »» Se o bloco try for bem sucedido – não gerar exceção –, o bloco finally será executado. É um bloco opcional, mas se estiver presente deve ser colocado depois do último bloco catch.
51
UNIDADE II │ PROGRAMAçÃO JAVA Formato geral: try{ //fluxo normal, codigo que pode gerar uma Exception }catch(Exception e){ //fluxo alternativo, caso a Exception seja gerada }finally{ //fluxo normal, codigo que sempre vai ser executado } Exemplo: Scanner scann = new Scanner(System.in); try{ int dividendo = scann.nextInt(); int divisor = scann.nextInt(); int resultado = dividendo/divisor; System.out.println(“Resultado: “ + resultado); }catch(ArithmeticException e){ System.err.println(“Erro ao executar a divisao”); } catch(InputMismatchException ex){ System.err.println(“Entrada de dados invalidos!”); } finally{ System.out.println(“Finalizando a execucao do programa”); } Para complementar o estudo do Tratamento de Exceção, vale a pena assistir ao vídeo em: <https://www.youtube.com/watch?v=g9IRDMML4wc>
52
Para (não) Finalizar Os diversos canais de Java É bem factível que o mundo de tecnologia possua uma imensidão de tecnologias para produção de softwares, e cada qual com suas características específicas. O Java, apesar de hoje ser um produto da Oracle, é opensource, ou seja, possui uma influência muito grande de diversas comunidades de desenvolvedores que apoiam a criação de novas funções para a linguagem. O Java também é a linguagem mais utilizada no mundo devido a sua interoperabilidade, ou seja, de fácil adaptação a demais sistemas e metodologias. Tanto é que o Java é utilizado para diferentes canais de uso, tal como Web, Desktop (PC), Mobile (JME, Android e Blackberry OS), TV Digital, JavaCard, e mais ainda, de fácil integração com qualquer outra plataforma, tal como Mainframe, SAP, dotNET e PHP. Neste material, foi proposta a inicialização na linguagem Java, abordando os princípios baseados em orientação a objetos, ferramentas de desenvolvimento, estrutura de codificação e comandos de lógica. O próximo passo é adentrar em estruturas de conexão e comunicação com banco de dados, ou seja, qualquer formato de armazenamento de informações, permitindo assim a conclusão do que chamamos de “backend” ou “coração” dos grandes sistemas, que não são a “cara” do sistema, mas que permitem o funcionamento por completo. Adiante ao “backend” encontram-se os canais de uso citados anteriormente, passeando dos modelos Web tradicionais, a Web 2.0 e mobile. Instingante e promissor, o Java não para de crescer. Termino aqui propondo uma pesquisa mais aprofundada nos itens acima relacionados no que tange a usabilidade do Java para diferentes meios de uso. A busca por conhecimento nunca cessa.
53
Referências BEZERRA, Eduardo. Princípios de Análise e Projetos de Sistemas com UML. Rio de Janeiro: Editora Campus, 2002. CADENHEAD, Rogers; LEMAY, Laura. Aprenda em 21 dias Java 2. Edição 2. Campus, 2003. CLASSE – programação. In: Wikipédia: a enciclopédia livre. Disponível em: <http://pt.wikipedia. org/wiki/Classe_(programação)> Acesso em: 30 ago. 2013. DEITEL, Paul; DEITEL, Harvey. Java como Programar. Edição 8. Pearson, 2010. FURGERI, Sergio. Java 7 - Ensino Didático. Edição 2. Érica, 2010. RUMBAUGH, James; BLAHA, Michael. Modelagem e Projetos Baseados em Objetos com UML 2. Rio de Janeiro: Editora Elsevier, 2006. SIERRA, Kathy; BATES, Bert. Use a Cabeça Java. Edição 1. Alta Books, 2005.
Sites <http://docs.oracle.com/javase/tutorial/java/concepts/> <http://www.eclipse.org/downloads/> <http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html> <http://www.youtube.com/watch?v=dqL7cG4J6gI&list=PLA03DEA5320ECBF85>
54