Buscar

Aula 14 Introdução à 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 17 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 17 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 17 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

Aula 14 
 
Introdução à Programação Orientada a 
Objetos 
 
 
Prof. Jalerson Lima 
 
2 
Apresentação 
Nessa aula iremos dar início aos estudos da Programação Orientada a Objetos, iniciando 
compreendendo os conceitos de objetos, classes, métodos e atributos. Aprenderemos também 
como criar cada e utilizar cada uma dessas estruturas. 
Objetivos 
1. Compreender o que é e como funciona a Programação Orientada a Objetos; 
2. Compreender os conceitos de objetos, classes, métodos e atributos; 
3. Aprender como criar e utilizar objetos, classes métodos e atributos; 
4. Exercitar os conhecimentos através de exercícios práticos. 
 
3 
1. Introdução 
A Programação Orientada a Objetos (POO) é um paradigma de programação baseado no 
conceito de objetos. A ideia geral desse paradigma é tentar tornar a programação mais próxima 
do mundo real, e é por isso que o conceito de objetos é tão importante. Um objeto pode ser 
qualquer coisa do mundo real, que possui comportamento (métodos) e características 
(atributos). Se você parar para pensar, tudo no mundo tem comportamento e características. 
Através da Programação Orientada a Objetos nós conseguimos criar elementos do mundo 
real na programação, definido as suas características e comportamento. Portanto, podemos 
criar, no mundo da programação, qualquer coisa existente no mundo real. A ideia da 
Programação Orientada a Objetos é que os sistemas de software sejam compostos por um 
conjunto de objetos que trabalhem juntos para atingir um objetivo em comum. 
Você consegue imaginar algo do mundo real que possa ser representado por um objeto 
com características e comportamento? Vamos a alguns exemplos: uma pessoa poderia ser 
representada por um objeto, em que sua altura, peso, nome, cor e sexo poderiam ser alguns 
exemplos de características dessa pessoa. Andar, correr, falar, pular, comer poderiam ser 
alguns exemplos de comportamento dessa pessoa. 
Uma conta bancária também poderia ser um objeto, em que seu número, seu saldo e o 
tipo de conta poderiam ser características. Transferir, encerrar, debitar e creditar poderiam 
ser comportamentos dessa conta. Lembre-se: qualquer coisa do mundo real pode ser 
representada em objetos, sejam elas fisicamente tangíveis ou abstratas. 
Alan Kay, considerado um dos pais da Programação Orientada a Objetos, formulou a 
analogia “algébrico-biológica”, que diz que um software deve funcionar como um organismo 
vivo, em que cada célula deve trabalhar com outras a fim de alcançar um objetivo, mas 
funcionando de forma autônoma. A cooperação entre as células se daria através de mensagens 
trocadas entre as células. Na analogia de Alan Kay, é fácil perceber que as células seriam os 
objetos que trabalham juntos, trocando mensagens entre si, para desempenhar uma tarefa. 
A partir da aula de hoje começaremos a estudar a Programação Orientada a Objetos em 
Ruby. Aprenderemos como criar objetos, como definir seu comportamento e suas 
características, como fazê-los trabalhar juntos para resolver um problema, além de aprender 
conceitos e técnicas do paradigma. 
2. Classes 
O segundo importante conceito sobre o paradigma Orientado a Objetos é o conceito de 
classes. Você pode imaginar a classe como sendo o molde para criar objetos, pois é na classe 
que definimos o comportamento e as características dos objetos. Todo objeto está sempre 
associado a uma classe, portanto todo objeto pertence a uma classe. É muito comum nos 
referirmos a objetos como instâncias de uma classe. Os conceitos de objeto e classe estão tão 
ligados que é muito comum, ao nos referimos a objetos, mencionarmos também a classe: “um 
objeto da classe Pessoa”, “objetos da classe Conta”, etc. 
 
4 
O Exemplo de código 1 ilustra a sintaxe básica para criação de uma classe em Ruby. 
1 
2 
3 
class <NomeDaClasse> 
 // Atributos e métodos 
