Professor: José Ronaldo Leles Júnior Email: [email protected] Curso: Sistemas de Informação Universidade Estadual de Goiás Campus Posse Ano 2015 Uma breve história do Java 1991 - 1994 O Green (um pequeno grupo de projeto da Sun Microsystems) pretendia criar uma nova plataforma para o desenvolvimento de equipamentos de modo que seu software pudesse ser portado para os mais diferentes tipos de dispositivos. James Gosling, um dos líderes da equipe, propôs criar uma nova linguagem que fosse simples, portátil e fácil de programar. Surge a linguagem interpretada Oak (carvalho em inglês). Problemas de copyright fazem o nome Oak ser trocado por Java. 1995 A linguagem Java foi apresentada formalmente pela Sun no Sun Word’95. A Sun percebeu que poderia utilizar o Java para rodar pequenas aplicações (applets) dentro do browser. 1996 A Sun disponibilizou gratuitamente para a comunidade de software um conjunto de ferramentas para desenvolvimento Java denominado JDK 1.02 (Java Development Kit). 2009 A Oracle comprou a Sun. Histórico das versões da plataforma Java Existe compatibilidade para trás em todas as versões do Java. Atualmente a plataforma está organizada em três segmentos: JavaME (Java Micro Edition) – Destinado aos dispositivos computacionais móveis. JavaSE (Java Standard Edition) – Integra os elementos padrão da plataforma e permite o desenvolvimento de aplicações de pequeno e médio porte. Inclui todas as APIs consideradas de base, além da máquina virtual padrão. JavaEE (Java Enterprise Edition) – Voltada para a construção de aplicações corporativas complexas, isto é, de grande porte. Adiciona APIs específicas aos elementos padrão da plataforma. Características principais Orientada a objetos: Java é orientada a objetos e atende a todos os requisitos necessários para isso: oferece mecanismo de abstração, encapsulamento e hereditariedade. Com exceção de seus tipos primitivos de dados, tudo em Java são classes ou instâncias de classes. Independência de plataforma: Seus programas não são compilados para uma plataforma específica, mas, sim, como bytecodes – forma intermediária de código que funciona como uma linguagem de máquina para a JVM (Java Virtual Machine). Sem ponteiros: Java não possui, i, e., não permite a manipulação direta de endereços de memória nem exige que os objetos criados sejam explicitamente destruídos. Toda a manipulação de variáveis e objetos se dá por meio de referências. Performance: Foi melhorada pela incorporação de um compilador JIT (Just In Time) na JVM que, durante a carga do programa, converte os bytecodes em código nativo e possibilita uma melhoria significativa na performance dos programas Java. ATIVIDADE: Pesquise sobre a tecnologia HotSpot da Sun. Multithreaded: Java oferece suporte para criação e uso de threads, possibilitando inclusive sua sincronização. Ambiente Java Java é uma linguagem independente de plataforma - seus programas são compilados em um formato próprio chamado bytecodes. Em cada SO deve existir uma JVM apropriada capaz de interpretar os bytecodes. O ambiente Java é composto com a JVM, sua API e com as classes da aplicação. Um ambiente mínimo permite apenas a execução da aplicação Java. JRE (Java Runtime Environment) Ambiente Java Máquina Virtual Em uma linguagem de programação como C e Pascal, temos a seguinte situação: O Java utiliza o conceito de máquina virtual. Máquina virtual = INTERPRETADOR? Ela representa um conceito bem mais amplo... ela é responsável por gerenciar memória, threads, a pilha de execução etc. Slogan Java Write once, run anywhere “Escreva uma vez, rode em qualquer lugar” JVM? JRE? JDK? O que devo baixar? JVM = apenas a virtual machine, esse download não existe, ela sempre vem acompanhada. JRE = Java Runtime Environment, ambiente de execução Java, formado pela JVM e bibliotecas, tudo que você precisa para executar uma aplicação Java. JDK = Java Development Kit: é formando pela JRE somado, com o compilador “javac”. É o que nós desenvolvedores precisamos. Tutorial de instalação do Java no Windows: http://www.k19.com.br/artigos/como-instalar-o-jdk-7-no-windows-8/ Tutorial de instalação do Java no Linux: http://www.k19.com.br/artigos/como-instalar-o-jdk-7-no-ubuntu-13-10/ Especificação versus Implementação A Java Virtual Machine é uma especificação – utilizaremos a fornecida pela Oracle/Sun. Existem outras JVMs disponíveis, como a JRockit da BEA, a J9 da IBM, entre outras. Toda JVM deve ser certificada pela Sun, provando a sua compatibilidade. Sintaxe java Programa mínimo Todo programa Java deve ter, no mínimo o método main(String[] args) declarado como public, static e void dentro de alguma de classe. O código do programa Java deve ser salvo com a extensão “.java”. Exemplo: OlaMundo.java Uso de maiúsculas e minúsculas O Java é uma linguagem Case Sensitive – letras maiúsculas e minúsculas são consideradas diferentes: nome é diferente de NOME Public é diferente de PUBLIC etc. Comentários Dentro dos programas Java é permitida a inclusão de comentários. // (comentário de uma única linha) /* */ (comentário de bloco – múltiplas linhas) /** */ (comentário de documentação – múltiplas linhas) Exemplo de comentário gerado pela ferramenta javadoc, contida no jdk. Compilação e execução Por meio do console é possível navegar até o diretório em que o arquivo foi salvo, e sua compilação usa o comando: javac [nome_da_classe].java Quando a compilação acontece corretamente, nenhuma mensagem é exibida, produzindo o arquivo .class bytecode. Para executar o programa é preciso acionar a JVM com o comando: java [nome_da_classe] A extensão .class não deve ser fornecida quando se executa um programa Java. Fragmento que mostra o resultado da compilação e execução do programa. Tipos de dados primitivos Um tipo de dados estabelece um conjunto particular de valores que podem ser representados dentro de um programa e para os quais podem ser definidas operações específicas. Os tipos primitivos Java são os mesmos encontrados na maioria das linguagens de programação e permitem representar valores numéricos, caracteres simples e valores lógicos. Tipos de dados primitivos Caracteres especiais Representação de caracteres especiais Variáveis O nome de uma variável em Java, pode ser formado por uma seqüência de um ou mais caracteres alfabéticos e numéricos. Regra – pode ser iniciado por: Uma letra; _ (undecore); $ (cifrã0) Exemplos válidos a, total, x2, $valor, _quantidade Exemplos inválidos 1x, total Geral, numero-minimo, void, super *void e super são exemplos de palavras reservadas da linguagem Java. Declaração de variáveis Sintaxe de declaração de variável em Java <Tipo> <nome> Exemplos: int contador; double valor; boolean condicao; Podemos definir um valor inicial para a variável diretamente em sua declaração Exemplos: int contador = 10; double valor = 10.5; boolean = true; O Java é uma linguagem “Fortemente tipada”. Exercícios 1) Na empresa onde trabalhamos, há tabelas com o quanto foi gasto em cada mês. Para fechar o balanço do primeiro trimestre, precisamos somar o gasto total. Sabendo que, em Janeiro, foram gastos 15000 reais, em Fevereiro, 23000 reais e em Março, 17000 reais, faça um programa que calcule e imprima o gasto total no trimestre. Siga esses passos: a) Crie uma classe chamada BalancoTrimestral com um bloco main, como nos exemplos anteriores; b) Dentro do main declare uma variável inteira chamada gastosJaneiro e inicialize-a com 15000; c) Crie também as variáveis gastosFevereiro e gastosMarco, inicializando-as com 23000 e 17000, respectivamente, utilize uma linha para cada declaração; d) Crie uma variável chamada gastosTrimestre e inicialize-a com a soma das outras 3 variáveis: int gastosTrimestre = gastosJaneiro + gastosFevereiro + gastosMarco; e) Imprima a variável gastosTrimestre. 2) Adicione código (sem alterar as linhas que já existem) na classe anterior para imprimir a média mensal de gasto, criando uma variável mediaMensal junto com uma mensagem. Para isso, concatene a String com o valor, usando "Valor da média mensal = "+ mediaMensal. Escopo de variáveis É o trecho de código em que aquela variável existe e onde é possível acessá-la. Variáveis podem ser declaradas em qualquer ponto de um programa Java, sendo válidas em todo o escopo em que foram declaradas e nos escopos internos a esses. Variáveis locais São variáveis declaradas dentro de método ou construtores (veremos sobre construtores mais adiante). O ciclo de vida de uma variável local vai do ponto onde ela foi declarada até o fim do bloco onde ela foi declarada. Pode-se verificar isso no código do slide anterior. Variáveis de instância (ou de objetos) São os atributos dos objetos (veremos sobre atributos mais adiante). São declaradas dentro da classe, mas fora de qualquer método ou construtor. Ficam em escopo enquanto o objeto existir. Casting e promoção Alguns valores são incompatíveis para fazer atribuição direta A promoção ocorre automaticamente na conversão de tipo mais simples em outro mais complexo A conversão de tipos mais complexos em mais simples é chamada de casting. Caso não tão comum de casting: Castings possíveis Abaixo estão todos os castings possíveis na linguagem Java. A indicação Impl. quer dizer que o cast é implícito e automático. Controle de Fluxo O if e else Sintaxe básica: Condição booleana é qualquer expressão que retorne true ou false. Para isso, podemos utilizar outros operadores (veremos isso mais adiante) Exemplo: Operadores A linguagem Java oferece um conjunto amplo de operadores destinados à realização de operações de atribuição, aritméticas, lógicas, relacionais e bit-a-bit. Operador de atribuição simples Usa a seguinte sintaxe: Em Java é válido o encadeamento de atribuições em que todas as variáveis são inicializadas com o mesmo valor: Operadores aritméticos Os operadores de adição, subtração, multiplicação e divisão se comportam exatamente como na álgebra tradicional. Operadores de incremento e decremento MÃO NA MASSA: Vamos elaborar um programa de acordo as sentenças acima e imprimir os resultados obtidos. Operadores relacionais Permitem comparar valores, variáveis ou resultado de expressões retornando um resultado do tipo lógico (true ou false). Operadores relacionais duplos não podem conter espaços em branco entre seus símbolos. Operadores lógicos Conectam logicamente o resultado de diferentes expressões aritméticas ou relacionais. Operadores lógicos duplos não podem conter espaços em branco entre seus símbolos. MÃO NA MASSA: Construa um programa de acordo com as sentenças abaixo: a) Crie uma classe chamada PartidaDeFutebol; b) Declare uma variável com o nome donoDaBola e outra filhoDoDono (Ambas do tipo boolean e inicializadas com true ou false – fica a gosto do freguês ); c) O programa deve verificar se o jogador é o dono da bola ou se é filho do dono; d) No caso de qualquer uma das possibilidade retornar verdadeiro, o programa deverá imprimir a mensagem: “Pode jogar!”, senão imprimir a mensagem: “Não pode jogar!”. Operadores de atribuição composta Os exemplos acima podem ser transformados no código abaixo: Os operadores de atribuição compostos reduzem a escrita de código e otimizam a execução do programa. Operador ternário Avaliador de condição que permite utilizar o valor de duas expressões diferentes conforme o resultado da condição avaliada. Sintaxe: <condição> ? <expressão_verdadeira> : <expressão_falsa> Exemplo: Bibliografia Junior, Peter Jandl. Java Guia do Programador. 2º ed. São Paulo: Novatec, 2013. Caelum. FJ-11: Java e Orientação a Objetos. (Apostila). Disponível em <http://www.caelum.com.br/apostilas>.