Sistema de simulação de fabricantes de carros
Publicado por Luciano Alexandre de Farias Silva (última atualização em 27/11/2012)
[ Hits: 4.660 ]
Homepage: http://www.tecsource.blogspot.com.br/
Esse é um script bem interessante, que busca simular um sistema de controle de fabricantes de carros. O script traz em seu código a utilização de alguns conceitos de orientação a objetos bem interessantes, como: herança, classes, métodos etc.
# Carro.rb
#
# www.tecsource.blogspot.com.br
#
# Created by Luciano Alexandre on 13/11/12.
class Automovel
attr_reader :marca, :modelo, :cor, :tanque
attr_writer :cor
def initialize(marca,modelo,cor,tanque)
@marca = marca
@modelo = modelo
@cor = cor
@tanque = tanque
end
def to_s
"marca:#{@marca} modelo:#{@modelo} cor:#{@cor} capac.tanque#{@tanque}"
end
end
class Carro < Automovel
def to_s
"Carro:"+super
end
end
class Caminhao < Automovel
def to_s
"Caminhao:"+super
end
end
class Montadora
attr_reader :nome, :modelos, :qtde_fabricados
@@qtde_total_de_automoveis = 0
def initialize(nome,modelos)
@nome = nome
@modelos = modelos
@qtde_fabricados = 0
end
def fabrica(modelo,cor)
if !@modelos.include? modelo
puts "ATENCAO! A montadora #{@nome} nao fabrica o modelo #{modelo}"
return nil
end
puts "Fabricando um #{modelo} na montadora #{@nome}..."
@@qtde_total_de_automoveis += 1
@qtde_fabricados += 1
# se tiver um tanque com menos de 100 litros, e ́ um carro
if @modelos[modelo] < 100
Carro::new(@nome,modelo,cor,@modelos[modelo])
else
Caminhao::new(@nome,modelo,cor,@modelos[modelo])
end
end
def Montadora.qtde_total_de_automoveis
@@qtde_total_de_automoveis
end
end
# criando as montadoras
volks = Montadora::new("Volkswagen",{"Gol"=>50,"Golf"=>55,"Polo"=>45,"17210C"=>275})
ford = Montadora::new("Ford",{"Ka"=>42,"Fiesta"=>42,"Focus"=>55,"C-815"=>150})
# criando automoveis da Volkswagen (com um carrinho ali no meio)
automoveis_volks = []
automoveis_volks.push(volks.fabrica("Gol", :azul))
automoveis_volks.push(volks.fabrica("Golf", :preto))
automoveis_volks.push(volks.fabrica("Ka", :verde))
automoveis_volks.push(volks.fabrica("17210C",:branco))
puts "#{volks.nome} fabricou #{volks.qtde_fabricados} automoveis ate o momento"
automoveis_volks.each {|v| puts v unless v.nil?}
puts
# criando os automoveis da Ford
automoveis_ford = []
automoveis_ford.push(ford.fabrica("Ka",:verde))
automoveis_ford.push(ford.fabrica("Fiesta",:vermelho))
automoveis_ford.push(ford.fabrica("Focus",:preto))
automoveis_ford.push(ford.fabrica("C-815",:branco))
puts "#{ford.nome} fabricou #{ford.qtde_fabricados} automoveis ate o momento"
automoveis_ford.each {|v| puts v unless v.nil?}
puts
puts "Qtde total de automoveis no mundo: #{Montadora::qtde_total_de_automoveis}"
Crivo de Eratóstenes Simples em Ruby
Exemplo de utilização de métodos em Ruby
Faça uma lista com o nome de pessoas
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
Servidor de DNS BIND Ubuntu server (4)
Como programar um sistema de controle para distribuições linux em c? (2)
Compartilhar ZEBRA ZD220 na rede (2)
Como programar um software que seja utilizado para coleta de dados em ... (1)









