Baixe o app para aproveitar ainda mais
Prévia do material em texto
UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 29 3 PROGRAMAÇÃO ORIENTADA A OBJETOS – LINGUAGEM JAVA 3.1 INTRODUÇÃO AO JAVA (HISTÓRICO, CARACTERÍSTICAS, AMBIENTES DE PROGRAMAÇÃO) Origem: Como aprender Java, capítulo 2 – O que é Java. Apostila FJ-11 (Java e Orientação a Objetos), site http://www.caelum.com.br Muitos associam Java com uma maneira de deixar suas páginas da web mais bonitas, com efeitos especiais, ou para fazer pequenos formulários na web. O que associa as empresas ao Java? Já chegaremos neste ponto, mas antes vamos ver o motivo pelo qual as empresas fogem das outras linguagens. Quais são os seus maiores problemas quando está programando? • Ponteiros? • Gerenciamento de memória? • Organização? • Falta de bibliotecas? • Ter de reescrever parte do código ao mudar de sistema operacional? • Custo de usar a tecnologia? Java tenta amenizar esses problemas. Alguns desses objetivos foram atingidos muito tempo atrás, porque, antes do Java 1.0, a ideia é que essa linguagem fosse usada em pequenos dispositivos, como tvs, videocassetes, aspiradores, liquidificadores e outros. Apesar disso a linguagem teve seu lançamento focado no uso em clientes web (browsers) para rodar pequenas aplicações (applets). Hoje em dia esse não é mais o foco da linguagem: apesar de ter sido idealizada com um propósito e lançada com outro, o Java ganhou destaque no lado do servidor. O Java é desenvolvido e mantido pela Sun (http://www.sun.com) e seu site principal é o http://java.sun.com. (java.com é um site mais institucional, voltado ao consumidor de produtos e usuários leigos, não desenvolvedores). No Brasil, diversos grupos de usuários se juntaram para tentar disseminar o conhecimento da linguagem. Um deles é o GUJ (http://www.guj.com.br), uma comunidade virtual com artigos, tutoriais e fórum para tirar dúvidas, o maior em língua portuguesa. OBS posterior: Em 2009, a Oracle adquiriu a Sun, tornando-se assim responsável pelas tecnologias envolvendo JAVA (http://www.oracle.com/technetwork/java/index.html) 3.1.1 ONDE USAR E OS OBJETIVOS DO JAVA Origem: Como aprender Java, capítulo 2 – O que é Java. Apostila FJ-11 (Java e Orientação a Objetos), site http://www.caelum.com.br No decorrer do curso, você pode achar que o Java tem baixa produtividade, que a linguagem com a qual você está acostumado é mais simples para criar os pequenos sistemas que estamos vendo aqui. Queremos deixar claro que a premissa do Java não é a de criar sistemas pequenos, onde temos um ou dois desenvolvedores, mais rapidamente que linguagens como PHP, PERL, entre outras. UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 30 O foco da plataforma é outro: aplicações de médio a grande porte, onde o time de desenvolvedores tem várias pessoas e sempre pode vir a mudar e crescer. Não tenha dúvidas que criar a primeira versão de uma aplicação usando Java, mesmo utilizando IDEs e ferramentas poderosas, será mais trabalhoso que usar uma linguagem script ou de alta produtividade. Porém, com uma linguagem orientada a objetos e madura como o Java, será extremamente mais fácil e rápido fazer alterações no sistema, desde que você siga as boas práticas, recomendações e design patterns. Além disso, a quantidade enorme de bibliotecas gratuitas para realizar os mais diversos trabalhos (tais como relatórios, gráficos, sistemas de busca, geração de código de barra, manipulação de XML, tocadores de vídeo, manipuladores de texto, persistência transparente, impressão, etc) é um ponto fortíssimo para adoção do Java: você pode criar uma aplicação sofisticada, usando diversos recursos, sem precisar comprar um componente específico, que costuma ser caro de acordo com sua especialização. Cada linguagem tem seu espaço e seu melhor uso. O uso do Java é interessante em aplicações que virão a crescer, em que a legibilidade do código é importante, onde temos muita conectividade e se temos plataformas (ambientes e sistemas operacionais) heterogêneos (Linux, Unix, OSX e Windows misturados). Você pode ver isso pela quantidade enorme de ofertas de emprego procurando desenvolvedores Java para trabalhar com sistemas web e aplicações de integração no servidor. Apesar disto, a Sun empenha-se em tentar popularizar o uso do Java em aplicações desktop, mesmo com o fraco marketshare do Swing/AWT/SWT em relação às tecnologias concorrentes (em especial Microsoft .NET). 3.1.2 HISTÓRICO Origem: Material de Internet (apresentação PowerPoint). Autor não identificado; Como aprender Java, capítulo 2 – O que é Java. Apostila FJ-11 (Java e Orientação a Objetos), site http://www.caelum.com.br Alguns pontos ao longo da história do Java: • Sun Microsystems, 90/91: um grupo de desenvolvimento (Green Team) recebeu a tarefa de projetar uma linguagem de programação pequena que pudesse ser usada em dispositivos eletrodomésticos (controles remoto etc.). Esse time foi liderado por James Gosling, considerado o pai do Java; • Esses dispositivos não possuem muita memória, então a linguagem teve que ser bem pequena e gerar códigos restritos; • A linguagem foi projetada para ser utilizada em diferentes tipos de hardware, graças ao uso de bytecodes e de uma Máquina Virtual; • 1991: decidiu-se por nomear a linguagem como Java (apelido dado pelos americanos ao café); • 1992: entregue o primeiro produto chamado “*7” (controle remoto extremamente inteligente); • Não houve interesse comercial. Buscou-se outro modo para comercializar a tecnologia; • Enquanto isso a Internet estava crescendo e era necessário um browser para poder acessá-la; • Decidiu-se então pela construção deste browser, denominado HotJava, que foi inteiramente programado em Java; • A grande inovação em relação ao Java se deu em 1995: A Netscape decidiu dar suporte à linguagem a partir de seu navegador Web para Internet (Netscape Navigator 2.0); • A partir disto, todo usuário deste navegador passou a ser um potencial usuário da linguagem Java; UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 31 • Desde então, um fluxo constante de novidades vem acontecendo, culminando com a linguagem Java tornando-se uma “coqueluche” dos programadores; • Atualmente os applets realmente não são o foco da Sun. É curioso notar que a tecnologia Java nasceu com um objetivo em mente, foi lançado com outro, mas, no final, decolou mesmo no desenvolvimento de aplicações do lado do servidor; • Você pode ler a história da linguagem Java em: http://java.sun.com/java2/whatis/1996/storyofjava.html; • E um vídeo interessante: http://tinyurl.com/histjava; • Em 2009 a Oracle comprou a Sun, fortalecendo a marca. A Oracle sempre foi, junto com a IBM, uma das empresas que mais investiram e fizeram negócios com tecnologias Java. 3.1.3 CARACTERÍSTICAS DA LINGUAGEM JAVA Origem: Site do Wikipedia, Categoria: Java (Informática) (http://www.wikipedia.org/) – Plataforma e Linguagem de Programação; Material de Internet (apresentação PowerPoint). Autor não identificado. A linguagem Java foi projetada tendo em vista os seguintes objetivos: • Orientação a objeto - Baseado no modelo de Smalltalk e Simula67; • Portabilidade - Independência de plataforma - "write once run anywhere"; • Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a cooperação com protocolos TCP/IP, como HTTP e FTP; • Segurança - Pode executar programas via rede com restrições de execução. Além disso, podem-se destacar outras vantagens apresentadas pela linguagem: • Sintaxe similar a Linguagem C/C++ e principalmente, a C#. • Facilidades de Internacionalização - Suporta nativamente caracteres Unicode; • Simplicidade na especificação, tanto da linguagem como do "ambiente" de execução (JVM); • É distribuída com um vasto conjunto de bibliotecas(ou APIs); • Possui facilidades para criação de programas distribuídos e multitarefa (múltiplas linhas de execução num mesmo programa); • Desalocação de memória automática por processo de coletor de lixo (garbage collector); • Carga Dinâmica de Código - Programas em Java são formados por uma coleção de classes armazenadas independentemente e que podem ser carregadas no momento de utilização. Após os comentários acima, algumas características do Java que podem ser destacadas são: • Simples; • Orientada a Objetos; • Distribuída; • Robusta; • Segura; • Neutra quanto à Arquitetura; UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 32 • Portátil (Write Once Run Anywhere); • Interpretada; • De Alto Desempenho; • Multithreaded (multitarefa); • Dinâmica. Frameworks É possível utilizar frameworks para facilitar o desenvolvimento de aplicações. Dentre os mais utilizados pode-se destacar: • Hibernate ferramenta para ORM; • Spring ferramenta que auxilia principalmente na implementação de injeção de dependências e inversão de controle; • Log4j ferramenta para facilitar a criação de logs na aplicação; • JUnit ferramenta para auxiliar na criação de testes unitários; • Struts controlador MVC (Model 2) web. Ambientes de desenvolvimento É possível desenvolver aplicações em Java através de vários ambientes de desenvolvimento integrado (IDE's). Dentre as opções mais utilizadas pode-se destacar: • Eclipse — um projeto aberto iniciado pela IBM; • NetBeans — um ambiente criado pela empresa Sun Microsystems; • JBuilder — um ambiente desenvolvido pela empresa Borland; • JDeveloper — uma IDE desenvolvida pela empresa Oracle; • JCreator — um ambiente desenvolvido pela Xinox; • BlueJ — um ambiente desenvolvido por uma faculdade australiana (considerado muito bom para iniciantes); • Greenfoot — bem parecido com o BlueJ; • JGRASP — bom para intermediários, feito pela equipe do Projeto GRASP; • IntelliJ IDEA — uma IDE desenvolvida pela JetBrains (considerada por muitos a melhor IDE do mercado). UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 33 Ambiente Java Verdades e Mentiras sobre o Java • Java é Simples. Verdade, se você conhece bem C++ (Não existem struct, union, artimética de ponteiros, include, classes virtuais etc.). Falso, se você conhece apenas programação DOS ou VB, ou se não conhece OO (sintaxe estranha, escreve-se muito). Verdade, pois seus produtos (.class, compilador e VM) são pequenos. Falso, pois é muito extensa (muitas características); • Java é Orientada a Objetos - Completamente verdade (metaclasses e reflexão, persistência de objetos (serialização), solução mais elegante para herança múltipla (interfaces), em suma, por ser recente, é uma linguagem OO pura (ao contrário do C++, que é híbrida)); • Java é Distribuída. - Completamente verdade (extensa biblioteca de rotinas para se trabalhar com protocolo TCP/IP (FTP, HTTP, SMTP), Comunicação entre objetos remotos (RMI), habilitada para funcionar também no servidor (servlets e JSP), habilitada para funcionar também em dispositivos portáteis (J2ME)); • Java é Robusta - Verdade (possibilidade de capturar e tratar erros de runtime (exceções), excelente gerenciamento de memória - impossível o acesso indevido à memória); • Java é Segura - Mais ou menos verdade (não é possível se acessar a memória fora de seu espaço de processamento, possibilidade de se impedir o acesso a funções de baixo nível quando da execução a partir de um Browser , novos releases que corrigem eventuais falhas de segurança descobertas); • Java é Neutra quanto à Arquitetura - Verdade (os bytecodes contidos em um arquivo .class podem ser executados em uma grande variedade de diferentes plataformas para as UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 34 quais existam JVMs (Windows 9x, Windows NT, Windows 3.11, MacOS, Solaris, Linux, Mainframe*.* :), HP-UX, PalmTops, Web-TVs, torradeiras, cafeteiras :))) etc.); • Java é Portátil - Grande Verdade (Write Once Run Anywhere) (quem define as características particulares à cada arquitetura é a JVM e não o .class, o padrão Unicode facilita a tarefa de “internacionalização” do código, a aplicação tem a mesma “cara”, não importa o S.O. (apenas a partir da versão 1.1, com o pacote Swing que pode substituir o AWT)) ; • Java é Interpretada - Grande desvantagem (o desempenho do compilador e da JVM é ruim, para Wintel, a configuração mínima é Pentium 100 com 32 Mb de RAM); • Java é de Alto Desempenho - Pode ser verdade, graças a mecanismos como: JIT (Just in Time Compiler), compiladores nativos (transformam o .class em .exe), IDEs (JBuilder, Visual Café etc), que facilitam muito o desenvolvimento das aplicações; • Java é Multithreaded - “Permite que um programa faça mais de uma coisa ao mesmo tempo” (muito “fácil” de implementar, porém, a maneira como a JVM interpreta o código multithreaded varia, dependendo da arquitetura); • Java é Dinâmica - Os bindings são resolvidos em tempo de execução (funciona bem somente a partir da versão 1.1). Permite que novos métodos sejam acrescentados a uma biblioteca sem afetar os clientes desta biblioteca; • Java é a Linguagem da Internet - Do lado do “Cliente”, isto é mais ou menos verdade, graças aos applets, que são suportados por praticamente todos os WebBrowsers (diferente de outras tecnologias que exigem o uso de plug-in). Do lado do “Cliente”, applets são mais profissionais que linguagens script (Javascript e VBScript por exemplo). Do lado do “Servidor”, isto é verdade graças aos servlets (applets que rodam no servidor e que substituem os scripts Perl como mecanismo para CGI) e ao JSP (Java Server Pages), tecnologia que facilita a criação de páginas dinâmicas. O que Java não é... • Java não é Javascript e vice-versa; • Java não é uma extensão de HTML; • Java não é fácil de aprender; • Java não é um ambiente fácil de se programar; • Java ainda não é uma linguagem de programação universal; • Java não é tão lenta quanto seus inimigos dizem (madura o suficiente para o desenvolvimento de aplicações sérias); • Java não se restringe somente à Internet (boa para aplicações OO stand-alone, com ou sem interface gráfica). 3.1.4 MÁQUINA VIRTUAL Origem: Como aprender Java, capítulo 2 – O que é Java. Apostila FJ-11 (Java e Orientação a Objetos), site http://www.caelum.com.br Em uma linguagem de programação como C e Pascal, temos o seguinte quadro quando vamos compilar um programa: UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 35 O código-fonte é compilado para uma plataforma e sistema operacional específicos. Muitas vezes, o próprio código-fonte é desenvolvido visando uma única plataforma! Esse código executável (binário) resultante será executado pelo sistema operacional e, por esse motivo, ele deve saber conversar com o sistema operacional em questão. Isto é, temos um código executável para cada sistema operacional. É necessário compilar uma vez para Windows, outra para o Linux, etc... Como foi dito anteriormente, na maioria das vezes, a sua aplicação se utiliza das bibliotecas do sistema operacional, como, por exemplo, a de interface gráfica para desenhar as ‘telinhas’. A biblioteca de interface gráfica do Windows é bem diferente das do Linux; resultado? Você precisa reescrever o mesmo pedaço da aplicação para diferentes sistemas operacionais, já que eles não são compatíveis. Já o Java, se utiliza do conceito de máquina virtual, onde existe, entre o sistema operacional e a aplicação, uma camada extra, responsável por “traduzir” - mas não apenas isso - o que sua aplicação deseja fazer para as respectivas chamadas do sistema operacionalonde ela está rodando no momento. Dessa forma, a maneira com a qual você abre uma janela no Linux ou no Windows é a mesma. Você ganha independência de sistema operacional. Ou, melhor ainda, independência de plataforma em geral: não é preciso se preocupar em qual sistema operacional sua aplicação está rodando, nem em que tipo de máquina, configurações etc. Repare que uma máquina virtual é um conceito bem mais amplo que o de um interpretador. Como o próprio nome diz, uma máquina virtual é como um computador de mentira: tem tudo que um computador tem. Em outras palavras, ela é responsável por gerenciar memória e threads, a pilha de execução, etc. UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 36 Sua aplicação roda sem nenhum envolvimento com o sistema operacional! Sempre conversando apenas com a Java Virtual Machine (JVM). Essa característica é interessante: como tudo passa pela JVM, ela pode tirar métricas, decidir onde é melhor alocar a memória, entre outros. Uma JVM isola totalmente a aplicação do sistema operacional. Se uma JVM termina abruptamente, só as aplicações que estavam rodando nela irão terminar: isso não afetará outras JVMs que estejam rodando no mesmo computador, nem afetará o sistema operacional. Essa camada de isolamento também é interessante quando pensamos em um servidor que não pode se sujeitar a rodar código que possa interferir na boa execução de outras aplicações. Para tudo isso precisamos de um “bytecode”. Bytecode é o termo dado ao código binário gerado pelo compilador Java (pois existem menos de 256 códigos de operação dessa linguagem, e cada “opcode” gasta um byte, dando origem ao nome bytecode). O compilador Java gera esse bytecode que, diferente das linguagens sem máquina virtual, vai servir para diferentes sistemas operacionais, já que ele vai ser “traduzido” pela máquina virtual. Outro ponto importante: quando falamos de Java Virtual Machine, estamos falando de uma especificação. Ela diz como o bytecode deve ser interpretado pela JVM. Quando fazemos o download no site da Sun, o que vem junto é a Sun JVM. Em outras palavras, existem outras JVMs disponíveis, como a Jrockit da BEA, entre outras. Isso é outro ponto interessante para as empresas. Caso não estejam gostando de algum detalhe da JVM da Sun ou prefiram trabalhar com outra empresa, pagando por suporte, elas podem trocar de JVM com a garantia absoluta de que todo o sistema continuará funcionando, tendo em vista que a JVM é certificada pela Sun, precisando aceitar o mesmo bytecode. Você nem precisa recompilar nenhuma de suas classes. Além de independência de hardware e sistema operacional, você tem a independência de vendor: graças a idéia da JVM ser uma especificação e não um software. Write once, run anywhere Esse é um slogan que a Sun usa para o Java, já que você não precisa reescrever parte da sua aplicação toda vez que quiser mudar de sistema operacional. Muitas pessoas criticam ou criam piadas em cima desse slogan, por acharem que nem sempre uma aplicação Java pode rodar em duas plataformas diferentes sem problemas. 3.1.5 JAVA LENTO? HOTSPOT E JIT Origem: Como aprender Java, capítulo 2 – O que é Java. Apostila FJ-11 (Java e Orientação a Objetos), site http://www.caelum.com.br Hotspot é a tecnologia que a JVM utiliza para detectar pontos quentes da sua aplicação: código que é executado muito, provavelmente dentro de um ou mais loops. Quando a JVM julgar necessário, ela vai compilar aquele código para instruções nativas da plataforma, tendo em vista que isso vai provavelmente melhorar a performance da sua aplicação. Esse compilador é o JIT: Just inTime Compiler, o compilador que aparece “bem na hora” que você precisa. Você pode pensar então: porque a JVM não compila tudo antes de executar a aplicação? É que teoricamente compilar dinamicamente, a medida do necessário, pode gerar uma performance melhor. O motivo é simples: imagine um .exe gerado pelo VisualBasic, pelo gcc ou pelo Delphi; ele é estático. Ele já foi otimizado baseado em heurísticas, o compilador pode ter tomado uma decisão não tão boa. UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 37 Já a JVM, por estar compilando dinamicamente durante a execução, pode perceber que um determinado código não está com performance adequada e otimizar mais um pouco aquele trecho, ou ainda mudar a estratégia de otimização. É por esse motivo que as JVMs mais recentes (como a do Mustang, Java 6), em alguns casos, chega a ganhar, em muitos casos, de códigos C compilados com o GCC 3.x, se rodados durante um certo tempo. 3.1.6 VERSÕES DO JAVA... E A CONFUSÃO DO JAVA2 Origem: Como aprender Java, capítulo 2 – O que é Java. Apostila FJ-11 (Java e Orientação a Objetos), site http://www.caelum.com.br Java 1.0 e 1.1 são as versões muito antigas do Java. Com o Java 1.2 houve um aumento grande no tamanho da API, e foi nesse momento em que trocaram a nomenclatura de Java para Java2, com o objetivo de diminuir a confusão entre Java e Javascript. Mas lembre-se, não há versão do Java 2.0, o 2 foi incorporado ao nome: Java2 1.2. Depois vieram o Java2 1.3 e 1.4, e o Java 1.5 passou a se chamar Java 5, tanto por uma questão de marketing e porque mudanças significativas na linguagem foram incluídas. É nesse momento que o “2” do nome Java desaparece. Repare que para fins de desenvolvimento, o Java 5 ainda é referido como Java 1.5. Até a versão 1.4, existia a terceira numeração (1.3.1, 1.4.1, 1.4.2, etc), indicando bug fixes e melhorias. A partir do Java 5 existem apenas updates: Java 5 update 7, por exemplo. Hoje a última versão disponível do Java é a 6.0, lançada em 2006. Da versão 1.4 para a 5.0, a linguagem sofreu muitas modificações, o que de certa forma fomentou a mudança no versionamento do Java. Já o Java 6.0 não trouxe nenhuma mudança na linguagem, mas trouxe mais recursos na API e muitas melhorias de performance na VM. Existe compatibilidade para trás em todas as versões do Java. Um class gerado pelo javac da versão 1.2 precisa necessariamente rodar na JVM 6.0. Por isso, recomendamos sempre usar a última versão do Java para usufruir das tecnologias mais modernas mas sem correr o risco de quebrar aplicações antigas. Origem: CoreJava, volume 1. Capítulo 1 – Uma introdução ao Java. Cay S. Horstmann e Gary Cornell. Ed. Pearson. 8. ed. Tabela: Evolução da linguagem Java Versão Ano Novos recursos da Linguagem No. De classes e interfaces 1.0 1996 A própria linguagem 211 1.1 1997 Classes internas 477 1.2 1998 Nenhum 1524 1.3 2000 Nenhum 1840 1.4 2002 Assertivas 2723 5.0 2004 Classes genéricas, loop “for each”, varargs, autoboxing, metadados, enumerações, importação estática 3279 6 2006 Nenhum 3777 Informação obtida a partir do site do Java (Oracle): a versão 7 do Java começou a ser disponibilizada no 2º. Semestre de 2011. No intervalo de tempo entre o lançamento das versões 6 e 7, uma série de updates sobre a versão 6 foram realizados. UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 38 3.1.7 CRIAÇÃO E EXECUÇÃO DE PROGRAMAS EM JAVA Origem: Capítulo 1 – Introdução aos Computadores, à Internet e à World Wide Web. Livro: Java – Como Programar, Deitel & Deitel, 6ª. Edição Os programas em Java em geral passam por cinco fases entre a sua criação e a sua efetiva execução. As fases estão identificadas na figura abaixo. 3.1.8 ALGUNS TERMOS DE USO COMUM ENVOLVENDO JAVA Origem: CoreJava, volume 1. Capítulo 1 – Uma introdução ao Java. Cay S. Horstmann e Gary Cornell. Ed. Pearson. 8. ed. Tabela: Jargão do Java Sigla Nome Explicação JDK Java Development Kit Software para programadores que querem escrever programas Java JRE Java Runtime Environment Software para consumidores que querem executar programas Java SE StandardEdition Plataforma Java para uso em desktops e aplicativos simples de servidor UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 39 EE Enterprise Edition Plataforma Java para aplicativos complexos de servidor ME Micro Edition Plataforma Java para uso em celulares e outros pequenos dispositivos J2 Java 2 Termo antiquado que descrevia as versões do Java entre 1998 e 2006 SDK Software Development Kit Termo antiquado que descrevia o JDK entre 1998 e 2006 u Atualização Termo da Sun para o lançamento de uma correção de bug - Netbeans Ambiente de desenvolvimento integrado da Sun 3.1.9 LEITURA RECOMENDADA • Capítulo 1 – Uma Introdução ao Java. Livro: CoreJava, volume 1 – Fundamentos. Cay S. Horstamm e Gary Cornell, 8ª. Edição; • Capítulo 1 – Introdução aos Computadores, à Internet e à World Wide Web. Livro: Java – Como Programar, Deitel & Deitel, 6ª. Edição; • Capítulo 1 – Como aprender Java, capítulo 2 – O que é Java. Apostila FJ-11 (Java e Orientação a Objetos), site http://www.caelum.com.br; • Uma palavrinha sobre as versões do Java. Link: http://www.javaman.com.br/artigos/versoesJava.html; • Site do Wikipedia, Categoria: Java (Informática) (http://www.wikipedia.org/) – Plataforma e Linguagem de Programação. UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 40 3.2 INICIANDO A PROGRAMAÇÃO Origem: Capítulo 2 – Introdução aos aplicativos Java. Livro: Java – Como Programar, Deitel & Deitel, 6ª. Edição; capítulo 2 – O que é Java. Apostila FJ-11 (Java e Orientação a Objetos), site http://www.caelum.com.br; Portal Java (http://www.portaljava.com)., fórum: Para todos os Iniciantes, Programas + HelloWorld Para manter a tradição, o primeiro programa será a impressão de uma linha de texto na tela. E o texto não poderia ser outro que não o famoso “Hello World”. Linha Programa 1 2 3 4 5 6 7 8 9 10 /* Arquivo: HelloWorld.java Programa de impressão de uma linha de texto */ public class HelloWorld { //Método principal – inicia a execução do aplicativo Java public static void main (String args[]) { System.out.println(“Hello World!!”); } } Os passos que devem ser realizados: • Editar o código – através de qualquer editor disponível, como o NotePad do Windows. o O Java é case-sensitive, portanto deve-se estar atento ao uso de letras maiúsculas/minúsculas; o O padrão vigente indica que o nome de cada classe deve iniciar com uma letra maiúscula, e caso seja uma palavra composta também tem-se que a primeira letra de cada palavra será iniciada maiúscula, sem o uso do caracter “_”. A classe declarada no aplicativo acima, HelloWorld respeita tal padrão. A classe utilizada, System, também respeita tal padrão; o Identificadores válidos em Java podem ser compostos por letras, dígitos, sublinhados (_) e sinais de cifrão ($), porém não devem iniciar com um dígito e não podem conter espaços em branco; o Observar que as palavras-chave da linguagem Java são escritas todas em minúsculas (no programa acima tem-se public, class, static, void); • Salvar o código em um arquivo. o O nome do arquivo deve ser o mesmo nome da classe declarada, inclusive no que se refere ao uso de maiúsculas/minúsculas; o O arquivo deve ser salvo com a extensão .java; o Cada classe pública em Java deverá ser salva em um arquivo diferente; • Compilar o aplicativo. o Acessar o prompt de comando e digitar o comando javac HelloWorld.java (respeitando o uso de maiúsculas/minúsculas a partir do qual criou-se o nome do arquivo); UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 41 o Se o programa estiver escrito corretamente será gerado o arquivo HelloWorld.class (com o bytecode correspondente ao código-fonte), caso contrário é preciso encontrar o erro, antes de voltar a tentar nova compilação (a falha pode estar tanto no código-fonte escrito quanto na instalação do JDK, caso seja a primeira vez que a ferramenta esteja sendo utilizada – prestar atenção à mensagem indicada pelo compilador); o Caso o aplicativo tenha mais de uma classe, cada uma delas deverá ser compilada, conforme identificado acima, já que cada uma estará salva em um arquivo diferente; o Caso se deseje visualizar o bytecode gerado pode-se utilizar o comando: javap –c HelloWorld; • Executar o aplicativo. o Acessar o prompt de comando e digitar o comando java Helloworld (respeitando o uso de maiúsculas/minúsculas a partir do qual criou-se o nome da classe); o Caso o aplicativo tenha mais de uma classe, deve ser executada a classe que contém a declaração do método main. A seguir será detalhado o significado de cada instrução do programa: • Sobre comentários (linhas 1, 2 e 5): O Java aceita três formatos para comentários: o Comentário de fim de linha (ocupa uma única linha, começando no início ou após uma instrução). É indicado através do delimitador // no início do trecho a ser considerado comentário; o Comentário de múltiplas linhas (ocupa várias linhas). É indicado através dos delimitadores /* (no início do texto comentado) e */ (no fim do texto comentado); o Comentário no estilo Javadoc, que permitem que os programadores gerem a documentação no formato HTML. Similar ao comentário de múltiplas linhas. É indicado através dos delimitadores /** (no início do texto comentado) e */ (no fim do texto comentado). Para gerar o html associado utiliza-se o comando javadoc <nome do arquivo>.java, para cada arquivo relacionado ao programa; • Declaração de Classe (linha 3): Cada programa Java consiste em pelo menos uma declaração de classe pelo programador. A palavra-chave class é a palavra-reservada no Java para indicar a declaração de uma classe. Em seguida a tal palavra deve ser definido o nome da classe. A palavra-chave public é um especificador de acesso, e será posteriormente explicada, o mesmo ocorrendo com a palavra-chave static; • Delimitador de Classe (linhas 4 e 10): São os delimitadores da declaração de uma classe; • Declaração de método (linha 6): Contém a assinatura de um método da classe. o O método em questão (main()) é especial, sendo o ponto de partida de cada aplicativo Java, isto é, todo programa deve conter a declaração de um método main(), que é por onde se inicia a execução do programa. A declaração de tal método deve ser exatamente como exposto no exemplo. A palavra-chave void indica que não há retorno para tal método. Entre parênteses estão os argumentos de entrada do método, que no caso do main(), serão os argumentos de entrada para execução do programa, caso haja algum; • Delimitador de Corpo de método (linhas 7 e 9): São os delimitadores do corpo de um método; • Corpo do método (linha 8): Contém uma instrução para o computador executar, nesse caso a impressão do texto “Hello World!!”. UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 42 o O método de impressão é o println(). O texto a ser impresso está entre os parênteses de tal método e é delimitado por aspas duplas, sendo o argumento do método. Tal método faz parte da variável de instância out, que é por sua vez um atributo da classe System. System.out é conhecido como objeto de saída padrão (o monitor); o A classe System, utilizada no programa, pertence ao pacote java.lang, que é o único pacote do Java que não requer uma declaração de importação para possibilitar o uso de suas classes; o Cada instrução em Java deve terminar com o delimitador de instrução “;”. o Sobre a impressão de texto na tela: O método println() escreve um texto na tela e posiciona o cursor na linha seguinte. Já o método print() escreve um texto na tela e não pula para a linha seguinte. Há ainda o método printf(), que trabalha com texto formatado, como ocorre na linguagemC; o O texto a ser impresso na tela, passado como parâmetro para print() / println() / printf(), pode precisar de uma sequência de escape, que indica que um determinado caracter especial deve ser impresso na tela. A sequência de escape é colocada diretamente no texto a ser impresso e é composta por uma barra invertida e um segundo caracter, que indica o que deverá ser impresso. Algumas sequências de escape estão abaixo identificadas: Sequência de Escape Descrição \n Nova linha. Exemplo: print(“Pular para \n nova linha”) \t Move o cursor de tela para a próxima parada de tabulação \r Posiciona o cursor da tela no início da linha atual \\ Utilizada para imprimir um caracter de barra invertida \” Utilizada para imprimir um caracter de aspas duplas o Um recurso oferecido a partir do J2SE 5.0 é o método System.out.printf() para exibir dados formatados, conforme destacado no exemplo abaixo. Linha Programa 1 2 3 4 5 6 7 8 9 10 /* Arquivo: Welcome.java Programa de impressão de múltiplas linhas */ public class Welcome { //Método principal – inicia a execução do aplicativo Java public static void main (String args[]) { System.out.printf(“%s\n%s\n”,”Welcome to”,”Java Programming”); } } Uma interesante “evolução” do programa HelloWorld foi proposta por Tomaz Lavieri, um usuário dos fóruns do PortalJava, e está abaixo transcrita, para fins de análise. UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 43 Arquivo HelloWorld.java 1. //Sempre que tiver // no código indica que é um comentário. 2. 3. /** 4. * Também são comentários este tipo de trecho, geralmente usado para 5. * documentar a classe. 6. * Bom aqui eu estou criando uma classe HelloWorld que é pública, ou seja, 7. * qualquer classe poderá usá-la. */ 8. public class HelloWorld { 9. /** 10. * Bom aqui eu defino um field, em outras linguagens é comumente chamado 11. * de variável. Este objeto é de propriedade da classe HelloWorld e é 12. * privado, sendo assim ninguém poderá acessá-lo, só o próprio HelloWorld. 13. */ 14. private String msg = null; 15. 16. /** 17. * Método getMessage, que aqui é usado para retornar a mensagem que está 18. * gravada dentro do field privado msg. Ele retorna de forma segura o 19. * valor da mensagem, verificando se esta ainda está nula, se estiver, 20. * muda seu valor para "Hello World!" e então o retorna 21. * @return retorna a message do HelloWorld 22. */ 23. public String getMessage() { 24. //Note que este if não tem {}, isso ocorre porque ele só tem um 25. //argumento dentro, não precisando assim abrir e fechar as chaves. 26. //Nestes casos, muitas vezes se escreve assim: 27. //if (msg == null) setMessage(); (em 1 linha só.) 28. //Este método verifica se o valor da msg ainda está nulo, sendo isso 29. //verdade ele chama o método setMessage() para dar valor a msg, isto é 30. //feito por segurança, para não passar um valor nulo. 31. if (msg == null) 32. setMessage(); 33. 34. //Aqui ele irá retornar o valor contido em msg que pertence a este 35. //objeto. O operador this indica que está se tratando de um field que 36. //é do objeto e não do método, veremos isso no método 37. //setMessage(String msg) 38. return this.msg; 39. } 40. 41. /** 42. * Seta a mensagem passada através de msg, como sendo a mensagem 43. * deste objeto. No caso de msg estar nulo, chamará o método setMessage(). 44. * @param msg mensagem a ser gravada pelo objeto. */ 45. public void setMessage(String msg) { 46. //note aqui que o teste if msg == null é feito para o field do método 47. //setMessage(String msg) e não para aquele da classe, definido lá em 48. //cima com: private String msg = null; 49. //Quando há 2 nomes de fields iguais, ele irá usar o field do método. 50. //Para chamar o field do objeto você terá que usar o operador this. 51. //Então aqui eu testo se msg é null e se for, eu uso o método 52. //setMessage(), ou seja, se o cara passar msg = null, é o mesmo 53. //de ter chamado o método setMessage(), sendo assim, esse dois 54. //métodos seguintes tem o mesmo efeito: setMessage(), setMessage(null) 55. if (msg == null) { 56. setMessage(); 57. //no caso de msg não estar nulo, o objeto irá guardá-lo em seu field 58. //privado, usando para isto o operador this.msg, para falar à classe 59. //que se trata do field externo, sendo igual ao field passado neste 60. //método. 61. } else { 62. this.msg = msg; 63. } 64. } UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 44 65. 66. /** 67. * método que seta o valor da msg como “Hello World”, pois 68. * nenhum argumento foi passado para escolher que mensagem passar */ 69. public void setMessage(){ 70. //define msg do objeto 71. this.msg = "Hello World!"; 72. } 73. 74. /** 75. * cria um objeto HelloWorld com a mensagem padrão definida em 76. * setMessage(). */ 77. public HelloWorld() { 78. setMessage(); 79. } 80. 81. /** 82. * cria um objeto HelloWorld com a mensagem passada através de msg 83. * @param msg mensagem a ser gravada no objeto. */ 84. public HelloWorld(String msg) { 85. setMessage(msg); 86. } 87. 88. /* 89. * Estes 2 últimos "métodos" são na verdade construtores da classe, ou 90. * seja, as maneiras de criar um objeto HelloWorld. Na outra 91. * classe Main, nós usaremos 2 objetos HelloWorld, para exemplificar */ 92. } Arquivo Main.java 1. /** 2. * Está classe irá funcionar como um programa do tipo console, que irá ter 3. * saída de textos. Para rodá-lo use o comando java Main 4. * 5. * Estando esta classe e a classe HelloWorld dentro da pasta 6. * da máquina virtual java, existe outras maneiras de rodar este programa... 7. */ 8. public class Main { 9. //para uma classe ser utilizada como um programa ela deverá ter um método: 10. //public static void main(String[] args) 11. //ou seja, um método main público que é estático, e pode ser chamado com 12. //um array de strings. 13. //Método estático, é aquele que pode ser executado sem que você crie o 14. //objeto, você pode chamá-lo através do nome da classe, exemplo: 15. //MinhaClasse.metodoStatico(); 16. 17. /** 18. * Este é o método que chama o aplicativo, ou seja, se você 19. * deseja criar um programa é por aqui que você deve começar. 20. * Ele é definido como void, porque o método não tem nenhum retorno, como 21. * público, pois qualquer um deve conseguir rodar o programa, e como 22. * estático porque não deve ser necessário criar uma classe para chamar o 23. * programa. 24. * O String[] args é para você poder passar argumentos para o programa, um 25. * exemplo de programa que usa isso é o format (* format C: /s). 26. * Neste comando você chama o programa format, e passa a ele os argumentos 27. * "C:" , "/s", da mesma forma funciona para java, você pode passar 28. * argumentos para o método main, que roda o programa. o 1º argumento 29. * ficará em args[0] e assim por diante. */ 30. public static void main(String[] args) { 31. //cria um objeto que fará o cumprimento em inglês lembrando lá da 32. //classe HelloWorld, quando nenhuma msg é passada, ele cria um objeto33. //com a messagem “Hello World”, ou seja, para um HelloWorld inglês é 34. //só manter a original. UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 45 35. HelloWorld cumprimentadorIngles = new HelloWorld(); 36. 37. //Cria um objeto que guarda a mensagem "Olá mundo!". Pois o construtor 38. //HelloWorld("Olá Mundo!") irá 39. //chamar o método setMessage("Olá Mundo!"). 40. HelloWorld cumprimentadorBrasileiro = new HelloWorld("Olá Mundo!"); 41. 42. //aqui eu crio uma string com a mensagem “Orla Mundi!” 43. String latim = "Orla Mundi!"; 44. //Outra maneira de criar um objeto HelloWorld. 45. HelloWorld cumprimentadorLatino = new HelloWorld(latim); 46. 47. //bom agora vamos imprimir as mensagens para ver o resultado. 48. //Usando o método System.out.println(String msg); 49. //que imprime uma mensagem na saída padrão. 50. 51. //Imprime a mensagem de cumprimento do Inglês. 52. System.out.println(cumprimentadorIngles.getMessage()); 53. 54. //Imprime a mensagem de cumprimento do Brasileiro. 55. System.out.println(cumprimentadorBrasileiro.getMessage()); 56. 57. //Imprime a mensagem de cumprimento do Latino. 58. System.out.println(cumprimentadorLatino.getMessage()); 59. } 60. 61. //espero que você tenha entendido... =] 62. } Além do tradicional programa HelloWorld, os programadores costumam iniciar suas atividades em uma linguagem de programação através de simples funções de operações matemáticas. Segue abaixo um código Java para a realização da soma de dois inteiros, informados pelo usuário. Linha Programa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /* Arquivo: Soma.java Programa de soma, que calcula a adição de dois números */ /* irá importar a classe Scanner do pacote util, parte do pacote java, para utilização no programa */ import java.util.Scanner; public class Soma { //Método principal – inicia a execução do aplicativo Java public static void main (String args[]) { //Declaração de variáveis locais int numero1; int numero2; int numeroSoma; //cria objeto da classe Scanner, para obter a entrada a partir //da janela de comando UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 46 20 21 22 23 24 25 26 26 28 29 30 31 32 33 Scanner input = new Scanner(System.in); //Solicita o informe dos valores para realizar a soma System.out.print(“Informe o número 1: ”); //prompt numero1 = input.nextInt(); //solicita o 1o. valor System.out.print(“Informe o número 2: ”); //prompt numero2 = input.nextInt(); //solicita o 2o. valor //Realiza a soma dos dois números informados numeroSoma = numero1 + numero2; //Exibe o resultado da soma System.out.printf(“O resultado da soma é %d\n”, numeroSoma); } } A seguir será detalhado o significado de cada instrução do programa: • Comentários similares aos exemplos anteriores não serão repetidos, apenas as instruções diferenciadas serão comentadas; • Importação de classe (linha 6): Quando o programa precisa utilizar uma classe de alguma das bibliotecas de classe (APIs) que o Java disponibiliza deverá importar esta classe para o programa em questão. No exemplo acima é utilizada a classe Scanner, que pertence ao pacote util, que por sua vez pertence ao pacote java; o Todas as declarações import devem aparecer antes da primeira declaração da classe no arquivo, ou será gerado um erro de compilação; o Lembrete: A classe System, também utilizada no programa, pertence ao pacote java.lang, que é o único pacote do Java que não requer uma declaração de importação para permitir o uso de suas classes; • Declaração de variáveis de tipos primitivos (linhas 14 a 16): Para trabalhar com valores é preciso declarar variáveis para armazená-los. A declaração de uma variável é composta por um tipo de dado seguido por um identificador; • Declaração de objeto, instância de uma classe (linha 20): Para trabalhar com objetos, isto é, instâncias de uma determinada classe, é preciso realizar a instanciação, que é composta pela identificação da classe + identificador para o objeto + comando new + construtor da classe. o Um objeto Scanner permite a um programa ler os dados para utilização em um programa. Os dados podem ser provenientes de várias origens, como um arquivo ou digitados pelo usuário; o Ao criar um objeto Scanner é preciso especificar a origem dos dados. No exemplo acima tal origem é System.in, que é o objeto de entrada padrão (o teclado); • Leitura de valores inteiros (linhas 24 e 26): Para realizar a leitura de valores inteiros utiliza- se o método nextInt(), pertencente a classe Scanner. O valor retornado por tal método é normalmente atribuido a uma variável; • Expressão aritmética de soma, seguida por atribuição (linha 29): O Java permite a realização de uma série de operações aritméticas, uma delas é a soma, através do símbolo “+”. O resultado da expressão de soma é normalmente atribuído a uma variável, através de um comando de atribuição (uso do símbolo “=”). UFES/CEUNES Disciplina: Programação III Conteúdo: Programação Orientada a Objetos – Linguagem JAVA Página: 47 3.2.1 LEITURA RECOMENDADA • Material indicado no início do tópico, como origem do texto disponibilizado; • Fóruns na Internet. 3.2.2 EXERCÍCIOS 1. Executar os exemplos de código acima descritos; 2. Executar os exemplos de código descritos provocando erros de compilação, para observar as mensagens geradas (retirar “;”, esquecer parênteses, errar os identificadores); 3. Executar programas com diferentes textos e uso das funções print(), println() e printf(), além de sequências de escape; 4. Modificar o programa de adição de números para trabalhar com diferentes operações.
Compartilhar