スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

VBオブジェクト指向プログラミング講座 第14回 型の概念を覚えよう

 この記事は、 第13回 オブジェクト指向プログラミングの原理を覚えようの続きです。前回は、オブジェクト指向プログラミングの原理を解説しました。今回は、VBにおけるオブジェクト指向プログラミングにつきものの「型」について解説します。
 VB言語で行うオブジェクト指向プログラミングは、主にを扱います。しかしながら、型とは何かと問われた時、意外と答えられない人も多いかと思います。そこで、今回は型について解説します。型を知ることにより、プログラミング力が増すこと間違いなしです。
 VBコンパイラがしていることを表現してみました。

Imports System
Imports System.Collections.Generic

'型に関する情報
Friend Structure TypeInfo

    '型名。
    Public Name As String

    '型が持っている関数テーブル。
    Private table As Dictionary(Of String, Object)

    '名前を指定してインスタンスを生成する。
    Public Sub New(ByVal name As String)
        Me.Name = name
        Me.table = New Dictionary(Of String, Object)()
    End Sub

    '関数もしくは手続きを登録。
    Public Sub ResistFunctionOrSub(ByVal name As String, funcOrSub As Object)
        Me.table.Add(name, funcOrSub)
    End Sub

    '関数もしくは手続きを取得。
    Public Function GetFunctionOrSub(ByVal callName As String) As Object
        Dim result As Object = Me.table.Item(callName)
        Return result
    End Function

End Structure

'サンプルで使用するオブジェクト
Friend Structure Foo
    Public Value As Integer
End Structure

'エントリポインタ(プログラムの開始地点)
Module Sample

    'Foo型に関する情報を取得する。
    Function GetFooTypeInfo() As TypeInfo

        '関数のテーブルを用意
        Console.WriteLine("Foo型の準備をします。")
        Dim result As TypeInfo = New TypeInfo("Foo")

        Dim ctor As Func(Of Foo) = Function() New Foo()
        result.ResistFunctionOrSub("New", CObj(ctor))
        Console.WriteLine("コンストラクタを登録しました。")

        Dim getValue As Func(Of Foo, Integer) =
            Function(obj As Foo) obj.Value
        result.ResistFunctionOrSub("Get_Value", getValue)
        Console.WriteLine("Valueプロパティのゲッターを登録しました。")

        Dim addFunc As Func(Of Foo, Integer, Foo) =
            Function(obj As Foo, value As Integer)
                obj.Value += value
                Return obj
            End Function
        result.ResistFunctionOrSub("Add", addFunc)
        Console.WriteLine("Addメソッドを登録しました。")
        Console.WriteLine("Foo型の準備が終わりました。")
        Console.WriteLine()

        Return result

    End Function

    Sub Main()

        'Foo型オブジェクトのインスタンスを生成する
        Dim fooType As TypeInfo = GetFooTypeInfo()
        Dim ctor As Func(Of Foo) = fooType.GetFunctionOrSub("New")
        Dim obj As Foo = ctor()

        'メソッドを呼び出す
        Dim addValue As Integer = 10
        Dim f As Object = fooType.GetFunctionOrSub("Add")
        Dim addFunc = CType(f, Func(Of Foo, Integer, Foo))
        obj = addFunc(obj, addValue)
        Console.WriteLine("オブジェクトに{0}加算しました。", addValue)

        'プロパティのゲッターを呼び出す
        f = fooType.GetFunctionOrSub("Get_Value")
        Dim getter = CType(f, Func(Of Foo, Integer))
        Dim v As Integer = getter(obj)
        Console.WriteLine("オブジェクトの値は{0}です。", v)

        '間違った!
        Dim name As String = "ピヨ"
        Try
            f = fooType.GetFunctionOrSub(name)
        Catch ex As KeyNotFoundException
            Console.WriteLine("Foo型に{0}関数は存在しません。", name)
        End Try

        '終了
        Console.WriteLine()
        Console.WriteLine("サンプル終了です。")
        Console.ReadLine()

    End Sub

End Module

サンプルがしていることは前回とほぼ同じです。違いは型を使用している点です。この点が型が目指している事です。
 サンプルにて、存在しない関数を呼び出そうとするとエラーになる点に注目してください。前回述べたように、オブジェクト指向プログラミングがない時代は、関数・データ・手続きがバラバラでした。バラバラに存在しても機械は困りませんが、プロジェクトの規模が大きくなると、管理をする人間は大変困ります。プログラミングの各要素がバラバラなまま、数百万行をプログラミングしている場面を想像してください。とても大変だということがわかってもらえると思います。
 人間は物事を関連付けて認識します。人間はデータ・手続き・関数がグルーピングされていると、プログラムを理解しやすくなります。そこで、「型」というプログラムの要素を関連付ける方法が考えだされました。型という枠組みがあると、人間の間違いを減らし、プログラムの理解が容易になります。つまり型とは、人間がプログラムを扱いやすくするために、コードを関連付けるものだといえます。
 型はオブジェクト指向プログラミングの必須知識なので、是非この機会に覚えてください。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。