何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 36527
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

忙しいのに、なんでこう、興味をそそられるエントリを上げるんだ!!(苦笑)

ネタもと→オブジェクト指向 01 定義


まず、「私」の立ち位置をはっきりさせないと。私が「実行ファイル」になっちゃったら、私こそ考えられるべきオブジェクトになっちゃうよ。

私はプログラム(n)の外にいて、全体を俯瞰しながらプログラム(v)しないと。その「プログラムする」という行為において、どのように考えるか。つまり、オブジェクトというものを重視した(oriented)プログラム(v)を行うのが「オブジェクト指向プログラミング」です。

No2のコメントでbiacさんが言われている LT 資料には、「oriented を「指向」と訳したのは誰だ」と書かれています。「oriented」は、上の段落では「~を重視する」と訳しました。その他、「(知的・情緒的に)方向づけられた,…志向の,…本位の,…を重視する;〔…に〕関心[興味]がある」という意味があります。この、「方向付けられた」が、「指向(ある一定の方向をめざして進むこと。また、その方向へ向かわせること。)」という訳に繋がったのですかね。おっと、「志向」の説明にはこうあります。「「指向」とも書かれるが、本来的な用法ではない。「指向」は単に物理的な方向をいう。」。うむ。「オブジェクト志向(意識や思考がある対象に向かうこと。)」が、本来の意味として正しいようです。(ジーニアス英和辞典 第3版 (C) Taishukan 2001-2006)(明鏡国語辞典 (C) Taishukan 2002-2006)


はてさて。それじゃ、「オブジェクト」って、なに?

.NET Framework の BCL には、Object クラスがあります。この Object クラスは、全てのクラスの派生元となっています。むっはー!object には、名詞の他に、動詞の意味もありますね。語源は、「~に向かって(ob)投げられた(ject)もの」「注意を喚起させるもの」なんだそうです。そして、「オブジェクト」(ジェにアクセント)という発音は、どちらかというと動詞。名詞の時は「アブジクト」(アにアクセント)のようです。動詞には「反対する。抗議する。異議を唱える。」という意味があります。名詞の場合は「もの。物体。目的。(コンピュータ上で処理の対象となる)ひとかたまりのデータ。」といった意味があります。(ジーニアス英和辞典 第3版 (C) Taishukan 2001-2006)

ちうもく~。「処理の対象となるひとかたまりのデータ」です。データの塊であれば、なんだって「オブジェクト」なのです。つまり、「オブジェクトとは何か?」ではなく、「何かをオブジェクトにする」のです。ということは、「1」という数値もオブジェクトですし、「文字」という文字列もオブジェクトです。そして、実行ファイル自身もオブジェクトであり、実行ファイルが動いているコンピュータもオブジェクトです。


さて、オブジェクトが定義できました。もう一度、「私の立ち位置」を検証します。「オブジェクト志向プログラミング」において、「私」は「実行ファイル」すなわち「プロセス」なのでしょうか?

私はこれに、「NO!」と答えます。

「オブジェクト志向プログラミング」です。「プログラミング」なのです。「program」は、それだけで名詞でありながら、「ing」がついています。ここでの「programing」は、「program」という動詞に接尾子「ing」が付けられて名詞になっているのです。つまり、動作を表しています。できあがったコードがオブジェクトを志向しているのではなく、プログラムを作るという行為がオブジェクトを志向するのです。

そうすると、オブジェクトを志向するのはプログラム、つまり実行ファイルではなく、プログラムを行っている開発者である、ということになります。

「私」が、オブジェクトを志向しながらプログラムを作るので、全てのものが「オブジェクト」となります。全てのものを「オブジェクト」として、プログラムの中に投影できます。したがって、「実行ファイル」もまた、「オブジェクト」です。

そうすると、お題「私が犬に鳴けといったら、犬がワンと鳴いた。」はどうなるか。私は、プログラムにおいて表現される(あるいは、アプリケーションに要求される)「犬」というオブジェクトを、クラスとして設計します。設計した犬を、コードに落とします。「犬のインスタンスを作る」ように、コードを書きます。出来た犬インスタンスに「鳴け」と命じることを、コード化します。結果、実行時に犬がワンと鳴きます。

