javascript:void(0)

Novidades Java

Novidades no mundo java

Faculdade Lourenço Filho

Novidades das cadeiras de Introdução a Informatica, Laboratório de Programação e Técnicas de Programação..

Novidades na área de informática

Novidades na área de informática

Animes

Novidades nos animes.

Novidades no Basquete

Novidades no basquete mundial

quinta-feira, 31 de março de 2011

Video Aula Hibernate

Trabalhando com Strings parte I


Strings em java podem ser formadas por um conjunto de caracteres. Tomando o exemplo abaixo:

char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.'};
String helloString = new String(helloArray);
System.out.println(helloString);


O vetor de caracteres helloArray foi convertido para uma String.

O método length de uma String determina o tamanho da mesma

String palindrome = "Dot saw I was Tod";
int len = palindrome.length();

No exemplo acima a variável len assume o valor 17

quarta-feira, 30 de março de 2011

Bill Gates e Steven Jobs

Falando um pouco sobre a licença GPL


GNU General Public License (Licença Pública Geral), GNU GPL ou simplesmente GPL, é a designação da licença para software livre idealizada por Richard Matthew Stallmanem 1989, no âmbito do projeto GNU da Free Software Foundation (FSF).

A GPL é a licença com maior utilização por parte de projetos de software livre, em grande parte devido à sua adoção para o projeto GNU e o sistema operacional GNU/Linux. O software utilizado para administrar o conteúdo da Wikipédia é coberto por esta licença, na sua versão 2.0 ou superiores.


Em termos gerais, a GPL baseia-se em 4 liberdades:

  1. A liberdade de executar o programa, para qualquer propósito (liberdade nº 0)
  2. A liberdade de estudar como o programa funciona e adaptá-lo para as suas necessidades (liberdade nº 1). O acesso ao código-fonte é um pré-requisito para esta liberdade.
  3. A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo (liberdade nº 2).
  4. A liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie deles (liberdade nº 3). O acesso ao código-fonte é um pré-requisito para esta liberdade.

Com a garantia destas liberdades, a GPL permite que os programas sejam distribuídos e reaproveitados, mantendo, porém, os direitos do autor por forma a não permitir que essa informação seja usada de uma maneira que limite as liberdades originais. A licença não permite, por exemplo, que o código seja apoderado por outra pessoa, ou que sejam impostos sobre ele restrições que impeçam que seja distribuído da mesma maneira que foi adquirido.

A GPL está redigida em inglês e atualmente nenhuma tradução é aceita como válida pela Free Software Foundation, com o argumento[1] de que há o risco de introdução de erros de tradução que poderiam deturpar o sentido da licença. Deste modo, qualquer tradução da GPL é não-oficial e meramente informativa, mantendo-se a obrigatoriedade de distribuir o texto oficial em inglês com os programas.


Fonte: Wikipêdia

terça-feira, 29 de março de 2011



Segue link do materia de Software Livre da cadeira de Introdução a Informática




http://dl.dropbox.com/u/9112867/InroducaoInformatica-SoftLivre.ppt

Introdução a Orientação a Objetos

Sugestão de Livro do JavaFree para os iniciantes em Java

0

5. Orientação a Objetos

Java é uma linguagem orientada a objetos e, com isso, não é possível desenvolver nenhum programa sem seguir tal paradigma. Um sistema orientado a objetos é composto por um conjunto de classes e objetos bem definidos que interagem entre si, de modo a gerar o resultado esperado.

5.1 O que é?

O avanço das tecnologias na área de análise, projeto, desenvolvimento e qualidade de software permite que aplicações mais flexíveis e poderosas sejam construídas. A necessidade de integrar estas aplicações criou uma nova metodologia de análise e desenvolvimento: a Orientação à Objetos.

A Orientação à Objetos modela o mundo real com classes e instâncias. Cada classe é a estrutura de uma variável, ou seja, um tipo de dado. Nela, são declarados atributos e métodos que poderão ser executados ou acessados nas instâncias da mesma classe. As classes possuem uma função muito importante na modelagem orientada a objetos, elas dividem o problema, modularizam a aplicação e baixam o nível de acoplamento do software.

