Java para Desktop Programação Orientada à Objetos 2 JSE
Encapsulamento significa "ocultar informações, ele define que cada objeto contém todos os detalhes de implementação necessários sobre como ele funciona e oculta os detalhes internos sobre como ele executa os serviços.
Porque devemos encapsular? Exemplo: KM de um Carro Existe KM negativa?
Porque devemos encapsular? Carro c = new Carro(); c.km = -20;
Assim, para evitar esse tipo de problema, Encapsularemos o atributo KM da classe Carro. Mas como podemos encapsular?
1º- Encapsulamos restringindo o acesso direto a propriedade; private int km; 2º- Damos acesso a propriedade através de um método, onde não é possível valores negativos; public void setkm(int km) { if (km >= 0) this.km = km; }
3º- Criamos um carro utilizando o Encapsulamento; Carro c = new Carro(); c.setkm(-10); Dessa forma nunca teremos um carro com KM negativa.
Os métodos Getters e Setters Servirão como modo de acesso aos atributos encapsulados de uma classe.
Método Set Nomeamos um método acessor com set toda vez que este método for modificar algum campo ou atributo de uma classe; Como o valor de um atributo da classe será modificado, não é necessário que este método retorne nenhum valor, por isso, os métodos setters são void. Porém, obrigatoriamente, eles tem que receber um argumento que será o novo valor do campo.
Método Get Nomeamos um método acessor com get toda vez que este método for verificar algum campo ou atributo de uma classe; Como este método irá verificar um valor, ele sempre terá um retorno como String, int, float, etc. Mas não terá nenhum argumento.
O encapsulamento é importante porque separa a maneira como um objeto se comporta da maneira como ele é implementado; A definição de como implementar os conhecimentos ou ações de uma classe, sem informar como isto é feito.
Exemplo Prático: Login e Senha de Usuários Prática Modelando o Projeto
Herança é um mecanismo que permite que características comuns a diversas classes sejam agrupadas em uma classe base, ou superclasse. A partir de uma classe base, outras classes podem ser especificadas. Cada classe derivada ou subclasse apresenta as características (estrutura e métodos) da classe base e acrescenta a elas o que for definido de particularidade para ela.
Quando usamos Herança? Exemplo: Atributos comuns entre um Carro, Bicicleta, Avião...
public class Veiculo { String modelo; int ano; int quantpneus; int quantpessoasandam; String cor; }
Mas, como Herdamos? public class Carro extends Veiculo{ } Agora, um Carro é um Veículo!
Então podemos ter a seguinte instância de carro: Veiculo c1 = new Carro(); c1.setano(2010);
SubClasse: uma classe que é um subtipo de uma ou mais classes. Como tal, ela herda todas as características de suas superclasses. SuperClasse: classe a partir da qual todas as suas características são herdadas por suas subclasses.
Exemplo Prático: Pessoa > Usuário Pessoa > Funcionário
É muito importante saber usar Herança para beneficiar, pois se mal projetado um projeto pode ficar comprometido pelo uso indevido desse conceito; Podemos introduzir o conceito de Polimorfismo através de Herança, vamos entender mais na frente como.
Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação (assinatura) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse.
Quando usamos o Polimorfismo? Exemplo: Atributos comuns, porém serviços (formas de fazer uma ação) diferentes. Acelerar um Veículo. X X
Podemos usar Polimorfismo de três maneiras diferentes: Inclusão (Interfaces) Paramétrico (Generics) Ad-Hoc (Override)
Todo veículo acelera, porém de formas diferentes. public class Veiculo { public void acelerar(){}; }
Então teríamos Polimorfismo Ad-Hoc. public class Bicicleta extends Veiculo{ @Override public void acelerar(){ System.out.println( Pedalar ); System.out.println( Acelerando... ); }; }
Podemos usar Polimorfismo com Interfaces. public interface ServCarros{ public void acelerar(); public void freiar(); } public class Carro implements ServCarros{ //Classe Carro é Obrigada a escrever a implementação //dos métodos }
Polimorfismo é muito utilizado, sua utilização vai de Sistemas básicos até a construção de Padrões de Projeto onde o seu uso é feito constantemente. Composite, Observer, Strategy, Template Method