「犬がワンと鳴く」のはオブジェクト志向プログラミングの結果であり、「犬にワンと鳴かせる」方法を、オブジェクトを念頭に置きながらプログラミングします。

クラス
クラスのインスタンス クラスを実体化させたものの一つ
オブジェクト 犬、犬クラスの実体
開発者
プログラム
(実行ファイル)
オブジェクトが存在するコンピュータ上の世界
私(あるいは顧客)の頭の中にある要求を実現したもの
設計図書 私(あるいは顧客)の頭の中にある要求を、プログラム化できるように体系化したもの
投稿日時 : 2008年12月18日 22:06
コメント
  • # re: オブジェクトを思考する
    774RR
    Posted @ 2008/12/18 23:30
    その解説、共感するところが多くて Jitta 氏が他人と思えない。

    何か(=オブジェクト)に
    指令を出して(=メッセージを送って)
    何かをさせる
    という構造を考え出すってのがまず最初だよね。

    んで、その次に「クラスとオブジェクトの違い」をわからせる、と。
    メタだのスーパーだのはその後で。
  • # re: オブジェクトを思考する
    Jitta
    Posted @ 2008/12/19 7:55
    774RRさん、コメントありがとうございます。

    共感するところが多くないと、「オブジェクト指向?なんか、解説が一定しないよね。どれが本当かわからないから理解できな~い!」となってしまうと思いますっ!!
    ???いや、そんなカオスな世界だったかも?

    あ、でも、これからは「オブジェクト志向」でいこう。
  • # re: オブジェクトを思考する
    ぱると
    Posted @ 2008/12/19 9:28
    オブジェクト指向をたいして(全く?)理解してないですが、
    「私」クラスと「犬」クラスの2つがあって、
    実行ファイルでは私クラスの「犬に吠えろと言う」メソッドを呼び出し、
    その中から犬クラスの「吠えろ」メソッド(Shared←Newしないと言う意味で)を呼ぶのかと思ってました。
    …根本的に違うのかな?それだと実行ファイルにあたるものがないか。
  • # re: オブジェクトを思考する
    biac
    Posted @ 2008/12/19 10:17
    > できあがったコードがオブジェクトを志向しているのではなく、プログラムを作るという行為がオブジェクトを志向するのです。

    ぉ、 Object-Oriented "Programming" 派ですか~ f(^^;
    私は、 "Object-Oriented Program"-ing 派です。

    ところで、 "Object-Oriented Software" は、 どう解釈しましょう? 私は、 "Object-Oriented Program" と同義だと思ってるんですが。

    http://www.amazon.co.jp/dp/0201633612
    > Design Patterns: Elements of Reusable Object-Oriented Software

    GoF の名著 「オブジェクト指向における再利用のためのデザインパターン」 の原題は、 直訳すると「デザインパターン: 再利用可能な オブジェクトを志向しているソフトウェア の要素」 なんですねぇ。
  • # re: オブジェクトを思考する
    biac
    Posted @ 2008/12/19 12:02
    ちなみに、 GoF 本の原著を Amazon で立ち読みすると f(^^;
    第1章の冒頭は、 こう始まっています。

    > Designing object-oriented software is hard, and designing reusable object-oriented software is even harder.
    ( object-oriented software を設計することは困難です、そして、再利用可能な object-oriented software を設計することはさらに困難です。 )

    「オブジェクトを志向しているソフトウェア」 を設計できるというのですから、 「オブジェクトを志向しているソフトウェア」 と呼べるものが存在しうるのだ、 と考えていることになりますね。
  • # re: オブジェクトを思考する
    Jitta
    Posted @ 2008/12/19 12:10
    biacさん、コメントありがとうございます。

    > ところで、 "Object-Oriented Software" は、 どう解釈しましょう? 私は、 "Object-Oriented Program" と同義だと思ってるんですが。

    Object-Oriented Program と、
    Object-Oriented Programing があって、それぞれ別のものだとすれば解決!

    オブジェクトに注目したプログラム
    オブジェクトに注目してプログラムをする行為



    ぱるとさん、エントリで返事させていただきます。
タイトル
名前
Url
コメント