Java Certified Associate
                                         Jose Berardo
                             www.especializa.com.br/curso/oca-javaassociate




sábado, 9 de março de 13
Agenda
                           Macrotemas do curso:

         1.     Introdução às certificações Java
         2.     Iniciando com Java
         3.     Tipos de dados e seus detalhes
         4.     Expressões e construções
         5.     Usando arrays e coleções
         6.     Construções de laço
         7.     Classes, construtores e métodos
         8.     Herança e polimorfirsmo
         9.     Manipulação de exceções
         10.    Aplicações Java




sábado, 9 de março de 13
Agenda
         2. Iniciando com Java

         2.1.    Tecnologia Java
         2.2.    Orientação a objetos
         2.3.    Tipos de aplicações Java
         2.4.    Programando em Java no console
         2.5.    Estrutura de um .java
         2.6.    Estrutura do SDK




                           “O basicão do basicão...”




sábado, 9 de março de 13
Em meados dos anos 90, Patrick Naughton, Mike Sheridan e James Gosling
             criaram a linguagem Java com foco na então pouco difundida orientação a objetos

                       “Java is a full-fledged object-oriented programming language”

             Baseada em C/C++, Java trazia muitas novidades para as linguagens da época:

                       threading, rede, segurança, GUI, gestão automática de memória (ponteiros)

             Desenhada para ser multiplataforma, interpretada pela Java Virtual Machine



sábado, 9 de março de 13
Orientação a objetos
             OOA - Object Oriented Analysis
               Determina a funcionalidade do sistema. O que ele será capaz de fazer
             OOD - Object Oriented Design
               Modelagem que determina como a arquitetura suporta a funcionalidade da
               aplicação
             OOP - Object Oriented Programming
               Abrange a implementação da aplicação
             UML - Unified Modeling Language
              Técnica de representação gráfica para design e documentação




sábado, 9 de março de 13
Modelagem de classes
               Diagrama UML mais adotado na
               prática
               Caixas separadas em três seções:
                    A primeira reserva o nome da classe
                    A segunda lista as variáveis que
                    serão atributos de seus objetos.
                           Determina o estado (state) dos
                           objetos.
                    A terceira declara os métodos
                           Determina o comportamento



sábado, 9 de março de 13
Modelagem de classes
               Terminologia:
                    -: Membros privados
                    +: Membros públicos
                    #: Membros protected (público entre
                    classes de uma hierarquia)




sábado, 9 de março de 13
Princípios OO
               Objects:
                    Estrutura de dados
                    Pré-moldada em uma classe
                    Coleciona atributos, que determinam seu estado
                    Carregam comportamento declarado através de métodos
                    Possuem referência
                           Ponteiro interno que resolve o endereçamento físico do objeto em
                           memória
                           Variáveis nunca recebem o binário do objeto, mas o inteiro desta
                           referência




sábado, 9 de março de 13
Princípios OO
               Classes:
                    Artefato que descreve as características de seus objetos
                    Abstrações do estado e das funcionalidades dos objetos
                    Podem possuir estado
                           static variables - alocação estática
                    Cada classe está totalmente escrita em um único e distinto arquivo
                    Relações entre classes são refletidas em seus objetos:
                           dependências, associações ou hierarquias




sábado, 9 de março de 13
Princípios OO
               Data encapsulation (encapsulamento):
                    Consiste em esconder dos usuários da classe, informações irrelevantes e
                    expor as informações relevantes.
                    A premissa básica é diminuir o nível de complexidade aparente da classe
                    É conseguido através dos modificadores de visibilidade
                    É usado também para proteger o estado interno dos objetos
                           A técnica é esconder a variável que representa o estado e liberar
                           métodos de acesso para leitura e escrita quando necessário e impondo
                           as regras definidas na própria classe




sábado, 9 de março de 13
Princípios OO
               Inheritance (herança):
                    Técnica que permite derivação em classes filhas. Estas vão herdar o que
                    for definido em suas classes mães
                    Utilizada para promover reuso de código
                           É importante ter cuidado com o alto acoplamento gerado entre essas
                           classes
                           Certos casos devem ser implementados via composições
                    Ex.:
                           public class Pessoa { ... }
                           public class PessoaFisica extends Pessoa { ... }
                           public class PessoaJuridica extends Pessoa { ... }




