Você está na página 1de 74

JAVA Orientação a Objetos

SOBRE MIM
Bruno Thiago da Silva

 Programador Java Trainee na empresa G&P.


 Cursando 2º ano de Bacharel em Sistemas de Informação na FGP (Faculdade
Gennari e Peartree), em Pederneiras.
 Formado Técnico em Informática com ênfase em programação, na ETEC Astor de
Mattos Carvalho de Cabrália Paulista.
 Linkedin: https://br.linkedin.com/in/brunosilvajava
SOBRE A APOSTILA
O objetivo desta apostila é apresentar ao estudante de programação Java
os conceitos básicos de Programação Orientada a Objetos e da linguagem Java de
forma sucinta, sem entrar em muitos detalhes a respeito de cada assunto, para que o
aluno tenha um uma visão geral a respeito da linguagem e, assim, ter mais facilidade
de aprendizagem quando se aprofundar em Java.
Espero que goste... então mãos a obra!
INTRODUÇÃO
Orientação a Objetos é um paradigma de desenvolvimento, essa apostila
ensina como trabalhar com este paradigma na linguagem Java.

Várias outras linguagens de programação trabalham com esse paradigma,


porém nem todas são 100% orientada a objetos como Java. Portanto, desde o
primeiro contato com Java já se tem contato com Orientação a Objetos.
INTRODUÇÃO
É muito importante conhecer os conceitos da Orientação a Objetos antes de se
deparar com os códigos de Java, porque isso irá facilitar a aprendizagem. Sendo que depois
será preciso apenas enxergar estes conceitos na linguagem de programação.

Algumas vantagens da Orientação a Objetos:

• Código mais flexível


• Facilidade na alteração do código
• Reaproveitamento de código
CONCEITOS DE ORIENTAÇÃO A OBJETOS
Orientação a Objetos funciona com base nos objetos do mundo real, como
uma pessoa, um carro, um animal, etc... Perceba que OO trata tudo como um objeto.

Existem alguns conceitos muito importantes na OO. Como já dito


anteriormente, OO é baseado no mundo real, portanto estes conceitos existem no
mundo real, entendendo como eles funcionam no seu dia-a-dia fica fácil entender como
eles funcionam na programação. Na próxima apostila veremos eles com mais detalhes
na programação.
OO = Orientação a Objetos
CONCEITOS DE ORIENTAÇÃO A OBJETOS
Conceito de CLASSES e OBJETOS
OO trata tudo como um objeto.
Mas como esses objetos são definidos na programação?
Eles são definidos através das CLASSES.
As classes servem de base na construção de um objeto. Elas funcionam como a
planta de uma casa, a partir desta planta várias casas podem ser construídas, a planta é a
mesma, mas as casas são objetos distintos uns dos outros. Assim podem ter certas
características diferentes, como a cor por exemplo.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
Conceito de CLASSES e OBJETOS
Outro exemplo.
Outro exemplo que podemos dar para a funcionalidade de uma classe é o projeto
de um carro. Um modelo de um carro, antes dele ser construído também tem todo seu projeto
definido em plantas. Com essa mesma planta podem ser feitos vários carros, porém uns
podem ter algumas características diferentes dos outros, como o tipo da roda, a cor do
carro, o ano de fabricação e a potência do motor.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
Conceito de CLASSES e OBJETOS

As classes são compostas por ATRIBUTOS e MÉTODOS, também chamados de membros.

Os atributos são as características do objeto. Exemplos:

 Atributos de um carro: modelo, cor, ano, quilometragem, combustível, potência, etc...

 Atributos de um animal: raça, idade, data de nascimento, tipo, etc...

 Atributos de um apartamento: qtde quartos, andar, endereço, bloco, número, etc...


CONCEITOS DE ORIENTAÇÃO A OBJETOS
Conceito de CLASSES e OBJETOS

As classes são compostas por ATRIBUTOS e MÉTODOS, também chamados de membros.

Os métodos são as ações do objeto. Exemplos:

 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...

 Métodos de um apartamento: Alugar, vender, etc...


CONCEITOS DE ORIENTAÇÃO A OBJETOS
Conceito de CLASSES e OBJETOS

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

Exemplo simples de uma classe Funcionário.


CONCEITOS DE ORIENTAÇÃO A OBJETOS
Conceito de CLASSES e OBJETOS

Exercícios:

Defina alguns atributos e métodos para as seguintes classes:

Conta Corrente; Avião; Computador; Televisão; Calculadora.


CONCEITOS DE ORIENTAÇÃO A OBJETOS
Vamos falar agora de 4 importantes conceitos de OO:

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.

* O leão e a onça também tem características em comum, pois ambos herdam as


características do felino.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
3. HERANÇA (Herdar algo) – É receber algo de outra coisa.
Mas e as características ÚNICAS de cada animal?
Nesse ponto entram os conceitos de GENERALIZAÇÃO e ESPECIALIZAÇÃO.

a. Generalização – É quando subimos a hierarquia, exemplo:


Felino é a generalização de Leão, Gato, etc. Felino abrange vários animais.

b. Especialização – É quando descemos a hierarquia, exemplo:


Leão é especialização de Felino. Leão é um animal em específico.
Leão seria uma subclasse de Felino.
Felino seria a superclasse de leão.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
4. POLIMORFISMO (Múltiplas Formas) – É poder ser várias coisas.

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.

Existem algumas regras para sobrescrever ou sobrecarregar um método, porém


veremos na próxima apostila. No momento é importante apenas saber o contexto geral de
sua utilização.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PACOTES

As classes ficam separadas por pacotes. Cada pacote pode ter uma ou várias
classes.

Pacote é um ‘agrupador‘ que une e organiza um conjunto de classes e demais


arquivos que possuem interesses em comum.

Pense em pacotes como caixas organizadoras.


CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE ACESSO

Os modificadores de acesso são padrões de VISIBILIDADE DE ACESSO às classes,


atributos e métodos. Resumindo, um modificador de acesso defini se uma determinada classe
deixará outra ter acesso à ela e aos seus membros (atributos e métodos).
São eles: public, private, protected e package (default).

Observação: Classes trabalham apenas com os modificadores public e default, enquanto os


membros trabalham com todos.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE ACESSO

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.

Observação: É importante que o conceito de HERANÇA esteja bem entendido, porque o


protected tem sua funcionalidade para classes com herança. É isto que o diferencia do
package, sendo que ele dá acesso aos membros para as classes filhas.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE ACESSO

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

Um esquema para exemplificar a permissão de acesso de cada modificador de acesso.

Acesso em: PRIVATE DEFAULT PROTECTED PUBLIC


Mesma classe Sim Sim Sim Sim
Mesmo pacote Não Sim Sim Sim
Pacote diferente
Não Não Sim (herança) Sim
(subclasse)
Pacote diferente
Não Não Não Sim
(sem subclasse)
CONCEITOS DE ORIENTAÇÃO A OBJETOS
MODIFICADORES DE NÃO ACESSO

Os modificadores de não acesso (NonAccess) são padrões de COMPORTAMENTO


das classes, atributos e métodos. Diferentemente dos modificadores de acesso, os
modificadores de não acesso não funcionam exatamente da mesma forma para classes e
membros, portanto iremos estuda-los separadamente.

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

Os modificadores de não acesso utilizados em classes são: final, abstract e strictfp.

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

Os modificadores de não acesso utilizados em métodos são: final, abstract, strictfp,


static, synchronized e native.

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

Os modificadores de não acesso utilizados em atributos são: final, static, transient e


volatile.

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.

Transient – Atributo com transient não é enviado na serialização pelo transient.

Volatile – Atributo com volatile tem seu valor alterado para todas as threads.

Observação: Na utilização são combinados modificadores de acesso e de não acesso,


veremos as regras no decorrer do curso.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
INTERFACES

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

Classes: Definem um objeto.


Objetos: Instâncias das classes.
Atributos: Características de um objeto.
Métodos: Ações de um objeto.
Interfaces: Contratos de ações de uma classe.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
REVISÃO

Abstração: Transformar algo não técnico em algo técnico.


Encapsulamento: É esconder algo técnico.
Herança: Herdar membros de outra classe.
Generalização: Subir a hierarquia.
Especialização: Descer a hierarquia.
Polimorfismo: Ser múltiplas formas.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
REVISÃO

Sobrescrita de métodos: Reescrever a ação de um método da superclasse na subclasse.


Sobrecarga de métodos: Vários métodos com a mesma ação em uma classe, porém com
conteúdos diferentes.
Pacotes: “Agrupadores” que unem e organizam classes com interesses em comum.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
REVISÃO

Modificador de acesso: Padrões de visibilidade de acesso às classes e membros.


* public, private, protected e default (package).
Modificador de não acesso: Padrões de comportamento de classes e membros.
* abstract, final, static, synchronized, native, strictfp, transiente e volatile.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA

FINALMENTE VAMOS À PRATICA!!!


Agora vamos ver na pratica e em código Java, num exemplo simples, um pouco do
que foi explicado e mais alguns detalhes importantes.
Vamos montar um esquema para animais.

 Interface: Animal
 Superclasses: Felino e Primata
 Classes: Leao, Gato, Macaco e SerHumano.
Esquema

Animal
Interface

Felino Primata
Classe Classe

Leao Gato Macaco Humano


Classe Classe Classe Classe
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA

 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.

 Superclasses: Felino e Primata


 As classes Felino e Primata serão abstratas, pois não fazem sentido sozinhas. De início faremos a
apenas classe Felino, criaremos um atributo para raça e um método para a ação de caçar um
animal.

 SubClasses: Leao, Gato, Macaco e SerHumano.


 As classes Leao, Gato, Macaco e SerHumano serão final, considerando que elas não terão
subclasses.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – INTERFACE ANIMAL
public interface Animal {
void nascer ( ); // método nascer
void morrer ( ); // método morrer
}

 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

public abstract class Felino implements Animal {


// conteúdo da classe (atributos e métodos)
}

 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

private String raca; // atributo da classe Felino

 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

void nascer ( ); Felino


void morrer ( ); Classe

}
Leao
public abstract class Felino implements Animal { Classe

private String raca;

public abstract void cacar (String animal);

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*/ }

}
Organizando em pacotes

Pacote Interfaces

Animal
Interface
Pacote abstratos

Felino Primata
Pacote concretos
SuperClasse SuperClasse

Leao Gato Macaco Humano


SubClasse SubClasse SubClasse SubClasse
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – PACOTES

package concretos; // pacote em que a classe Leão pertence


pacote
import abstratos.Felino; // importação
classe importada
public final class Leao extends Felino {
// conteúdo da classe
}

 a palavra package informa o pacote em que a classe Leão está.


 a palavra import faz a importação de uma classe de outro pacote utilizada pela classe.
Neste caso a classe Leão importa a classe Felino que está no pacote abstratos, para que
a herança seja possível.
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – PACOTES
Observação:

 Para importar todos as classes ou interfaces de um pacote, é preciso apenas colocar um


* onde é colocado o nome da classe.
Ex: import abstratos.*;
Resultado
package interfaces;

public interface Animal {


void nascer ( );
void morrer ( );
}

package abstratos;

import interfaces.Animal;

public abstract class Felino implements Animal {


private String raca;
public abstract void cacar (String animal);
}

package concretos;

import abstratos.Felino;

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*/ }
}
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – MÉTODOS GETTERS E SETTERS

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;

public abstract class Felino implements Animal {

private String raca;

public abstract void cacar (String animal);

public String setRaca (String raca){


this.raca = raca;
}

public String getRaca ( ){


return raca;
}

}
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 {

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*/ }
public void cacar ( ) { /*conteúdo do método*/ } // método sobrecarregado

}
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:

public Felino (String raca){


this.raca = raca;
}

 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 abstract class Felino implements Animal {

private String raca;

public abstract void cacar (String animal);

public Felino( ){
}

public Felino (String raca){


this.raca = raca;
}

public String setRaca (String raca){


this.raca = raca;
}

public String getRaca ( ){


return raca;
}

}
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA - EXERCÍCIOS

Agora defina a arquitetura para as classes Primata e Humano.

Lembretes:

 Humano herda Primata, e Primata implementa Animal


 Faça um construtor que receba algum parâmetro para a classe Humano
 Os atributos devem ser private e faça os métodos Getters e Setters
 Não esqueça de especificar o pacote da classe e de fazer as importações
necessárias
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – INSTANCIANDO UM OBJETO
Como dito anteriormente, uma classe é instanciado pelo construtor. Abaixo um
exemplo de como um objeto é instanciado.

Leao leao = new Leao ();


Construtor padrão, sem parâmetro
new -> Palavra que chama o construtor
variável de referência -> referência o objeto criado
Classe que será instanciada
CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – INSTANCIANDO UM OBJETO
Outro exemplo utilizando um construtor com parâmetro.

Leao leao = new Leao ( “ Silvestre ” );


Construtor com parâmetro

 Um texto String fica entre aspas. Ex: “Exemplo de texto String”


CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – CHAMANDO UM MÉTODO PELA INSTÂNCIA
Sintaxe para utilização de métodos do objeto criado

Leao leao = new Leao ( “ Silvestre ” );

leao.cacar(“antílope”);
parâmetro passado ao método

método caçar

variável de referência -> referência o objeto criado


CONCEITOS DE ORIENTAÇÃO A OBJETOS
PRATICA – CHAMANDO UM MÉTODO PELA CLASSE
Agora considere que o método caçar (sem parâmetro) fosse static, não
precisaríamos criar um instância de Leão para utilizá-lo. Ficando da seguinte forma:

Leao.cacar( );

método caçar

nome da classe, não é uma variável de referência


CONCEITOS DE ORIENTAÇÃO A OBJETOS
E AGORA?
Chegamos ao fim desta apostila. Parabéns!!!

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