end 
Exemplo de código 1 – Sintaxe básica de uma classe 
Para criar uma classe, inicialmente use a palavra-chave class seguido do nome da classe. 
Por convenção, os nomes das classes em Ruby seguem o estilo CamelCase. Isso significa que os 
nomes das classes devem ser escritos com a primeira letra de cada palavra em maiúsculo. Por 
exemplo: Pessoa, ContaBancaria, ProdutoImportado, UnidadeBasicaDeSaude, etc. No corpo da 
classe, entre o class (linha 1) e o end (linha 3), é o local onde definimos os atributos 
(características) e métodos (comportamento). Costuma-se dizer que atributos e os métodos 
compõem os membros da classe. 
Para melhor ilustrar os conceitos e técnicas da Programação Orientada a Objetos, iremos 
utilizar classes e objetos que representem elementos de um sistema bancário. Observe o 
Exemplo de código 2, que ilustra a definição da classe ContaBancaria. 
1 
2 
class ContaBancaria 
end 
Exemplo de código 2 – Definição da classe ContaBancaria 
A classe ContaBancaria, definida no Exemplo de código 2, é uma construção básica de 
uma classe na qual ainda não criamos nenhum atributo ou método, mas vamos fazê-lo em breve. 
Agora que criamos a classe ContaBancaria, já podemos criar objetos dela. Para isso, basta 
usar o método new conforme ilustrado no Exemplo de código 3. 
1 
2 
3 
4 
class ContaBancaria 
end 
 
conta = ContaBancaria.new 
Exemplo de código 3 – Definição e criação de um objeto da classe ContaBancaria 
No Exemplo de código 3, definimos a classe ContaBancaria nas linhas 1 e 2, e na linha 
4 usamos ContaBancaria.new para criar um novo objeto dessa classe, que foi armazenado na 
variável conta. Você pode estar se perguntando de onde veio o método new, já que nós não o 
definimos na classe ContaBancaria. Ao definirmos uma classe qualquer em Ruby, a própria 
linguagem se encarrega de incluir automaticamente vários métodos e atributos nela, e um 
desses métodos é o new. 
5 
Atividade 14.1 
Crie a classe Pessoa e em seguida crie um objeto dessa classe. 
 
3. Métodos 
Os métodos são funções definidas dentro das classes, que juntos irão compor o 
comportamento dos objetos dessa classe. Portanto, os métodos definem as ações que poderão 
ser executadas pelos objetos, e tudo aquilo que estudamos sobre as funções (como cria-las, 
como receber parâmetros, como retornar valores, etc.) são aplicáveis para os métodos. 
Observe o Exemplo de código 4, que ilustra a classe Carro com os métodos ligar, 
desligar e acelerar. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
class Carro 
 
 def ligar 
 puts "Ligando o carro..." 
 end 
 
 def desligar 
 puts "Desligando o carro..." 
 end 
 
 def acelerar(velocidade) 
 puts "Acelerando para #{velocidade} Km/h" 
 end 
 
end 
Exemplo de código 4 – Métodos da classe Carro 
Observe que a definição dos métodos na classe é idêntica à definição de funções que 
estudamos anteriormente, exceto pelo fato de que os métodos são sempre definidos dentro da 
classe. O Exemplo de código 5 ilustra como criar um objeto da classe Carro (linha 3) e como 
chamar (ou invocar) os métodos ligar, acelerar e desligar (linhas 4 a 6). O Exemplo de 
código 5 omite a definição da classe Carro para poupar espaço. 
1 
2 
3 
4 
5 
6 
# Omitindo a definição da classe Carro 
 
carro = Carro.new 
carro.ligar 
carro.acelerar(60) 
carro.desligar 
Exemplo de código 5 – Chamando métodos da classe carro 
6 
Diferentemente das funções, em que bastava usar o nome da função para chama-la, e 
ocasionalmente passar alguns parâmetros, os métodos precisam ser chamados sobre objetos. É 
por isso que, entre as linhas 4 e 6, os métodos ligar, acelerar e desligar são executados 
sobre a variável carro (carro.ligar, carro.acelerar e carro.desligar), que guarda o 
objeto da classe Carro. 
Ao executar o Exemplo de código5, o resultado observado deve ser esse apresentado 
abaixo. 
Ligando o carro... 
Acelerando para 60 Km/h 
Desligando o carro... 
 
Quais poderiam ser os métodos da classe ContaBancaria? Vamos começar definido três: 
sacar, depositar e transferir. Observe a definição desses métodos no Exemplo de código 
6. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
class ContaBancaria 
 
 def sacar(valor) 
 end 
 
 def depositar(valor) 
 end 
 
 def transferir(valor, conta_destino) 
 end 
 
end 
Exemplo de código 6 – Definição dos métodos da classe ContaBancaria 
O método sacar recebe um parâmetro (valor) que será o valor a ser sacado da conta. 
O método depositar também recebe um parâmetro (valor) que será o valor a ser depositado 
na conta. O método transferir recebe dois parâmetros: valor, que é o valor a ser transferido 
e conta_destino, que é um objeto da classe ContaBancaria que irá receber o valor. 
Concluiremos a implementação desses métodos em breve. 
Atividade 14.2 
Na classe Pessoa, crie um método chamado falar que recebe um valor como 
parâmetro e mostre esse valor na tela. 
 
 
 
7 
3.1 O método initialize 
O método initialize é um método especial que será executado quando o método new for 
executado. Ou seja, initialize é executado quando um novo objeto da classe for criado, e ele 
normalmente é usado para definir os valores iniciais dos atributos do objeto que está sendo 
criado. 
Observe o Exemplo de código 7, que ilustra o método initialize da classe Carro. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
class Carro 
 
 def initialize(modelo, ano, marca, cor) 
 # Criando o objeto 
 end 
 
end 
 
gol = Carro.new("Nova Geração", 2015, "Volkswagen", "Branco") 
uno = Carro.new("Novo Uno", 2016, "Fiat", "Vermelho") 
Exemplo de código 7 – Método initialize da classe Carro 
O método initialize recebe quatro parâmetros: modelo, ano, marca e cor. Os 
parâmetros recebidos serão atribuídos aos atributos do objeto que está sendo criado. Como 
ainda não estudamos como trabalhar com atributos, iremos implementar o método initialize 
em breve. Observe, nas linhas 9 e 10 do Exemplo de código 7, que executamos o método new 
para criar dois objetos, e passamos os parâmetros definidos no método initialize. 
Dando continuidade ao exemplo da nossa classe ContaBancaria, observe o Exemplo de 
código 8, que ilustra a definição do método initialize, e que irá receber dois parâmetros: 
numero, que será o número da conta, e saldo_inicial, que será o saldo inicial disponível na 
conta quando ela for criada. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
class ContaBancaria 
 
 def initialize(numero, saldo_inicial) 
 end 
 
 def sacar(valor) 
 end 
 
 def depositar(valor) 
 end 
 
 def transferir(valor, conta_destino) 
 end 
 
end 
Exemplo de código 8 – Definição do método initialize da classe ContaBancaria 
8 
Atividade 14.3 
Na classe Pessoa, crie o método initialize, que recebe os parâmetros nome, idade, 
altura e peso. 
 
4. Atributos 
Atributos são propriedades definidas na classe que irão compor as características dos 
objetos dessa classe. Por exemplo: cor, marca, modelo, ano e quantidade de portas poderiam 
ser atributos da classe Carro; preço, peso, altura e largura poderiam ser atributos de objeto da 
classe Produto. 
Para definir um atributo na classe, use o @ seguido do nome do atributo. Os nomes dos 
atributos seguem as regras de nomenclatura de variáveis. Observe as linhas 4, 5, 6 do Exemplo 
de código 9, nas quais foram definidos os atributos @modelo, @ano, @marca e @cor. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
class Carro 
 
 def initialize(modelo, ano, marca, cor) 
 @modelo = modelo 
 @ano = ano 
 @marca = marca 
 @cor = cor 
 end 
 
end 
 
