Sistema de simulação de fabricantes de carros
Publicado por Luciano Alexandre de Farias Silva (última atualização em 27/11/2012)
[ Hits: 4.609 ]
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}"
Web Crawler em Ruby com Open-URI e Nokogiri
Módulo DBI para acesso a dados no Ruby
Obtendo o IP público (Internet) usando o Ruby
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









