sábado, 27 de outubro de 2012

Modificadores de Acesso a Classes Java na Pratica


Antes de começarmos a colocar a mão na massa é importante que você já tenha um conhecimento teórico sobre os modificadores de acesso a classes.

Criando Estrutura

No local onde você costuma desenvolver seu código crie as seguintes estruturas de diretório:
·         ...\Modificadores\src\br\com\diego\pacote1
·         ...\Modificadores\src\br\com\diego\pacote2
Está estrutura é conhecida como package(pacote) utilizado para organizar melhor o seu código JAVA e será utilizada para exemplificar todos os exemplos.

Default

Abaixo segue um exemplo de classe default que só pode ser acessada de dentro do mesmo pacote.
  • Dentro da pasta pacote1 criada acima crie o arquivo Banco.java.
  • Dentro da pasta pacote2 criada acima crie o arquivo Cliente.java.
Abra o arquivo Banco.java em uma IDE de sua preferencia coloque o código abaixo:
            package br.com.diego.pacote1; // declaração da package(diretório a partir do diretório do projeto(Modificadores neste caso)).

class Banco {
      
}

Vamos acessar a classe Banco a partir de uma classe em outro pacote:
.
package br.com.diego.pacote2;

public class Cliente {
      
       public static void main(String[] args) {
              
             Banco banco = new Banco(); //Criando uma instancia do objeto Banco       

       }

}
Este código não compila e exibe a seguinte mensagem:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
       Banco cannot be resolved to a type
       Banco cannot be resolved to a type

       at br.com.diego.pacote2.Cliente.main(Cliente.java:7)
Para conseguirmos compilar este código devemos copiar o arquivo Banco.java para o mesmo diretório do arquivo Cliente.java e alterarmos a primeira linha para package br.com.diego.pacote2; o código ficará conforme descrito abaixo:
package br.com.diego.pacote2; // declaração da package(diretório a partir do diretório do projeto(Modificadores neste caso)).

class Banco {
      
}

Para o modificador default só é permitido acesso entre classes no mesmo pacote.

Public (Publico)

Abaixo segue um exemplo de classe pública que pode ser acessado por qualquer outra classe independente do pacote.
  • Dentro da pasta pacote1 criada acima crie o arquivo Banco.java.
  • Dentro da pasta pacote2 criada acima crie o arquivo Cliente.java.
Abra o arquivo Banco.java em uma IDE de sua preferencia coloque o código abaixo:
            package br.com.diego.pacote1; // declaração da package(diretório a partir do diretório do projeto(Modificadores neste caso)).

public class Banco {
      
}

Vamos acessar a classe Banco de uma classe em outro pacote.

Abra o arquivo Cliente.java e digite o código abaixo:
.
package br.com.diego.pacote2;

public class Cliente {
      
       public static void main(String[] args) {
              
             Banco banco = new Banco(); //Criando uma instancia do objeto Banco       

       }

}
Este código não compila e exibe a seguinte mensagem:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
       Banco cannot be resolved to a type
       Banco cannot be resolved to a type

       at br.com.diego.pacote2.Cliente.main(Cliente.java:7)
Apesar do objeto Banco ser public ao tentar criar uma instancia a partir de uma classe que esta em outro pacote acontece erro de compilação, para solucionar este erro existem duas maneiras de resolver este problema.
  1. A primeira maneira é fazer a mesma solução da classe default descrito acima e copiar a classe Banco para o mesmo diretório da classe Cliente.
  2. Importar a classe Banco é a solução mais utilizada, para isso adicione o código import br.com.diego.pacote1.Banco; abaixo da declaração do pacote o código ficará como descrito abaixo:
package br.com.diego.pacote2;

import br.com.diego.pacote1.Banco;

public class Cliente {
      
       public static void main(String[] args) {
              
             Banco banco = new Banco(); //Criando uma instancia do objeto Banco       

       }

}

Final

