Özet - Şekil Hesaplayıcı
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 33 / 107.
Görev
KolayBu bölümdeki tüm arayüz kavramlarını bir araya getiren bir şekil hesaplayıcı oluşturalım. Farklı geometrik şekillerin ortak bir arayüz aracılığıyla aynı şekilde işlenebildiği ve Go'da polimorfizmin gücünü gösteren bir sistem oluşturacaksın.
Kodunu üç dosyaya ayıracaksın:
shape.go: İki yönteme sahip birShapearayüzü tanımla:Area() float64vePerimeter() float64. Ayrıca herhangi birDescribeShapekabul eden ve hem alanını hem de çevresini gösteren biçimlendirilmiş bir dize döndürenShapeadlı bir işlev oluştur.shapes.go:Shapearayüzünü uygulayan iki yapı oluştur:RectangleveWidthalanlarına sahip birHeightCirclealanına sahip birRadius
Area()hem dePerimeter()yöntemlerini ve ayrıca şeklin okunabilir bir açıklamasını döndüren birString()yöntemi (fmt.Stringeruygulayan) içermelidir.main.go: Girdi üzerinden şekil verilerini oku, uygun şekilleri oluştur ve her biri hakkındaki bilgileri görüntülemek içinDescribeShapeişlevini kullan. AyrıcaStringerarayüzünü göstermek için her şekli doğrudan yazdır.
Aşağıdaki girdiler sağlanacaktır:
- 1. satır: Dikdörtgenin genişliği (float)
- 2. satır: Dikdörtgenin yüksekliği (float)
- 3. satır: Dairenin yarıçapı (float)
Hesaplamalar için pi değerini 3.14159 olarak kullan. Dairenin çevresi 2 * pi * radius şeklindedir.
String() yöntemlerin şunları döndürmelidir:
- Dikdörtgen:
Rectangle(Width x Height) - Daire:
Circle(Radius: R)
DescribeShape işlevin şunu döndürmelidir:
Area: [area], Perimeter: [perimeter]Tüm float değerlerini %.2f kullanarak iki ondalık basamakla biçimlendir.
Örneğin, 4, 3 ve 5 verildiğinde çıktın şöyle olmalıdır:
Rectangle(4.00 x 3.00)
Area: 12.00, Perimeter: 14.00
Circle(Radius: 5.00)
Area: 78.54, Perimeter: 31.42Önce her şekli (String() yöntemini kullanarak), ardından DescribeShape işlevinden elde edilen açıklamasını yazdır. Önce dikdörtgeni, sonra daireyi işle.
Kendin dene
package main
import (
"fmt"
)
func main() {
// Giriş değerlerini oku
var width, height, radius float64
fmt.Scanln(&width)
fmt.Scanln(&height)
fmt.Scanln(&radius)
// TODO: Verilen genişlik ve yükseklik ile bir Rectangle (Dikdörtgen) oluşturun
// TODO: Verilen yarıçap ile bir Circle (Daire) oluşturun
// TODO: Dikdörtgeni yazdırın (String() metodunu kullanır)
// TODO: DescribeShape() kullanarak dikdörtgenin açıklamasını yazdırın
// TODO: Daireyi yazdırın (String() metodunu kullanır)
// TODO: DescribeShape() kullanarak dairenin açıklamasını yazdırın
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Go OOP Temelleri
Harici DosyalarGo Çalışma Alanı ve ModüllerPaketler ve İçe AktarmalarDışa Aktarılan ve Aktarılmayan İsimlerGo'da OOP'ye GirişSınıf Olarak Struct'larStruct'larda Metot TanımlamaPointer ve Değer AlıcılarStruct BaşlatmaYapıcı FonksiyonlarÖzet - Basit Hesap Makinesi4Arayüzler
Arayüzlere GirişÖrtük UygulamaSözleşme Olarak ArayüzBoş Arayüz (any)Tür OnaylamaTür SeçimiArayüz BileşimiStringer ve Error ArayüzleriÖzet - Şekil Hesaplayıcı7Kapsülleme
Dışa Aktarılan ve Aktarılmayan AlanlarPaket Seviyesinde KapsüllemeGetter ve Setter MetotlarıGo'da Bilgi GizlemeÖzet - Öğrenci Kayıtları10Generics (Go 1.18+)
Generics'e GirişTür ParametreleriTür KısıtlamalarıGeneric Struct'larGeneric Metotlar İçin Geçici ÇözümÖzet - Generic Koleksiyon13Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıAbstract Factory KalıbıObserver KalıbıStrategy Kalıbı2Türler ve Struct'lar: Derinlemesine İnceleme
Temel ve Bileşik TürlerÖzel Tür TanımlamalarıStruct EtiketleriAnonim Struct'larİç İçe Geçmiş Struct'larSıfır Değerler ve VarsayılanlarÖzet - Rehber5Kalıtım Yerine Kompozisyon
Go'da Neden Kalıtım YokStruct Gömme TemelleriMetot YükseltmeBirden Fazla Struct GömmeGömme vs AgregasyonGömülü Metotları GölgelemeÖzet - Çalışan Hiyerarşisi8Hata Yönetimi ve OOP
error ArayüzüÖzel Hata TürleriHata Sarmalama (fmt.Errorf)Sentinel Hatalarerrors.Is() ve errors.As()Panic, Defer ve RecoverÖzet - Dosya Ayrıştırıcı3İşaretçiler ve Bellek
Go'da İşaretçi TemelleriStruct İşaretçileriDeğer ile Geçme ve Referans ile Geçmenew() FonksiyonuGo'da Garbage CollectionÖzet - Linked List Oluşturucu6Go'da Polimorfizm
Interface'ler ile PolimorfizmGo'da Duck TypingInterface Karşılama KurallarıPolimorfik KoleksiyonlarDependency InjectionÖzet - Payment Processor9Eşzamanlılık ve OOP
Goroutine TemelleriKanallar ve İletişimTamponlu ve Tamponsuz KanallarSelect İfadesisync.Mutex ve sync.RWMutexsync.WaitGroupThread-Safe Struct TasarımıÖzet - Worker PoolKendi başına pratik yap: Online Go derleyicisi