Buscar

Programação Orientada a Objetos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PROGRAMAÇÃO 
ORIENTADA A 
OBJETOS
OBJETIVOS DE APRENDIZAGEM
 > Descrever o processo de criação de objetos e classes.
 > Explicar a criação de atributos e métodos.
 > Apresentar conceitos de abstração.
Introdução
A programação orientada a objetos é um dos principais paradigmas de pro-
gramação usados atualmente. A linguagem Java é uma das mais populares 
linguagens orientadas a objetos. Segundo Deitel e Deitel (2010), os programas 
orientados a objetos costumam ser mais fáceis de entender, corrigir e modificar.
Neste capítulo, você vai conhecer os fundamentos da programação orien-
tada a objetos. Além disso, vai ver como criar classes e objetos na linguagem 
Java e como declarar atributos e métodos para uma classe. Por fim, vai aplicar 
na prática dois conceitos primordiais da orientação a objetos: abstração e 
encapsulamento.
Fundamentos da orientação a objetos: 
classes e objetos
A programação orientada a objetos consiste em criar modelos de objetos do 
mundo real dentro de sistemas computacionais. Observe os objetos à sua volta: 
todos eles têm algum estado, que podemos entender de forma simplificada 
como um conjunto de características de cada objeto, como forma, cor, peso, 
valor, etc. Eles também têm algum comportamento: as formas como ele se 
Classes e objetos
Rafael Leal Martins
comporta ou age. A programação orientada a objetos fornece uma maneira 
mais intuitiva de representar esses elementos do mundo real dentro de um 
programa. As características de um objeto no mundo real que podem ser 
representadas quantitativamente são chamadas de atributos, enquanto suas 
ações e comportamentos são codificadas como métodos.
Segundo Schildt (2015), a programação orientada a objetos tem alguns 
princípios fundamentais: abstração, encapsulamento, herança e polimorfismo. 
Neste capítulo, trataremos sobre dois deles: abstração e encapsulamento.
Abstração
Os objetos do mundo real são complexos, com uma infinidade de caracterís-
ticas, ações e comportamentos. Seria inviável, ou até impossível, representar 
todas essas informações dentro de um sistema de software.
A abstração consiste em criar um modelo do objeto do mundo real dentro 
do software, e apenas as características, os comportamentos e as ações do 
objeto que são relevantes para o sistema desenvolvido são consideradas. 
O restante das informações do objeto é simplesmente ignorado.
Uma pessoa do mundo real tem uma quantidade indefinida de 
características. Além de suas características físicas (altura, peso, 
idade, constituição óssea, muscular, etc.), cada pessoa também tem inúmeras 
características psicológicas, emocionais e cognitivas. Se considerarmos os 
comportamentos e as ações, esse número aumenta absurdamente. Cada indivíduo 
humano contém um universo único de características e possibilidades. Isso sem 
considerar as características (informações) sociais ligadas a uma pessoa, como 
o número de CPF, RG, CNH, etc.
Entretanto, um sistema de cadastro de candidatos a uma vaga de traba-
lho não está interessado em processar a grande maioria dessas informações. 
Ele manipula um conjunto muito restrito de informações das pessoas: nome 
completo, endereço, telefone, idade, nível de escolaridade, experiência pro-
fissional e mais algumas outras informações relevantes para esse cenário 
específico. Já um sistema de cadastro de alunos de uma academia poderia estar 
interessada em outras informações sobre uma pessoa, como altura e peso. 
Um sistema de controle acadêmico de uma faculdade, por exemplo, se interessa-
ria em processar as notas e quantidades de faltas de cada pessoa matriculada. 
A abstração consiste em observar um objeto complexo (pessoa) e mapeá-lo 
para um modelo relevante para o cenário em questão.
Classes e objetos2
Encapsulamento
Na programação orientada a objetos, o encapsulamento é uma forma de 
vincular o código e os dados que esse código trata, e isso mantém os dois 
seguros contra a interferência e a má utilização externa (SCHILDT, 2015). 
Em uma linguagem orientada a objetos, os dados e as operações que podem 
ser realizadas sobre eles podem ser vinculados de tal forma que se cria um 
sistema tipo “caixa preta”. Quando as instruções do programa e os dados são 
vinculados dessa forma, cria-se um objeto. O conceito de objeto é o que dá 
então suporte ao encapsulamento. Em um objeto, o código (métodos) e os 
dados (atributos) podem ser privados desse objeto ou públicos. Métodos ou 
atributos privados só são acessíveis dentro do próprio objeto, ou seja, o código 
ou os dados privados não podem ser acessados por uma parte do programa 
que esteja fora da estrutura do objeto. Quando os atributos e métodos são 
públicos, outras partes do programa podem acessá-los. Normalmente, as 
partes públicas de um objeto são usadas para fornecer uma interface de 
acesso para os seus elementos privados.
Vamos nos basear em uma pessoa novamente para dar um exemplo 
sobre encapsulamento. Os pensamentos de uma pessoa são gerados 
e processados pelo seu cérebro. Se quisermos saber o que uma pessoa pensa 
sobre alguma coisa, obviamente não podemos acessar diretamente seu cérebro. 
Isso geraria consequências fatais. O cérebro de alguém é como um atributo 
privado, que só o próprio objeto pessoa tem acesso direto. Então, como saber 
o que uma pessoa pensa? Ela pode executar ações (métodos) que nos permitem 
ter o acesso autorizado: falar, escrever e desenhar o que pensa.
A seguir, vamos estudar como criar classes em Java, com atributos e 
métodos.
Criação de atributos e métodos em uma 
classe
Segundo Deitel e Deitel (2010), a classe é o elemento essencial da linguagem 
Java. Classes são a fundação na qual a linguagem Java se estrutura, pois 
definem a natureza de um objeto. Na seção anterior, vimos que um objeto é 
Classes e objetos 3
uma espécie de cápsula (de onde vem o termo encapsulamento), contendo 
os dados e o código que manipula esses dados. Dentro de uma classe, são 
definidos dados, que em Java são chamados de atributos, e o código que age 
sobre eles, sendo contido em métodos.
Pela definição de Schildt (2015, p. 101), “[...] uma classe é um modelo que 
define a forma de um objeto. Ela especifica tanto os dados quanto o código 
que operará sobre eles. Java usa uma especificação de classe para construir 
objetos. Os objetos são instâncias de uma classe”.
Quando definimos uma classe, especificamos seus atributos, que são 
variáveis que serão comuns a qualquer objeto dela, e os métodos que operam 
sobre esses atributos. Embora classes muito simples possam conter apenas 
métodos ou apenas variáveis de instância, a maioria das classes do mundo 
real contém ambos. Uma classe é criada com o uso da palavra-chave class.
Como exemplo, vamos criar uma classe chamada Cliente, que pode ser 
usada para um sistema de controle de clientes (alunos) de uma academia. 
Para cada cliente, desejamos armazenar as seguintes informações:
 � CPF;
 � nome completo;
 � telefone;
 � idade;
 � altura;
 � peso.
Podemos então criar um arquivo chamado Cliente.java e nele escrever 
o código de uma classe para objetos que armazenam dados dos clientes, 
conforme o código mostrado a seguir:
class Cliente {
 String cpf;
 String nome;
 String telefone;
 int idade;
 double altura;
 double peso;
}
Classes e objetos4
A classe Cliente é um bloco de código delimitado por chaves e é composta, 
por enquanto, apenas por seus atributos, que são variáveis declaradas dentro 
do bloco, representando as informações que especificamos anteriormente. 
A classe pode ser usada para criar objetos Cliente nos programas Java.
Uma vez definida uma classe, podemos usá-la para criar objetos. Para 
criar um objeto em Java, usamos a seguinte instrução:
NomeClasse nomeObjeto = new NomeClasse();
NomeClasse é o nome da classe desejada e nomeObjeto é o nome da 
variável que armazenará o objeto criado. O comando new NomeClasse(); 
criará, de fato, o objeto desejado.
Quanto aos atributos, todo objeto de uma classe tem o conjunto de atri-
butosdefinidos nela. Os atributos podem ser acessados diretamente usando:
nomeObjeto.nomeAtributo
Podemos ler e armazenar valores em atributos de objetos da mesma 
forma que fazemos com variáveis comuns em Java. Veja a seguir um exemplo 
de criação de um objeto da classe Cliente e o acesso aos seus atributos 
criada no exemplo anterior da academia.
Os objetos da classe Cliente podem ser criados em um programa Java 
como mostrado a seguir:
class AppCliente {
 public static void main(String[] args) {
 Cliente novoCliente = new Cliente();
 novoCliente.cpf = "999.888.777-66";
 novoCliente.nome = "Fulano de Tal";
 novoCliente.telefone = "(62)9999-8888";
 novoCliente.idade = 34;
 novoCliente.altura = 1.72;
 novoCliente.peso = 85.3;
Classes e objetos 5
 System.out.println("Nome do Cliente: " + novoCliente.
nome);
 double imc = novoCliente.peso / (novoCliente.al-
tura * novoCliente.altura);
 System.out.println("IMC: " + imc);
 }
}
Nesse código, criamos um objeto da classe Cliente denominado novo-
Cliente. Em seguida, atribuímos valores aos seus atributos e, finalmente, 
utilizamos os valores dos atributos para imprimir o nome do cliente e calcular 
seu índice de massa corporal (IMC), que é exibido ao final.
As classes também podem conter métodos. Os métodos são sub-rotinas 
que processam os atributos da classe e, em muitos casos, dão acesso a esses 
dados. Quase sempre, outras partes do programa interagem com uma classe 
por seus métodos. Um método contém uma ou mais instruções. Cada método 
tem um nome, e é esse nome que é usado para chamá-lo. A forma geral de 
um método é mostrada a seguir:
tipoRetornado nomeMetodo(listaParametros) {
 instruções
 ...
 return valor;
}
tipoRetornado é o nome do tipo de dado retornado. Um método pode 
retornar qualquer tipo de dado aceito em Java, desde tipos primitivos (int, 
char, double, float, etc.) até tipos de referência de objetos (como string, 
arrays ou qualquer outra classe definida na linguagem Java ou pelo progra-
mador). nomeMetodo é um identificador para o método e fica a critério do 
desenvolvedor. listaParametros é uma sequência de pares separados por 
vírgulas compostos por tipo e identificador. Os parâmetros são basicamente 
variáveis que recebem o valor dos argumentos passados para o método 
quando ele é chamado. Se o método não tiver parâmetros, a lista estará vazia. 
Dentro do corpo do método, escrevemos uma sequência de instruções Java 
para realizar o processamento desejado (não há limites para a quantidade de 
Classes e objetos6
instruções inserida em um método). Finalmente, um método pode retornar 
algum valor quando chamado em um programa. Embora possa haver métodos 
com tipo de retorno void, que não retornam valor, a maioria dos métodos 
retorna um valor. A possibilidade de retornar um valor é um recurso útil dos 
métodos. Veja a seguir alguns exemplos de definição de métodos para uma 
classe Java.
Exemplos
Vamos criar dois métodos para a classe Cliente definida anteriormente. 
Criaremos um método denominado calcularIMC, que retorna o valor do IMC 
de um objeto cliente a partir dos valores dos seus atributos peso e altura. 
Também vamos criar um método denominado calcularPesoDesejado, 
que retorna a diferença do peso atual do cliente para o peso que ele deseja 
alcançar. Por fim, vamos criar o método imprimirDados, que imprime na 
tela do console os dados do cliente. O código Java para esses métodos é 
mostrado a seguir:
class Cliente {
 String cpf;
 String nome;
 String telefone;
 int idade;
 double altura;
 double peso;
 double calcularIMC() {
 double imc = peso / (altura * altura);
 return imc;
 }
 double calcularPesoDesejado(double metaPeso) {
 if (peso > metaPeso) return peso - metaPeso;
 else return metaPeso - peso;
 }
Classes e objetos 7
 void imprimirDados() {
 System.out.println(
 "CPF=" + cpf + ", Nome=" + nome + 
 ", Telefone=" + telefone + ", Idade=" + idade +
 ", Altura=" + altura + "m" + ", Peso=" + peso + "Kg");
 }
}
Observe, no método calcularIMC, que seu tipo retornado é double e, 
ao final do seu bloco de execução, a palavra return seguida do valor a ser 
retornado. O tipo de dado do valor após o return deve ser compatível com 
o tipo de retorno declarado pelo método. Veja também que esse método não 
usa parâmetros de entrada, logo sua lista de parâmetros está vazia.
O método calcularPesoDesejado requer que um parâmetro chamado 
de metaPeso do tipo double seja fornecido para que ele possa realizar seu 
processamento.
O método imprimirDados não retorna qualquer valor específico; ele 
apenas imprime na tela os valores dos atributos do objeto. Por isso, ele é 
declarado com o tipo de retorno void.
Uma vez que uma classe tenha métodos definidos, é possível chamar 
esses métodos dentro do programa Java de forma similar à forma como 
se acessa os atributos de um objeto. Os métodos da classe Cliente criados 
no nosso exemplo anterior podem ser utilizados em um programa Java da 
seguinte forma:
class AppCliente {
 public static void main(String[] args) {
 Cliente novoCliente = new Cliente();
 novoCliente.cpf = "999.888.777-66";
 novoCliente.nome = "Fulano de Tal";
 novoCliente.telefone = "(62)9999-8888";
 novoCliente.idade = 34;
 novoCliente.altura = 1.72;
 novoCliente.peso = 85.3;
Classes e objetos8
 novoCliente.imprimirDados();
 System.out.println("IMC: " + novoCliente.calcularIMC());
 double dif = novoCliente.calcularPesoDesejado(70.0);
 System.out.println("Você está a " + dif + "Kg da su
a meta!");
 }
}
Esse código, além de criar um objeto da classe Cliente denominado no-
voCliente e atribuir valores aos seus atributos, invoca os métodos definidos 
na classe. A saída desse programa é mostrada a seguir:
Depois de estudar os atributos e métodos, você vai ver na próxima seção 
como garantir o seu encapsulamento.
Garantia do encapsulamento para 
as classes
Segundo Schildt (2015), a restrição do acesso a atributos e métodos de uma 
classe é parte fundamental do conceito de encapsulamento na programa-
ção orientada a objetos, pois ajuda a impedir a má utilização de um objeto. 
Quando se restringe o acesso a dados privados apenas por intermédio de um 
conjunto definido de métodos, é possível impedir que valores inapropriados 
sejam atribuídos a esses dados (executando uma verificação, por exemplo). 
Um código de fora da classe não pode definir o valor de um atributo ou executar 
um método privado diretamente. Também é possível controlar exatamente 
como e quando os dados de um objeto serão usados.
Modificadores de acesso
O controle de acesso a atributos e métodos é obtido com o uso de três modi-
ficadores de acesso: public, private e protected. Se nenhum modificador 
de acesso for usado, será presumido o uso da configuração de acesso padrão.
Classes e objetos 9
A visibilidade de um elemento é determinada por sua especificação de 
acesso (private, public, protected ou padrão, sem modificador) e pelo 
pacote em que ele reside. Logo, a visibilidade de um elemento é determinada 
por sua visibilidade dentro de uma classe e por sua visibilidade dentro de 
um pacote.
Um pacote é, basicamente, um agrupamento de classes. Todas as classes 
em Java pertencem a algum pacote. Quando não é especificada uma instrução 
package, o pacote padrão (global) é usado. O pacote padrão não tem nome, 
sendo transparente para o usuário.
Se o atributo e/ou método de uma classe não tiver um modificador de 
acesso explícito, ou seja, se tiver acesso padrão, ele pode ser visto dentro de 
seu pacote, mas não fora dele. Portanto, você usará a especificação de acesso 
padrão para elementos que quiser manter privados para outras classes fora 
do pacote, mas públicos para as classes dentro dele. Atributos e métodos 
declarados explicitamentecomo public podem ser vistos em todos os locais, 
inclusive em classes e pacotes diferentes, pois não há restrição quanto ao seu 
uso ou acesso. Um atributo e/ou método private só pode ser acessado por 
outros atributos e métodos de sua classe. Ele não é afetado por sua associa-
ção a um pacote. Um atributo e/ou método especificado como protected 
pode ser acessado dentro de seu pacote e por todas as subclasses, inclusive 
subclasses de outros pacotes.
Veja a seguir um exemplo do uso dos modificadores de acesso e seu 
impacto no acesso aos atributos e métodos de uma classe.
Exemplo
Vamos implementar a classe DeDentro, que tem atributos declarados como 
public, private, protected e sem modificador (ou seja, acesso padrão). 
Essa classe está inserida em um pacote chamado meupacote. O arquivo 
dessa classe (DeDentro.java) deve estar inserido dentro de uma subpasta 
com o nome meupacote, para que o código funcione corretamente. Dentro 
desse pacote (subpasta), criaremos uma outra classe, denominada DoPacote, 
que tentará acessar os atributos da classe DeDentro. Também vamos criar 
uma terceira classe chamada de DeFora, que ficará de fora do pacote meupa-
cote (ou seja, dentro do pacote padrão de Java). Os arquivos estão organizados 
como mostra a figura a seguir.
Classes e objetos10
Agora observe os códigos das classes:
package meupacote;
public class DeDentro {
 public int A;
 private double B;
 protected char C;
 String D; //Acesso padrão
 public void atribuirValores() {
 A = 1;
 B = 2.0;
 C = '3';
 D = "4.0";
 }
 public void imprimirAtributos() {
 System.out.println("A: " + A);
 System.out.println("B: " + B);
 System.out.println("C: " + C);
 System.out.println("D: " + D);
 }
}
A classe DeDentro tem quatro atributos (A, B, C, D) de tipos variados, 
cada um com um modificador de acesso. Ela também declara dois métodos 
public: atribuirValores, que insere valores arbitrários nos seus atributos, 
e imprimirAtributos, que imprime na tela os valores dos atributos da 
Classes e objetos 11
classe. Note que qualquer atributo, independentemente do tipo de modifi-
cador de acesso, é acessível de dentro da classe DeDentro.
Observe agora a classe DoPacote, inserida no mesmo pacote da classe 
DeDentro:
package meupacote;
public class DoPacote {
 public static void main(String[] args) {
 DeDentro objeto = new DeDentro();
 objeto.A = 10; //OK: o atributo A foi declarado como public
 //objeto.B = 7.0; //ERRO: o atributo B foi declarado como private
 objeto.C = 'R'; //OK: o atributo C foi declarado como protected
 objeto.D = "Teste de acesso"; //OK: o atributo D tem acesso padrão
 
 objeto.atribuirValores();
 objeto.imprimirAtributos();
 }
}
Essa classe cria um objeto da classe DeDentro e tenta acessar seus 
atributos e métodos. Por estar no mesmo pacote (meupacote) da classe 
DeDentro, ela pode acessar tudo que é declarado como public, protected 
e com acesso padrão, mas não pode acessar o atributo B, que foi declarado 
como private. Quando ela chama os métodos atribuirValores e impri-
mirAtributos, entretanto, o valor de B é atribuído e exibido na tela. Isso 
ocorre porque quem está acessando os valores de B nesse caso são métodos 
definidos na própria classe DeDentro.
Por fim, veja o código para a classe DeFora, criada no pacote padrão, 
ou seja, fora do pacote meupacote:
import meupacote.DeDentro;
public class DeFora {
 public static void main(String[] args) {
 DeDentro objeto = new DeDentro();
 objeto.A = 10; //OK: o atributo A foi declarado como public
 //objeto.B = 7.0; //ERRO: o atributo B foi declarado como private
Classes e objetos12
 //objeto.C = 'R'; //ERRO: o atributo C foi declarado como protected
 //objeto.D = "Teste de acesso"; //ERRO: o atributo D tem acesso padrão
 
 objeto.atribuirValores();
 objeto.imprimirAtributos();
 }
}
Como estão em pacotes diferentes, para poder criar um objeto da classe 
DeDentro, a classe DeFora precisa importar a classe por meio do comando 
import. Essa classe só pode acessar diretamente o que foi declarado como 
public no objeto da classe DeDentro criado.
A linguagem Java tem ainda várias formas de uso para métodos e atributos. 
Para uma referência mais completa, recomenda-se o estudo da documentação 
padrão da linguagem Java, disponível no site da Oracle (THE JAVA tutorials, 
c2021).
Referências
DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Prentice-Hall, 2010.
SCHILDT, H. Java para iniciantes: crie, compile e execute programas Java rapidamente. 
6. ed. Porto Alegre: Bookman, 2015.
THE JAVA tutorials. Oracle, c2021. Disponível em: https://docs.oracle.com/javase/
tutorial/essential/. Acesso em: 18 ago. 2021. 
Os links para sites da web fornecidos neste capítulo foram todos 
testados, e seu funcionamento foi comprovado no momento da 
publicação do material. No entanto, a rede é extremamente dinâmica; suas 
páginas estão constantemente mudando de local e conteúdo. Assim, os editores 
declaram não ter qualquer responsabilidade sobre qualidade, precisão ou 
integralidade das informações referidas em tais links.
Classes e objetos 13

Continue navegando