Uma classe final não pode ser estendida ou seja a única maneira de acessar a classe Banco é instanciar está classe é usando o new.
  • Dentro da pasta pacote1 criada acima crie o arquivo Banco.java.
  • Dentro da pasta pacote2 criada acima crie o arquivo Cliente.java.
Abra o arquivo Banco.java em uma IDE de sua preferencia coloque o código abaixo:
package br.com.diego.pacote1; // declaração da package(diretório a partir do diretório do projeto(Modificadores neste caso)).

public final class Banco {
      
}
Vamos estender a classe Banco em Cliente.

Abra o arquivo Cliente.java e digite o código abaixo:

package br.com.diego.pacote2;

import br.com.diego.pacote1.Banco;

public class Cliente extends Banco {
      
       public static void main(String[] args) {
              
                          

       }

}

Este código não compila e apresenta a seguinte mensagem de erro:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:

       at br.com.diego.pacote2.Cliente.main(Cliente.java:7)
Uma classe final nunca pode ser estendida por isso o único meio de acessar é instanciado Banco(new) conforme descrito abaixo:
package br.com.diego.pacote2;

import br.com.diego.pacote1.Banco;

public class Cliente {
      
       public static void main(String[] args) {
              
                    Banco banco = new Banco();

       }

}

Abstract

Uma classe abstract só pode ser estendida ou seja nunca pode ser instanciada.
  • Dentro da pasta pacote1 criada acima crie o arquivo Banco.java.
  • Dentro da pasta pacote2 criada acima crie o arquivo Cliente.java.
Abra o arquivo Banco.java em uma IDE de sua preferencia coloque o código abaixo:
package br.com.diego.pacote1; // declaração da package(diretório a partir do diretório do projeto(Modificadores neste caso)).

public abstract class Banco {    
      
}

Vamos instanciar a classe Banco em Cliente.


Abra o arquivo Cliente.java e digite o código abaixo:

package br.com.diego.pacote2;

import br.com.diego.pacote1.Banco;

public class Cliente {
      
       public static void main(String[] args) {
              
                    Banco banco = new Banco();

       }

}

Este código não compila e apresenta a seguinte mensagem de erro:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
       Cannot instantiate the type Banco

       at br.com.diego.pacote2.Cliente.main(Cliente.java:9)
Uma classe abstrata nunca pode ser instanciada por isso o único meio de acessar a classe Banco é estendendo conforme descrito abaixo:
package br.com.diego.pacote2;

import br.com.diego.pacote1.Banco;

public class Cliente extends Banco {
      
       public static void main(String[] args) {      
                   

       }

}

Com este exemplo pratico finalizo a demostração dos modificadores de acesso a classes.

Qualquer problema, duvida, comentário ou caso tenham algo a acrescentar fiquem a vontade.

Grato pela atenção,
Att,
Diego



quarta-feira, 24 de outubro de 2012

Modificadores de Acesso a Métodos e Variáveis Java


Agora que você já conhece os modificadores de classe, veremos aqui como modificar uma declaração de método ou variável.
Os métodos e variáveis de instancias (não locais) são conhecidos coletivamente como membros.

Modificadores de Acesso

Os métodos e variáveis normalmente recebem o controle de acesso exatamente da mesma forma.
Enquanto uma classe só pode usar dois dos quatro níveis de controle de acesso (default ou public), os membros podem usar todos existentes listados abaixo:
  • public
  • protected
  • default
  • private

Membros Public (Público)

Quando um método ou variável é declarado public, isso significa que todas as outras classes, independente do pacote ao qual pertencem podem acessar o método ou variável em questão (assumindo-se que a classe esteja visível).

Membros Private (Privado)

Quando um método ou variável é declarado como private, isso significa que o método ou variável em questão não podem ser acessados por nenhuma outra classe que não seja a que esta variável ou método está declarado.

Membros Protected e Default

