Java para Desktop Programação Orientada à Objetos 2 – JSE Java – POO 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. Java – POO Porque devemos encapsular? Exemplo: KM de um Carro Existe KM negativa? Java – POO Porque devemos encapsular? Carro c = new Carro(); c.km = -20; Java – POO Assim, para evitar esse tipo de problema, Encapsularemos o atributo KM da classe Carro. Mas como podemos encapsular? Java – POO 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; } Java – POO 3º- Criamos um carro utilizando o Encapsulamento; Carro c = new Carro(); c.setKm(-10); Dessa forma nunca teremos um carro com KM negativa. Java – POO Os métodos Getters e Setters Servirão como modo de acesso aos atributos encapsulados de uma classe. Java – POO 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. Java – POO 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. Java – POO 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. Java – POO Exemplo Prático: Login e Senha de Usuários Prática – Modelando o Projeto Java – POO 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. Java – POO Quando usamos Herança? Exemplo: Atributos comuns entre um Carro, Bicicleta, Avião... Java – POO public class Veiculo { String modelo; int ano; int quantPneus; int quantPessoasAndam; String cor; } Java – POO Mas, como Herdamos? public class Carro extends Veiculo{ } Agora, um Carro é um Veículo! Java – POO Então podemos ter a seguinte instância de carro: Veiculo c1 = new Carro(); c1.setAno(2010); Java – POO 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. Java – POO Exemplo Prático: Pessoa > Usuário Pessoa > Funcionário Java – POO É 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. Java – POO 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. Java – POO Quando usamos o Polimorfismo? Exemplo: Atributos comuns, porém serviços (formas de fazer uma ação) diferentes. Acelerar um Veículo. X X Java – POO Podemos usar Polimorfismo de três maneiras diferentes: Inclusão (Interfaces) Paramétrico (Generics) Ad-Hoc (Override) Java – POO Todo veículo acelera, porém de formas diferentes. public class Veiculo { public void acelerar(){}; } Java – POO Então teríamos Polimorfismo Ad-Hoc. public class Bicicleta extends Veiculo{ @Override public void acelerar(){ System.out.println(“Pedalar”); System.out.println(“Acelerando...”); }; } Java – POO 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 } Java – POO 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