mainvisual

こんにちは、あっきーです。

前回ちょっぴりと話していた、Webアプリケーションがだいぶ形になってきました。 今回、比較的大きなWebアプリケーションを作成したのですが、複雑な処理、高機能なレイアウトなどを実装してくうちに、 データの流れた処理内容などをがわからなくなってきました。原因は、「できるだけ早く、動くアプリケーションを開発した結果、 データ思考の開発になってしまったこと。」そして、「凝縮度と依存度を全く意識していなかったこと」があると考えています。

そういうことがあって、オブジェクト指向の言語として、フロントを書き換えて全面リファクタリングすることにしました。 しかし、オブジェクト指向という言葉と、オブジェクト指向を使えば、大規模な開発にも使えるという言葉はよく聞くけれど、 具体的に、どういう実装をすれば、そのような状態になるのかイメージがつかない。

実は以前に、Javaを用いて、オブジェクト指向型のプログラミングを行っていた。しかし、当時の認識では、「class=オブジェクト指向」という認識があって、javaさえ使えば、大規模開発も出来る。みたいな事を思っていました。しかし、そんなことはありませんでした。 あるオブジェクトがあるオブジェクトに依存していて、複数のクラスがまとまって、全然分割が出来ず、1ファイル変更したいだけなのに依存しているせいで、複数のファイルの修正を余儀なくされた経験が合った。

今考えてみれば、そもそも「オブジェクト指向とデータ思考」と「オブジェクト指向とは」という考え(認識)に誤りがあったのだと分かった。この考え方は、将来永遠プログラミングを仕事にする人にとって、非常に重要な考えになると思った。今回たくさんの文献を読んで、考えて、理解したことを忘れないように、この場に記しておこうと思う。

開発状況

現在、とあるWebアプリケーションを開発している。ぜんざいは、UIを作成している段階であり、主にReactを使用している。 なので、開発言語はJavascriptで、Reactに情報を出力するための整形用ライブラリとして、開発をしており、そのコードがあまりにも複雑になりすぎるので、オブジェクト指向を用いて、リファクタリングしようと考えた。

Javascriptのドキュメントを作るために

Javascriptは、型がありません。なので、どんなデータ型でさえ引数として受け付けてしまいます。この点について、内部で例外を出してエラーチェックをする方法も考えたが、関数を呼ぶ都度に型チェックを行い、なおかつ実行効率も下がってしまうことが考えられた。しかも、setXXXX()みたいな関数に関して、型が間違っていたからと言って、いちいち例外を出すわけにはいかない。 というわけで、ドキュメントを作って、適切な方で関数を使いやり方の方がいいのではと考えた。

参考になったサイトはこちら
http://www38.atwiki.jp/aias-jsstyleguide2/sp/pages/14.html

Javascriptの再入門。プロトタイプとクラスの考え方

元来、Javascriptにはclassについての実装がなく(ES6について、今回は考慮しない)prtotypeを使ってclassに似たような実装を行ってきた(実際はそうではないことが解っているがここでは簡略化のためにこういう表現をすることにする。いかのスライドを読めばわかる)。しかしながら、prtotypeについてちゃんと理解している人は、どれだけいるだろうか?__prpto__prtotyopeについての違いは?と聞かれたら、上手く説明でない人が大半ではなかろうか?そんなJavascirpt特有の特徴について、このスライドでかなり丁寧にまとめてくれている。実際、このスライドの内容を理解できれば、中級者の入り口に立てるのではないかと考えている。そして、登竜門でもある。と思っている

そんなサイトはこちら http://www.slideshare.net/yuka2py/javascript-23768378

これは是非見てほしい

オブジェクト指向とデータ思考の速度比較と速度差の原因

たくさんの本を読んだり、たくさんのサイトを読んだりしているうちに、「オブジェクト指向は遅い」とは「データ思考が早いからオブジェクトは使わないほうがいい」とか、あちらこちらに書かれている。なので、newを呼ぶのが遅いのだと思っていた。 更に読み進めるうちに、どうやら、newが遅いのではなく、コンピュータの仕組み上、オブジェクト指向を使うと、CPUとL1キャッシュの関係でミスキャッシュが頻繁に発生するために遅いのだと言うことが、わかってきた。

その説明をしているスライドがこれだ
http://tech.cygames.co.jp/archives/2843/

また、このスライドについての付加情報として詳しく紹介しているサイトはこれだ。
http://tokkono.cute.coocan.jp/blog/slow/index.php/programming/re-introduction-to-object-oriented-js/

javascript protptypeを使った場合と使わない場合の速度比較

これはタイトル通り

その説明をしているサイトがこちら
http://blog.basyura.org/entry/20110105/p1

オブジェクト指向とデータ思考

まず、プログラミングをするに当たって、どのような設計手法があるのかを調べた。 すると、どうやら、現代のプログラミングのスタイルとして、大きく分けて「オブジェクト思考」と「データ思考」の2種類がある事が分かった。では、その2者はどのように違うのだろうか。それは、この記事を読んだことでだいたい分かった。

https://sites.google.com/site/shunichisnote/translations/data-oriented-design