Menu
Coddy logo textTech

Daire Sınıfı

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

challenge icon

Görev

Kolay

Önceki derste oluşturduğunuz Rectangle sınıfının yanına bir Circle sınıfı ekleyerek Şekil Yöneticimizi oluşturmaya devam edelim.

Şekillerinizi düzenli tutmak için dört dosya ile çalışacaksınız:

  • Shape.lua: :new(name) ve :getName() metotlarını içeren temel Shape sınıfınız.
  • Rectangle.lua: Önceki görevden :getArea() metoduna sahip Rectangle sınıfınız.
  • Circle.lua: Shape sınıfından miras alan bir Circle sınıfı oluşturun. Yapıcı (constructor) bir radius kabul etmeli, üst sınıf yapıcısını "Circle" ismiyle çağırmalı ve yarıçapı (radius) saklamalıdır. πr² formülünü kullanarak dairenin alanını hesaplayan bir :getArea() metodu ekleyin. π değeri için math.pi kullanın.
  • main.lua: Hem Rectangle hem de Circle modüllerini dahil edin (require). Girdiden üç değer okuyun: bir dikdörtgenin genişliği, bir dikdörtgenin yüksekliği ve bir dairenin yarıçapı. Her şekilden birer örnek (instance) oluşturun ve dört satır yazdırın—dikdörtgenin adı, dikdörtgenin alanı, dairenin adı ve dairenin alanı.

Her iki şekil de artık kalıtım yoluyla aynı arayüzü paylaşıyor—her birinin Shape sınıfından gelen bir :getName() metodu ve kendi :getArea() uygulaması var. Bu ortak arayüz gelecek derslerde faydalı olacaktır.

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

Çıktı: Dört satır—dikdörtgenin adı, dikdörtgenin alanı, dairenin adı, dairenin alanı.

Kendin dene

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

-- Circle modülünü dahil et
-- YAPILACAK: Circle modülünü buraya dahil et

-- Girdiden genişlik ve yüksekliği oku
local width = tonumber(io.read())
local height = tonumber(io.read())

-- YAPILACAK: Girdiden yarıçapı oku

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

-- YAPILACAK: Verilen yarıçapla yeni bir Circle örneği oluştur

-- Dikdörtgenin adını ve alanını yazdır
print(rect:getName())
print(rect:getArea())

-- YAPILACAK: Dairenin adını ve alanını yazdır

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