Vererbung

Ruby unterstützt nur einfache Vererbung.

class Gebilde
  def initialize(x, y)
    @x, @y = x, y
  end

  attr_accessor :x, :y
end

class Rechteck < Gebilde
  def initialize(x, y, l, b)
    super(x, y)
    @l, @b = l, b
  end

  def flaeche
    @l * @b
  end
end

class Kreis < Gebilde
  def initialize(x, y, r)
    super(x, y)
    @r = r
  end

  def flaeche
    2 * Math::PI * @r**2
  end
end

class Komposition < Gebilde
  def initialize(gebilde)
    @gebilde = gebilde
  end

  def flaeche
    a = 0
    @gebilde.each { |g| a += g.flaeche }
    a
  end
end

rechteck = Rechteck.new(1, 1, 5, 3)
kreis = Kreis.new(1, 9, 4)
gruppe = Komposition.new([kreis, rechteck])
puts "Gesamtfläche: #{gruppe.flaeche}"

Ergebnis:
Gesamtfläche: 115.5309649148734

codebloecke.rb