2013年8月16日金曜日

モジュールの結合


結合の基準
サイズ=モジュール間結合の数
サイズは小さければ小さいほど良い。
・引数が1つのルーチンは引数が6つのルーチンより結合が弱い(サイズが小さい)
・4個のpublicメソッドからなるクラスは37個のpublicメソッドからなるクラスより結合は弱い

結合の可視化
・引数による結合は、グローバル変数による結合より明示的なので良い

結合の柔軟性
・モジュール間の結合が容易に帰られるほど柔軟性が高い
var employee = {'雇用日': , '職種': , ....};
に対して、雇用日と職種から休日を算出する関数は
function lookupVacationBenefit ( employee) { ... }
とするよりも、
function lookupVacationBenefit ( 雇用日, 職種 ) { ... }
にしたほうが、他のモジュールからも扱いやすくなる。
(過剰な情報伝達が悪になる例でもある)

結合の種類
○単純パラメータ結合
○単純オブジェクト結合
△オブジェクトパラメータ結合
×セマンティック結合


情報の隠蔽と変更の影響の最小化

指針
・情報を隠蔽し、内部構造は必要がなければ考えないで済むようにする
・変更が発生したときに、その影響を一カ所にとどめるようにする


具体的なプラクティス

・ユーザーとのやり取りをするコードを一カ所に集中させる
・マジックナンバーのハードコーディングは避け、定数として一カ所で定義する

・グローバル変数を避ける(必要以上のデータを渡さない)
・循環依存(AからBを参照し、BからもAを参照する)をしない
・変更されそうな部分を予測して、分離する
・状態変数としてブール型ではなく、列挙型を使う
・状態変数は直接参照せずに、アクセスルーチンを使い抽象化する
・他のモジュールへの依存度を減らし、疎結合(弱い結合)にする


2013年2月5日火曜日

ソフトウェア開発のノウハウ



前提:ソフトウェアの開発 = 知的生産活動
(1)ビジョンステートメント
(2)仕様とアーキテクチャを固めるためのプロトタイピング
(3)スタートダッシュの20%で80%の完成を目指す
(4)頻繁なαリリース



前提:ソフトウェアの開発 = 知的生産活動
クリエイティビティに100%のコストが集中している。
そのため、どれだけ人数とお金を投入したところで、成果が全くでない事がある。
複数の行程に分割して、それぞれの作業コストを見積もるということも難しい。
大事なのはクリエイティビティ。

(1)ビジョンステートメント
最初に作ろうとしているソフトウェアが成し遂げようとしているビジョンを明確に定めて、それは明文化しておく。これを行うことによって、制作の途中で本来何をすべきだったかを忘れて迷走することを防ぎ、さらにはモチベーションを高めることができる。

(2)仕様とアーキテクチャを固めるためのプロトタイピング
実際に形にしてみないと、本当に必要な仕様や最適なアーキテクチャを理解できない。
つくっていく過程で「ここはこうしたい」「こうすれば他でもうまくいく」など新しいアイデアが生まれてくるのである。細部まで作ってからのアーキテクチャの変更は不可能に近いので、この段階で徹底的に妥協無しで作り直しをする必要がある。

2012年8月20日月曜日

ZenCodingショートカットまとめ


Command+Eで展開

HTML5 → html:5
HTML4.01Transisional → html:4t
HTML4.01Strict → html:4s
CSS → link:css
JavaScript → script:src


2012年4月28日土曜日

[Objective-C]配列にオブジェクトを格納する場合のメモリ管理

★iPhoneプログラミングのTips★

配列や辞書(dictionary)周りのメモリ管理について。

メモリリークしないために、オブジェクト生成にメモリを確保(alloc)したら、
deallocでリリース(release)するのが基本だが、

配列・辞書にオブジェクトを格納して管理しようとする場合に、
allocやらretainやらreleaseは必要になるのか?という話。

stackoverflowでわかりやすい説明を発見。
http://stackoverflow.com/questions/885839/with-an-nsarray-of-object-references-do-i-explicitly-release-all-objects-in-the

結論から言うと、配列の中に格納したオブジェクトに関しては、
★allocなりretainなりでリテインカウントを上げる必要がある。
★配列をreleaseしたときに、中のオブジェクトも自動でreleaseされる。

例えばこんな具合。

//配列をグローバル変数にする為にリテインカウントを1上げる。
mojilabelArray = [[NSMutableArray alloc] init];
//配列に格納するオブジェクトに関してもリテインカウントを1あげる。
CCLabelTTF *ttllabel = [[CCLabelTTF labelWithString:moji fontName:@"Arial" fontSize:50] retain];
[mojilabelArray addObject:ttllabel];
//dealloc
[mojilabelArray release];
//ttllabelはmojilabelArrayがreleaseされたとき、同時にreleaseされる。

2011年9月29日木曜日

HTML&CSSパターン【随時更新】

リストのマーカーを画像で表示する:その1
☆選択した要素を横中央ぞろえ marigin: 0 auto;
☆選択した要素の子要素を横中央ぞろえtext-align: center;
背景画像固定
☆画像テキストボックスと余白
余白はpaddingでとる。ただしpaddingした大きさだけ外枠のwidth,heightをマイナスすることを忘れずに。 例:
.txtbox { width:451px; height:52px;background:url(box.gif) no-repeat; margin: 0 auto; padding: 10px 10px;}
☆テーブル
その1:テーブルタグを使う