sábado, 9 de março de 13
Princípios OO
               Polymorphism (polimorfismo):
                    Técnica que permite receber mais de um tipo de objeto a partir de
                    relações hierárquicas esperadas
                    Ex.:
                           Pessoa p1 = new PessoaFisica();
                           Pessoa p2 = new PessoaJuridica();
                    Subclasses podem sobrescrever comportamentos de classes mães de
                    forma transparente
                           p1.validarAtributos(); p2.validarAtributos();
                    É necessário ter cuidado em manter a relação é-um
                           Se um método de subclasse “nega” o comportamento da mãe, esta
                           deveria ser abstrata


sábado, 9 de março de 13
Tipos de aplicações Java
               Aplicações básicas para o console
               package cap1;

               public class RelouOOrde {

               	       /**
               	         * @param args
               	         */
               	       public static void main(String[] args) {
               	       	 System.out.println("Ela caiu e relou o ôrde!");
               	       }

               }




sábado, 9 de março de 13
Tipos de aplicações Java
               Aplicações de janelas (GUI)
               package cap1;

               import javax.swing.JFrame;

               public class MinhaJanela extends JFrame {
               	   private static final long serialVersionUID = 1L;
               	
               	   public MinhaJanela() {
               	   	 this.setSize(500, 500);
               	   	 this.setTitle("Essa é a minha Janela");
               	   	 this.setDefaultCloseOperation(EXIT_ON_CLOSE);
               	   }

               	       public static void main(String[] args) {
               	       	 MinhaJanela mj = new MinhaJanela();
               	       	 mj.setVisible(true);
               	       }
               }




sábado, 9 de março de 13
Tipos de aplicações Java
               Aplicações servidoras na Web (Servlets)
               package cap1;

               public class MinhaServlet extends HttpServlet {
               	   public void doGet(HttpServletRequest req, HttpServletResponse res)
               	   	 	 throws ServletException, IOException {
               	   	 res.setContentType("text/html");
               	   	 // then get the writer and write the response data
               	   	 PrintWriter out = res.getWriter();
               	   	 out.println("<HEAD><TITLE>Minha Servlet</TITLE></HEAD><BODY>");
               	   	 out.println("<h1> Vooti! </h1>");
               	   	 out.println("<P>É o que, hein?");
               	   	 out.println("</BODY>");
               	   	 out.close();
               	   }
               }




sábado, 9 de março de 13
Tipos de aplicações Java
              Templates Web (JSP)

                   <html>
                   <head>
                   <title>Minha pagininha marromenos</title>
                   </head>
                   <body>
                   <%
                      Date hoje = new Date();
                      out.println(hoje);
                   %>
                   <hr>
                   <jsp:useBean id="namebean" class="packt.NameBean" scope="session" >
                        <jsp:setProperty name="namebean" property="name" value=" Hello world""   />
                   </jsp:useBean>
                   <h1> <jsp:getProperty name="namebean" property="name" /></h1>
                   </body>
                   </html>




sábado, 9 de março de 13
Tipos de aplicações Java
               Java Beans (POJOs - Plain Old Java Objects)
               package cap1;

               public class Pessoa {
               	   private String nome;
               	   private String email;
               	   public String getNome() {
               	   	 return nome;
               	   }
               	   public void setNome(String nome) {
               	   	 this.nome = nome;
               	   }
               	   public String getEmail() {
               	   	 return email;
               	   }
               	   public void setEmail(String email) {
               	   	 this.email = email;
               	   }
               }




sábado, 9 de março de 13
Tipos de aplicações Java
               EJBs 3.1 (não caem na prova)
               package cap1;

               @javax.ejb.Stateless
               public class Pessoa {
               	   private String nome;
               	   private String email;
               	   public String getNome() {
               	   	 return nome;
               	   }
               	   public void setNome(String nome) {
               	   	 this.nome = nome;
               	   }
               	   public String getEmail() {
               	   	 return email;
               	   }
               	   public void setEmail(String email) {
               	   	 this.email = email;
               	   }
               }



sábado, 9 de março de 13
Tipos de aplicações Java
               CDI Beans (também não caem em prova)
               package cap1;

               @javax.inject.Named
               @javax.enterprise.context.SessionScoped
               public class PessoasBean {
               	   private Pessoa pessoaAtual;
               	   private java.util.List<Pessoa> listaPessoas;
                   public PessoasBean() {
               	   	 this.listaPessoas = new ArrayList<Pessoa>();
               	   }
               }




