タイトル | : Re^6: 多重継承について(2) |
記事No | : 5339 |
投稿日 | : 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
|