Variáveis de uma classe são chamadas de instâncias de classe. Por exemplo: Se existe uma classe Pessoa existe a instância (variável) pessoa que é do tipo Pessoa. Um Objeto, ou instância, é uma entidade cujas informações podem incluir desde suas características até suas atividades, ou seja, uma abstração de um domínio de um problema.

Abaixo há uma série de definições sobre a arquitetura de orientação a objetos em Java.


  • Pacote: Conjunto de classes e demais arquivos que possuem interesses comuns ou atuam com dependências entre si. Fisicamente são pastas do sistema operacional.
  • Instância, objeto: Uma variável do tipo de uma classe.
  • Construtor: Responsável por iniciar a criação e inicialização de uma instância de classe.
  • Método: Funções referenciados aquela classe.
  • Modificador de acesso: Descreve que outras classes podem ter acesso a classe que está se criando. Também é usado para indicar que uma classe pode ser acessada de fora de seu pacote.
  • Hierarquia de classes: Um grupo de classes que estão relacionadas por herança.
  • Superclasse: É a classe que é estendida por uma determinada classe.
  • Subclasse: É a classe que estende determinada classe.
  • Classe base: A classe de determinada hierarquia que é uma superclasse de todas as outras classes. A classe? pai de todas?


5.2 Criando a primeira classe

Nesta apostila já foram criadas várias classes demonstrando outras funcionalidades da linguagem. Nos exemplos anteriores todo o código que continha um public class declarava uma classe. Porém, os exemplos anteriores tinham propósitos de explicar cada tópico, e portanto não faziam muito sentido. Neste exemplo, será construído uma classe Pessoa, que manterá os dados e as ações relativas aos dados de pessoa.

  1. public class Pessoa {
  2. String nome;
  3. Date nascimento;
  4. double dinheiroNaCarteira;
  5. public Pessoa(String nome, Date nasc) {
  6. this.nome = nome;
  7. this.nascimento = nasc;
  8. }
  9. public void gastar(double valor) {
  10. dinheiroNaCarteira -= valor;
  11. }
  12. public void receber(double valor) {
  13. dinheiroNaCarteira += valor;
  14. }
  15. }


A classe pública Pessoa acima possui três variáveis, também chamados de atributos de instância: nome, nascimento, dinheiroNaCarteira. Esses atributos serão criados a cada nova instância de Pessoa que existir no sistema. Há, também, dois métodos: gastar (double valor) e receber (double valor). Eles retiram e incluem dinheiro na carteira da Pessoa respectivamente.



Entre eles existe a definição de um construtor: public Pessoa (String nome, Date nasc). O construtor é um método sem retorno, invocado quando ocorre a criação de um Objeto. Esta classe pessoa só pode ser criada passando dois parâmetros: o nome e a data de nascimento. Se este método não existisse, o java criaria um construtor padrão, sem parâmetros, para que a classe possa ser instanciada.

Algumas classes precisam evitar ser instanciadas, para ter essa proteção cria-se um construtor privado que não recebe parâmetro e também não possui corpo. É construído para evitar que o Java crie o construtor default.

Não é necessário definição de atributos, métodos ou construtores para que uma classe possa ser compilada. A declaração abaixo é válida, o javac compila corretamente e pode-se criá-la na aplicação, mesmo que sem nenhum método, construtor ou atributo:

public class NãoFazNada { }

O código abaixo usa a classe Pessoa como um exemplo de aplicação Orientada a Objetos.

  1. public class GerenciadorDePessoas {
  2. public static void main(String args[]) {
  3. // Cria uma classe que formata datas.
  4. // É capaz de formatar de String para uma
  5. // Date e de um Date para um String.
  6. SimpleDateFormat formatador =
  7. new SimpleDateFormat("dd/MM/yyyy");
  8. // Cria um Objeto de Pessoa.
  9. Pessoa pVitor;
  10. pVitor = new Pessoa("Vitor Fernando Pamplona",
  11. formatador.parse("07/11/1983"));
  12. // Vitor Recebeu 1000 reais
  13. // Inclui R$ 1000 na carteira da
  14. // pessoa p criada na linha anterior
  15. pVitor.receber(1000.00);
  16. // Cria um outro objeto de pessoa, o João
  17. Pessoa pJoão = new Pessoa("João da Silva",
  18. formatador.parse("18/02/1970"));
  19. // João recebeu R$ 500 e gastou R$ 100
  20. pJoão.receber(500.00);
  21. pJoão.gastar(100.00);
  22. }
  23. }


Primeiramente é criado um formatador de datas para que se possa converter uma data formatada em String em um tipo Date do Java. Este formatador é uma instância da classe SimpleDateFormat e, como qualquer outra criação de objeto, usa o comando new para criar uma instância.

Na linha seguinte, existe a declaração da variável pVitor que é da classe Pessoa. Esta variável ainda não está criada, portanto o valor que ali se encontra é null. Após, é criado a variável, ou melhor, a instância da classe Pessoa, com escopo do método. Esta instância já é inicializada com o nome Vitor Fernando Pamplona e a data de nascimento 07 / 11 / 1983. Na linha abaixo é invocado o método receber da classe Pessoa passando como parâmetro o double 1000.00.

5.3 Modificadores

Em Java existem uma série de palavras-chave que se comportam como modificadores de classes, métodos e atributos. Alguns desses modificadores já foram usados nesta apostila como a palavra-chave public, por exemplo. Um modificador pode ser utilizado antes da palavra class, antes do retorno de um método ou antes da declaração de um atributo.

Abaixo segue uma tabela com todos os modificadores de acesso do Java. A ordem de declaração dos modificadores não importa.
  1. Palavra-chave Em uma classe Em um m étodo Em um atributo
  2. public Acesso total Acesso total Acesso total.
  3. private Não aplicável Acesso pela classe Acesso pela classe
  4. protected Não aplicável Acesso pelo pacote Acesso pelo pacote
  5. default Somente pacote Acesso pelo pacote Acesso pelo pacote
  6. abstract Não instância Deve ser sobrescrito Não aplicável.
  7. final Sem herança Não pode ser sobrescrito CONSTANTE..
  8. static Não aplicável Acesso pela classe Acesso pela classe
  9. native Não aplicável Indica código nativo Não aplicável
  10. transient Não aplicável Não aplicável Cache
  11. synchonized Não aplicável Sem acesso simultâneo. Não aplicável


5.4 Métodos

Um método em Java é uma sub-rotina semelhante as funções de C e Pascal. Os métodos têm um retorno e podem conter parâmetros. A Sintaxe de um método é a seguinte:

  1. [modif] ([],[...]) {
  2. do método>
  3. }


Ao declarar um método é possível adicionar modificadores, vistos na seção anterior, antes de informar o tipo de retorno. O modificador estático declara que o método terá um determinado tipo de comportamento dentro do programa orientado a objetos. Na declaração de um método os modificadores precedem o tipo de retorno, que precede o nome do método e a lista de parâmetros. O corpo do método é colocado entre chaves.

Buscando o exemplo da classe pessoa:


  1. //
  2. public void gastar(double valor) { // Corpo
  3. dinheiroNaCarteira -= valor;
  4. }

O corpo do método pode conter declarações de variáveis e comandos. As variáveis não ficam restritas a declaração somente antes dos comandos, como acontece em C ou em um local pré-determinado como em Pascal, ao contrário, podem ser declaradas em qualquer lugar. O tipo de retorno de um método pode ser primitivo ou de referência, ou como no método main, pode ser void, ou seja, não retorna nada.

