tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^6: 多重継承について(2)
投稿日: 2007/04/13(Fri) 11:37
投稿者るしぇ
> 始の質問ですが、骨子としては
> 「3種類の分類方法があるものを、クラスに構造的に作成したい。」
> という趣旨でありました。
分類するだけなら、クラスにする必要も無くって、Enum でも使えば
いいと思うんですよ。
まあ、それぞれの分類ごとに何か値を返すみたいだから、そこを
クラスにする方が良いのかもしれないけど、結局、その戻り値の
基となる値は誰の状態なのでしょうか?製品のプロパティなら、全ての
プロパティを製品が持ってて、Enum の違いで返す値を変更するだけでも
いいのでは?。

それぞれの分類方法で何が共通なのか?共通処理をまとめられるのか?
その後のメンテナンス作業でどんな改造が発生するのか?
実際に目的に応じた設計にするには、それぞれの分類についても理解
しておく必要があります。ところが。。。トレイとか専門用語使われても、
どうしたいのかが全く伝わりませんでした。

目的に応じて設計は全く変わるから、この状態でアドバイスは難しいです。
むしろ『継承』『名前空間』などの有効性が分かるような、小学生でも
理解できるような簡単な内容で質問した方が良かったのでは?

複数の概念を比べて選択するには、それぞれの基本的な知識を持っている
ことが前提で、そうでないと回答を得ても理解できないでしょう?
まずは『継承』って何?どんな時に使うの?から始めるべきレベルなの
では?と感じるのですが。。。

    Sub Test()
        Dim seihin As 製品

        seihin = New 製品(製品.分類方法1.内曲げ, 製品.分類方法2.鋼板トレイ, 製品.分類方法3.ストレート)
        seihin.Set基本重量(100)
        MessageBox.Show(seihin.重量計算.ToString)

        MessageBox.Show(製品A.断面形状.ToString & 製品A.水平トレイ.ToString & 製品A.種類.ToString & 製品A.基本重量.ToString)
        seihin = New 製品A
        MessageBox.Show(seihin.重量計算.ToString)

        MessageBox.Show(製品B.断面形状.ToString & 製品B.水平トレイ.ToString & 製品B.種類.ToString & 製品B.基本重量.ToString)
        seihin = New 製品B
        MessageBox.Show(seihin.重量計算.ToString)
    End Sub

    Public Class 製品
        Protected _基本重量 As Double
        Protected _断面形状 As 分類方法1
        Protected _水平トレイ As 分類方法2
        Protected _種類 As 分類方法3

        Protected Sub New()
            Call Clear()
        End Sub

        Public Sub New(ByVal 断面形状 As 分類方法1, ByVal 水平トレイ As 分類方法2, ByVal 種類 As 分類方法3)
            Me.New()
            _断面形状 = 断面形状
            _水平トレイ = 水平トレイ
            _種類 = 種類
        End Sub

        Public Overridable Sub Clear()
            _基本重量 = 0
            _断面形状 = 分類方法1.外一度曲げ
            _水平トレイ = 分類方法2.ラダートレイ
            _種類 = 分類方法3.ストレート
        End Sub

        Public Overridable Sub Set基本重量(ByVal 重量 As Double)
            _基本重量 = 重量
        End Sub

        Public Enum 分類方法1
            外一度曲げ
            外二度曲げ
            内曲げ
        End Enum

        Public Enum 分類方法2
            ラダートレイ
            鋼板トレイ
        End Enum

        Public Enum 分類方法3
            ストレート
            水平曲がり
        End Enum

        Public Function 重量計算() As Double
            Dim 重量Temp As Double
            重量Temp = _基本重量

            Select Case _断面形状
                Case 分類方法1.内曲げ
                    重量Temp = 重量Temp * 1.5
                Case 分類方法1.外一度曲げ
                    重量Temp = 重量Temp * 2 + 1.01
                Case 分類方法1.外二度曲げ
            End Select

            Select Case _水平トレイ
                Case 分類方法2.ラダートレイ
                    重量Temp = 重量Temp + 300
                Case 分類方法2.鋼板トレイ
                    重量Temp = 重量Temp + 200
            End Select

            Select Case _種類
                Case 分類方法3.ストレート
                Case 分類方法3.水平曲がり
            End Select

            Return 重量Temp
        End Function
    End Class

    Public Class 製品A
        Inherits 製品

        Public Shared ReadOnly 基本重量 As Double = 500
        Public Shared ReadOnly 断面形状 As 製品.分類方法1 = 製品.分類方法1.外一度曲げ
        Public Shared ReadOnly 水平トレイ As 製品.分類方法2 = 製品.分類方法2.ラダートレイ
        Public Shared ReadOnly 種類 As 製品.分類方法3 = 製品.分類方法3.ストレート

        Public Sub New()
            MyBase.New(断面形状, 水平トレイ, 種類)
            MyBase._基本重量 = 基本重量
        End Sub

    End Class

    Public Class 製品B
        Inherits 製品

        Public Shared ReadOnly 基本重量 As Double = 200
        Public Shared ReadOnly 断面形状 As 製品.分類方法1 = 製品.分類方法1.内曲げ
        Public Shared ReadOnly 水平トレイ As 製品.分類方法2 = 製品.分類方法2.鋼板トレイ
        Public Shared ReadOnly 種類 As 製品.分類方法3 = 製品.分類方法3.水平曲がり

        Public Sub New()
            MyBase.New(断面形状, 水平トレイ, 種類)
            MyBase._基本重量 = 基本重量
        End Sub

        Public Overrides Sub Clear()
            _基本重量 = 基本重量
            _断面形状 = 断面形状
            _水平トレイ = 水平トレイ
            _種類 = 種類
        End Sub
    End Class

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。