Sobes.tech
Middle

Wie werden die Konzepte der objektorientierten Programmierung (OOP) in der Programmiersprache Go umgesetzt?

sobes.tech KI

Antwort von AI

In Go gibt es keine klassischen Konzepte von Klassen, Vererbung und virtuellen Methoden, wie sie in anderen Sprachen (Java, C++) üblich sind. Objektorientierte Programmierung wird in Go durch folgende Mittel realisiert:

  • Structs: Gruppieren Daten (Felder).
    type Person struct {
    	Name string
    	Age  int
    }
    
  • Methoden: Funktionen mit einem assoziierten Empfänger (Struct oder anderer Typ). Ermöglichen es Structs, Verhalten zu haben.
    func (p Person) Greet() string {
    	return "Hello, my name is " + p.Name
    }
    
    • Empfänger nach Wert: Die Methode arbeitet mit einer Kopie der Struct. Änderungen innerhalb der Methode beeinflussen die Original-Struct nicht.
    • Empfänger nach Zeiger: Die Methode arbeitet mit der Original-Struct über einen Zeiger. Änderungen innerhalb der Methode beeinflussen die Original-Struct.
  • Interfaces: Definieren eine Reihe von Methodensignaturen, die ein Typ erfüllen muss. Sie bieten Polymorphismus "nach Enten-Typisierung" (duck typing). Ein Typ implementiert implizit ein Interface, wenn er alle seine Methoden implementiert.
    type Greeter interface {
    	Greet() string
    }
    
    func SayHello(g Greeter) string {
    	return g.Greet()
    }
    
  • Embedding: Erlaubt es, dass eine Struct eine andere Struct oder ein Interface "embedden" kann. Dies ist keine Vererbung im klassischen Sinne, sondern eher Komposition. Die eingebettete Struct wird zu einem anonymen Feld, auf das direkt über die Instanz zugegriffen werden kann.
    type Employee struct {
    	Person // eingebettete Struct
    	ID string
    }
    
    // Employee hat jetzt die Felder Name und Alter sowie die Methode Greet()
    
    e := Employee{
    	Person: Person{Name: "Alice", Age: 30},
    	ID:     "E123",
    }
    fmt.Println(e.Greet()) // Aufruf der Methode Greet() der Person über Employee
    
OOP-Konzept Umsetzung in Go Anmerkungen
Klassen Structs Es gibt kein explizites Schlüsselwort class
Kapselung Exportierte (mit Großbuchstaben beginnende) / nicht exportierte (mit Kleinbuchstaben beginnende) Felder/Methoden Sichtbarkeitskontrolle auf Paket-Ebene
Vererbung Embedding Komposition statt hierarchischer Vererbung
Polymorphismus Interfaces Duck Typing, implizite Implementierung von Interfaces