gol = Carro.new("Nova Geração", 2015, "Volkswagen", "Branco") 
uno = Carro.new("Novo Uno", 2016, "Fiat", "Vermelho") 
Exemplo de código 9 – Definido os atributos modelo, ano, marca e cor da classe Carro 
Você pode estar se perguntando qual é a diferença entre @modelo e modelo, @ano e ano, 
@marca e marca, @cor e cor. O @modelo, @ano, @marca e @cor são atributos da classe Carro 
e serão características dos objetos dessa classe. Os atributos estão disponíveis em toda a classe, 
enquanto modelo, ano, marca e cor são parâmetros recebidos pelo método initialize, e, 
portanto, só estão disponíveis dentro desse método. 
 
9 
Observe, no Exemplo de código 10, a implementação do método initialize da classe 
ContaBancaria. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
class ContaBancaria 
 
 def initialize(numero, saldo_inicial) 
 @numero = numero 
 @saldo = saldo_inicial 
 end 
 
 def sacar(valor) 
 end 
 
 def depositar(valor) 
 end 
 
 def transferir(valor, conta_destino) 
 end 
 
end 
 
conta1 = ContaBancaria.new(1, 500) 
conta2 = ContaBancaria.new(2, 1000) 
Exemplo de código 10 – Implementação do método initialize da classe ContaBancaria 
O método initialize da classe ContaBancaria recebe dois parâmetros: numero e 
saldo_inicial. O parâmetro numero foi associado ao atributo @numero, enquanto o parâmetro 
saldo_inicial foi atribuído a @saldo. 
Atividade 14.4 
No método initialize da classe Pessoa, atribua os valores recebidos por parâmetro aos 
atributos @nome, @idade, @altura e @peso. 
 
 
Agora já podemos implementar os métodos da classe ContaBancaria. Vamos começar 
pelo método depositar, que é o mais simples. Como funciona o depósito em uma conta 
bancária? O usuário fornece um valor a ser depositado, que será somado ao saldo da conta. O 
valor a ser depositado pelo usuário é fornecido pelo parâmetro valor, e o saldo da conta é 
guardado no atributo @saldo, portanto o método depositar só precisa somar valor e @saldo, 
guardar o resultado em @saldo e retornar verdadeiro para indicar que a operação foi realizada 
com sucesso. 
 
10 
Observe o Exemplo de código 11, que ilustra a implementação do método depositar. 
Observe também que omitimos os outros métodos da classe ContaBancaria para poupar espaço. 
1 
2 
3 
4 
5 
6 
7 
8 
class ContaBancaria 
 ... 
 def depositar(valor) 
 @saldo = @saldo + valor 
 return true 
 end 
 ... 
end 
Exemplo de código 11 – Implementação do método depositar 
Implementado o método depositar, vamos testá-lo usando o código ilustrado no 
Exemplo de código 12. 
1 
2 
3 
4 
5 
# Omitindo a definição da classe ContaBancaria 
 
conta = ContaBancaria.new(1, 500) 
conta.depositar(200) 
puts "Saldo = R$ #{conta.saldo}" 
Exemplo de código 12 – Testando o método depositar 
O resultado apresentado pela execução do Exemplo de código 12 deve ser esse 
apresentado abaixo, pois a conta foi criada inicialmente com R$ 500 reais, e com o depósito de 
R$ 200 reais, o saldo deve ficar em R$ 700 reais. 
Saldo = R$ 700 
 
O segundo método da classe ContaBancaria que iremos implementar é o sacar. Como 
funciona o saque numa conta bancária? O usuário fornece um valor a ser sacado, que será 
debitado do seu saldo apenas se o saldo for suficiente para o valor solicitado. O valor a ser 
sacado é fornecido através do parâmetro valor, e o saldo da conta está guardado no atributo 
@saldo. Portanto o método sacar precisa, primeiramente, verificar se o valor é menor ou 
igual ao @saldo. Caso seja, é preciso debitar o valor do @saldo e retornar verdadeiro para 
indicar que o saque foi realizado. Caso contrário, o método apenas retorna falso para indicar 
que não há saldo. 
 
