/ 最近 .rdf 追記 編集 設定 本棚

脳log[20151202]



2015年12月02日 (水) これは興味深い。問題文作成者の理解が問われる。「応募にあたっての課題が、ドワンゴ プログラミング講師候補採用試験問題に書いてある。 正解が「オブジェクト指向プログラミング」となる問題文を作成せよという課題が興味深い。」■自分の理解は(……と書きながら考える理解は)、「構造化プログラミングの一段階で、あるデータ構造とそれを特異的かつ独占的に扱う手続き群とを一体不可分のものとして扱うこと。」(60文字)■あ、これが「正答の直接的な記載」にあたるのか。「「最大200文字以内」という条件はいいとして、「正答の直接的な記載を禁ずる」ことと、「プログラミング言語名の記載を禁ずる」という条件がある。」いやしかし正答は「オブジェクト指向プログラミング」しかないのだから当たらないのかな。自分にとってこの2つは限りなくイコールに等しい(※すべてを書ききってはいないのでイコールではない。しかし almost equal to equal ってややこしいな)から直接的記載に見えるんだなあ。■Smalltalkを念頭におく人は(俺は Smalltalkを知らないけど)、オブジェクトの概念が Active Object パターンのそれだと思ってる。乗り越えられない断絶。昔にもちょっと書いてた>20110610。■20110610からリンクしてる先のリンク先にこう書かれてる。「当初は三番目にクックの「手続きによる抽象化」(Object-Oriented Programming Versus Abstract Data Types (PDF))を挙げていましたが、その後の学習で、これは新たなオブジェクト指向の提唱ではなくリスコフの抽象データ型の再定義(整理・分割)であるとの解釈が可能であること、つまり、データ(オブジェクト)に手続きを内包した場合を「オブジェクト指向」、そうでない場合をこれまでどおり「抽象データ型」と呼べばいい…という比較的単純な主張であったと遅まきながら気づくことができました。したがって、二番目の大枠である「型を意識したOO」のバリエーションのひとつとしてこれに含めてよいと判断し思い切ってばっさり削除しました。」俺の理解は「クックの「手続きによる抽象化」」とちゃうかな。PDFは読んでないけど。そして、ばっさり削除する方を選び間違えてると俺は思う。■俺が OOP の必須要素をただの現実的な解・手段であるとして削ぎ落とし無視してる可能性が微粒子より大きいレベルで存在してるかな。■インタフェイス、テンプレート(ダックタイピング)、コンセプトの置き所は Design by Contractの周縁? OOP、DbC のその先は関数型プログラミングに由来する何かを引っぱってくるのだろうか(もう来てる?)。「なぜ関数プログラミングは重要か - 関数型プログラミング言語は二つの新しいタイプの糊を供給する。すなわち、高階関数と 遅延評価である。これらの糊を用いて新しいわくわくするような方法でプログラムを簡単にモジュール化できる」。他には宣言型プログラミング言語と分類されるらしい SQL (ja.wikipedia.org)から何か引っぱってくるのだろうか。それなんて LINQ (msdn.microsoft.com)?■LINQのベース技術がなかなか興味深い。リンクした MSDNからキーワードを抜き出すと「ラムダ式と式木(Expression Tree)」Expression Treeは式を実行時に操作可能な対象とするしくみ。「拡張メソッド - 拡張メソッドとは、動的言語のコミュニティでは一般的になった "duck typing" の柔軟性と、静的に型指定される言語のパフォーマンスとコンパイル時検証を組み合わせたものです。」「クエリの遅延評価 - クエリが評価される時点に達すると、IQueryable<T> が列挙されるため、データ ソースは全クエリを 1 つのバッチで表現する式のツリーを処理できます。」「データ中心のプログラミングスタイル - LINQ プロジェクトでは、状態と動作の両方を兼ね備えた完全なオブジェクトではなく、主に構造化された値に静的な "形状" を提供することを目的として何らかの型が存在するような、データ中心のプログラミング スタイルをサポートします。このような論理的結論に達する前提を考えると、多くの場合、開発者の関心事項のすべては値の構造にあり、その形状に名前付きの型が必要になることはほとんどない点にあります。これが "匿名型" の導入につながりました。」データ中心のプログラミングスタイルだってさ。たとえばこの日記で関連するエントリを5つ表示したいと考えたとき、ファイルからエントリを配列に読み込んで、スコアを計算して、ソートして、表示するために体裁を整えて、それぞれの行程に設定ファイルに書かれたオプションがあって、速度とメモリ使用量を最適化するハックがあって、と、個別具体的でとっちらかったファイル操作・配列操作・DB操作を順々に並べたくないというのはある。■関数型由来でも宣言型由来でもそれが、これまで操作対象ではなかったもの、これまで手続き・実行軸に沿って並べられていたものを取り扱う新しい方法であり、「ストレートなコードを直列につなぎ合わせて入力を望みの出力へ導きたい。直列でなければ Map & Reduceで。(20150514)」に対する答えなら嬉しい。■OpenCLとかも、計算資源としての GPUの他に実行時コンパイルの側面が興味あるけど、言語の後ろに隠れてくれないかなあ。■@2015-12-06 これぐらい書けるといいのにね。「オブジェクト指向プログラミングとは結局なんなのか | 黒曜の吹き溜まり」■@2015-12-17 読む。「技術解説 – LINQ – kekyoの丼