Pesquisar este blog

domingo, 24 de março de 2013

Orientação a objeto com Java - Polimorfismo


Polimorfismo:

Conceito de orientação a objeto onde um objeto pode ser declarado de várias formas, com isso podemos usar objetos mais abstratos (interfaces), e definirmos os comportamentos em objetos mais concretos (objetos que implementam as interfaces). Cada objeto pode ser atribuido a uma variável de um tipo que não seja o seu, desde que ele implemente, ou extenda aquele objeto:

public interface Login{
public boolean login(String nome, char[] senha);
}

public class LoginSha implements Login{
public boolean login(String nome, char[] senha){
//Implementacao do método em www.github.com/DirceuProfessor
}

public String resetPassword(String nome){
// Implementacão omitida
}
}

public class UsoLogin {
public static void main(String[]args){
// polimorfismo objeto LoginSha atribuido a uma variável do tipo Login
Login login = new LoginSha();
// possível já que a interface login define o método login
login.login("usuario",new char(){'s','e','n','h','a'});
//Erro de compilação já que a interface login não define o método resetPassword
login.resetPassword("usuario");
}
}

No exemplo acima, podemos ver que um objeto do tipo LoginSha é atribuido a um objeto Login, são objetos de tipos diferentes, mas como LoginSha implementa a interface Login, podemos atribuir um objeto LoginSha a uma variável do tipo login.

Orientação a objeto em Java - Herança


Herança:

Conceito fundamental de orientação a objeto, pelo qual é possível com que classes compartilhem métodos, atributos ou construtores. Com isso nossos objetos conseguem reaproveitar código ou generalizar comportamentos. Como exemplo temos as classes Aluno e Professor, cujos atributos, id, nome, sobreNome, ativo e Lista<Materia> estão presentes em ambas as classes podem ser compartilhados. Para isso criamos uma classe Usuário contendo estes atributos, e fazemos com que aluno e professor extendam esta classe.

public class Usuario {
protected int id;
protected String nome;
protected String sobreNome;
protected Boolean ativo;
protected List<Materia> materias = new ArrayList<Materias>();

}

public class Aluno extends Usuario{
private List<Materia> dps = new ArrayList<Materias>();
}

public class Professor extends Usuario{
private List<Curso> cursos = new ArrayList<Curso>();
}

Orientação a Objeto com Java - Encapsulamento


Encapsulamento:

Encapsulamento e responsavel por determinar qual sera o nivel de acesso de uma variavel, classe, metodo ou construtor. Através dos modificadores de acesso é possível isolarmos as partes do nosso código, para que com isso ele se torne mais flexível e mais fácil de manter.
Existem quatro modificadores de acesso que determinam o nível de encapsulamento:

  • private: somente quem está dentro da mesma classe terá acesso;
  • default: somente quem está dentro do mesmo pacote da classe terá acesso;
  • protected: somente quem está dentro da mesma classe, dentro do mesmo pacote ou dentro de uma classe que extenda a classe onde o objeto foi definido;
  • public: todo mundo tem acesso.

package br.unip.private;
public class Private{
// Só será possível acessar este construtor de dentro desta classe
private Private(){
}
}

package br.unip.default;
public class Default{
//Só será possível acessar este construtor de dentro deste pacote
Default(){
}
}

package br.unip.default;
public class TestDefault{
public TestDefault(){
//Acesso possível já que estamos no mesmo pacote
Default = new Default();
//Acesso inválido já que o construtor é privado
Private = new Private(); // erro de compilação.
}
}
package br.unip.protected;
public class Protegido{
protected Protegido(){
}
}

package br.unip.protected;
public class TestProtected{
public TestProtected(){
// Acesso permitido, pois está no mesmo pacote
Protegido protegido = new Protegido();
}
}

package br.unip;
public class TestProtegidoHeranca extends Protegido{
public TestProtegidoHeranca(){
//Acesso permitido, pois esta classe extende protegido.
Protegido protegido = new Protegido();
}
}

Introdução ao Java e Construtores


Introducao ao Java:

Java e uma linguagem interpretada, quando compilamos um codigo Java, ele nao e automaticamente traduzido para codigo de maquina, mas sim para byte code. Os byte codes sao interpretados pela maquina virtual. Por isso quando escrevemos um codigo em java ele podera rodar em qualquer sistema operacional que tenha uma maquina virtual java instalada. Desta funcionalidade nasceu o primeiro slogam de Java que era "Code once, run anywhere" (Codifique uma vez e rode em qualquer maquina.

Construtores:

Os construtores sao responsaveis pela instanciacao dos objetos, o que nada mais e do que reservar um espaco na memora da maquina virtual, onde o objeto sera armazenado. Nos construtores, nos geralmente inicializamos as variaveis daquele objeto.A classe objeto, tem por padrao um construtor sem argumentos, com isso toda vez que criarmos uma classe em java, ela herdara este construtor. Toda vez que criarmos uma classe o construtor desta classe deve ter, exatamente o mesmo nome dela, sem retorno algum, como mostrado abaixo:

public class ExemploConstrutor { private String nome=null;//Construtor public ExemploConstrutor(){//Aqui o nome fica nulo.}
//Construtor com um parâmtro public ExemploConstrutor(String nome){ this.nome = nome; //Aqui o valor de nome será atribuido} //Metodo public void ExemploConstrutor(){ }//Erro de compilacao public exemploconstrutor(){ }}

Como podemos ver acima, é possivel existir um metodo com o mesmo nome da classe. A unica diferenca entre um construtor e um metodo com nome da classe e que, no metodo especificamos um retorno (no caso void).