Menu
Coddy logo textTech

Özet - Şekil Hiyerarşisi

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

challenge icon

Görev

Kolay

Sıfırdan tam bir şekil hiyerarşisi oluşturalım! Tüm şekillerin miras alacağı bir Shape ana sınıfı oluşturacak, ardından her biri kendi benzersiz özelliklerine sahip olan ancak ortak işlevleri paylaşan Circle ve Square alt sınıflarını inşa edeceksiniz.

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Shape.lua: Tüm şekillerin miras alacağı temel sınıfınız. Şeklin rengini saklayan bir :new(color) yapıcı metoduna (constructor) ve bu rengi döndüren bir :getColor() metoduna sahip olmalıdır. Bu paylaşılan özellik, ister daire ister kare olsun, her şeklin bir rengi olacağı anlamına gelir.
  • Circle.lua: Shape sınıfından miras alan bir alt sınıf. :new(color, radius) yapıcı metodu, renk için ana sınıfın yapıcı metodunu çağırmalı, ardından yarıçapı benzersiz bir öznitelik olarak eklemelidir. Dairenin ayrıntılarını yazdıran bir :describe() metodu ekleyin.
  • Square.lua: Shape sınıfından miras alan başka bir alt sınıf. :new(color, side) yapıcı metodu da ana sınıfın yapıcı metodunu çağırmalı, ardından kenar uzunluğunu saklamalıdır. Kareler için de bir :describe() metodu ekleyin.
  • main.lua: Her iki şekilden de örnekler (instances) oluşturarak ve benzersiz özelliklerini korurken Shape sınıfından doğru şekilde miras aldıklarını göstererek her şeyi bir araya getirin.

İki girdi alacaksınız:

  1. Daire verisi: virgülle ayrılmış renk ve yarıçap (örneğin, blue,5)
  2. Kare verisi: virgülle ayrılmış renk ve kenar uzunluğu (örneğin, red,4)

Ana dosyanızda, verilen değerlerle bir Circle ve bir Square oluşturun. Ardından ayrı satırlara şunları yazdırın:

  1. Daire üzerinde :describe() metodunu çağırın
  2. Kare üzerinde :describe() metodunu çağırın
  3. :getColor() kullanarak dairenin rengini yazdırın
  4. :getColor() kullanarak karenin rengini yazdırın

Circle için :describe() metodu şunu yazdırmalıdır:

Circle with radius {radius}

Square için :describe() metodu şunu yazdırmalıdır:

Square with side {side}

Örneğin, girdiler blue,5 ve red,4 ise, çıktı şöyle olmalıdır:

Circle with radius 5
Square with side 4
blue
red

Bu, tam kalıtım (inheritance) desenini gösterir: her iki şekil de :getColor() metodunu Shape sınıfından miras alır (kendileri asla tanımlamazlar), ancak her birinin kendi benzersiz özniteliği ve :describe() metodu vardır!

Kendin dene

-- main.lua: Her şeyi bir araya getir

local Circle = require('Circle')
local Square = require('Square')

-- Daire için girdi oku (renk, yarıçap)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- Kare için girdi oku (renk, kenar)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- YAPILACAK: Verilen renk ve yarıçap ile bir Circle örneği oluşturun

-- YAPILACAK: Verilen renk ve kenar ile bir Square örneği oluşturun

-- YAPILACAK: Daire üzerinde :describe() metodunu çağırın

-- YAPILACAK: Kare üzerinde :describe() metodunu çağırın

-- YAPILACAK: :getColor() kullanarak dairenin rengini yazdırın

-- YAPILACAK: :getColor() kullanarak karenin rengini yazdırın

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