Ö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 (interface) kavramlarını bir araya getiren bir şekil hesaplayıcı oluşturalım. Farklı geometrik şekillerin ortak bir arayüz aracılığıyla tek tip olarak işlenebildiği bir sistem oluşturacak ve Go'daki polimorfizmin (çok biçimlilik) gücünü göreceksiniz.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
shape.go: İki metodu olan birShapearayüzü tanımlayın:Area() float64vePerimeter() float64. Ayrıca, herhangi birShapekabul eden ve hem alanını hem de çevresini gösteren formatlanmış bir dize döndürenDescribeShapeadında bir fonksiyon oluşturun.shapes.go:Shapearayüzünü uygulayan iki yapı (struct) oluşturun:WidthveHeightalanlarına sahip birRectangleRadiusalanına sahip birCircle
Area()hem dePerimeter()metodlarını, ayrıca şeklin okunabilir bir açıklamasını döndüren birString()metodunu (fmt.Stringerarayüzünü uygulayarak) içermelidir.main.go: Girişten şekil verilerini okuyun, uygun şekilleri oluşturun ve her biri hakkında bilgi görüntülemek içinDescribeShapefonksiyonunuzu kullanın. AyrıcaStringerarayüzünü göstermek için her şekli doğrudan yazdırın.
Aşağıdaki girişler sağlanacaktır:
- Satır 1: Dikdörtgen genişliği (float)
- Satır 2: Dikdörtgen yüksekliği (float)
- Satır 3: Daire yarıçapı (float)
Hesaplamalar için pi değeri olarak 3.14159 kullanın. Daire çevresi 2 * pi * radius formülüyle hesaplanır.
String() metodlarınız şunları döndürmelidir:
- Rectangle:
"Rectangle(%.2f x %.2f)"(Genişlik x Yükseklik formatında) - Circle:
"Circle(Radius: %.2f)"
DescribeShape fonksiyonunuz şunu döndürmelidir:
Area: %.2f, Perimeter: %.2fTüm float değerlerini %.2f kullanarak iki ondalık basamakla formatlayın.
Örneğin, 4, 3 ve 5 verildiğinde çıktınız şö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 (kendi String() metodunu kullanarak), ardından DescribeShape fonksiyonundan gelen açıklamasını yazdırın. Önce dikdörtgeni, sonra daireyi işleyin.
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 Pool