Pengenalan
Dalam pengaturcaraan berorientasikan objek (OOP), kelas abstrak mentakrifkan kontrak yang mesti dilaksanakan oleh kelas konkrit. Kelas ini tidak boleh dibuat secara langsung, tetapi ia bertindak sebagai pelan tindakan yang membimbing pelaksanaan subkelas mereka.
Melaksanakan Kelas Abstrak dalam Go
Go tidak mempunyai bina- sebagai sokongan untuk kelas abstrak, tetapi ia menawarkan mekanisme untuk mencapai fungsi yang serupa. Satu pendekatan adalah untuk mentakrifkan antara muka yang menggariskan kaedah yang diperlukan dan menggunakannya sebagai jenis yang kelas konkrit dilaksanakan.
Batasan Antara Muka
Walau bagaimanapun, antara muka adalah tanpa status. dan tidak boleh menyimpan medan, menjadikannya mencabar untuk melaksanakan gelagat lalai untuk kaedah.
Menggunakan Struktur Abstrak
Pendekatan alternatif ialah mentakrifkan struct abstrak yang membenamkan antara muka dan menyediakan pelaksanaan lalai untuk kaedah antara muka. Struktur ini kemudiannya boleh diwarisi oleh kelas konkrit, mengatasi pelaksanaan lalai seperti yang diperlukan.
Contoh
Pertimbangkan contoh berikut:
// Abstract struct type Daemon struct { Daemon } func (a *Daemon) start(duration time.Duration) { ticker := time.NewTicker(duration) // Calls daemon.doWork() periodically go func() { for { <-ticker.C a.doWork() } }() } // Concrete classes type ConcreteDaemonA struct { *Daemon foo int } type ConcreteDaemonB struct { *Daemon bar int } func (a *ConcreteDaemonA) doWork() { a.foo++ fmt.Println("A: ", a.foo) } func (b *ConcreteDaemonB) doWork() { b.bar-- fmt.Println("B: ", b.bar) }
Mengatasi Pelaksanaan Lalai
Dalam konkrit kelas, kaedah yang ditakrifkan dalam antara muka boleh ditindih untuk menyesuaikan tingkah laku mereka:
type ConcreteDaemonB struct { *Daemon bar int } func (b *ConcreteDaemonB) doWork() { b.bar++ fmt.Println("B: ", b.bar) }
Kelebihan Pendekatan ini
Kesimpulan
Walaupun Go tidak mempunyai sokongan langsung untuk kelas abstrak, gabungan antara muka dan struktur abstrak menyediakan praktikal cara untuk mencapai fungsi yang sama. Pendekatan ini membolehkan pembangun mentakrifkan kaedah abstrak dengan pelaksanaan lalai dan menguatkuasakan pematuhan kontrak dalam kelas konkrit, membolehkan kebolehgunaan semula kod dan kebolehselenggaraan.
Atas ialah kandungan terperinci Bagaimanakah Fungsi Kelas Abstrak Boleh Dicapai dalam Go Tanpa Sokongan Terbina dalam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!