Os níveis de controle de acesso protected e default são quase idênticos, mas com uma diferença fundamental. Um membro default só pode ser acessado se a classe que o estiver acessando pertencer ao mesmo pacote, enquanto que um membro protected  pode ser acessado através de herança por uma subclasse mesmo se a subclasse estiver em um pacote diferente.


Qualquer problema, duvida, comentário ou caso tenham algo a acrescentar fiquem a vontade.

Grato pela atenção,
Att,
Diego

quarta-feira, 17 de outubro de 2012

Criando, compilando e executando (Olá mundo) Java


Antes de começarmos a colocar a mão na massa é importante que você já tenha um ambiente Java configurado.

Criando

A primeira coisa a fazer é criar uma pasta onde seu programa será criado, no meu caso criei em “C:\Blog”, após a criação do diretório crie o arquivo OlaMundo.java na pasta, conforme a imagem abaixo:


Após a criação do arquivo abra o arquivo com o bloco de notas.


Digite o seguinte código:
public class OlaMundo {
            public static void main(String[] args) {
System.out.println("Olá Mundo");
            }
}

Abaixo segue explicação do código:
  • public class OlaMundo {
  •  public static void main(String[] args) {
    • Esta linha informa o ponto de partida do aplicativo Java, a JVM ao ser executada procura por está linha para iniciar a aplicação.
  • System.out.println("Olá Mundo");
    • Instrui o computador a imprimir a mensagem "Olá Mundo" na tela.

Compilando e executando

Abra uma janela de comando(cmd) e vá até o diretório onde o seu programa foi criado e execute os seguinte comandos:
  • cd "c:\blog"
  • javac OlaMundo.java
    • Neste momento se você voltar abrir a pasta “c:\blog”, irá notar um novo arquivo criado com nome OlaMundo.class que contem os bytecodes Java que representam nosso aplicativo.
  • java OlaMundo
    • Os bytecodes serão executados pela JVM.
  • A mensagem “Olá Mundo” será exibida.



Qualquer problema, duvida, comentário ou caso tenham algo a acrescentar fiquem a vontade.

Grato pela atenção,
Att,
Diego

Modificadores de Acesso a Classes Java


O controle de acesso em Java é divido em quatro controles de acesso (níveis de acesso), mas apenas três modificadores de acesso (public, protect, private). O quarto nível de controle de acesso é o que você obtém quando não usa nenhum dos três modificadores de acesso (default). Toda classe, método e variável de instancia que você declarar tem um controle de acesso, porem no caso de classes utilizamos apenas os tipos default e public.

Acesso a classes

Quando dizemos que uma determinada classe A tem acesso a outra classe B isso que dizer que a classe A pode:
  • Criar uma instancia da classe B.
  • Estender a classe B.
  • Acessar métodos e variáveis da classe B dependendo do controle de acesso desses métodos e variáveis.
As classes só podem possuir ou acesso default ou publico:
  • Para declarar uma classe como default basta não especificar o modificador, está classe só poderá ser acessada por classes no mesmo pacote.
    • class Cachorro{...}
  • Para declarar uma classe como publica digite a palavra chave public antes do nome da classe, com isso todas as classe conseguem acessar está classe. Se a classe publica estiver em um pacote diferente da classe que tenta acessa-la não será necessário import da classe antes de acessa-la.
    • public class Cachorro{...}
Existem outros modificadores de classes que não são referentes a acesso esses modificadores de acesso existem e adição aos controladores de acesso.
  • final a palavra-chave final significa que a classe em questão não pode ser sub-classificada ou seja nenhuma outra classe pode estender(herdar) uma classe final. Você só deve marcar uma classe como final se tiver certeza que nunca os métodos dessa classe deverão ser substituído(Eu nunca criei uma classe como final).
  • abstract a palavra-chave abstract significa que a classe não pode ser instanciada(new) nunca o único propósito de uma classe abstrata é ser estendida. As classes abstratas são muito utilizadas para o polimorfismo e dão um maior grau de flexibilidade e extensibilidade.
Não é possível é possível marcar uma classe como abstract e final ao mesmo tempo, pois enquanto a classe final não pode ser sub-classificada, a classe abstract deve ser classificada.

Para concluir criei um post Modificadores de Acesso na pratica, que mostra como estes conceitos funcionam na pratica.

Para a declaração de modificadores de acesso de métodos e variáveis veja o post Modificadores de Acesso á Métodos e Variáveis
Qualquer problema, duvida, comentário ou caso tenham algo a acrescentar fiquem a vontade.

Grato pela atenção,
Att,
Diego

sábado, 13 de outubro de 2012

Identificadores e JavaBeans


Este post irei explicar alguns conceitos referente às declarações, identificadores e nomeação JavaBeans.

Identificadores Java

Existem três tipos de identificadores Java que são:
  • Identificadores Legais trata-se das regras que o compilador usa para determinar se um determinado compilador é legal.
  • Convenções de Código Java da Sun trata-se das recomendações da Sun para nomeação de classes, variáveis e métodos estes identificadores não são obrigatórios e não geram erro de compilação, mas por boa prática e altamente recomendada a utilização.
  • Padrões de Nomeação JavaBeans trata-se dos requisitos de nomeação do da especificação JavaBeans.

Identificadores Legais

Tecnicamente os identificadores legais devem ser compostos apenas de caracteres Unicode, números, símbolos de moedas e caracteres de conexão (como underscore/underline) e seguir as seguintes regras:
  • Os identificadores devem começar com uma letra, um cifrão ($) ou um caractere de conexão. Nunca deve-se utilizar um número para começar o identificador.
  • Os identificadores Java são case-sensitive, ou seja, um identificador nome e um identificador Nome são totalmente diferentes.
  • Não se pode usar uma palavra chave Java como identificador.

Convenções de Código Java da Sun

A Sun criou um conjunto de padrões de programação para o Java e publicou esses padrões em documento que pode ser encontrado http://java.sun.com. Abaixo segue uma parte deste documento que trata sobre os padrões de nomeação.
  • Classes e interfaces a primeira letra deve ser maiúsculo e, se várias palavras forem escritas juntas para formar o nome, a primeira letra de cada palavra interna deve ser maiúscula este formato é conhecido como camelCase. Para classes os nomes devem ser normalmente substantivos abaixo seguem alguns exemplos:
    • Cachorro
    • Gato
    • Animal
    • Conta
    • Banco
Para interfaces os nomes devem normalmente serem adjetivos:
    • Executavel
    • Amavel
    • Adoravel

  • Métodos a primeira letra deve ser minúscula, e depois as regras camelCase normais devem ser usadas, além disso os nomes devem ser pares de verbo-substantivo tais como:
    • obterSaldo
    • fazerAndar
    • definirNome
Os nomes dos métodos em muitos códigos serão encontrados com o verbo em inglês, por exemplo os métodos acima poderiam ser encontrados da seguinte maneira:
    • obterSaldo -> getSaldo
    • fazerAndar -> doAndar
    • definirNome – setNome
  • Variaveis como no métodos, o formato camelCase deve ser usado, começando com uma letra minúscula. A Sun recomenda usar nomes curtos e significativos tais como:
    • tamanhoDoAnimal
    • saldoEmConta
    • nomePessoa
  • Contantes As constantes Java são criadas marcando-se variáveis como static e final. Elas devem ser nomeadas usando-se letras maiúsculas e com caracteres underscore como separadores tais como:
    • ALTURA_MINIMA
    • ALTURA_MAXIMA
    • SALDO_MINIMO

Padrões de Nomeação JavaBeans

Resumidamente JavaBeans são classes que contem propriedades(variáveis) private, esse tipo de propriedade só pode ser acessada de fora da classe através de métodos públicos. Os métodos responsáveis por modificar esse tipo de propriedade são chamados de setter os métodos reesposáveis por recuperar o valor desse tipo de propriedade são chamados de getter.
A especificação JavaBeans foi criada para ajudar os desenvolvedores a criarem componentes Java que possam ser facilmente usados por outros desenvolvedores em uma ferramenta de Ambiente de Desenvolvimento Integrado (“Integrated Development Environment, ou IDE”) como o Eclipse e o NetBeans.
Abaixo seguem as regras de nomeação do JavaBeans mais utilizadas:
  • Se a propriedade não for booleana, o prefixo do método getter deve ser get. Não é necessário ter uma propriedade para se ter um método getter(embora alguns IDEs esperam que você a tenha), o que você ira retornar no método getter fica a seu critério respeitando sempre o mesmo tipo do método set caso exista. Esses métodos devem sempre serem marcado como public.
    • public String getNome();
    • public int getTamanho();
  • Se o propriedade for booleana, o prefixo do método getter pode ser get ou is (utilizo este) este tipo de variável deve sempre retornar true ou false.
    • public boolean getAndando();
    • public boolean isAndando();
  • O prefixo de um método setter deve ser set, neste caso o método espera um valor para set adicionado a propriedade estes métodos devem ser marcadas como public com um tipo de retorno de void.
    • setNome(String nome);
    • setTamanho(int tamanho);
  • A primeira letra do nome da propriedade logo após o prefixo deve ser em maiúsculo e o restante deve ser o nome da propriedade completo.
    • Para uma propriedade “nome” o método get será getNome();
    • Para uma propriedade “idadeNascimento” o método get será getIdadeNascimento();
A especificação JavaBean tem suporte  a evento que permitem aos componentes notificarem um ao outro quando algo acontece. Os objetos que recebem a informação de que ocorreu um dado evento são chamados de listener. Os métodos usados para adicionar ou remover listener de um evento devem seguir os seguintes padrões de nomeação.
  • Os nomes de métodos listeners usados para “registrar” um listener com uma fonte de eventos devem usar o prefixo add, seguido do tipo do listener.
    • public void addAcaoListener(AcaoListener l);
    • public void addMeuListener(MeuListener m);
  • Os nomes de métodos listener usados para remover um listener devem usar o prefixo remove seguido do tipo do listener.
    • public void removeAcaoListener(AcaoListener l);
    • public void removeMeuListener(MeuListener m);
  • Os nomes do métodos listener devem terminar com Listener;
Qualquer problema ou duvida ou caso tenham algo a acrescentar fiquem a vontade.

Grato pela atenção,
Att,
Diego

sexta-feira, 12 de outubro de 2012

Conceitos JAVA


Antes de começarmos a colocar a mão na massa segue alguns conceitos que serão uteis para iniciarmos a codificação esses conceitos levam em consideração que você já conheça orientação objeto.

Programa Java

Um programa Java é principalmente uma coleção de objetos falando com outros objetos através de métodos. Cada objeto é de um tipo, e esse tipo é definido por uma classe ou interface. A maioria dos programas em Java usa uma coleção de objetos de muitos tipos diferentes.
  • Classe é um modelo que descreve os tipos de estado e de comportamento que os objetos do seu tipo podem ser.
  • Objeto no momento da execução, quando a Maquina Virtual Java (Java Virtual Machine ou JVM) encontra a palavra new, ela usa a classe apropriada para criar o objeto que será uma instancia dessa classe. Esse objeto terá o seu próprio estado e terá acesso a todos os comportamentos definidos pela sua classe.
  • Estado (variáveis de instancias) cada objeto (instancia de uma classe) terá o seu conjunto único de variáveis de instancias conforme definido na classe. Coletivamente, os valores atribuídos as variáveis de instancia de um objeto compõem o estado do objeto.
  • Comportamento (métodos) quando um programador cria uma classe, ele cria métodos para essa classe. É nos métodos que a lógica da classe é armazenada. Nos métodos, o verdadeiro trabalho é realizado. É neles que os algoritmos são executados e que os dados são manipulados.

Identificadores e Palavras-chave

Todos os componentes Java (classes, variáveis, e métodos) precisam de nomes, esses nomes são conhecidos como identificadores e existem algumas regras para estes identificadores para mais detalhes sobre estas regras veja o post Identificadores e JavaBeans.

Herança

Fundamental para o Java e outras linguagens orientadas a objetos é o conceito de herança, que permite ao código definido em uma classe ser reutilizado em outras classes. Em Java, você pode definir uma superclasse geral (mais abstrata), e depois estendê-la com classes mais especificas. A superclasse não sabe nada sobre as classes que herdam dela, mas todas subclasses que herdam a superclasse devem declarar explicitamente a relação de herança. Uma subclasse que herda de uma superclasse recebe automaticamente as variáveis de instancias acessíveis e os métodos definidos pela superclasse, mas também é livre para substituir os métodos da superclasse podendo definir comportamentos mais específicos.

Interfaces

Um poderoso companheiro da herança é o uso de interfaces. A interface é uma espécie de superclasse 100% abstrata que define os métodos que uma subclasse deve suportar, mas não como esse suporte deve ser implementado. Em outras palavras, uma interface não oferece nenhuma lógica para os métodos, deixando a cargo das classes que implementam a interface a implementação destes métodos.


Qualquer problema ou duvida ou caso tenham algo a acrescentar fiquem a vontade.

Grato pela atenção,
Att,
Diego

terça-feira, 9 de outubro de 2012

Instalação JAVA 7 no Windows 7

Neste post irei demostrar como instalar e configurar o Java 7 no Windows 7 para desenvolvimento de aplicações.

Pré Requisitos:

Verifique se o sistema atende aos requisitos mínimos de hardware ou se os excede:
  • Intel Pentium III de 800 MHz ou equivalente
  • 512 MB de RAM.
  • 750 MB de espaço disponível.
  • Privilégios de administrador no sistema.
Arquivos necessários para instalação:
Observação: O instalador utiliza o diretório %USERPROFILE%\Local Settings\Temp para armazenar os arquivos temporários.

Instalação JRE

  1. Execute o arquivo .exe referente ao jre baixado.
  2. A tela abaixo será exibida clique em Instalar >, aguarde a finalização e clique em Fechar.
       
      

Instalação JDK

  1. Execute o arquivo .exe referente ao jdk baixado.
  2. Clique em next, nas proximas telas até a finalização da instalação.
  3. Após a instalação para efetuar o teste abra o prompt do DOS e digite java -version algo como a imagem abaixo deverá ser exibida confirmando o sucesso da instalação.
         

Configuração de Variáveis de Ambiente

Após a instalação do java para podermos executar aplicações em java é necessária a configuração do compilador o javac.

  1. Clique com o botão direito em Meu Computador > Propriedades > Configurações Avançadas do Sistema.
  2. Na aba Avançado clique em Variáveis de Ambiente...
  3. Clique em Novo.
  4. No campo Nome da variável digite JAVA_HOME.
  5. No campo Valor da variável digite C:\Program Files\Java\jdk1.7.0_05 (ou caminho da instalação jdk).
  6. Clique em OK.
  7. Selecione a variável Path e clique em Editar, no valor da variável adicione ;C:\Program Files\Java\jdk1.7.0_05\bin.
  8. Após a configuração para efetuar o teste abra o prompt do DOS e digite javac algo como a imagem abaixo deverá ser exibida confirmando o sucesso da configuração.

Pronto seu computador está configurado para execução de seus códigos java!

Caso queira criar sua primeira aplicação utilize o post Criando, compilando e executando (Olá mundo) Java

Qualquer problema ou duvida ou caso tenham algo a acrescentar fiquem a vontade.

Grato pela atenção,
Att,
Diego