11 
Observe o Exemplo de código 13, que ilustra a implementação do método sacar. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
class ContaBancaria... 
 def sacar(valor) 
 if valor <= @saldo 
 @saldo = @saldo – valor 
 return true 
 else 
 return false 
 end 
 end 
 ... 
end 
Exemplo de código 13 – Implementação do método sacar 
Agora vamos testar o método sacar usando o código ilustrado no Exemplo de código 14. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
conta = ContaBancaria.new(1, 500) 
 
if conta.sacar(200) 
 puts "Saque realizado com sucesso!" 
else 
 puts "Saldo insuficiente!" 
end 
 
puts "Saldo = R$ #{conta.saldo}" 
 
if conta.sacar(500) 
 puts "Saque realizado com sucesso!" 
else 
 puts "Saldo insuficiente!" 
end 
Exemplo de código 14 - Testando o método sacar 
A conta foi criada inicialmente com saldo de R$ 500 reais (linha 1). Como o método 
sacar retorna verdadeiro ou falso, usamos esse método na condição do if para poder indicar 
se o saque foi realizado ou não. A primeira operação de saque (linha 3), no valor de R$ 200 
reais, deve ser bem-sucedida, e, portanto, o valor mostrado na linha 9 deve ser de R$ 300 reais. 
A segunda operação de saque (linha 11) deve falhar pois não haverá saldo suficiente. Observe 
abaixo o resultado da execução do Exemplo de código 14. 
Saque realizado com sucesso! 
Saldo = R$ 300 
Saldo insuficiente! 
 
 
12 
O último método a ser implementado é o transferir. Como funciona a transferência 
de valores entre contas? Primeiramente é preciso verificar se a conta de origem tem saldo 
suficiente para transferir o valor solicitado. Caso haja, o saldo é debitado na conta de origem 
e creditado na conta de destino, e caso não haja, uma mensagem é emitida informando que 
não há saldo suficiente. O método transferir recebe dois parâmetros: o primeiro, valor, é o 
valor a ser transferido da conta de origem para a conta de destino, e o segundo parâmetro, 
conta_destino, é o objeto da classe ContaBancaria que irá receber o valor transferido. 
Confira a implementação do método transferir no Exemplo de código 15. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
class ContaBancaria 
 ... 
 def transferir(valor, conta_destino) 
 if valor <= @saldo 
 @saldo = @saldo - valor 
 conta_destino.saldo = conta_destino.saldo + valor 
 return true 
 else 
 return false 
 end 
 end 
 ... 
end 
Exemplo de código 15 – Implementação do método transferir 
Com a implementação do método transferir, a nossa classe ContaBancaria está 
quase pronta! Está faltando apenas um detalhe, e para descobrir o que falta, vamos tentar usar 
o método transferir, conforme ilustra o Exemplo de código 16. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
# Omitindo a definição da classe ContaBancaria 
 
conta1 = ContaBancaria.new(1, 500) 
conta2 = ContaBancaria.new(2, 1000) 
 
if conta1.transferir(100, conta2) 
 puts "Transferência realizada com sucesso!" 
else 
 puts "Saldo insuficiente!" 
end 
 
