Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução ao JavaIntrodução ao Java Carlos Renato Alves Gouveia cragouveia@gmail.com EmentaEmenta � Introdução ao Java � Estruturas de Controle � Array em Java; � Tratamento de Exceções � Trabalhando com bibliotecas de classe � Programação Orientada a Objetos:� Programação Orientada a Objetos: ◦ Classes e Objetos ◦ Classes de Estruturas Dinâmicas ◦ Herança ◦ Polimorfismo ◦ Encapsulamento ObjetivosObjetivos � Conhecer a Plataforma Java � Conhecer a sintaxe e as características do Java � Conhecer as APIs do Java � Escrever aplicações simples em Java � Entender e aplicar conceitos de Programação Orientada a Objetos A tecnologia JavaA tecnologia Java A tecnologia Java é composta por uma gama de produtos, baseados no poder da rede e na idéia de que um software deveria ser capaz de rodar em diferentes máquinas, sistemas e dispositivos. Por diferentes dispositivos entendemos: computadores, servidores, notebooks, handhelds, PDAs (Palm), celulares, TV, geladeiras e tudo mais o que for possível. Os programas feitos em Java rodam em diferentes ambientes graças a um componente da plataforma chamado JVM (Java Virtual Machine) – que é um tipo de tradutor de código Java para instruções específicas de cada sistema e dispositivo. A tecnologia Java foi lançada em 1995, e desde então tem crescido em popularidade e se tornado uma plataforma muito estável e madura. Atualmente a tecnologia Java está em sua segunda versão, chamada de Java 2 Platform. A tecnologia Java é, basicamente, sub-dividida em: � J2SE (Java 2 Standard Edition) � J2EE (Java 2 Enterprise Edition) � J2ME (Java 2 Micro Edition) � Java Card � Java Web Services A tecnologia Java A tecnologia Java –– J2SEJ2SE A J2SE é uma rica plataforma que oferece um completo ambiente para o desenvolvimento de aplicações para clientes e servidores. A J2SE é também a base das tecnologias J2EE e Java WebServices, e é dividida em dois grupos conceituais: Core Java e Desktop Java. A Sun distribui a J2SE na forma de um SDK (Software Development Kit), em conjunto com uma JRE (Java Runtime Environment). O pacote do SDK da J2SE vem com ferramentas para: compilação, debugging, geração de documentação (javadoc), empacotador de componentes (jar) e a JRE, que contém a JVM e outros componentes necessários para rodar aplicações Java. A tecnologia Java A tecnologia Java –– J2EEJ2EE � A tecnologia J2EE não é um produto, mas sim de uma especificação definida pela Sun � Simplifica as aplicações empresariais e multi-camadas � É baseando nos componentes padronizados, modulares e reusáveis, os (EJB) � Oferecendo um conjunto completo de serviços para estes � Oferecendo um conjunto completo de serviços para estes componentes � Manipula muitos detalhes do comportamento da aplicação automaticamente � Não precisa reaprender a programa, pois se utiliza dos mesmo recursos do Java (J2SE) � Roda em servidores de aplicações J2EE diferentes e padronizados pela Sun A tecnologia Java A tecnologia Java –– J2MEJ2ME A tecnologia J2ME é voltada para aplicações que rodam em pequenos dispositivos como celulares, PDAs, smart cards e etc. Ela possui uma API bastante completa para o desenvolvimento de aplicações para pequenos dispositivos. A tecnologia Java A tecnologia Java –– Web Web ServicesServices � Baseada na tecnologia XML � Usado para troca de informações pela rede � Muito utilizado por sites de e-commerce � Utiliza padrões definidos (SOAP, ...) � A API JAXP (Java API for XML Processing) oferece facilidades para Web ServicesWeb Services Porque usar Java??Porque usar Java?? � Custo � Arquitetura � Portabilidade � Padronização � Reusabilidade � Liberdade de Escolha� Liberdade de Escolha � Suporte CustoCusto � Java é FREE!!! � Editores e ambientes de produção gratuitos (Eclipse, NetBeans, JEdit, JCreator...) � Servidores de Aplicações gratuitos (Tomcat, JBoss, Jetty, …) ArquiteturaArquitetura � Orientado a Objetos ◦ A linguagem segue o paradígma OO, o que torna uma ferramenta extremamante poderosa � Multi-thread ◦ Suporta processamento paralelo múltiplo � Multi-camadas ◦◦ Java tem um foco voltado para se criar aplicações multi-camadas, facilitando a vida dos desenvolvedores e agregando mais valor e poder às aplicações PortabilidadePortabilidade � O mesmo código Java roda em diversas plataformas, sem a necessidade de alteração do código da aplicação � Aplicações também podem ser facilmente migradas entre os diversos servidores de aplicação J2EE Write Once, Run Anywhere! PadronizaçãoPadronização � A tecnologia Java é padronizada. Não segue apenas uma definição prioritária � Java é mantida pelo JCP (Java Comunity Process) � O JCP é quem define os rumos e os padrões da tecnologia Javatecnologia Java � O JCP é formado por inúmeras companhias e desenvolvedores: Sun, Oracle, IBM, BEA Systems, Novell, Xerox, Apache Group, Jboss Group, Bruno Souza (Javaman) � A J2EE é uma especificação padrão, seguida pelos fornecedores de ferramentas e servidores ReusabilidadeReusabilidade � Pelo fato de Java ser OO, é mais fácil se criar aplicações componentizadas � Isso permite que se faça um grande reuso de código já produzido, evitando retrabalho e, principalmente, dando mais qualidade ao e, principalmente, dando mais qualidade ao trabalho, pois podemos criar componentes separados por responsabilidade, criando componentes mais simples e, portanto, reusáveis � A herança é outro importante mecanisno da OOP que permite reuso Liberdade de EscolhaLiberdade de Escolha � A tecnologia Java não te deixa preso a apenas um vendor � Vários fabricantes fornecem ferramentas, servidores de aplicação, bibliotecas, etc. � Existem diversos tipos de frameworks para resolver um mesmo problema, o que te dá a liberdade de escolher qual mais se adapta ao seu projeto SuporteSuporte � A comunidade Java é a mais extensa hoje � Existem inúmeros JUGs (Java User Group) que promovem eventos, disponibilizam material, artigos, revistas especializadas, fórum de discussões, etc. � A comunidade virtual brasileira de Java é a maior do mundo O que é Java??O que é Java?? � Java é uma linguagem de programação � Java é um ambiente de desenvolvimento � Java é uma completa plataforma de soluções para tecnologia Instalando o SDK do Java (J2SDK)Instalando o SDK do Java (J2SDK) Faça o download do J2SDK para a sua plataforma (http://java.sun.com). Execute o arquivo de instalação – é fácil instalar (Next, Next, Finish). Crie uma variável de ambiente chamada JAVA_HOME, que deve guardar o caminho do diretório onde o Java foi instalado e adicione oguardar o caminho do diretório onde o Java foi instalado e adicione o caminho para os programas do Java no PATH do seu S.O.: No Windows: SET JAVA_HOME=C:\jdk1.5.0 SET PATH=%PATH%;%JAVA_HOME%\bin No Linux: export JAVA_HOME=/usr/java/jdk1.5.0 export PATH=$PATH:%JAVA_HOME%/bin Fundamentos da Fundamentos da Linguagem JavaLinguagem Java � Java não necessita de um editor específico � Existem dezenas de editores completos (IDEs) para Java (livre ou não) � É portável para qualquer ambiente/plataforma – “Write once, run anywhere!”“Write once, run anywhere!” � Java é orientado a objeto � Os programas em Java, quando compilados, são convertidos para um código intermediário (bytecode), que é verificado, carregado na memória e então interpretado pela JVM (Java Virtual Machine) � O Java não gera executáveis, nem código nativo para o SO Primeiro Programa em JavaPrimeiro Programa em Java Arquivo: PrimeiroPrograma.java public class PrimeiroPrograma { public static void main( String[] args ) { System.out.println( "Meu primeiro programa em Java" ); } } Compilando o código fonte: javac PrimeiroPrograma.java Executando oprograma: java PrimeiroPrograma Saída gerada: Meu primeiro programa em Java Todo programa começa pelo seu método main(), que é seu ponto de partida. Método Método mainmain()() A assinatura do método main(), que é o ponto de partida de um programa stand-alone, deve ser feito como abaixo: O parâmetro passado para o método main() é um array de Strings, que contém os valores dos argumentos passados na public static void main( String[] args ) { } Strings, que contém os valores dos argumentos passados na linha de comando da execução do programa. Exemplo: java PrimeiroPrograma argumento1 argumento2 argumento3 Cada palavra passada como argumento é um item do array, parâmetro do main() ComentáriosComentários Os comentários em Java podem ser por linha ou em bloco: Por linha: // isto é um comentário e inicia com duas barras Em bloco:Em bloco: /* Comentário em bloco Aceita múltiplas linhas Não utilize comentários aninhados */ Variáveis de Tipos PrimitivosVariáveis de Tipos Primitivos Em Java, uma variável deve: ◦ ser declara antes de ser usada ◦ ter um tipo definido (o tipo não muda) ◦ iniciar o valor da variável antes de usá-la ◦ ser usada dentro do escopo Declaração: <tipo da variável> <nome da variável>; Declaração e atribuição: <tipo> <nome> = <valor>;Declaração e atribuição: <tipo> <nome> = <valor>; Tipo Tamanho (bits) Valor Mínimo Valor Máximo Sem Sinal boolean 1 false true X char 16 0 216 -1 X byte 8 -27 27 -1 short 16 -215 215 -1 int 32 -231 231 -1 long 64 -263 263 -1 float 32 double 64 Variáveis de Tipos PrimitivosVariáveis de Tipos Primitivos public class TiposPrimitivos { public static void main( String[] args ) { //declara um int e atribui um valor int idade = 25; //declara um float e, depois, atribui um valor float valor; valor = 1.99f; //declarando um boolean boolean verdadeiroOuFalso = false; verdadeiroOuFalso = true; //declarando um char//declarando um char char letraA = 'A'; letraA = 65; //valor ASCII para 'A' //declarando um byte byte b = 127; //declarando um short short s = 1024; //declarando um long long l = 1234567890; //declarando um double double d = 100.0; //declaração múltipla int var1=0, var2=1, var3=2, var4; } } StringString � String é uma classe que manipula cadeia de caracteres � A classe String possui métodos para essas manipulações � Trabalha com Pool de Strings para economizar memória StringString � Outros métodos úteis da classe String Palavras chave no JavaPalavras chave no Java � O Java possui 53 palavras chave e reservadas abstract class extends implements null strictfp true assert const false import package super try boolean continue final instanceof private switch void break default finally int protected synchronized volatile byte do float interface public this while � Nenhuma das palavras acima podem ser usadas como identificadores (nome de variáveis, atributos, classes). As palavras goto e const, apesar de reservadas, não tem utilidade alguma no Java byte do float interface public this while case double for long return throw catch else goto native short throws char enum if new static transient OperadoresOperadores � Eles possuem uma ordem de precedência na execução da expressão � Para garantir a ordem de precedência desejada, agrupe as expressões com parênteses Operadores UnáriosOperadores Unários � Incremento e Decremento: ++ e – Mais e Menos Unário: + e –� Mais e Menos Unário: + e – � Complementar booleano: ! � Conversão de Tipos: (tipo) Operadores AritméticosOperadores Aritméticos � Multiplicação e Divisão: * e / � Módulo: % Adição e Subtração: + e –� Adição e Subtração: + e – � Concatenação: � Na concatenação de Strings, as variáveis ou literais são promovidos a String antes: Operadores de ComparaçãoOperadores de Comparação � Comparação ordinal: >, >=, < e <= ◦ Compara tipos primitivos numéricos e o tipo char � Comparador instanceof� Comparador instanceof ◦ Compara o tipo da classe de uma referência de um objeto � Comparação de Igualdade: == e != ◦ Compara tipos primitivos, valores literais e referências de objetos. Operadores Lógicos: && e IIOperadores Lógicos: && e II � Estes operadores não precisam testar toda a expressão � Ele pára assim que uma das condições o satisfaça � O retorno da expressão é um boolean Operador Condicional: ?Operador Condicional: ? � É também conhecido como operador ternário, pois trabalha com 3 operandos � Ele avalia o primeiro operando � Caso a avaliação retorne true, ele executa o segundo operando, senão, ele executa o terceiro operando � O segundo e terceiro operando DEVEM ser do mesmo tipo� O segundo e terceiro operando DEVEM ser do mesmo tipo O código do operador ternário abaixo: é semelhante ao código abaixo: Operadores de AtribuiçãoOperadores de Atribuição � Estes operadores atribuem um novo valor a variável ou expressão � O operador = apenas atribui um valor � Os operadores +=, -=, *= e /= calculam e atribuem um novo valor Conversão de Tipos PrimitivosConversão de Tipos Primitivos � Permite a conversão entre tipos diferentes � Deve ser explícito quando for de um tipo maior para um menor (narrowing) � Pode ser implícito (ou explícito) de um tipo menor para um maior (widening) � Conversão para tipos menores pode causar perda de precisão e truncamentotruncamento � O widening segue o sentido das flechas. Narrowing é no sentido contrário. byte short int long float double char Promoção AritméticaPromoção Aritmética � Ocorre com as operações aritméticas entre tipos primitivos numéricos diferentes � O menor tipo é automaticamente convertido para o maior tipo Estruturas de ControleEstruturas de Controle � Cláusula if () / else Estruturas de ControleEstruturas de Controle � Cláusula if () / else Estruturas de ControleEstruturas de Controle � Cláusula switch() O switch recebe um argumento do tipo int ou char Estruturas de Estruturas de ContoleContole � Laço while() � A expressão é avaliada antes de executar o bloco de código � Ele repete enquanto a expressão for verdadeira (true) Estruturas de ControleEstruturas de Controle � Laço do / while() � O bloco é executado ao menos uma vez � Após a primeira repetição é que a expressão é avaliada Estrutura de ControleEstrutura de Controle � Laço for() ◦ A sua estrutura é definida como a seguir: for (iniciação; condição; incremento) { bloco_de_código_a_executar } Estruturas de ControleEstruturas de Controle � Laço for() avançado (Enhanced for loop) ◦ Foi definido a partir do Java 5, com intuito de facilitar a vida do desenvolvedor, economizando código e evitando erros ao percorrer arrays e coleções (implementações de java.util.Collection) ◦ É similar ao for each de outras tecnologias ◦ Não é possível controlar o índice utilizado pelo for, mas pode-se contornar esse problemaproblema Estruturas de ControleEstruturas de Controle � Cláusula break ◦ Aborta a execução de um laço, quando executado Estruturas de ControleEstruturas de Controle � Cláusula break rotulada ◦ Aborta a execução de um laço rotulado, quando executado Estruturas de ControleEstruturas de Controle � Cláusula continue ◦ Ignora a execução dos comandos seguintes do bloco, no laço, quando executado Estruturas de ControleEstruturas de Controle � Cláusula continue rotulada ◦ Ignora a execução dos comandos seguintes do bloco, no laço, quando executado Programação Orientada a ObjetoProgramação Orientada a Objeto O paradígma da Orientação a Objeto é um mecanismo que ajuda a definir a estrutura de programas, baseado nos conceitos do mundo real, sejam eles reais ouabstratos. A Orientação a Objeto permite criar programas componentizados, separando as partes do sistema por responsabilidades e fazendo com que essas partes se comuniquem entre si, por meio de mensagens.comuniquem entre si, por meio de mensagens. Os conceitos da OO envolvem: Classes, Objetos e seus Relacionamentos, Herança e Polimorfismo. Dentre as vantagens que a OO proporciona, podemos destacar o aumento de produtividade, reuso de código, redução das linhas de código programadas, separação de responsabilidades, encapsulamento, polimorfismo, componentização, maior flexibilidade do sistema, dentre outras vantagens. Modelagem Orientada a ObjetoModelagem Orientada a Objeto Os sistemas OO podem ser modelados com auxílio da UML (Unified Modeling Language). UML é uma linguagem de modelagem para especificar, modelar, visualizar e documentar sistemas OO e não-OO, baseando-se em diagramas. A UML é composta por:A UML é composta por: ◦ Diagrama de Classes ◦ Diagrama de Seqüência ◦ Diagrama de Objetos ◦ Diagrama de Casos de Uso ◦ etc. ClassesClasses Uma classe, nada mais é, do que a descrição de um conjunto de entidades (reais ou abstratas) do mesmo tipo e com as mesmas características e comportamento. As classes definem a estrutura e o comportamento dos objetos daquele determinado tipo. Podemos dizer que as classes são, na verdade,tipo. Podemos dizer que as classes são, na verdade, modelos de objetos do mesmo tipo. Propriedades �modelo �cor �motor Comportamento liga desliga muda marcha acelera breca Entidade do mundo real Modelo UML da classe ClassesClasses Ao lado temos o código Java da classe Carro, definida pelo modelo UML, com base no levantamento da entidade carro do mundo real. No código definimos:No código definimos: � declaração da classe � declaração dos atributos � declaração dos métodos Arquivo: Carro.java O arquivo do código fonte sempre leva o nome da classe, seguido da extensão .java ObjetosObjetos Um objeto, nada mais é do que uma instância particular de um tipo de dado específico (classe), ou seja, em outras palavras, objeto é uma entidade, do mundo computacional, que representa uma entidade do mundo real especificamente. O objeto criado fica armazenado em uma área de memória chamada heap. Os objetos possuem: ◦ estado (atributos/propriedades)◦ estado (atributos/propriedades) ◦ comportamento (métodos/ações) ◦ identidade (cada objeto é único) Os objetos se comunicam entre si através de mensagens (chamadas aos métodos) e devem ter sua responsabilidade bem definida no sistema. Declaração da variável que vai guardar uma referência para um objeto do tipo Carro. Operador new instancia o objeto. Construtor da classe Carro. ObjetosObjetos As variáveis não guardam os objetos, mas sim uma referência para a área de memória onde os objetos estão alocados. Se criarmos duas instâncias da classe Carro e atribuírmos cada instância para cada uma das duas variáveis diferentes, c1 e c2, temos a situação ao lado.situação ao lado. Imagine, agora, duas variáveis diferentes, c1 e c2, ambas referenciando o mesmo objeto. Teríamos, agora, um cenário assim: ObjetosObjetos � Utilizando a classe Carro: Package e Package e ImportImport � Package ◦ Os pacotes (packages) servem para organizar e agrupar classes por funcionalidade ◦ Os pacotes são divididos por uma estrutura de diretórios Package e Package e ImportImport � Import ◦ O import deve ser usado para declarar que usaremos classes de outro pacote ◦ É parecido com o include de outras linguaguens Package e Package e ImportImport � Import estático ◦ A partir do Java 5 é possível fazer o import estático, ou seja, dar import apenas nos métodos ou atributos estáticos oferecidos pela classe, e usá-los como se fossem métodos ou atributos locais à sua classe. Package e Package e ImportImport Algo importante a se destacar é que as classes possuem um nome e um nome completo (ou fully qualified name). O nome da classe é aquele informado na definição da classe. Exemplo: public class MinhaClasse{}public class MinhaClasse{} Neste caso, o nome da classe é MinhaClasse. O nome completo da classe compreende o nome da classe mais a sua hierarquia completa de packages a qual pertence. Exemplo: package meu.pacote; public class MinhaClasse {} Neste caso, o nome da classe é meu.pacote.MinhaClasse. GarbageGarbage CollectionCollection Os objetos que não são mais referenciados, são coletados pelo Garbage Collector. O Garbage Collector libera a memória que não está mais em uso. Um objeto que perdeu sua referência é eleito a ser coletado, porém não é coletado automaticamente naquele instante. Quando um objeto se torna eletivo a Garbage Collection: Para forçar a execução do Garbage Collector: System.gc(); Porém, nada garante que o G.C. será executado naquele instante, nem que as instâncias sem referências serão recolhidas. AtributosAtributos Os atributos de uma classe são variáveis com escopo do objeto. São acessíveis e estão disponíveis enquanto o objeto estiver disponível. Os atributos são iniciados durante a criação do seu objeto. Durante a criação do objeto, os atributos de: ◦ tipos primitivos numéricos recebem 0 (zero) na inicialização; ◦ tipo char recebe o valor ‘\u0000’; ◦ tipo boolean recebe false; ◦ referência a objetos recebem null na inicialização. Porém, os atributos podem receber um valor padrão, definido na sua declaração, como no código abaixo: Atributos EstáticosAtributos Estáticos Atributos estáticos não precisam de uma instância da classe para serem usados. Eles são compartilhados por todas as instâncias da classe. ConstantesConstantes Constantes são atributos de uma classe que não mudam de valor. O modificador final indica que o atributo é imutável. MétodosMétodos A utilidade dos métodos é a de separar, em pedaços de código menores, uma determinada função. É aconselhável criar e manter métodos pequenos, para facilitar a leitura, o entendimento e a manutenção do código. Regras para se criar métodos: ◦ Serem bem claros e ter uma função bem definida ◦ Serem pequenos e fáceis de entender ◦ Serem reaproveitáveis ao máximo MétodosMétodos A sintaxe para a declaração de um método é assim: <tipo de retorno> <nome do método>([atributos]) { // implementação do método } O tipo de retorno informa qual o tipo de dados o método retorna. Pode ser um tipo primitivo ou um tipo de uma classe. Case o método não retorne nada, ele tipo primitivo ou um tipo de uma classe. Case o método não retorne nada, ele deve ser void. O nome do método pode ser qualquer. Prefira seguir os padrões de nomenclatura e dar nomes significativos, de preferência verbos no infinitivo. A lista de atributos não precisa ser informada se não há passagem de argumentos. Caso haja, os argumentos devem ser informados com seu tipo e nome, separados por vírgula se houver mais de um. Retorno dos MétodosRetorno dos Métodos A palavra reservada return causa o retorno do método. Quando os métodos são declarados com o tipo de retorno void, então o método não pode retornar nada. Os métodos que retornam algum valor, devem retornar dados do tipo do retorno declarado, ou de tipos compatíveis. Veja o exemplo: MétodosMétodos Métodos EstáticosMétodos Estáticos Métodos estáticos não precisam de uma instância da classe para serem usados. Métodos estáticos NÃO podem chamar métodos não-estáticos sem uma instância. ConstrutoresConstrutores Construtores não são métodos, são construtores. Eles fazem a função de inicialização (start up) do objeto criado. Se nenhum construtor for declarado, um construtor default será criado. Múltiplos construtores podem ser declarados (overloading). ConstrutoresConstrutores Usando os diferentesconstrutores: Passagem de ParâmetrosPassagem de Parâmetros Passagem de parâmetros, em Java, é por valor (não tem por referência). Parâmetros alterados dentro de um método, não serão alterados fora dele. Objeto passado como parâmetro apenas passa uma cópia da referência do objeto. Referência alterada dentro do método, não refletem fora dele. Alteração no estado de um objeto, como um parâmetro, alteram o estado fora Alteração no estado de um objeto, como um parâmetro, alteram o estado fora dele. Passagem de ParâmetrosPassagem de Parâmetros Passagem de ParâmetrosPassagem de Parâmetros Contornando o problema de passagem por valor de tipos primitivos: utilizar arrays (array é um objeto) VarargsVarargs No Java 5 foi introduzido o Varargs, que permite a passagem de um número variável de argumentos a um método. Dentro do método os argumentos variáveis são tratados como arrays do tipo que foi definido. No caso dos exemplos abaixo, um array de int (int []) ou de String (String []). Modificadores de AcessoModificadores de Acesso Determinam a visibilidade dos membros (atributos e métodos) da classe e da própria classe. Devem ser usados na declaração dos membros e da classe. Ao todo, são quatro modificadores: public, protected, default e private. public protected default Private Pode ser acessado por todo mundo Pode ser acessado por subclasses e classes do mesmo pacote Pode ser acessado por classes do mesmo pacote Pode ser acessado apenas pela própria classe JavaBeansJavaBeans Os JavaBeans são componentes Java (classes) bem encapsulados e com um propósito específico. Seus atributos não podem ser acessados diretamente, mas apenas por meio de métodos get e set. Segundo o encapsulamento, os atributos não podem ser alterados diretamente. ArraysArrays Array é uma coleção ordenada de primitivos, referências para objetose outros arrays. Os arrays em Java são homogêneos, ou seja, eles só podem conter dados do mesmo tipo. Os arrays são objetos, e devem ser construídos antes de serem usados. Os arrays são iniciados automaticamente quando criados. Passos para utilizar arrays: ◦ Declaração◦ Declaração ◦ Criação ◦ Iniciação ArraysArrays Podemos percorrer os arrays de forma automática, usando o laço for(). O índice dos arrays vai de 0 (zero) até N-1 (onde N é o tamanho do array). Os arrays não mudam de tamanho. Acessar um índice inexistente causa uma exceção: ArrayIndexOutOfBoundsException
Compartilhar