Soyut Sınıflar ve Metotlar
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 23 / 65.
Bazı sınıflar yalnızca genişletilmek için vardır. Her şeklin bir alanı vardır, ancak şeklin bir daire mi yoksa dikdörtgen mi olduğunu bilene kadar bu alanı hesaplayamazsın. Böyle bir sınıfı @abstract olarak, class_name satırının üstündeki satırda işaretle:
# shape.gd
@abstract
class_name Shape
extends RefCounted
@abstract func area() -> float
@abstract func perimeter() -> float
func describe() -> String:
return "Area %.1f, perimeter %.1f" % [area(), perimeter()]Bir @abstract func imzaya sahiptir ve gövdesi yoktur: iki nokta yoktur ve ardından kod gelmez. Her alt sınıfın bu metodu sağlaması gerektiğini belirtir. describe() normal bir metottur; alt sınıflar bu metodu devralır ve bu metot soyut metotları zaten çağırabilir.
Bir soyut sınıfın nesnesini oluşturamazsın. Shape.new(), program başlamadan önce Parse Error: Cannot construct abstract class "Shape". hatasıyla programı durdurur.
Tüm soyut metotları yazan bir alt sınıf normal bir sınıftır:
# rectangle.gd
class_name Rectangle
extends Shape
var width: float
var height: float
func _init(w: float, h: float) -> void:
width = w
height = h
func area() -> float:
return width * height
func perimeter() -> float:
return 2 * (width + height)var rect := Rectangle.new(4.0, 6.0)
print(rect.describe())Area 24.0, perimeter 20.0Bir alt sınıf bunlardan birini atladığında Godot, programı çalıştırmadan önce bunu bildirir: Class "Square" must implement "Shape.perimeter()" and other inherited abstract methods or be marked as "@abstract". Böylece oluşturabileceğin her nesnede area() ve perimeter() bulunur.
Bir soyut sınıf yine de değişkenlere ve bir _init() yöntemine sahip olabilir. Alt sınıflar, her zamanki gibi super() ile onu çağırır.
Görev
KolayBir mağaza iki ödeme yöntemini kabul eder. Her ödemenin bir tutarı ve makbuzu vardır, ancak ücret ve ad yönteme bağlıdır.
PaymentMethodsınıfını soyut yap ve iki soyut yöntem bildir:fee() -> floatvemethod_name() -> String. Her sayı için iki ondalık basamak kullanarakNAME: paid AMOUNT, fee FEE, total TOTALdöndürenreceipt()yöntemini yaz (toplam, tutar ile ücretin toplamıdır).CreditCard: ücret tutarın %3'üdür (amount * 0.03) ve adCredit cardolur.BankTransfer: ücret1.5'tir; tutar100veya daha fazlaysa0.0olur ve adBank transferolur.
Alt sınıflar PaymentMethod sınıfının kurucusunu kullanır. Sağlanan kod, ardından kaç ödeme geleceğini okur ve her ödeme için bir satır okur: card AMOUNT veya transfer AMOUNT. Her makbuzu ve ücretlerin toplamını yazdırır. card 50 ve transfer 120 için şunu yazdırır:
Credit card: paid 50.00, fee 1.50, total 51.50
Bank transfer: paid 120.00, fee 0.00, total 120.00
Total fees: 1.50Kodunu payment_method.gd, credit_card.gd ve bank_transfer.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var count := int(OS.read_string_from_stdin())
var total_fees := 0.0
for i in count:
var p := OS.read_string_from_stdin().split(" ")
var payment: PaymentMethod
if p[0] == "card":
payment = CreditCard.new(float(p[1]))
else:
payment = BankTransfer.new(float(p[1]))
print(payment.receipt())
total_fees += payment.fee()
print("Total fees: %.2f" % total_fees)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi