Golang はオブジェクト指向ではありません

王林
リリース: 2023-05-13 10:17:07
オリジナル
486 人が閲覧しました

近年、Golang は新興プログラミング言語として注目を集めています。 Golang は、その優れた同時処理機能、効率的なメモリ管理、ユーザーフレンドリーな構文設計により、ますます多くの開発者に選ばれる言語となっています。ただし、Golang を使用する開発者にとって常に問題となっているのは、Golang が伝統的な意味でのオブジェクト指向ではないということです。

従来のオブジェクト指向プログラミング (OOP) では、すべてがオブジェクトの観点から行われます。プログラムの構造は、オブジェクトのプロパティとメソッド、つまりカプセル化、継承、ポリモーフィズムで構成されます。 Golang は、従来の意味でのクラス、継承、インターフェイスなどの概念を提供しません。それどころか、「継承ではなく合成」という設計思想を提唱し、データ構造とそのメソッドをカプセル化することでオブジェクト指向の効果を実現します。

具体的には、次の例のようなカスタム構造を通じてクラスの概念を模倣できます。

type Person struct {
    name string
    age int
}

func (p *Person) SayHello() {
    fmt.Println("Hello, my name is", p.name)
}
ログイン後にコピー

ここでは、person 構造を定義し、SayHello メソッドを定義します。次に、次の方法で Person オブジェクトを作成し、そのメソッドを呼び出すことができます:

p := Person{name: "Tom", age: 18}
p.SayHello()
ログイン後にコピー

Golang は従来のクラスと継承メカニズムを提供していませんが、構造とメソッドの組み合わせを通じて、オブジェクトを作成できることがわかります。指向性のあるプログラミングも簡単に実装できます。

さらに、Golang には、オブジェクトが持つべき動作を記述するために使用されるインターフェース (インターフェース) という概念も用意されています。 Golang では、インターフェイスはメソッドの集合であり、オブジェクトがインターフェイス内で定義されたすべてのメソッドを実装している場合、そのオブジェクトはインターフェイスを「実装」していると言えます。たとえば、次は SayHello メソッドを定義するインターフェイスです。

type Greeting interface {
    SayHello()
}
ログイン後にコピー

インターフェイス Greeting は SayHello メソッドを定義しますが、特定の実装はありません。このようにして、定義された構造にインターフェイスを実装できます。たとえば、次のようになります。

type Person struct {
    name string
    age int
}

func (p *Person) SayHello() {
    fmt.Println("Hello, my name is", p.name)
}

func main() {
    var g Greeting
    g = &Person{name: "Tom", age: 18}
    g.SayHello()
}
ログイン後にコピー

上記のコードでは、Person 構造を定義し、その中に Greeting インターフェイスの SayHello メソッドを実装します。続いて、main 関数で、Greeting 型の変数を作成し、それを Person オブジェクトへのポインターとして割り当てます。最後に、変数の SayHello メソッドを呼び出して、インターフェイスへの呼び出しを実装しました。

ご覧のとおり、Golang はインターフェイスを通じてオブジェクトの動作を定義するため、従来の継承メカニズムがなくてもポリモーフィックな効果を実現できます。

要約すると、Golang は伝統的な意味でのオブジェクト指向ではありませんが、構造、メソッド、インターフェイスを組み合わせることで、オブジェクト指向プログラミングの効果も実現できます。実際、Golang の設計思想には、構造を通じてデータをカプセル化したり、インターフェースを通じてオブジェクトの動作を記述したりするなど、オブジェクト指向の考え方も組み込まれています。したがって、Golang を使用する開発者は、オブジェクト指向がないことをあまり心配する必要はありません。

以上がGolang はオブジェクト指向ではありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート