Ringkasan: Kalkulator Bentuk
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 25 dari 65.
Tantangan
SedangBuat kalkulator bentuk yang menangani bentuk nyata, object mirip bentuk dari luar hierarki, dan object yang tidak dapat diukurnya.
Shapebersifat abstrak, dengan method abstrakarea() -> float,perimeter() -> floatdanshape_name() -> String. Method normalnyadescribe()mengembalikanNAME: area A, perimeter Pdengan dua angka desimal.Circle(radius),Rectangle(width,height) danTriangle(sisia,b,c) memperluasShape. Nama mereka adalahCircle,RectangledanTriangle. Luas lingkaran adalahPI * r * rdan kelilingnya2 * PI * r. Untuk segitiga, gunakan rumus Heron: dengans = (a + b + c) / 2, luasnya adalahsqrt(s * (s - a) * (s - b) * (s - c)).CustomShapeTIDAK memperluasShape. Object ini memilikicustom_namedansize;area()adalahsize * size,perimeter()adalah4 * size, dandescribe()menggunakan format yang sama denganShape, dengan nama kustomnya.ShapeCalculatormemiliki dua fungsi statis.process(thing)mengembalikan[Shape]ditambahdescribe()untukShape,[Duck]ditambahdescribe()untuk object lain apa pun yang memiliki methoddescribe(), danCannot measure this objectjika tidak.total_area(things)menjumlahkanarea()dari setiap object yang memiliki methodarea().
Kode yang disediakan membaca jumlah object yang akan menyusul, lalu satu object per baris: circle R, rectangle W H, triangle A B C, custom NAME SIZE atau unknown (object RefCounted biasa). Kode ini mencetak process() untuk setiap object dan total luasnya. Untuk circle 5, custom Hexa 3 dan unknown, kode ini mencetak:
[Shape] Circle: area 78.54, perimeter 31.42
[Duck] Hexa: area 9.00, perimeter 12.00
Cannot measure this object
Total area: 87.54Kodemu ditulis di shape.gd, circle.gd, rectangle.gd, triangle.gd, custom_shape.gd dan shape_calculator.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan apa adanya
var count := int(OS.read_string_from_stdin())
var things := []
for i in count:
var p := OS.read_string_from_stdin().split(" ")
if p[0] == "circle":
things.append(Circle.new(float(p[1])))
elif p[0] == "rectangle":
things.append(Rectangle.new(float(p[1]), float(p[2])))
elif p[0] == "triangle":
things.append(Triangle.new(float(p[1]), float(p[2]), float(p[3])))
elif p[0] == "custom":
things.append(CustomShape.new(p[1], float(p[2])))
else:
things.append(RefCounted.new())
for thing in things:
print(ShapeCalculator.process(thing))
print("Total area: %.2f" % ShapeCalculator.total_area(things))
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online