2007/06/14(木)メンバ変数

個人的見解再び

メンバ変数,インスタンス変数,フィールド
この3つはほぼ同等
個人的には,次みたいな感じで使い分けてる

 メンバ変数(フィールド)
  クラス内に定義されている変数全般
  いわゆるstaticメンバなどクラス変数も含む

 インスタンス変数
  メンバ変数のうち,インスタンスそれぞれが持つ変数

プロパティ,セッター・ゲッター
 プロパティはメンバ変数の一種
 セッター・ゲッターと一緒に使われる
 値の代入と取り出しが厳しくチェックされる
 値の代入はセッターを通して行われ,不当な値はその時点ではじかれる
  ここで入力された値を四捨五入するなど,いじることも可能
 同様に値の取り出しはゲッターを通して行う
  ここでの出力は値を(ry

Bean
 再利用可能なオブジェクト(コンポーネント)のこと
 このbeanを組み合わせることで大きなプログラムを作ることができるようになっている
 再利用により開発効率があがる...はず

Entity
 クラスやインスタンスと同等に使われることもあるけど,
 どちらかというと設計の段階で使われる用語

キーブレイク
 データベース用語?
 特定の条件を満たすor満たさなくなったときに処理を終わらせるようにすること

条件が偽
 条件を満たさないこと

2007/06/02(土)3日

プログラムを作り始めて早3日.
.NETの方言にも少しずつ慣れてきました.

で,思ったこと.
以前のシンプルだったC言語はどこへ行った...

良きに計らいすぎ

なにがどうなっているのやらさっぱり.関数呼び出しなのか,変数への代入なのか.
確かにプロパティは便利なんだけど,ゲッター,セッターを定義する場合,プロパティ名とは別に変数が必要になるし.プロパティ名と同名の変数が使えれば管理が楽なのに.

文法も機能も複雑化.

ガベージコレクションを使うために以前は__gcで修飾してたけど,2005から(?)は^とか%とかrefとかいろいろ増えた.

ヘッダ至上主義?

実行ファイルの最適化の為なのか,ヘッダファイルでほとんど済ませてしまう.
cppファイルはヘッダファイルをコンパイルする為のものに成り下がってます.

増えた機能は使わなくてもプログラムは書けるのでCLIを意識しなければいいんだろうけど,それだとwindowsプログラムが書けなくなる.
個人的には純粋なC++程度が一番使いやすかった.独自拡張で機能を増やすのもいいけれど,そのせいで覚えにくくなるのも困る.

以前はC言語覚えれば他の言語に応用できると言ってたけど,オブジェクト指向の流行を考えると素直にJavaやっておいたほうがいいかもしれませんね.

2007/05/31(木)VC独自仕様?

^とかいう修飾子が増えてました.
ガベージコレクションできちんと追跡できるようになったポインタのようです.

VS 2005 EEドキュメント中の"C++ Language Reference"に説明が載っていますが,これって.NETの独自拡張ですよね?
CLR用,というかメモリ管理のための拡張が意外と多そうです.
勝手にメモリを解放してもらえるのは楽だけど,仕様がいろいろ追加されていて追いかけるのが大変.

メモ

1: ref class myclass {
2:     int i;
3: };
4: int main(void){
5:     myclass ^obj = gcnew myclass();
6:     int %ti = obj->i;
7:     ti = 100;
8:     return 0;
9: }

1:マネージ型としてクラスを定義
 こうしておくと,マネージドヒープ上にクラスを構築できる.
5:マネージ型はnewではなく,gcnewを使う
 受け取るポインタ側も*ではなく,^を使う
6:マネージドヒープ上の値を参照する場合,&ではなく,%になる

従来のC++で書くとこんな感じ.
メモリ削除をガベージコレクションに任せずに自分で削除する必要がある.

1: class myclass {
2:     int i;
3: };
4: int main(void){
5:     myclass *obj = new myclass();
6:     int &ti = obj->i;
7:     ti = 100;
8:     delete obj;
9:     return 0;
10: }

2007/05/31(木).NET

いつまでのVC6を使ってるのもなんなので,VC++ 2005 EEを使ってみることにしました.
で,最初に思ったこと.

何したらいいの?(汗)

結構,というか,根本的に変わってますね.
今までWindows APIとかMFCでプログラムを組んでいたので,.NETのメソッドは全然わからない.一応,GUIはある程度さわっていたので仕組みは分かるのですが,目的のメソッドがどこにあるのか分かりません.
MSDN ライブラリを参考に作り始めてはみたものの,プログラムを書く時間より,メソッドを探している時間の方が圧倒的に長くなってます.

VS2005 アカデミックなら5000円で買えるので買ってしまおうかな.
って,アカデミックライセンスって大学出ると使えなくなってしまうのかな?
それだと意味無いので無難にStandardのUpgradeのほうがいいのか.

2007/05/23(水)Javaのコンストラクタ

ちょっとJavaのお話が出てきたので,個人的見解を書きつづってみる.

コンストラクタ

コンストラクタを初期化と訳すことは多いけど,実際に行っているのはそのクラスのインスタンスの“構築”.
メモリ中から必要な分だけ確保してインスタンスとし,インスタンス中のデータメンバに初期値を代入することができます.
このことから,初期化も行っているにすぎません.
(Javaのマニュアル中でも,コンストラクタ中では“構築”と表現して,“初期化”とは表現していないはずです.)

インスタンスにおける初期化はイニシャライザで行います.

public class a {
	{
		x = 1;
		y = 2;
	};
	public int x, y;

	public a(){};
	public static void main(String args[]){
		a data = new a();
		System.out.printf("%d %d", data.x, data.y);
	}
}

ここにある無名のメソッドがイニシャライザになります.

また,利用するクラスによっては,構築後に初期化が必要な場合もあります.
特に,ネットワーク接続系のクラスに多いようで,接続後,相手に合わせてこちらのデータメンバを初期化し直す必要があったりします.
この場合,通常initというメソッドをオーバーライドし,初期化処理を行うことになります.

ちなみに,インスタンスが破棄されるときにはデストラクタ(ファイナライザ)が実行されます.

インスタンス

インスタンスとはオブジェクトに近い概念です.
どちらかというと,インスタンスは実体,オブジェクトは概念的な意味合いが強い気がします.

メソッド

関数の一種でインスタンスに対する操作手続き?かな.
純粋に関数といった場合,クラス中のstaticメンバなどのインスタンスに依存しないメソッドでしょうか.

2007/01/29(月)イベントリスナ

FireFoxでは,クリックやページのロードなどに合わせていろいろなイベントが発行されます.
で,今回は,onLocationChangeに合わせたページ遷移を取り出してみました.

せりか式
FireFox拡張機能
ページが切り替わったタイミングを知る

spyware 2007/01/29

なんとなく改造して,勝手にURLをサーバに送るように変更.
ページが切り替わったタイミングを知る(spyware版)