ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    スポンサーサイト

    このエントリーを含むはてなブックマーク はてなブックマーク - スポンサーサイト あとで読む
    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    コンテキスト

    このエントリーを含むはてなブックマーク はてなブックマーク - コンテキスト あとで読む
    プログラミングの用語で、「コンテキスト」という言葉がある。
    文字通りの意味は、「文脈」とか「状況」だが、よく分からない用例があったので、今一度定義を調べてみることにした。

    コンテキスト - Google 検索

    コンテキストとは - はてなキーワード

    文脈、状況。context。



    コンテクスト - Wikipedia

    コンテクスト(Context)あるいはコンテキストとは、文脈や背景となる分野によってさまざまな用例がある言葉であるが、一般的に「文脈」と訳されることが多い。文脈により「脈絡」、「状況」、「前後関係」、「背景」などとも訳される。

    ・情報工学におけるコンテキストは、デバイスが使われている状況を意味する。例えばある時点でデバイスを使用しているユーザーなど。



    コンテキストとは【context】 - 意味/解説/説明/定義 : IT用語辞典

    コンテキスト【context】

    「文脈」という意味の英語で、様々な用例があるが、特に、実行中のプログラムが処理内容を選択する際の判断の材料となる、プログラムの内部状態や置かれた状況、与えられた条件などを指すことが多い。

    例えば、複数の型の引数を取ることができるようになっている演算子や関数が、引数の型に合わせて返り値の型を選択する場合がある。このような場合、その演算子や関数を呼び出す際の引数の型がコンテキストである。



    コンテキストとは (context): - IT用語辞典バイナリ

    【英】context
    コンテキストとは、プログラムの実行に必要な各種情報のことである。

    「context」(コンテキスト)は、「文脈」、「前後関係」などと訳されるが、IT用語としては意味がイメージしづらく、単にコンテキストとある場合は、何らかの制御情報と考える方がわかりやすいことが多い。

    コンテキストは、コンテキストメニューやコンテキストスイッチなど、複合語として使用されることが多い。コンテキストメニューとは、操作の場面に応じてメニューを表示することである。また、コンテキストスイッチとは、CPUのレジスタの情報をコンテキストとして保持して、プログラムの実行に応じてコンテキストを切り替えることである。



    コンテキスト(Context)の意味がさっぱり分かりません。 | PHPのQ&A【OKWave】

    コンテキストはもっと一般的な言葉です。
    日本語の文脈の意味を素直に考えれば、問題ないと思います。

    たとえば、
    「蕎麦をいただいた」という発話で「いただいた」は「貰った」と「食べた」の2つの意味が考えられます。この発話の表れた周りの会話でどちらの意味かが変わります。この会話の流れが文脈です。

    プログラミング言語の世界でも、特定の表現が、どこにどう書かれたかで意味が変わってきます。これが文脈依存です。そして、意味に影響を与える周りの記述が文脈(コンテキスト)です。




    ●OOPの欠陥
    OOPは、数あるプログラミング・パラダイムのうちの一つに過ぎない。
    OOPとて、磐石ではない。

    肥大したコードは、OOPであったとしても、メンテナンスが大変になる。
    OOPの弱点を補う手法として、AOPが考えられた。

    アスペクト指向プログラミングとは【AOP】 - 意味/解説/説明/定義 : IT用語辞典

     ソフトウェアの特定の振る舞いを「アスペクト」として分離し、モジュール化するプログラミング技法。
    オブジェクト指向プログラミングの問題点を補うために考え出された手法。

     オブジェクト指向プログラミングでは、属性(データ)と操作(メソッド)の集合であるオブジェクトをソフトウェアの分解単位として扱うが、オブジェクトとしてうまく分解ができないソフトウェアの「様相」や「側面」といったものが存在し、このような様相や側面は、複数のオブジェクト間にまたがる操作となる。これを「横断要素」と呼ぶ。

     横断要素の代表例としては、プログラムの実行の様子を記録するロギング操作などが挙げられる。横断要素はプログラムコード中に散在するため、すべてを把握し管理することが難しく、また横断要素に対して変更を加える場合にはコード中のあらゆる場所から該当部分を探し出して書き換える必要が生じる。

     アスペクト指向プログラミングでは、こうした要素を「アスペクト」としてモジュール化し分離することで、把握・管理・変更を容易にする。アスペクト指向プログラミングを導入することにより、既存のコードの手を加えなくてもプログラム中に散在する特定の機能を持った部分を書き換えることができる。アスペクト指向プログラミング環境は既存のプログラミング言語の拡張機能などの形で提供されているものが多く、Javaを拡張してアスペクト指向プログラミングを可能とする「AspectJ」などが有名。



    アスペクト指向プログラミング オーバービュー @IT:The Rational Edge (24)

     AOPは、既存のプログラミングのパラダイムや言語を「置き換える」ものではなく、それらと「連携」して表現力や有用性を向上させるためのものである。
    AOPを利用すると、関心事の分離(separation of concerns)をより適切に表現できる。これは、保守が容易なソフトウェア・システムを適切に設計するために必要である。



     結合点(join point)とは、われわれの関心事がアプリケーションと交差する、コード内の適切に定義されたポイントのことである。一般的に、それぞれの関心事について多くの結合点が存在する。結合点が1つか2つ程度であれば、苦労せずに手作業でコードを変更できる。
     AspectJでは、結合点をポイントカット(pointcut)としてグループ化することによって、結合点を定義する。



     ポイントカットの後には、通常のJavaコードのメソッドと似たコード・セクションが続く。これは、AspectJではアドバイス(advice)と呼ばれる。アドバイスには、before、after、aroundの3種類があり、それぞれ結合点の前、結合点の後、結合点の代わりに実行される。さまざまなバリエーションを使ってアドバイスをカスタマイズすることもできる。



     実は、AOPコードの正しさについて考える方法は、オブジェクト指向プログラミング(OOP)コードの場合と逆である。OOPでは、内側から外側へと進む。つまり、クラスについて考え、そのコンテキストを想定し、その後でクラスの正しさについて、単独およびほかのクラスとどのように相互作用するかという観点の両方から判断する。これに対してAOPでは、外側から内側へと調べ、それぞれの結合点に対する各アスペクトの影響を判断しなければならない。



    「アスペクト指向入門」を読みました — ありえるえりあ

    読む前のAOP(アスペクト指向)に対する印象は、「フックやインターセプタのような機能を形式化したもの」という程度でした。 これは一面的な見方であったようです。

    「オブジェクト指向は呼ばれる側のモジュールを再利用するための技術。一方、アスペクト指向は呼ぶ側のモジュールを再利用するための技術」という説明は、なるほどこんな見方があったのかと感心しました。 実際、オブジェクト指向に対するサブジェクト指向という考えがあり、AOPの源流のひとつのようです。知りませんでした。

    基礎編は非常に面白いです。読む価値があります。AOPは意外に使えるかも、と思ってしまいました。 後半、ポイントカット引数やインタータイプ宣言のあたりになると、面倒な印象が強くなります。

    最終的な感想は、テストやデバッグなどの補助的な役割には使えそう、と言うものです。本体のソースに手をいれず動的解析をしたい時に有用そうです。ad hocに実験用コードをAOPで書くイメージです。これはデバッガの領域かもしれません。AOPはデバッガに隠蔽されれば実用的に使えそうです。




    ●PHPでAOP
    PHPでAOPしている方がいた。
    [PHP] アスペクト指向っぽいライブラリ - The ruin of ruinz - Techmemo

    要するに、フックで処理を追記すればOK?

    bear-project - A resource oriented framework for PHP5.2+ - Google Project Hosting

    BEARはリソース指向のPHPアプリケーションフレームワークです。



    AOP - bear-project - アスペクト指向プログラミング - A resource oriented framework for PHP5.2+ - Google Project Hosting

    複数のクラスを横断する処理を独立したコンポーネントとし保守性を向上させるデザインパターンがあり、これをアスペクト指向プログラミング(AOP)といいます。BEARのリソースクラスで使用することができます。






    ●日本語とOOPのコンテキスト
    Life is beautiful: 日本語とオブジェクト指向

    「ユーザーにオブジェクトを先に選ばせることにより選択の幅を狭くして使いやすくする」、という考えをもう一歩進めて、ある操作をしている場の状態(例えば、どのフォルダーにそのファイルが置いてあるか、など。英語では context と言う)も、選択枝をせばめる際の情報として利用し、ユーザーがそのオブジェクトに対して実行しようとしていることを可能な限り類推すると、よりいっそう使い勝手が良くなるのである。

    この考え方を念頭においてみると、日本語はまさにオブジェクト指向である。



    コンテキストによる処理の切替え、処理の追加、…要するに分岐とフックってことでイイよね?
    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/844-c07d460d

    FC2Ad

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