puts "Saldo da conta1 = R$ #{conta1.saldo}" 
puts "Saldo da conta2 = R$ #{conta2.saldo}" 
Exemplo de código 16 – Chamando o método transferir 
Observe, no Exemplo de código 16, que criamos dois objetos (conta1 e conta2), 
executamos o método transferir sobre o objeto conta1 e passamos como parâmetros o valor 
100, que é o valor a ser transferido, e o objeto conta2, que é a conta de destino. Como o 
método transferir também retorna verdadeiro ou falso, usamos ele na condição do if para 
13 
indicar se a transferência foi realizada ou não. Ao executarmos esse código, receberemos a 
seguinte mensagem de erro. 
exemplo15.14.rb:23:in `transferir': undefined method `saldo' for 
#<ContaBancaria:0x00000002edc2c0 @numero=2, @saldo=1000> (NoMethodError) 
 from exemplo1.rb:34:in `<main>' 
 
O erro indica que houve um problema na linha 23, dentro da implementação do método 
transferir. A mensagem é a seguinte: undefined method ‘saldo’ for #<ContaBancaria:. 
Essa mensagem significa que o método saldo foi chamado, mas esse método não existe. A linha 
23, mencionada na mensagem de erro, é essa apresentada abaixo. 
conta_destino.saldo = conta_destino.saldo + valor 
 
Nesse momento você pode estar se perguntando: “Como assim método ‘saldo’? O saldo 
não era um atributo?”, e a resposta para essa pergunta é “sim”. O saldo é um atributo da classe 
ContaBancaria, e, portanto, também é um atributo de todos os objetos dessa classe. Então 
qual foi o problema? 
O problema é que não podemos simplesmente acessar um atributo de um objeto dessa 
forma: conta_destino.saldo. Para ter acesso ao saldo da conta de destino (conta_destino), 
precisamos definir métodos que nos permitam visualizar e modificar o atributo @saldo da conta 
de destino. 
Atividade 14.5 
Na classe Pessoa, crie um método chamado maioridade? (com interrogação no final), 
que retorna verdadeiro caso a @idade seja maior ou igual a 18 anos, e falso caso contrário. 
 
 
4.1 Acessando e manipulando atributos externamente 
Quando um objeto da classe A (uma classe qualquer) tenta acessar ou manipular 
atributos de outro objeto da classe B, a classe B precisa fornecer métodos que permitam isso. 
É por isso que nós não conseguimos fazer o método transferir funcionar corretamente: o 
objeto conta1 tentou acessar e modificar o atributo @saldo do objeto conta2. 
Portanto, precisamos criar dois métodos na classe ContaBancaria: um que permita 
acessar o atributo @saldo e outro que permita modifica-lo. Por convenção, esses métodos 
seguem um padrão de nomenclatura: o método que permite acessar o valor do atributo tem o 
mesmo nome do atributo; o método que permite alterar o valor do atributo também tem o 
mesmo nome do atributo, mas seguido do sinal de igual (=). Confira a implementação desses 
métodos para o atributo @saldo no Exemplo de código 17. 
14 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
class ContaBancaria 
 ... 
 def saldo # mesmo nome do atributo 
 return @saldo 
 end 
 
 def saldo=(saldo) # mesmo nome do atributo seguido de = 
 @saldo = saldo 
 end 
 ... 
end 
Exemplo de código 17 – Implementação dos métodos para acessar e manipular o atributo saldo 
Seguindo o padrão de nomenclatura, criamos o método saldo (linhas 3 a 5) que permite 
acessar o valor do atributo @saldo. O segundo método, saldo= (linhas 7 a 9), permite modificar 
o valor do atributo @saldo pelo valor passado como parâmetro (saldo). Se você tentar executar 
o Exemplo de código 16, verá que agora ele irá funcionar e o resultado deverá ser esse 
apresentado abaixo. 
Transferência realizada com sucesso! 
Saldo da conta1 = R$ 400 
Saldo da conta2 = R$ 1100 
 
Observe que a conta1, criada inicialmente com saldo de R$ 500 reais, ficou com saldo 
de R$ 400 reais após a transferência, e a conta2, criada inicialmente com R$ 1000 reais, ficou 
com R$ 1100 reais após a transferência, portanto o valor foi de fato transferido entre as contas. 
Pronto! Nossa classe ContaBancaria está funcionando perfeitamente! Mas talvez você 
tenha se incomodado com um detalhe: imagine se a nossa classe tivesse 10 atributos e você 
tivesse que implementar os métodos de acesso e manipulação de cada um desses atributos. 
Você teria que implementar 20 métodos, o que seria um trabalho bastante entediante. 
Para a nossa sorte a linguagem Ruby nos dá alguns atalhos. Ao invés de implementar o 
método saldo na classe ContaBancaria, podemos simplesmente fazer conforme ilustrado no 
Exemplo de código 18. 
1 
2 
3 
4 
class ContaBancaria 
 attr_reader :saldo 
 ... 
end 
Exemplo de código 18 – Substituindo o método saldo pelo attr_reader 
O attr_saldo :saldo substitui a implementação do método que permite acessar o 
atributo @saldo. Portanto, ao fazer isso, podemos simplesmente apagar o método saldo.15 
Será que existe algo semelhante para o método que modifica o valor do atributo? É claro 
que sim! Confira no Exemplo de código 19. 
1 
2 
3 
4 
5 
class ContaBancaria 
 attr_reader :saldo 
 attr_writer :saldo 
 ... 
end 
Exemplo de código 19 – Substituindo o método saldo pelo attr_writer 
O attr_writer :saldo substitui a implementação do método saldo=, que permite 
modificar o valor do atributo @saldo. Portanto, ao fazer isso, também podemos apagar o 
método saldo=. Ainda não ficou satisfeito? Não tem problema! Você pode substituir o 
attr_reader :saldo e o attr_writer :saldo por apenas attr_accessor :saldo, conforme 
ilustrado no Exemplo de código 20. 
1 
2 
3 
4 
class ContaBancaria 
 attr_accessor :saldo 
 ... 
end 
Exemplo de código 20 – Substituindo o attr_reader e o attr_writer pelo attr_accessor 
Pronto! Finalizamos a implementação da classe ContaBancaria. Confira a 
implementação completa dessa classe no Exemplo de código 21 (próxima página). 
 
16 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
39 
31 
32 
33 
34 
class ContaBancaria 
 attr_accessor :saldo 
 attr_accessor :numero 
 
 def initialize(numero, saldo_inicial) 
 @numero = numero 
 @saldo = saldo_inicial 
 end 
 
 def sacar(valor) 
 if valor <= @saldo 
 @saldo = @saldo - valor 
 return true 
 else 
 return false 
 end 
 end 
 
 def depositar(valor) 
 @saldo = @saldo + valor 
 return true 
 end 
 
 def transferir(valor, conta_destino) 
 if valor <= @saldo 
 @saldo = @saldo - valor 
 conta_destino.saldo = conta_destino.saldo + valor 
 return true 
 else 
 return false 
 end 
 end 
 
end 
Exemplo de código 21 – Implementação completa da classe ContaBancaria 
Atividade 14.6 
Na classe Pessoa, use o attr_accessor para os atributos @nome, @idade, @peso e 
@altura. 
 
 
17 
Atividade 14.7 
Na classe Pessoa, crie um método chamado imc, que calcula o IMC (Índice de Massa 
Corporal) com base na @altura e no @peso. A fórmula do IMC é peso / altura². 
 Se o resultado for abaixo de 17: muito abaixo do peso; 
 Se o resultado for entre 17 e 18,49: abaixo do peso; 
 Se o resultado for entre 18,5 e 24,99: peso normal; 
 Se o resultado for entre 25 e 29,99: um pouco acima do peso; 
 Se o resultado for entre 30 e 34,99: um pouco obeso; 
 Se o resultado for entre 35 e 39,99: obesidade severa; 
 Se o resultado for acima de 40: obesidade mórbida. 
Resumindo 
Essa aula apresentou alguns conceitos da Programação Orientada a Objetos: objetos, 
classes, atributos e métodos. Aprendemos também como criar e utilizar essas estruturas para 
construir pequenos programas. 
Referências 
POINT, T. Ruby Tutorial. Tutorials Point, 2015. Disponivel em: 
<http://www.tutorialspoint.com/ruby/>. Acesso em: 12 nov. 2015. 
RANGEL, E. Conhecendo Ruby. [S.l.]: Leanpub, 2014. 
SOUZA, L. Ruby - Aprenda a programar na linguagem mais divertida. 1ª. ed. São Paulo: 
Casa do Código, v. I, 2012. 
WIKIPÉDIA. Object-oriented Programming. Wikipédia, 2015. Disponivel em: 
<https://en.wikipedia.org/wiki/Object-oriented_programming>. Acesso em: 24 fev. 2015.

Continue navegando