記事一覧
シアトルで実践する「プログラミング的思考」[14] 抽象化(3)インターフェーイスによる抽象化
ソフトウェアは分解によっていくつもの小さなソフトウェア部品に分けられ、それらの部品が集まって連携することで問題を解決します。その際、それぞれの部品は抽象化された機能を提供し、部品と部品の間の「関わり」も抽象的になります。このような部品間の接続を「ゆるくつながっている」と表現したりします。(この「ゆるいつながり」は英語で loose coupling と呼んだりします)。
分かりやすい例を挙げると
シアトルで実践する「プログラミング的思考」[13] 抽象化(2)パターン認識による抽象化
抽象化(1)分解による抽象化 では「分解の文脈」でどのように抽象化が行われるかを解説しました。ここでは「パターン認識の文脈」で抽象化をみていきます。パターン認識は「プログラミング的思考」の派生元とされる「コンピューテーショナルシンキング」の4つの主要概念のひとつです。他の3つは分解、アルゴリズム設計、そして抽象化です。
パターン認識(pattern recognition)とは解決すべき問題の具
シアトルで実践する「プログラミング的思考」[12] 抽象化(1)分解による抽象化
「抽象化 (abstraction) 」は「プログラミング的思考」の派生元と言われている「コンピューテーショナルシンキング」の4つの主要概念のうちのひとつです(その他は分解、パターン認識、アルゴリズム設計)。
「抽象化」がその4つのうちのひとつであることから、他の3つとは独立した概念のように感じるかもしれませんが、実際はお互い密接に関係しています。その関係を表すのは少し難しいのですが、三角形を使
シアトルで実践する「プログラミング的思考」[11] 論理的に考える(2)ロジックを使う
論理的に考える(その1)では「論理的にアルゴリズム設計をする」ことを解説しました。ソフトウェアエンジニアが「重複がなく、なおかつ問題の全てを網羅する」よう論理的にアルゴリズムを設計することを取り上げました。
ここでは「論理的に考える」という思考はもちろんですが、さらに「論理を使う」場合について解説します。具体的には条件文と呼ばれる制御構造でどのようにロジック(論理)が利用されるかを見ていきます。
シアトルで実践する「プログラミング的思考 」[10] 論理的に考える(1)なぜ?の思考
ソフトウェア開発やプログラミング活動において、論理的思考が必要である事はよく知られています。プログラミング的思考も「論理的に考えていく力」と定義しています。
自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考え
シアトルで実践する「プログラミング的思考」[9] ~データを表現する(2) データを抽象化する
データを表現する(2)デジタル情報として表す では「デジタル情報」の利点と、人間にとって扱いやすいデジタル情報としての「データ型」について解説しました。ここではデータ型の抽象化についてみていきましょう。
抽象データ型データ型が表す事象が複雑になり、より人間にとって意味あるものに近づくにしたがい「抽象化が進む」と言い表します。高度に抽象化されたデータは「抽象データ型」と呼ばれ始めます。
抽象デー
シアトルで実践する「プログラミング的思考」[8] ~データを表現する(1) デジタル情報として表す
(上の挿絵「お前もだぞ」と書くつもりが「お前だぞ」と間違えて書いて意味不明になってしまいました。できるだけ早く直します。すみません)
コンピューターシステムで問題を解決しようとするときまず必要なのが、その問題に関わるデータをコンピューターが処理できる「デジタル情報」として表すことです。世の中にある様々な物事や概念が、デジタル情報としてどのように表されているかを知る事は「プログラミング的思考」を行
シアトルで実践する「プログラミング的思考」[7] ~分解する(2)ソフトウェアの分解
分解する(1)のおさらい分解する(1)責任で分ける、ではコンピュータシステム全体が物理的なハードウェアから、個々の問題を解決するアプリケーションまで「責任」を軸に分けられているようすを解説しました。
ハードウェア層、ドライバ層、そしてオペレーティングシステムの上で動くアプリケーションが、一般的なプログラミングの成果物です。問題によってはハードウェアを含めた全体を解決(ソリューション)として開発す
シアトルで実践する「プログラミング的思考」[6] ~分解する(1)責任で分ける
「プログラミング的思考」の由来でもある「コンピューテーショナルシンキング(computational thinking)」には4つの柱となる概念があります。分解(decomposition)はその中のひとつです(それ以外の3つは、パターン認識、抽象化、そしてアルゴリズム設計)。
「分解」とは、ひとつの大きな問題を、マネージ出来る小さくて理解しやすい部分に分け、それぞれを解決して最終的に統合して問