sábado, 9 de março de 13
Java no console
          public class RelouOOrde {
          	   public static void main(String[] args) {
          	   	   System.out.println("Ela caiu e relou o ôrde!");
          	   }
          }




                           Compilação:                       javac RelouOOrde.java

                               RelouOOrde.class - bytecode                     ela caiu e
                                                                                relou o
                                                                                  ôrde



                           Interpretação:
                           java RelouOOrde

                               Ela caiu e relou o ôrde




sábado, 9 de março de 13
Java no console
               Aplicativos Java podem se valer de uma série de variáveis de ambiente:



                    Nome                         Propósito                           Exemplo

               CLASSPATH              Caminhos onde encontrar classes              .:/novo/caminho

                    PATH       Caminhos onde encontrar comandos do sistema

            JAVA_VERSION                Versão do Java a ser utilizada                1.7.0_17

               JAVA_HOME      Caminho para o diretório onde o Java foi instalado      /usr/jdk/

                OS_NAME                 Nome do sistema operacional

              OS_VERSION                Versão do sistema operacional

                 OS_ARCH             Arquitetura do sistema operacional




sábado, 9 de março de 13
Estrutura de um .java
               class
                    Declaração que origina o arquivo .class. Seu nome será necessariamente o
                    nome do arquivo
               package
                    Determinação do diretório físico onde deverá ser salvo o arquivo
                    Promove a organização de código
               import
                    Resolução de nomes de classes (de outros pacotes)
                    import não é include
                     Não há conceito de subpacote

               Ordem das declarações: package import class



sábado, 9 de março de 13
Estrutura de um .java
               Variáveis de instância
                    Atributos de objeto - alocação dinâmica de memória
               Variáveis de classe
                    Atributos com declaração static - alocação estática de memória
               Métodos
                    Rotinas reutilizáveis que determinam o comportamento de um objeto
                    Promovem encapsulamento e reuso de código
               Construtores
                    Métodos chamados no ato do new
                    Devem possuir o mesmo nome da classe, sem declarar tipo de retorno
                    Úteis para inicializar os objetos



sábado, 9 de março de 13
Estrutura de um .java
               Mais sobre Métodos
                    modificadores retorno nome (Tipo1 var1, Tipo2 var2, ...)
                    throws PossivelException {
                       Corpo do método
                       Possíveis variáveis automáticas
                    }                                                           c()
                    Estruturas que determinam a pilha de chamadas               b()
                                                                                a()
                    A ordem dos modificadores não interfere
                                                                               main()
                    O tipo de retorno deve ser compatível com a cláusula
                    return interior ao método
                    A assinatura de um método é diferenciada por:
                           Seu nome, seu número, tipos e ordem de parâmetros



sábado, 9 de março de 13
Estrutura de um .java
               O método main
                    Método principal da aplicação como um todo
                    Representa toda a execução do “processo” principal do aplicativo Java
                    Início da pilha de chamadas
                    public static void main (String elefantes[])
                           Público
                           Método de classe
                           Não retorna nada
                           Declara que recebe um array de String passado em tempo de
                           chamada
                           java PrimeiraClasse parametro1 parametro2



sábado, 9 de março de 13
Estrutura de um .java
               Retornando o resultado da aplicação como um todo
                    O main é void, ou seja, não retorna nada ao sistema que o chamou
                    Em certos tipos de sistema, pode ser interessante informar um código
                    indicando se o programa encerrou de modo normal ou não
                           Útil em chamadas no console ou operações em lote, com chamadas a
                           vários outros programas de uma vez só
                    System.exit(0);
                           Encerra todas as operações (threads) do programa
                           É uma medida extrema que deve ser evitada
                           Interrompe o programa abruptamente, sem dar chance de realizar
                           operações de encerramento
                           O zero é justamente o código de retorno que você pode informar


sábado, 9 de março de 13
Estrutura de um .java
               Modificadores de visibilidade de membros de classes

                    Escopo        Palavra chave                         Descrição

                     Privado         private      Visível apenas no interior da própria classe que o definiu

              Visível ao pacote                    Visível a todas as classes pertencentes ao mesmo pacote

                  Hieráquico        protected     Herdado pelas subclasses mesmo estando em outro pacote

                     Público         public              Visível a toda e qualquer classe do sistema



                                    Classe          Pacote             Subclasses              Outras

                     private

                   “default”

                   protected

                      public




