Edit Diff Annotate History
Upload
List
Recent
Alias
Top
Help
クラスとメソッド : Edit
Last updated: Fri Mar 30 22:07:46 +0900 2007
!! メソッド 前回で「オブジェクトは自分専用のメソッドを持っている」ことがわかりました。 たいした説明もせずにメソッドメソッドと連呼してしまいましたので、ここらで確認しておきましょう。 メソッドは手続き処理の本体です。 オブジェクト指向プログラミングではメソッドの定義を繰り返しながらプログラムを作り上げていきます。 "method" を英英辞典で引くと * a way of doing sth. とあります。 ひらたく言えば「方法」ですが、日本語でのオブジェクト指向の説明では「振る舞い」と訳されています。 「振る舞い」ということは必ず振る舞う人がいるわけです。 オブジェクト指向プログラミングでは、オブジェクトに指示 (メッセージ) を出すと自律的に動く (ように見える) ので、これをもって「振る舞い」としたのでしょう。妙訳だと思います。 !! クラス オブジェクトは自分専用のメソッドを持っています。 文字列オブジェクトは文字列専用の、配列オブジェクトは配列専用のメソッドを持っています。 しかしどちらのオブジェクトも唯一の存在ではなく、 ='hello'= を評価するたびに新しい文字列オブジェクトが、=#(1 2 3)= を評価するたびに新しい配列オブジェクトが誕生します。 専用のメソッドも当然1つではなく、文字列専用のメソッドも配列専用のメソッドもたくさんあります。 すると新しく生まれたオブジェクトは、自分専用のメソッドをどこからか調達しなければなりません。 <<oop_find_methods.png>> このとき、人間がいちいちオブジェクトとメソッドの組み合わせを決めていたのでは面倒です。 そこであらかじめメソッドを「文字列」や「配列」などのグループにまとめておき、オブジェクトの所属するグループを決めます。 オブジェクトは誕生後、自分のグループの規則に従って自分自身を初期化することができます。 このグループを「クラス」と言います。 Squeakでは、オブジェクトは必ず何らかのクラスに所属しています。 <<oop_from_class.png>> 念のため "class" を辞典で引いてみますと * a group of people at the same social or economic level * a system that divides people into such groups * a group of stsudents taughth together * a category of people, animals or things that are grouped together のように、まさにグループという意味があります。 オブジェクト指向プログラミングの解説ではクラスに紙面を割くことが多いのですが、結局のところクラスというのは単なる情報のまとめ役、言わば「オブジェクトの管理職」です。 実際にコンピュータを動かすのはオブジェクトであってクラスではありません。 これからクラスとはほとんどの時間向き合うことになりますが、このことを頭の隅に留めておきましょう。 !!! クラスは十分条件ではあるが必要条件ではない オブジェクト指向の説明では必ずクラスが登場しますが、オブジェクト指向にクラスは必須ではありません。 メソッドなどのオブジェクトに必要な情報をまとめるのに便利なので使われているに過ぎません。 実際JavaScriptなどの言語ではクラスがなく、クラスの代わりにオブジェクトの情報をまとめる仕組みがあります。 !! クラスを見る では、オブジェクトとクラスがどう関係しているのか見てみましょう。 'hello' をインスペクトしてください。 <<oop_inspect_string1.png>> ウィンドウ上部に "String" と表示されているのがクラス名です。 オブジェクトの所属するクラスは次の式でも調べられます。 ワークスぺースで「式を表示」してみましょう。 'hello' class クラスの内容はブラウザで見られますが、クラスもオブジェクトの一つなのでインスペクトすることもできます。 クラスオブジェクトについては次回以降に扱います。 <<oop_inspect_string_class.png>> インスタンス変数がたくさん並んでいます。 ほとんどはオブジェクトの情報をまとめたものです。 クラスが持つ情報には次のものがあります (この他にも重要な情報がありますが、このステップでは扱いません) 。 * クラス名 * メソッドのリスト (メソッド辞書) * インスタンス変数のリスト 次にブラウザでStringクラスを見てみましょう。 前回はブラウザからStringクラスを検索しましたが、今度はクラスから直接ブラウザを開きます。 ワークスぺースには先ほど評価した "String" が表示されているはずです。 これをマウスで選択し、altキーを押しながら左クリックしてメニューを表示します。 <<oop_expr_menu_more.png>> このメニューから「さらに...」を選択して次のリストを表示します。 <<oop_expr_menu_browse.png>> 「ブラウズ」を選択すると、Stringクラスをブラウザで開くことができます。 <<oop_browse_string.png>> !! ブラウザ ブラウザではクラスやメソッドを閲覧・編集するツールです。 Squeakでのプログラミングはほとんどこのブラウザ上で行います。 ここらで簡単なブラウザの見方を覚えましょう。 まずはブラウザ上部の4つの欄が並んだウィンドウです。 <<oop_browser_desc1.png>> 左から * クラスカテゴリ * クラス * メソッドカテゴリ * メソッド のリストになっています。 カテゴリはクラス・メソッドをグループ化したものです。 Squeakのクラス・メソッドは非常に数が多く、カテゴリを使って見やすくまとめています。 クラスの下に "instance/class" と書かれたボタンがありますが、ここでは飛ばします。 クラスリストからどれかクラスを選択してみましょう。 ブラウザ下のウィンドウの表示が変わります。 <<oop_browser_desc2.png>> これはクラスの主な設定です。 具体的な内容は次回以降に扱います。 次はメソッドを選択してみましょう。 これもブラウザ下のウィンドウの表示が変わります。 <<oop_browser_desc3.png>> 先頭の太字の部分がメソッド名、次行以降がメソッド本体です。 !! まとめ * オブジェクトの手続き処理をまとめたのがメソッド。「振る舞い」とも言う。 * メソッドを含むオブジェクトの情報をまとめたのがクラス。Squeakでは、オブジェクトは何かしらのクラスに所属する。 * クラスとメソッドはブラウザで閲覧・編集できる。 [[メソッドの定義]]に続きます。