Escolar Documentos
Profissional Documentos
Cultura Documentos
SOBRE MIM
Bruno Thiago da Silva
Métodos de um carro: acelerar, correr, parar, frear, acender farol, abrir porta...
Métodos de um animal: comer, nascer, morrer, andar, voar, nadar, correr, olhar...
Atributos tem tipos pré-definidos na classe. Como tipo texto ou tipo numérico, por
exemplo.
Métodos podem receber como parâmetros variáveis e retornar alguma informação
para quem utilizá-los, como por exemplo, receber dois números é retornar o resultado de
uma conta matemática.
* Variáveis são utilizadas para se trabalhar com valores dentro dos métodos.
* Iremos estudar detalhadamente variáveis e seus tipos na próxima apostila.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
Conceito de CLASSES e OBJETOS
Exercícios:
1. Abstração
2. Encapsulamento
3. Herança
a. Generalização
b. Especificação
4. Polimorfismo
CONCEITOS DE ORIENTAÇÃO A OBJETOS
1. ABSTRAÇÃO (Abstrair algo) – É transformar algo não técnico em algo técnico.
Como assim?
Imagine uma pessoa que não sabe fazer contas. E ela te diz:
“Eu preciso comprar 10 caixas de leite, cada uma custa R$ 2,00, também vou comprar 2 latas de
achocolatado, cada uma custa R$ 4,00. Tenho uma nota de R$ 50,00,
mas não sei quanto vou receber de troco.”
E você transforma isso em conta matemática, você abstrai: Algo não técnico
50 – (10 * 2 + 2 * 4) Algo técnico
CONCEITOS DE ORIENTAÇÃO A OBJETOS
2. ENCAPSULAMENTO (Encapsular algo) – É esconder algo técnico.
Como assim?
Imagine um controle remoto de TV.
Para trocar de canal basta você clicar no botão do número correspondente do canal.
Através dele o controle emite uma frequência e muda para o canal desejado. Você não faz
ideia do procedimento técnico que está sendo realizado e que frequência é essa, pois isso
está escondido, está encapsulado.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
2. ENCAPSULAMENTO (Encapsular algo) – É esconder algo técnico.
Agora imagine que, se você tivesse que digitar a frequência do canal ao invés de
digitar apenas um número, e este canal mudasse a sua frequência sem você saber. Você não
conseguiria mais acessar o canal, até descobrir a nova frequência. Com a frequência
encapsulada e acessada através de um único número, mesmo com a frequência do canal
sendo alterada você continuará acessando o canal normalmente, sem nem mesmo saber da
alteração. Isso é encapsulamento.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
3. HERANÇA (Herdar algo) – É receber algo de outra coisa.
Esse conceito é fácil.
Um bom exemplo é o reino animal.
* O ser humano e os macacos tem características em comum, pois ambos são primatas, então
podemos dizer que tudo que há de comum entre eles pertencem a primata e são herdadas
disto.
Como assim?
Lembre-se do exemplo que tivemos de herança, de que leão e onça são felinos.
Podemos dizer que felino pode ser vários animais, como um leão ou uma onça. Isso é ser
múltiplas formas, felino é polimórfico.
Então é correto afirmar que leão é um felino, porém não é correto afirmar que
felino é um leão, pois pode ser também um gato, uma onça, um tigre, entre outros.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
SOBRESCRITA E SOBRECARGA DE MÉTODOS
Agora que já sabemos o que são classes, métodos e herança. Vamos ver um pouco
sobre o que é sobrescrita e sobrecarga de métodos para podermos dar andamento nos
estudos.
Quando uma classe herda métodos de outra classe, porém sua ação é diferente da
superclasse, então é possível modificar a ação deste método utilizando a sobrescrita de
métodos, que consiste em escrever novamente o método na classe filha, modificando seu
conteúdo.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
SOBRESCRITA E SOBRECARGA DE MÉTODOS
E quando um método de uma classe pode ser feito de várias formas diferentes, é
possível ter na classe ou em uma subclasse mais de um método com o mesmo nome, porém
com conteúdo diferente, isso se chama sobrecarga de métodos.
As classes ficam separadas por pacotes. Cada pacote pode ter uma ou várias
classes.
Agora vamos entender qual acesso cada modificador defini às classes e aos seus
membros.
Public – Classe com public pode ser acessada por qualquer outra classe,
independente do pacote que esta esteja.
Public – Membro com public pode ser acessado por qualquer outra classe que tenha
acesso à classe que ele pertence, independente do pacote que aquela esteja.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE ACESSO
Package (Default) – Classe com package pode ser acessada apenas por outra
classe que esteja no mesmo pacote que ela.
Package (Default) – Membro com package pode ser acessado apenas por classe
que esteja no mesmo pacote da classe que ele pertence.
Observação: Como classes só podem ter default ou public, classes do mesmo pacote sempre
tem acesso umas as outras. Porém o acesso aos membros depende do modificador de acesso
de cada um.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE ACESSO
Protected – Membro com protected pode ser acessado apenas por classe que esteja
no mesmo pacote da classe que ele pertence, como no package, mas também por classe que
herda a classe que ele pertence, ou seja, por subclasses, independente do pacote que esteja.
Private – Membro com private não pode ser acessado por nenhuma outra classe,
apenas por outros métodos da própria classe que pertence, mesmo se outra classe herdar a
classe do membro.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE ACESSO
São eles: abstract, final, static, synchronized, native, strictfp, transiente e volatile.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA CLASSES
Final – Classe com final não pode ser herdada. É utilizado em classes que não tem ou
não devem ter subclasses.
Abstract – Classe com abstract não pode ser instanciada. É utilizado em classes que
tem que ser herdadas por outras classes pois sozinhas não tem sentido. Ex: não é possível
existir um animal felino que não seja um gato, leão, tigre, etc... Ele tem que ser algum desses
animais. Como o próprio nome diz, é um objeto abstrato e não concreto.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA CLASSES
Strictfp – Classe com strictfp coloca padrão em ponto flutuante. É utilizado em classes
que trabalham com cálculos para resolver problemas com ponto flutuantes. Utiliza o padrão
IEEE 754.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA MÉTODOS
Final – Método com final não é herdado da superclasse. Subclasses não conseguem
herdar um método final da superclasse.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA MÉTODOS
Abstract – Método com abstract deve ser implementado pela primeira subclasse
concreta (não abstrata). Um método abstrato não tem conteúdo. Ele serve para determinar
que a primeira subclasse concreta deve ter aquele comportamento, porém é a subclasse que
defini como o comportamento será feito.
Observação: Apenas classes abstratas porém conter métodos abstratos. Mas elas (as classes)
também podem conter métodos concretos.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA MÉTODOS
Strictfp – Método com strictfp tem padrão para ponto flutuante. É utilizado em
métodos que trabalham com cálculos e resolve problemas com ponto flutuantes. Utiliza o
padrão IEEE 754. Funciona exatamente da mesma forma que na classe, porém funciona
apenas para o método em que é utilizado.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA MÉTODOS
Synchronized – Método com synchronized é acessado por uma thread de cada vez.
Quando um método synchronized está sendo executado por uma thread, as demais threads
deverão aguardar para iniciar a sua execução, assim o método é acessado por apenas uma
thread por vez.
Observação: Threads são, basicamente, partes de um programa que foi dividido para ser
processado mais rápido, sendo que duas threads podem ser processadas ao mesmo tempo.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA MÉTODOS
Native – Método com native pode ser implementado em outra linguagem nativa. Pode
ser escrito em outra linguagem nativa do Java, como o C ou o C++. Não tem conteúdo, assim
como um método abstract.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA ATRIBUTOS
Final – Atributo com final não pode ter seu valor alterado. Atributos que tem um valor
constante utilizam final para garantir que seu valor não seja alterado, um exemplo seria o
valor de π.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO PARA ATRIBUTOS
Static – Atributo com static tem escopo de classe, e não de objeto. Isso significa que
não é necessário criar uma instancia daquela classe para ter acesso ao atributo.
Volatile – Atributo com volatile tem seu valor alterado para todas as threads.
Interface é como um contrato, pois define as ações que as classes devem assumir.
Então a classe que implementar uma interface deve implementar (ter) seus métodos, porém
cada classe pode executar a ação de uma forma diferente da outra.
É possível que uma classe implemente mais de uma interface. E também que uma
interface implemente outras.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
INTERFACES
Toda interface...
• é abstract;
• seus atributos são public, static e final;
• e seus métodos são public e abstract.
Portanto nenhum método deve possuir corpo, garantindo que cada classe que
implementá-la poderá ter um conteúdo diferente para o método. E todo atributo em
interface é uma constante e não poderá ter seu valor alterado nas classes.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
REVISÃO
Interface: Animal
Superclasses: Felino e Primata
Classes: Leao, Gato, Macaco e SerHumano.
Esquema
Animal
Interface
Felino Primata
Classe Classe
Interface: Animal
Todo animal deve nascer e morrer, portanto criaremos a interface Animal com os métodos nascer
e morrer, obrigando todos as classes que implementarem a interface Animal terem estas ações.
A interface Animal é public e abstract, ou seja, qualquer classe terá acesso à ela e não
pode ser criado um objeto a partir dela, apenas a partir das classes que a
implementarem. Lembrando que seus métodos são public abstract por padrão.
Observações:
Todo animal deve nascer e morrer, portanto foram definidos métodos para essas ações
O conteúdo (atributos e métodos) da interface fica entre colchetes { }
O nome de uma interface deve ter a primeira letra em maiúsculo
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – CLASSE FELINO
A classe Felino é public e abstract, ou seja, qualquer classe terá acesso à ela e não pode
ser criado um objeto a partir dela, apenas a partir de suas subclasses.
Observações:
O nome de uma class deve ter a primeira letra em maiúsculo
O conteúdo (atributos e métodos) da class fica entre colchetes { }
A classe implementa a interface Animal, mas não é obrigada a implementar os métodos da interface
porque ela é abstract
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – ATRIBUTO RAÇA
O atributo raça é private e do tipo String, ou seja, apenas a classe Felino terá acesso à
ele e seus valores serão tratados como um texto.
Observações:
O nome de um atributo deve ser em minúsculo e não pode conter caracteres especiais.
String é um tipo de atributo utilizado para textos
A declaração de um atributo deve terminar com ;
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – MÉTODO CAÇAR
public abstract void cacar (String animal); // método caçar da classe felino
O método caçar é public, abstract e tem retorno do tipo void, ou seja, qualquer classe
terá acesso à ela, desde que tenha acesso à classe Felino, a primeira classe concreta que
herdar a classe felino terá que implementar o método caçar e não retornará nenhuma
informação.
Observações:
O nome de um método deve ser escrito em minúsculo
Os parâmetros de um método são declarados entre parênteses, neste caso uma variável do tipo String
chamada animal
Um método abstract não tem corpo (conteúdo) e termina com ;
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – CLASSE LEÃO
public final class Leao extends Felino {
public void nascer ( ) { /*conteúdo do método*/ }
public void morrer ( ) { /*conteúdo do método*/ }
public void cacar (String animal) { /*conteúdo do método*/ }
}
A classe Leão é public e final, ou seja, qualquer classe terá acesso à ela e não pode ser
herdada por nenhuma outra classe.
Observações:
O conteúdo dos métodos fica entre colchetes { }
A classe herda a classe Felino
A classe é obrigada a implementar os métodos da classe Felino e da interface Animal, pois esta é
implementada pela classe Felino
Resultado
Animal
public interface Animal { Interface
}
Leao
public abstract class Felino implements Animal { Classe
}
Organizando em pacotes
Pacote Interfaces
Animal
Interface
Pacote abstratos
Felino Primata
Pacote concretos
SuperClasse SuperClasse
package abstratos;
import interfaces.Animal;
package concretos;
import abstratos.Felino;
Já sabemos que um atributo private não é acessado por outra classe. Então como o
atributo raça será acessado por quem utilizar a classe Leão, por exemplo?
Para isso são utilizados os métodos chamados de Getters e Setters. Um método set é
utilizada para inserir um valor para um atributo, já um método get é utilizado para ter acesso
ao valor do atributo.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – MÉTODOS GETTERS E SETTERS
Método set
public String setRaca(String raca){
this.raca = raca;
}
O método setRaca recebe como parâmetro um atributo do tipo String chamado raca, o
valor desta String será passada por quem utilizar o método, e passa o valor para o
atributo raca.
O this indica que a palavra após o ponto é referente ao atributo raca. O this representa
a instância corrente do método, neste caso a instância da classe que herdar Felino.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – MÉTODOS GETTERS E SETTERS
Método get
public String getRaca( ){
return raca;
}
O método getRaca retorna uma String, neste caso o atributo raca da classe que herdar
a classe Felino.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – MÉTODOS GETTERS E SETTERS
Observação:
Perceba que a forma que é atribuído um valor para o atributo dentro do método set
fica encapsulada, pois quem utiliza o método não sabe como a atribuição é feita.
Os métodos Getters e Setters fazem parte do padrão JavaBeans que será explicado
na próxima apostila.
Resultado
package abstratos;
import interfaces.Animal;
}
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – SOBRECARGA E SOBRESCRITA DE MÉTODOS
Agora vamos considerar que não existe apenas uma forma de um Leão caçar um
animal, então é preciso ter mais de um método para a ação de caçar, e neste método não
será necessário passar um parâmetro. Então nós faremos a sobrecarga do método caçar,
criando o novo método caçar na classe Leao da seguinte forma:
public final class Leao extends Felino {
}
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – SOBRECARGA E SOBRESCRITA DE MÉTODOS
Agora vamos considerar que para inserir a raça do Leão, primeiro é preciso
verificar se o usuário não está passando um valor vazio para o parâmetro. Então é feita a
sobrescrita do método setRaca() da seguinte forma:
public final class Leao extends Felino {
[...]
// método sobrescrito
public String setRaca (String raca){
if (raca == “ ”){
this.raca = raca;
}
}
}
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – CONSTRUTOR
Uma classe é instanciada através do CONSTRUTOR, é ele que constrói os objetos
através das classes.
Um construtor é parecido com um método. Ele pode receber parâmetros para
construir os objetos com valores já definidos para seus atributos e tem modificador de
acesso. Porém ele já é implícito na classe, ou seja, mesmo que você não o coloque a classe
já o terá assim que for criada. Exemplo de construtor padrão:
public Felino( ){
}
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – CONSTRUTOR
Se o programador desejar é possível criar outro construtor para receber parâmetros
e instanciar o objeto com valores para seus atributos:
Perceba que não foi necessário utilizar o método setRaca dentro do construtor pois
dentro da classe Felino se tem acesso direto ao atributo.
Observação: Ao criar um construtor com parâmetro, o construtor padrão deixa de existir,
portanto é importante criá-lo também.
Resultado
package abstratos;
import interfaces.Animal;
public Felino( ){
}
}
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA - EXERCÍCIOS
Lembretes:
leao.cacar(“antílope”);
parâmetro passado ao método
método caçar
Leao.cacar( );
método caçar
Mas e agora? Tenho certeza que você está se perguntando como trabalhar
realmente na prática. Isso será visto na próxima apostila, assim como os detalhes de cada
coisa explicada, como foi prometido.
Acredito que de agora em diante a aprendizagem da linguagem Java ficará muito
mais fácil e interessante para você. Se assim for, meu objetivo com esta apostila foi
concluído.
Muito obrigado pela atenção. Espero que tenha gostado.
Bruno Silva