sábado, 9 de março de 13
Estrutura de um .java
               Comentários e documentação
                  Comentário podem vir:
                  // - Em uma única linha
                  /* Agrupando mais de
                     uma linha de código */
               Comentários sobre declarações de classes, atributos e métodos podem ser
               interpretados pelo executável javadoc
                  Docblocks (blocos javadoc) devem iniciar com /** e ter um * por linha
                  Podem possuir tags (iniciadas por @):
                      @author, @version, @param, @see, @return, @throws ou @exception
                  Como criar javadocs:
                      Javadoc -d /meus_docs -sourcepath /MeusFontesJava -classpath /
                      MinhasLibJars




sábado, 9 de março de 13
Estrutura de um .java
               Convenções de nomenclatura:
                 Parte-se do princípio de que tudo é minúsculo.

                 Elemento                        Convenção                                Exemplo

                   Package                     tudo minúsculo                      package meu.belopacote;

                    Classe             Iniciais maiúsculas por palavra                class MinhaClasse

                  Interface                Mesma regra das classes                interface NegocinhoCoisavel

                  Variáveis     Iniciais maiúsculas a partir da segunda palavra        String meuNome;

                  Atributos               Mesma regra das variáveis

                  Métodos                  Mesma regra das classes                public void coisarNegocio()

                 Constantes    Todas letras maiúsculas separadas por underscore     MINHA_CONSTANTE




sábado, 9 de março de 13
Estrutura de um .java
               Annotations
                   Meta-informações sobre o programa
                   Não são código, uma vez que seguem outra sintaxe e não executam
                   nenhum comando
                   Também não são comentários uma vez que o compilador vai exigir sua
                   escrita correta
                   Sintaxe:
                      @MinhaAnnotation

                           Ex.:
                           @Override
                    	       public String toString() {
                    	       	 return super.toString();
                    	       }




sábado, 9 de março de 13
Estrutura de um .java
               Como criar uma Annotation
               package cap1;

               import      java.lang.annotation.ElementType;
               import      java.lang.annotation.Retention;
               import      java.lang.annotation.RetentionPolicy;
               import      java.lang.annotation.Target;

               @Retention(RetentionPolicy.RUNTIME)
               @Target({ElementType.METHOD,ElementType.FIELD})
               public @interface CodigoBebo {
               	   boolean bebeuCerveja() default true;
               	   boolean bebeuVinho() default true;
               	   boolean bebeuVodka() default true;
               }




sábado, 9 de março de 13
Estrutura de um .java
               RetentionPolicy
                    RUNTIME - A annotation será compilada junto com a classe que a
                    utilizar e será possível usar introspecção (reflection) para
                    descobrirmos seu valor
                    CLASS - A annotation será compilada junto com a classe que a
                    utilizar, mas não será acessível via Reflection API
                    SOURCE - A annotation é ignorada pelo compilador como se fosse um
                    mero comentário
                       Mesmo assim o comportamento dela não é igual ao de um
                       comentário, o compilador sempre exigirá que ela seja escrita
                       corretamente




sábado, 9 de março de 13
Estrutura de um .java
               Target
                    Restringe os locais onde poderemos utilizar a annotation criada:
                    ElementType:
                       TYPE - Sobre outra annotation, classes, enums ou interfaces
                       FIELD - Sobre atributos (de objeto ou de classe)
                       METHOD - Declarações de métodos
                       PARAMETER - Declarações de parâmetros
                       CONSTRUCTOR - Apenas sobre construtores
                       LOCAL_VARIABLES - Sobre variáveis locais a métodos
                       ANNOTATION_TYPE - Apenas sobre declarações de annotations
                       PACKAGE - Sobre pacotes
                    A sintaxe para mais de um valor por annotation é agrupar com chaves
                    e separar por vírgulas




sábado, 9 de março de 13
Estrutura de um .java
               Annotation Attributes
                   Annotations podem ou não declarar atributos
                   Estranhamente sua sintaxe parece com a de métodos, uma vez que a
                   declaração da própria annotation se confunde com a de uma interface
                   Podem declarar valores default
                   Comumente, declaram valores de tipos Enum
                   Podem declarar arrays de determinado tipo, mesmo que isso ocorra,
                   tanto o valor default quanto o valor utilizado pela classe não é
                   obrigado a ser um array daquele tipo
                             boolean[] bebeuCerveja() default true;
                           Ou pode:
                             boolean[] bebeuCerveja() default {true, true, false, true};




sábado, 9 de março de 13
Estrutura de um .java
               Annotations em classes

                      @Override
               	       @CodigoBebo(bebeuCerveja=true, bebeuVodka=false)
               	       public String toString() {
               	       	 return super.toString();
               	       }


               Annotations são normalmente usadas por uma aplicação de terceiros, no
               entanto o próprio compilador reconhece algumas:
                  @Deprecated - Informa que o código está depreciado, não deve ser usado
                  @Override - O compilador vai exigir que o método que o declare
                  realmente sobrescreva algum em sua hierarquia
                  @SuppressWarnings - Utilizado para suprimir warnings de compilação




sábado, 9 de março de 13
Estrutura do SDK
               Diretórios do Java SE SDK - Standard Development Kit:
                 bin: Diretório que traz as ferramentas que precisamos (javac, javadoc,
                 java, jar ...)
                 db: Diretório utilizado pelo Java DB, banco de dados open source
                 portado pela Sun do projeto Apache Derby
                 demo: Séries de arquivos de demonstração
                 include: Arquivos de cabeçalho úteis em integrações com aplicações C
                 jre: Java Runtime Environment - Ambiente de execução
                 sample: Exemplos de código de várias features do Java




sábado, 9 de março de 13
Estrutura do SDK
               Pacotes básicos da API:
                 java.lang: Traz os tipos mais elementares da linguagem. Único pacote
                 que não requer sua declaração totalmente qualificada (não precisa de
                 import)
                 java.io: Inclui funcionalidades relativas a arquivos e diretórios
                 java.net: Traz recursos de comunicação em rede (Sockets, URLs, etc)
                 java.util: Carrega classes e interfaces utilitárias quase tão presentes
                 quanto as do pacote java.lang.
                 java.awt: Carrega componentes de interface gráfica




sábado, 9 de março de 13
Objetivos cobertos
               Define the structure of a Java class (in the Exploring the structure of a class
               section)
               Create an executable Java application with a main method (in the Exploring
               the structure of a Java console program section)

               Introdução geral a diversos outros objetivos




sábado, 9 de março de 13

Oracle Certified Associate - Java Programmer I - aula 2

  • 1.
    Java Certified Associate Jose Berardo www.especializa.com.br/curso/oca-javaassociate sábado, 9 de março de 13
  • 2.
    Agenda Macrotemas do curso: 1. Introdução às certificações Java 2. Iniciando com Java 3. Tipos de dados e seus detalhes 4. Expressões e construções 5. Usando arrays e coleções 6. Construções de laço 7. Classes, construtores e métodos 8. Herança e polimorfirsmo 9. Manipulação de exceções 10. Aplicações Java sábado, 9 de março de 13
  • 3.
    Agenda 2. Iniciando com Java 2.1. Tecnologia Java 2.2. Orientação a objetos 2.3. Tipos de aplicações Java 2.4. Programando em Java no console 2.5. Estrutura de um .java 2.6. Estrutura do SDK “O basicão do basicão...” sábado, 9 de março de 13
  • 4.
    Em meados dosanos 90, Patrick Naughton, Mike Sheridan e James Gosling criaram a linguagem Java com foco na então pouco difundida orientação a objetos “Java is a full-fledged object-oriented programming language” Baseada em C/C++, Java trazia muitas novidades para as linguagens da época: threading, rede, segurança, GUI, gestão automática de memória (ponteiros) Desenhada para ser multiplataforma, interpretada pela Java Virtual Machine sábado, 9 de março de 13
  • 5.
    Orientação a objetos OOA - Object Oriented Analysis Determina a funcionalidade do sistema. O que ele será capaz de fazer OOD - Object Oriented Design Modelagem que determina como a arquitetura suporta a funcionalidade da aplicação OOP - Object Oriented Programming Abrange a implementação da aplicação UML - Unified Modeling Language Técnica de representação gráfica para design e documentação sábado, 9 de março de 13
  • 6.
    Modelagem de classes Diagrama UML mais adotado na prática Caixas separadas em três seções: A primeira reserva o nome da classe A segunda lista as variáveis que serão atributos de seus objetos. Determina o estado (state) dos objetos. A terceira declara os métodos Determina o comportamento sábado, 9 de março de 13
  • 7.
    Modelagem de classes Terminologia: -: Membros privados +: Membros públicos #: Membros protected (público entre classes de uma hierarquia) sábado, 9 de março de 13
  • 8.
    Princípios OO Objects: Estrutura de dados Pré-moldada em uma classe Coleciona atributos, que determinam seu estado Carregam comportamento declarado através de métodos Possuem referência Ponteiro interno que resolve o endereçamento físico do objeto em memória Variáveis nunca recebem o binário do objeto, mas o inteiro desta referência sábado, 9 de março de 13
  • 9.
    Princípios OO Classes: Artefato que descreve as características de seus objetos Abstrações do estado e das funcionalidades dos objetos Podem possuir estado static variables - alocação estática Cada classe está totalmente escrita em um único e distinto arquivo Relações entre classes são refletidas em seus objetos: dependências, associações ou hierarquias sábado, 9 de março de 13
  • 10.
    Princípios OO Data encapsulation (encapsulamento): Consiste em esconder dos usuários da classe, informações irrelevantes e expor as informações relevantes. A premissa básica é diminuir o nível de complexidade aparente da classe É conseguido através dos modificadores de visibilidade É usado também para proteger o estado interno dos objetos A técnica é esconder a variável que representa o estado e liberar métodos de acesso para leitura e escrita quando necessário e impondo as regras definidas na própria classe sábado, 9 de março de 13
  • 11.
    Princípios OO Inheritance (herança): Técnica que permite derivação em classes filhas. Estas vão herdar o que for definido em suas classes mães Utilizada para promover reuso de código É importante ter cuidado com o alto acoplamento gerado entre essas classes Certos casos devem ser implementados via composições Ex.: public class Pessoa { ... } public class PessoaFisica extends Pessoa { ... } public class PessoaJuridica extends Pessoa { ... } sábado, 9 de março de 13
  • 12.
    Princípios OO Polymorphism (polimorfismo): Técnica que permite receber mais de um tipo de objeto a partir de relações hierárquicas esperadas Ex.: Pessoa p1 = new PessoaFisica(); Pessoa p2 = new PessoaJuridica(); Subclasses podem sobrescrever comportamentos de classes mães de forma transparente p1.validarAtributos(); p2.validarAtributos(); É necessário ter cuidado em manter a relação é-um Se um método de subclasse “nega” o comportamento da mãe, esta deveria ser abstrata sábado, 9 de março de 13
  • 13.
    Tipos de aplicaçõesJava Aplicações básicas para o console package cap1; public class RelouOOrde { /** * @param args */ public static void main(String[] args) { System.out.println("Ela caiu e relou o ôrde!"); } } sábado, 9 de março de 13
  • 14.
    Tipos de aplicaçõesJava Aplicações de janelas (GUI) package cap1; import javax.swing.JFrame; public class MinhaJanela extends JFrame { private static final long serialVersionUID = 1L; public MinhaJanela() { this.setSize(500, 500); this.setTitle("Essa é a minha Janela"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String[] args) { MinhaJanela mj = new MinhaJanela(); mj.setVisible(true); } } sábado, 9 de março de 13
  • 15.
    Tipos de aplicaçõesJava Aplicações servidoras na Web (Servlets) package cap1; public class MinhaServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); // then get the writer and write the response data PrintWriter out = res.getWriter(); out.println("<HEAD><TITLE>Minha Servlet</TITLE></HEAD><BODY>"); out.println("<h1> Vooti! </h1>"); out.println("<P>É o que, hein?"); out.println("</BODY>"); out.close(); } } sábado, 9 de março de 13
  • 16.
    Tipos de aplicaçõesJava Templates Web (JSP) <html> <head> <title>Minha pagininha marromenos</title> </head> <body> <% Date hoje = new Date(); out.println(hoje); %> <hr> <jsp:useBean id="namebean" class="packt.NameBean" scope="session" > <jsp:setProperty name="namebean" property="name" value=" Hello world"" /> </jsp:useBean> <h1> <jsp:getProperty name="namebean" property="name" /></h1> </body> </html> sábado, 9 de março de 13
  • 17.
    Tipos de aplicaçõesJava Java Beans (POJOs - Plain Old Java Objects) package cap1; public class Pessoa { private String nome; private String email; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } sábado, 9 de março de 13
  • 18.
    Tipos de aplicaçõesJava EJBs 3.1 (não caem na prova) package cap1; @javax.ejb.Stateless public class Pessoa { private String nome; private String email; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } sábado, 9 de março de 13
  • 19.
    Tipos de aplicaçõesJava CDI Beans (também não caem em prova) package cap1; @javax.inject.Named @javax.enterprise.context.SessionScoped public class PessoasBean { private Pessoa pessoaAtual; private java.util.List<Pessoa> listaPessoas; public PessoasBean() { this.listaPessoas = new ArrayList<Pessoa>(); } } sábado, 9 de março de 13
  • 20.
    Java no console public class RelouOOrde { public static void main(String[] args) { System.out.println("Ela caiu e relou o ôrde!"); } } Compilação: javac RelouOOrde.java RelouOOrde.class - bytecode ela caiu e relou o ôrde Interpretação: java RelouOOrde Ela caiu e relou o ôrde sábado, 9 de março de 13
  • 21.
    Java no console Aplicativos Java podem se valer de uma série de variáveis de ambiente: Nome Propósito Exemplo CLASSPATH Caminhos onde encontrar classes .:/novo/caminho PATH Caminhos onde encontrar comandos do sistema JAVA_VERSION Versão do Java a ser utilizada 1.7.0_17 JAVA_HOME Caminho para o diretório onde o Java foi instalado /usr/jdk/ OS_NAME Nome do sistema operacional OS_VERSION Versão do sistema operacional OS_ARCH Arquitetura do sistema operacional sábado, 9 de março de 13
  • 22.
    Estrutura de um.java class Declaração que origina o arquivo .class. Seu nome será necessariamente o nome do arquivo package Determinação do diretório físico onde deverá ser salvo o arquivo Promove a organização de código import Resolução de nomes de classes (de outros pacotes) import não é include Não há conceito de subpacote Ordem das declarações: package import class sábado, 9 de março de 13
  • 23.
    Estrutura de um.java Variáveis de instância Atributos de objeto - alocação dinâmica de memória Variáveis de classe Atributos com declaração static - alocação estática de memória Métodos Rotinas reutilizáveis que determinam o comportamento de um objeto Promovem encapsulamento e reuso de código Construtores Métodos chamados no ato do new Devem possuir o mesmo nome da classe, sem declarar tipo de retorno Úteis para inicializar os objetos sábado, 9 de março de 13
  • 24.
    Estrutura de um.java Mais sobre Métodos modificadores retorno nome (Tipo1 var1, Tipo2 var2, ...) throws PossivelException { Corpo do método Possíveis variáveis automáticas } c() Estruturas que determinam a pilha de chamadas b() a() A ordem dos modificadores não interfere main() O tipo de retorno deve ser compatível com a cláusula return interior ao método A assinatura de um método é diferenciada por: Seu nome, seu número, tipos e ordem de parâmetros sábado, 9 de março de 13
  • 25.
    Estrutura de um.java O método main Método principal da aplicação como um todo Representa toda a execução do “processo” principal do aplicativo Java Início da pilha de chamadas public static void main (String elefantes[]) Público Método de classe Não retorna nada Declara que recebe um array de String passado em tempo de chamada java PrimeiraClasse parametro1 parametro2 sábado, 9 de março de 13
  • 26.
    Estrutura de um.java Retornando o resultado da aplicação como um todo O main é void, ou seja, não retorna nada ao sistema que o chamou Em certos tipos de sistema, pode ser interessante informar um código indicando se o programa encerrou de modo normal ou não Útil em chamadas no console ou operações em lote, com chamadas a vários outros programas de uma vez só System.exit(0); Encerra todas as operações (threads) do programa É uma medida extrema que deve ser evitada Interrompe o programa abruptamente, sem dar chance de realizar operações de encerramento O zero é justamente o código de retorno que você pode informar sábado, 9 de março de 13
  • 27.
    Estrutura de um.java Modificadores de visibilidade de membros de classes Escopo Palavra chave Descrição Privado private Visível apenas no interior da própria classe que o definiu Visível ao pacote Visível a todas as classes pertencentes ao mesmo pacote Hieráquico protected Herdado pelas subclasses mesmo estando em outro pacote Público public Visível a toda e qualquer classe do sistema Classe Pacote Subclasses Outras private “default” protected public sábado, 9 de março de 13
  • 28.
    Estrutura de um.java Comentários e documentação Comentário podem vir: // - Em uma única linha /* Agrupando mais de uma linha de código */ Comentários sobre declarações de classes, atributos e métodos podem ser interpretados pelo executável javadoc Docblocks (blocos javadoc) devem iniciar com /** e ter um * por linha Podem possuir tags (iniciadas por @): @author, @version, @param, @see, @return, @throws ou @exception Como criar javadocs: Javadoc -d /meus_docs -sourcepath /MeusFontesJava -classpath / MinhasLibJars sábado, 9 de março de 13
  • 29.
    Estrutura de um.java Convenções de nomenclatura: Parte-se do princípio de que tudo é minúsculo. Elemento Convenção Exemplo Package tudo minúsculo package meu.belopacote; Classe Iniciais maiúsculas por palavra class MinhaClasse Interface Mesma regra das classes interface NegocinhoCoisavel Variáveis Iniciais maiúsculas a partir da segunda palavra String meuNome; Atributos Mesma regra das variáveis Métodos Mesma regra das classes public void coisarNegocio() Constantes Todas letras maiúsculas separadas por underscore MINHA_CONSTANTE sábado, 9 de março de 13
  • 30.
    Estrutura de um.java Annotations Meta-informações sobre o programa Não são código, uma vez que seguem outra sintaxe e não executam nenhum comando Também não são comentários uma vez que o compilador vai exigir sua escrita correta Sintaxe: @MinhaAnnotation Ex.: @Override public String toString() { return super.toString(); } sábado, 9 de março de 13
  • 31.
    Estrutura de um.java Como criar uma Annotation package cap1; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.FIELD}) public @interface CodigoBebo { boolean bebeuCerveja() default true; boolean bebeuVinho() default true; boolean bebeuVodka() default true; } sábado, 9 de março de 13
  • 32.
    Estrutura de um.java RetentionPolicy RUNTIME - A annotation será compilada junto com a classe que a utilizar e será possível usar introspecção (reflection) para descobrirmos seu valor CLASS - A annotation será compilada junto com a classe que a utilizar, mas não será acessível via Reflection API SOURCE - A annotation é ignorada pelo compilador como se fosse um mero comentário Mesmo assim o comportamento dela não é igual ao de um comentário, o compilador sempre exigirá que ela seja escrita corretamente sábado, 9 de março de 13
  • 33.
    Estrutura de um.java Target Restringe os locais onde poderemos utilizar a annotation criada: ElementType: TYPE - Sobre outra annotation, classes, enums ou interfaces FIELD - Sobre atributos (de objeto ou de classe) METHOD - Declarações de métodos PARAMETER - Declarações de parâmetros CONSTRUCTOR - Apenas sobre construtores LOCAL_VARIABLES - Sobre variáveis locais a métodos ANNOTATION_TYPE - Apenas sobre declarações de annotations PACKAGE - Sobre pacotes A sintaxe para mais de um valor por annotation é agrupar com chaves e separar por vírgulas sábado, 9 de março de 13
  • 34.
    Estrutura de um.java Annotation Attributes Annotations podem ou não declarar atributos Estranhamente sua sintaxe parece com a de métodos, uma vez que a declaração da própria annotation se confunde com a de uma interface Podem declarar valores default Comumente, declaram valores de tipos Enum Podem declarar arrays de determinado tipo, mesmo que isso ocorra, tanto o valor default quanto o valor utilizado pela classe não é obrigado a ser um array daquele tipo boolean[] bebeuCerveja() default true; Ou pode: boolean[] bebeuCerveja() default {true, true, false, true}; sábado, 9 de março de 13
  • 35.
    Estrutura de um.java Annotations em classes @Override @CodigoBebo(bebeuCerveja=true, bebeuVodka=false) public String toString() { return super.toString(); } Annotations são normalmente usadas por uma aplicação de terceiros, no entanto o próprio compilador reconhece algumas: @Deprecated - Informa que o código está depreciado, não deve ser usado @Override - O compilador vai exigir que o método que o declare realmente sobrescreva algum em sua hierarquia @SuppressWarnings - Utilizado para suprimir warnings de compilação sábado, 9 de março de 13
  • 36.
    Estrutura do SDK Diretórios do Java SE SDK - Standard Development Kit: bin: Diretório que traz as ferramentas que precisamos (javac, javadoc, java, jar ...) db: Diretório utilizado pelo Java DB, banco de dados open source portado pela Sun do projeto Apache Derby demo: Séries de arquivos de demonstração include: Arquivos de cabeçalho úteis em integrações com aplicações C jre: Java Runtime Environment - Ambiente de execução sample: Exemplos de código de várias features do Java sábado, 9 de março de 13
  • 37.
    Estrutura do SDK Pacotes básicos da API: java.lang: Traz os tipos mais elementares da linguagem. Único pacote que não requer sua declaração totalmente qualificada (não precisa de import) java.io: Inclui funcionalidades relativas a arquivos e diretórios java.net: Traz recursos de comunicação em rede (Sockets, URLs, etc) java.util: Carrega classes e interfaces utilitárias quase tão presentes quanto as do pacote java.lang. java.awt: Carrega componentes de interface gráfica sábado, 9 de março de 13
  • 38.
    Objetivos cobertos Define the structure of a Java class (in the Exploring the structure of a class section) Create an executable Java application with a main method (in the Exploring the structure of a Java console program section) Introdução geral a diversos outros objetivos sábado, 9 de março de 13