引用:
やはり難しいですね...。オブジェクトはこの説明文を見ると”箱”ですかね。
> 外から入ってきたメッセージを内部で変換して自分の”箱”の種類(?)を変更したりほかの”箱”にメッセージを送る。
> そして、その”箱”が集まったものがプログラムですかね...。
そんなに難しいとか考えなくても良いですよ。
そもそもオブジェクト指向というのは構造化プログラムと同時期に生まれていましたが、構造化プログラミングと全く異なる考え方ではありませんので今も昔も対立しているわけではありません。
ただ、構造化プログラミングが「情報は情報、手続きは手続き」でそれぞれ別にまとめようと考えたのに対し、オブジェクト指向は「情報とそれを扱う手続き」を1つにまとめようと考えただけです。
とにかく試してみるのが一番ですよ。
コード:
#N88BASIC
' ↓ ここからプログラムが実行されます
/* 構造化 */
Type MYDATA
Age As Long
Name[255] As Char
End Type
Sub InputAge(ByRef dat As MYDATA)
Dim s As Long /*バグなのかINPUTで構造体のメンバに値が入力されない*/
Input "年齢を入力してください。 >",s
dat.Age=s
End Sub
Sub InputName(ByRef dat As MYDATA)
Dim s As String
Input "名前を入力してください。 >",s
lstrcpy(dat.Name,StrPtr(s))
End Sub
Sub PrintMyData(ByRef dat As MYDATA)
Print "名前 ",MakeStr(dat.Name)
Print "年齢 ",dat.Age
End Sub
Dim MyData As MYDATA
InputName(MyData)
InputAge(MyData)
PrintMyData(MyData)
コード:
#N88BASIC
' ↓ ここからプログラムが実行されます
/* オブジェクト指向 */
Class CMYDATA
Private
Age As Long
Name[255] As Char
Public
Sub InputAge()
Input "年齢を入力してください。 >",Age
End Sub
Sub InputName()
Dim s As String
Input "名前を入力してください。 >",s
lstrcpy(Name,StrPtr(s))
End Sub
Sub PrintMyData()
Print "名前 ",MakeStr(Name)
Print "年齢 ",Age
End Sub
End Class
Dim MyData As CMYDATA
MyData.InputName()
MyData.InputAge()
MyData.PrintMyData()
2つを比較すると構造化では関数の引数が構造体なのですが
オブジェクト指向ではクラスが関数を呼び出してますよね。
つまり、
「あんなふうに、こんなふうにしなくてはいけない」というのがオブジェクト指向ではありません。
「どのような見かたでどのようにプログラムを分割したか」です。
※もちろん、このようにした方が良いというな定石は既に完成されつつありますが、オブジェクト指向そのものが完璧ではありませんのでアスペクト指向などの新しい手法がオブジェクト指向の上に構築され、問題も補完されつつあります。しかし、それ自体も完璧ではありませんので、結局の所プログラマの腕次第という所です。
兎に角、慣れなのでぜひ挑戦してみることをお勧めします。