Em Java todos os argumentos são passados por valor. Não existe passagem por referência. Se for variável primitiva o valor da variável é passada no parâmetro e pode ser alterada a vontade dentro da função que nada sofrerá a variável externa. Com objetos o que muda é que o valor passado no parâmetro da função é a referência para o objeto, ou seja, se um objeto for alterado dentro da função, o objeto externo também será alterado, exceto nas instruções objeto = null;

5.5 Interfaces

Interfaces foram concebidas para criar um modelo de implementação aumentando o baixo acoplamento entre determinadas partes de um software. Uma interface não pode possuir atributos de instância e nem métodos com implementação, mas pode possuir atributos de estáticos (de classe) e cabeçalhos de métodos que deverão ser desenvolvidos nas classes que implementarão a interface.

Muitas vezes as interfaces representam ações ou papéis para as classes. Um exemplo comum de interface é a Serializable que se encontra dentro do pacote java.io e é muito utilizada em aplicações corporativas. Quando uma classe implementa Serializable ela não precisa implementar nenhum método definido na interface, mas com esta ação o programador indica ao java que a classe pode ser serializada, transformada em um conjunto de bits para serem armazenados ou transmitidos. A serialização de uma instância armazena todos os seus dados e consegue criar um objeto semelhante na desserialização.

O uso de interfaces é semelhante ao de classes como mostrado abaixo.

  1. public interface Impressao {
  2. public void imprimir();
  3. }
  4. public class Pessoa implements Impressao {
  5. private String nome;
  6. ...
  7. public void imprimir() {
  8. Impressora imp = new Impressora("LPT1");
  9. imp.print("Pessoa: " + nome);
  10. ...
  11. }
  12. }
  13. public class Documento implements Impressao {
  14. private String número;
  15. ...
  16. public void imprimir() {
  17. Impressora imp = new Impressora("LPT1");
  18. imp.print("Documento: " + número);
  19. ...
  20. }
  21. }


No exemplo acima é possível identificar uma interface Impressão que é implementada pela classe Pessoa e pela classe Documento. Essas duas classes foram obrigadas a implementar o método public void imprimir () definido na interface. Se isso não acontecesse o javac, o compilador do java, não permitiria a compilação das classes.

Para implementar uma interface, usa-se a palavra-chave implements seguida do nome da interface, ou interfaces, visto que não há limite para quantidade de classes em implementação.

É correto afirmar que as classes ganharam um papel, uma ação de impressão, e estão aptas a executar todos os ítens necessários para realizar tal tarefa.

5.6 Abstract Class


Uma classe abstrata é quase uma interface, com a exceção que ela pode conter implementações. Uma classe abstrata é usada para manter alguma programação nas classes ? Pai ?, porém não pode ser instanciada. Para ser utilizada como instância, uma classe abstrata deve ser estendida por uma classe não abstrata.

  1. public abstract class Veículo{
  2. private String nome;
  3. private String marca;
  4. private String modelo;
  5. // sets e gets
  6. public abstract void andar();
  7. }
  8. public class Carro extends Veículo {
  9. public void andar() {
  10. acelerar();
  11. }
  12. private void acelerar() {
  13. ...
  14. }
  15. }
  16. public class Bicicleta extends Veículo {
  17. public void andar() {
  18. pedalar();
  19. }
  20. private void pedalar() {
  21. ....
  22. }
  23. }


Como é possível observar no exemplo acima, a classe Veículo não pode ser instanciada por ser abstrata, e ela ganhou esta característica por conter métodos abstratos, no caso o método andar (). Por este motivo, foram criadas duas classes estendendo Veículo: Carro e Bicicleta. Ambas implementam a sua maneira de andar.

Para criar uma extensão de qualquer classe, usa-se a palavra-chave extends. O Java não permite a herança múltipla, como em C, portanto não é possível estender de duas ou mais classes. A solução deste problema é trabalhar com interfaces.

5.7 this e super

Estas duas palavras-chave da linguagem são aplicadas a métodos não estáticos, ou seja, de instância. A this é utilizada para referenciar variáveis ou métodos da instância atual e o super é utilizada para associar a métodos da classe ? pai ?. Por exemplo:

  1. public class Pai {
  2. public int lançar(int numero) {
  3. return 6 \% numero;
  4. }
  5. }
  6. public class Filho extends Pai {
  7. private int numero;
  8. ...
  9. public int lançar(int numero) {
  10. if (numero == 0) {
  11. return this.numero; // retorna o atributo da classe
  12. }
  13. super.lançar(numero); // Chave o lançar da classe pai.
  14. }
  15. }

A classe Pai possui um método lançar retornando um inteiro. A classe filho, que estende de Pai foi criada para tratar uma divisão por zero que poderá ocorrer na classe Pai. Portanto, se for zero, retorna um número predefinido como atributo na classe Filho, caso contrário retorna o resultado do cálculo da classe Pai. Este é um excelente exemplo de polimorfismo e sobrescrita de métodos que veremos a seguir.

O Java associa automaticamente a todas as variáveis e métodos referenciados com a palavra this. Por isso, na maioria dos casos torna-se redundante o uso em todas as variáveis da palavra this. Existem casos em se faz necessário o uso da palavra this. Por exemplo, você pode necessitar chamar apenas uma parte do método passando uma instância do argumento do objeto. (Chamar um classe de forma localizada);

5.8 Sobrescrita e Sobrecarga

O Java permite que você tenha métodos com o mesmo nome, mas com assinaturas diferentes, isto chama-se sobrecarga. O interpretador determinará qual método deve ser invocado pelo tipo de parâmetro passado. Os trecho abaixo é válido para uma compilação Java.
  1. ...
  2. public void print( int i ) { ... }
  3. public void print( float f ) { ... }
  4. public void print( String s) { ... }
  5. ...


Quando você escreve o código para chamar um desses métodos, a chamada deverá coincidir com tipos de dados da lista de parâmetros de algum dos métodos.

Diferente da sobrecarga, a sobrescrita acontece quando um método existe em uma classe ? pai ? e é reescrito na classe ? filha ? para alterar o comportamento. A assinatura do método deve ser igual na classe ? pai ? e na classe ? filha ?. Como um exemplo abaixo está o código desenvolvido na seção this e super.

  1. public class Pai {
  2. public int lançar(int numero) {
  3. return 6 \% numero;
  4. }
  5. }
  6. public class Filho extends Pai {
  7. public int lançar(int numero) {
  8. if (numero == 0) {
  9. return this.numero; // retorna o atributo da classe
  10. }
  11. super.lançar(numero); // Chama o lançar da classe pai.
  12. }
  13. }


O método public int lançar (int numero) existe na classe filha e na pai, o primeiro a ser invocado é o Filho, e, via a palavra chave super, o interpretador chamará o método pai. Caso não houver o comando super.lançar (numero); o método pai não seria invocado.

5.9 Cast ou conversão de Objetos

O cast ou a conversão de objetos em java é realizada de duas maneiras, de acordo com a conversão de tipos primitivos: implícito e explícito. Primeiramente, toda a classe ? filha ? pode ser associada a uma declaração de class ou interface ? pai ?. Esta é a forma implícita, pois não necessita de nenhum recurso para ser efetuado, como no exemplo abaixo:

  1. ...
  2. Pai objeto = new Filho();
  3. ...

No exemplo, o objeto filho é declarado como uma instância de Pai. O inverso deste caso ocorre quando tem-se um objeto ? pai ? e sabe-se que ele é uma instância de determinada classe ? filho ?. Esta forma é a explícita, pois é necessário informar ao compilador, qual a classe que deseja-se fazer o cast.

  1. ...
  2. Pai objeto = new Filho();
  3. ...
  4. Filho objFilho = (Filho)objeto;
  5. ...


No exemplo, o objeto é declarado como sendo instância de Pai, mas é criado uma instância de Filho. Na linha seguinte, é associado a uma variável declarada como Filho o valor de objeto, que foi declarado como Pai mas é possível saber que ele é um Filho.

