[Goチュートリアルシリーズノート]マルチステート-GOのOOP

5795 ワード

  • GoチュートリアルシリーズノートInterface第1部
  • GoチュートリアルシリーズノートInterface第2部
  • Goチュートリアルシリーズノート同時紹介
  • Goチュートリアルシリーズノートgoroutine(協程)
  • Goチュートリアルシリーズノートチャンネル
  • Goチュートリアルシリーズノートバッファチャネルとワークプール
  • GoチュートリアルシリーズノートSelect
  • GoチュートリアルシリーズノートMutex(反発ロック)
  • Goチュートリアルシリーズノート構造はクラス-GOのOOPではありません
  • Goチュートリアルシリーズノートの組み合わせは-GOのOOPを継承するのではなく
  • Goチュートリアルシリーズノートマルチステート-GOのOOP

  • Goにおける多態性はインタフェースの助けによって実現される.既に議論したように,インタフェースはGoで暗黙的に実現できる.タイプがインタフェースで宣言されたすべてのメソッドを定義している場合、タイプはインタフェースを実装します.インタフェースの助けの下でどのようにGoの中で多態性を実現するかを見てみましょう.

    インタフェースのマルチステートの使用


    インタフェースを定義するすべてのメソッドのタイプは、暗黙的実装インタフェースと呼ばれます.
    インタフェースタイプの変数には、実装インタフェースの任意の値が含まれます.インタフェースのこのプロパティは、Goでマルチステートを実装するために使用されます.
    組織の純収益を計算するプログラムの助けの下でGoの多態性を理解しましょう.簡単にするために、この想像の組織には2つのプロジェクトの収入があると仮定します.固定請求書、時間と材料.組織の純収益は、これらの項目の収益合計で計算されます.このチュートリアルを簡略化するために、通貨がドルであると仮定します.私たちはセントを処理しません.intが使用されます.(私はhttps://forum.golangbridge.or...を読んで、セントの処理方法を理解することをお勧めします.)
    まずインタフェースIncomeを定義します.
    type Income interface {  
        calculate() int
        source() string
    }

    Incomeで定義されたインタフェースには、ソースからの収益を計算して返す2つのメソッドcalculate()と、ソースの名前を返すsource()が含まれています.
    次に、FixedBillingプロジェクトタイプの構造を定義します.
    type FixedBilling struct {  
        projectName string
        biddedAmount int
    }

    このFixedBillingプロジェクトには2つのフィールドprojectNameがあり、プロジェクトの名前とbiddedAmountがプロジェクトに割り当てられた金額を表します.
    このTimeAndMaterial構造は、時間および材料タイプの項目を表す.
    type TimeAndMaterial struct {  
        projectName string
        noOfHours  int
        hourlyRate int
    }

    このTimeAndMaterial構造には、3つのフィールド名projectName,noOfHoursおよびhourlyRateがある.
    次に、これらの構造タイプを定義する方法です.これらの方法は、実際の収益と収益源を計算して返します.
    func (fb FixedBilling) calculate() int {  
        return fb.biddedAmount
    }
    
    func (fb FixedBilling) source() string {  
        return fb.projectName
    }
    
    func (tm TimeAndMaterial) calculate() int {  
        return tm.noOfHours * tm.hourlyRate
    }
    
    func (tm TimeAndMaterial) source() string {  
        return tm.projectName
    }
    FixedBillingプロジェクトでは、収入はプロジェクトの入札金額にすぎません.したがって、FixedBillingタイプのcalculate()メソッドから返します.TimeAndMaterialプロジェクトの例では、製品の収益noOfHoursおよびhourlyRateは、TimeAndMaterial受信機タイプを有する方法calculate()からこの値を返す.
    このプロジェクトの名前をsource()メソッドの収益源として返します.
    両方のFixedBillingおよびTimeAndMaterial構造は、インタフェースcalculate()およびsource()メソッドの定義Incomeを提供するため、両方の構造はIncomeインタフェースを実現する.calculateNetIncomeが総収益の関数を計算および印刷することを宣言します.
     func calculateNetIncome(ic []Income) {  
        var netincome int = 0
        for _, income := range ic {
            fmt.Printf("Income From %s = $%d
    ", income.source(), income.calculate()) netincome += income.calculate() } fmt.Printf("Net income of organisation = $%d", netincome) }

    このcalculateNetIncome関数は[]Incomeをパラメータのインタフェースとして受け入れます.スライスを反復し、各項目でメソッドcalculate()を呼び出すことによって、総収益を計算します.また、source()メソッドを呼び出して収益源を表示します.異なるIncomeおよびcalculate()メソッドは、特定のタイプのsource()インタフェースに従って呼び出される.従って,calculateNetIncome関数において多態性を実現した.