メソッドとオブジェクト指向について?
投稿者 るきお  (社会人)
投稿日時
2009/2/12 05:55:01
オブジェクト指向の考え方の根本はプログラムの一連の動作を現実世界に存在するような「もの」(オブジェクト)に見立てて、その「もの」のふるまい(=メソッド)の組み合わせとして処理を記述することです。
ですから、なにをオブジェクトと考えるかがもっとも重要です。
このために本格的なシステムであれば、プログラムによって実現したいことをあらかじめよく分析・設計してなにをオブジェクトするか、どういうふるまいをもたせるかを決定します。この過程がオブジェクト指向分析やオブジェクト指向設計です。
今回のプログラムでは「車が移動する」のですから、「車」がオブジェクトで、その車オブジェクトには「移動する」というふるまいがあることになります。この時点で車オブジェクトをプログラムに落とすと次のようになります。
ただし、今回「車」と呼んでいるものはPictureBoxのようですので、私は「移動可能なPictureBox」MovablePictureBoxというオブジェクトを考えて次のようにしてみました。
このプログラムをビルドするとツールボックスにMovablePictureBoxが自動的に作成され、TextBoxやButtonのようにマウスでフォームに貼り付けることができます
実年さんのプログラムではidouがクラスになっています。これは「移動」という抽象的なものがオブジェクトになっており、現実世界に存在するようなものをオブジェクトととらえていません。
もちろん、ちゃんとしたオブジェクト指向の中でもおよそ現実には存在しないようなものをオブジェクトと認定することは多々ありますが、この小さなプログラムではその必要はないでしょう。
多くの場合オブジェクトになるものは名詞で表現されます。「移動」のように動詞で表現されるものはふるまい(=メソッド)になります。
なお、私としてはオブジェクト指向は重要ではありますが、単なる考え方であってなにかの研究でもしているのでなければあまりこだわらなくていいのではないかと思っています。VBを使ってできるだけ少ない労力でよいものをつくろうとあがいていると自然とできあがるものはオブジェクト指向的なものになります。
>メソッドの作り方で、実引数と仮引数の考え方がわかりかねます
私は実引数と仮引数を特に区別して考えるメリットはほとんど感じていません。実引数と仮引数についてどの点がわかりませんか?
実年さんのプログラムで(1)を例にとると、idouメソッドの仮引数はxとpbで、実引数はsとPictureBox1になっています。
>それと※の部分がコンストラクタでよろしのでしょうか?
はい。
VBでは名前がNewであるメソッドはすべてコンストラクタで、これ以外にコンストラクタはありません。
※今回投稿の都合上Form1とMovablePictureBoxを続けて書きましたが、本来は1つのクラスは1つのファイルに書くことが推奨されており、私も実際であればMovablePictureBoxは別のファイルに書きます。
ですから、なにをオブジェクトと考えるかがもっとも重要です。
このために本格的なシステムであれば、プログラムによって実現したいことをあらかじめよく分析・設計してなにをオブジェクトするか、どういうふるまいをもたせるかを決定します。この過程がオブジェクト指向分析やオブジェクト指向設計です。
今回のプログラムでは「車が移動する」のですから、「車」がオブジェクトで、その車オブジェクトには「移動する」というふるまいがあることになります。この時点で車オブジェクトをプログラムに落とすと次のようになります。
Publi Class Kuruma
Public Sub Idou
End Sub
End Class
ただし、今回「車」と呼んでいるものはPictureBoxのようですので、私は「移動可能なPictureBox」MovablePictureBoxというオブジェクトを考えて次のようにしてみました。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MovablePictureBox1.idou(20)
End Sub
End Class
Public Class MovablePictureBox
Inherits PictureBox
Public Sub idou(ByVal x As Integer)
Me.Left -= x
End Sub
End Class
このプログラムをビルドするとツールボックスにMovablePictureBoxが自動的に作成され、TextBoxやButtonのようにマウスでフォームに貼り付けることができます
実年さんのプログラムではidouがクラスになっています。これは「移動」という抽象的なものがオブジェクトになっており、現実世界に存在するようなものをオブジェクトととらえていません。
もちろん、ちゃんとしたオブジェクト指向の中でもおよそ現実には存在しないようなものをオブジェクトと認定することは多々ありますが、この小さなプログラムではその必要はないでしょう。
多くの場合オブジェクトになるものは名詞で表現されます。「移動」のように動詞で表現されるものはふるまい(=メソッド)になります。
なお、私としてはオブジェクト指向は重要ではありますが、単なる考え方であってなにかの研究でもしているのでなければあまりこだわらなくていいのではないかと思っています。VBを使ってできるだけ少ない労力でよいものをつくろうとあがいていると自然とできあがるものはオブジェクト指向的なものになります。
>メソッドの作り方で、実引数と仮引数の考え方がわかりかねます
私は実引数と仮引数を特に区別して考えるメリットはほとんど感じていません。実引数と仮引数についてどの点がわかりませんか?
実年さんのプログラムで(1)を例にとると、idouメソッドの仮引数はxとpbで、実引数はsとPictureBox1になっています。
>それと※の部分がコンストラクタでよろしのでしょうか?
はい。
VBでは名前がNewであるメソッドはすべてコンストラクタで、これ以外にコンストラクタはありません。
※今回投稿の都合上Form1とMovablePictureBoxを続けて書きましたが、本来は1つのクラスは1つのファイルに書くことが推奨されており、私も実際であればMovablePictureBoxは別のファイルに書きます。
投稿者 実年  (社会人)
投稿日時
2009/2/12 20:07:40
るきお様
私ごときのために貴重な時間を使って丁寧にご説明いただき感謝申し上げます。
愚鈍な頭のために、短い時間で咀嚼できないのがつらいところです。
もう少し勉強してから、また質問させていただきます。
有り難うございました。
私ごときのために貴重な時間を使って丁寧にご説明いただき感謝申し上げます。
愚鈍な頭のために、短い時間で咀嚼できないのがつらいところです。
もう少し勉強してから、また質問させていただきます。
有り難うございました。
メソッドの作り方で、実引数と仮引数の考え方がわかりかねます
なにかめちゃくちゃなプログラムですが、ご指導お願いします。
(1)ボタンをクリックすると車が移動するという極めて簡単なプログラムです
Public Class Form1
Dim s As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
idou(s, PictureBox1)
End Sub
Sub idou(ByVal x As Integer, ByVal pb As PictureBox) ’移動メソッド
x = 20
pb.Left -= x
End SubEnd Class
(2)上記のプログラムをオブジェクト指向的に書くと下記のようになりますか?
それと※の部分がコンストラクタでよろしのでしょうか?
Public Class Form1
Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim s As Integer = 0
Dim idou1 As idou = New idou(s, PictureBox1)
End Sub
End Class
Class idou
※ Public Sub New(ByVal x As Integer, ByVal pb As PictureBox)
x = 20 pb.Left -= x
End Sub
End Class