Create your own awesome maps

Even on the go

with our free apps for iPhone, iPad and Android

Get Started

Already have an account?
Log In

プログラミング言語, 型に 関する アイデア by Mind Map: プログラミング言語, 型に 関する アイデア
0.0 stars - reviews range from 0 to 5

プログラミング言語, 型に 関する アイデア

オブジェクト指向と関数型

オブジェクト指向

モデル, 細胞、生物, 宇宙レベルまでスケール

関数型

ラムダ式, 置き替えモデル, 置き替えをする主体がないと適用できない?, 宇宙レベルにはスケールしない?

すべては○○

すべては関数

Lisp を見るとすべてを関数 (ラムダ算法) とすることは可能

すべてはオブジェクト

ブロックはオブジェクト

メソッドもオブジェクト, 「Smalltalk ではメソッドはオブジェクトではない」の?

「すべては関数」よりは弱い?

オブジェクト指向は言語を超える

別言語で書いたものでもオブジェクトを取得できればメソッドを呼べる

Excel VBA から JScript 経由で XML Dom オブジェクトを呼び出せる

Scala や JRuby から Java ライブラリを使用する

JavaScript は関数的

比較対象

オブジェクト指向的なもの, 部品を作って配置する, Delphi, OpenLaszlo

機能のないテキストボックス, 機能を追加する, 同じ機能を他の部品にも適用できる, 再利用しやすい

部品単位ではなく機能単位で追加できる

参照透明性

同じ引数を与えると同じ結果が返ってくる

状態を持つものは引数で渡し、関数は参照透明にするのはどうだろう?

Erlang

関数型で変数を書き換えられない

入出力やカウンタなどにはアクターを使う

関数とメッセージパッシングは同一視できる

入力=メッセージ受信

出力=メッセージ送信

入出力先を外部からアレンジできる

ダイナミックで 緩い システムが 利用者・開発者を 救う

型なし

プログラム

DB

対話実行

コンパイル不要

アクター

メッセージングに よる オブジェクト指向 そのもの

オブジェクトから自然に拡張できる

Erlang のアクター

関数

関数やクロージャはオブジェクトで構築できる

関数オブジェクト (ファンクタ)

Smalltalk, ブロックは無名関数, value セレクタと共に値を与えると実行できる

Scala, オブジェクトに括弧を付けて呼び出すと apply メソッドが実行される, クロージャは apply メソッドを持つ

オブジェクト指向に よる システム 構築は 生物を モデルに すると 良い

アラン・ケイの考え方

Design Principles Behind Smalltalk (in Japanese)

生物学からインスピレーションを得た, THE EARLY HISTORY OF SMALLTALK

人間と人間のコミュニケーションを考える, 片方をシステムに置き換える

プログラミング言語はどれがいいか決めかねる

考える

古い IBM ミニコンでのプログラミング, IBM 1401 - Wikipedia, HELLO WORLD の 例を 見ること

比べる

恵まれている, どれでも OK

速度は考えなくてよい

動的言語の柔軟性を活用する

記述量が少なくなる

後でのメンテナンスが容易

コードの本質部分のみ記述

テストが容易

例, RSpec (Ruby)

Lisp はハードウェアモニタ向き

Multi-Paradigm Language TAO

対話的に小さな関数を作れば,必要なプローブやテストシーケンスはすぐ定義できる

それらを蓄積するだけで,非常に強力な開発ツールが自然に出来上がる

小さな Lisp インタープリタを 作れば, その上に コマンドを 構築する ことが できる

進化は Smalltalk 型がよい

オブジェクトとの対話型

ダイナミックな変更

一部の保存画像をアップローダーに移動する, 普通なら, アップロードする, DB の画像パス情報を書き換える, Smalltalk 型では, 画像情報オブジェクトにアップロード機能を付ける, 画像情報オブジェクトと対話してアップロード&情報書き換えをする, 利点, 対話的に実行できる, map などで条件を指定して一括して実行することもできる, 将来的にも使える, オブジェクトの機能, 外部ツールだとバージョンアップ時に使えなくなる

関数型で作る

同じ引数で呼び出すと同じ結果が返ってくる

入出力や状態を保持する部分は独立させる

Scala ならアクターにする