5.9.1 Operador instanceof

O operador instanceof é utilizado para casts explícitos que não se tem conhecimento da classe real do objeto. Por exemplo:

  1. ...
  2. public void write(Collection c) {
  3. if (c instanceof List)
  4. write((List) c);
  5. else
  6. write((Set) c);
  7. }
  8. ...


No exemplo, a instância de Collection é testada para verificar se é um List ou um Set. De acordo com o valor dela, é chamada uma função write usando sobrecarga de métodos.
6 Tratamento de Exceções

As exceções em Java são classes que herdam de java.lang.Throwable. Basicamente existem três tipos de exceções que são herdadas de Throwable:


  • Error: Exceção grave que normalmente não pode ser tratado, como falhas físicas e condições anormais de funcionamento.
  • Exception: Exceções genéricas que devem ser tratadas utilizando declarações throws ou criar o tratamento para a exceção com try catch.
  • RuntimeException: São exceções que podem ser lançadas durante a execução da JVM. Podem ser tratadas, porém não precisam ser tratadas com throws ou com try catch


Em Java pode-se escolher onde se quer tratar a exceção. Se for para tratar no mesmo método que ela ocorreu, usa-se a instrução:

  1. try {
  2. } catch () {
  3. } catch () {
  4. } finally {
  5. }


A instrução try, como seu nome já fala, tenta executar um bloco de comandos. Ao ocorrer qualquer erro a JVM passará o controle para um dos catch, o que mais se apropriar para a exceção lançada.

Se a JVM não encontrar um catch apropriado e se houver uma cláusula finally ela é executada, se não houver um finally o Java repassa a exceção para o método que chamou este, e assim continua até que a exceção seja simplesmente lançada na tela para o usuário.

6.1 Instrução throws

As classes que herdam de Exception precisam ser mapeadas como possibilidade de erro no código Java. Quem controla essa obrigatoriedade é o compilador. Por exemplo, a classe java.sql.SQLException é utilizada para tratamento nas exceções de SQL quanto conecta-se a um banco de dados. Esta classe precisa ser obrigatoriamente testada, caso contrário o programa não compila.

Para tratá-la pode-se usar a instrução try no mesmo método, porém, as vezes, é necessário que essa execução seja tratada no método que chamou este. Neste caso, coloca-se a instrução throws na assinatura do método afirmando para o compilador que os métodos que chamarem este devem tratar SQLException obrigatoriamente.

  1. ....
  2. public void salvaObjeto(Cliente c) {
  3. try {
  4. abreTransação();
  5. incluiNoBanco(c); // throws SQLException
  6. commitTransação();
  7. } catch (SQLException e) {
  8. System.out.println("Erro ao salvar um cliente. " + e.getMessage());
  9. }
  10. }


  1. public void incluiNoBanco(Cliente c) throws SQLException {
  2. ...
  3. banco.execute("INSERT INTO CLIENTE (....) values (....)");
  4. ...
  5. }


No exemplo, o compilador obriga que a função salvaObjeto trate a exceção SQLException.

6.2 Lançando uma exceção

Para lançar uma exceção usa-se a instrução throw, diferente de throws visto na seção anterior. No exemplo abaixo o parâmetro nome da função setNome necessita estar preenchido e ser diferente de. Caso isso não aconteça é lançada uma exceção da classe IllegalArgumentException. Como a java.lang.IllegalArgumentException herda de RunTimeException ela não precisa ser tratada, mas se ocorrer aparecerá o erro para o usuário.

  1. public void setNome(String nome) {
  2. if (nome == null || nome.equals("")) {
  3. throw new IllegalArgumentException("Nome deve ser preenchido").
  4. }
  5. this.nome = nome;
  6. }


É isso aí. Espero que tenham gostado do tutorial, pois deu um trabalhão para escrever isso tudo! hehe. Se quiser continuar a aprender sobre java, leia os tutoriais para certificação de SCJP do Kuesley nos links abaixo: Tutoriais para Certificação Java