Menu
Coddy logo textTech

Toplam Alan

Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 60 / 70.

challenge icon

Görev

Kolay

ShapeCollection'ınıza güçlü bir özellik ekleyelim: içerdiği tüm şekillerin toplam alanını hesaplama yeteneği. Polimorfizmin (çok biçimlilik) gerçekten parladığı yer burasıdır: koleksiyonunuz, bir şeklin dikdörtgen mi yoksa daire mi olduğunu bilmeden herhangi bir şekil üzerinde :getArea() metodunu çağırabilir.

Mevcut proje dosyalarınızın üzerine inşa etmeye devam edeceksiniz:

  • Shape.lua: Temel Shape sınıfınız (değişmedi).
  • Rectangle.lua: :getArea() ve :getPerimeter() metodlarına sahip Rectangle sınıfınız.
  • Circle.lua: :getArea() ve :getPerimeter() metodlarına sahip Circle sınıfınız.
  • ShapeCollection.lua: Bir :getTotalArea() metodu ekleyerek koleksiyon sınıfınızı genişletin. Bu metod, saklanan tüm şekiller üzerinde gezinmeli, her biri için :getArea() metodunu çağırmalı ve tüm alanların toplamını döndürmelidir.
  • main.lua: Modüllerinizi dahil edin (require), girdiden boyutları okuyun, bir Rectangle ve bir Circle oluşturun, her ikisini de bir ShapeCollection'a ekleyin ve ardından koleksiyondaki tüm şekillerin toplam alanını yazdırın.

Bu yaklaşımın güzelliği, :getTotalArea() metodunun dikdörtgenler ve daireler için ayrı bir mantığa ihtiyaç duymamasıdır; koleksiyondaki her şeklin bir :getArea() metoduna sahip olduğuna güvenir. Daha sonra üçgenler, altıgenler veya başka herhangi bir şekil ekleyebilirsiniz ve toplam alan hesaplaması herhangi bir değişiklik yapılmadan çalışmaya devam eder.

Girdi: Üç satır—genişlik (sayı), yükseklik (sayı) ve yarıçap (sayı).

Çıktı: Koleksiyondaki tüm şekillerin toplam alanını içeren tek bir satır.

Kendin dene

-- Rectangle modülünü dahil et
local Rectangle = require('Rectangle')

-- Circle modülünü dahil et
local Circle = require('Circle')

-- ShapeCollection modülünü dahil et
local ShapeCollection = require('ShapeCollection')

-- Girdiden genişlik ve yükseklik değerlerini oku
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- Verilen boyutlarla yeni bir Rectangle örneği oluştur
local rect = Rectangle:new(width, height)

-- Verilen yarıçap ile yeni bir Circle örneği oluştur
local circ = Circle:new(radius)

-- Yeni bir ShapeCollection oluştur
local collection = ShapeCollection:new()

-- Her iki şekli de koleksiyona ekle
collection:addShape(rect)
collection:addShape(circ)

-- Koleksiyondaki tüm şekillerin toplam alanını yazdır
print(collection:getTotalArea())

Object Oriented Programming bölümündeki tüm dersler