Menu
Coddy logo textTech

Toplam Alan

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 60 / 70.

challenge icon

Görev

Kolay

ShapeCollection sınıfınıza güçlü bir özellik ekleyelim: içerdiği tüm şekillerin toplam alanını hesaplayabilme. Polimorfizmin gerçekten parladığı nokta burasıdır: koleksiyonunuz, şeklin dikdörtgen mi yoksa daire mi olduğunu bilmeden herhangi bir şekil üzerinde :getArea() çağrısı yapabilir.

Mevcut proje dosyalarınızın üzerine eklemeye devam edeceksiniz:

  • Shape.lua: Temel Shape sınıfınız (değişmeden kalır).
  • Rectangle.lua: :getArea() ve :getPerimeter() özelliklerine sahip Rectangle sınıfınız.
  • Circle.lua: :getArea() ve :getPerimeter() özelliklerine sahip Circle sınıfınız.
  • ShapeCollection.lua: Bir :getTotalArea() yöntemi ekleyerek koleksiyon sınıfınızı genişletin. Bu yöntem, depolanan tüm şekillerin üzerinden geçmeli, her biri üzerinde :getArea() çağrısı yapmalı ve tüm alanların toplamını döndürmelidir.
  • main.lua: Modüllerinizi içe aktarın, boyutları girdiden okuyun, bir Rectangle ve bir Circle oluşturun, ikisini bir ShapeCollection nesnesine ekleyin, ardından koleksiyondaki tüm şekillerin toplam alanını yazdırın.

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

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ü yükle
local Rectangle = require('Rectangle')

-- Circle modülünü yükle
local Circle = require('Circle')

-- ShapeCollection modülünü yükle
local ShapeCollection = require('ShapeCollection')

-- Genişlik ve yüksekliği girdiden 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ıçapla 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())

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi