2008-01-01から1年間の記事一覧

インターフェイスに色を付ける

インターフェイス設計の際に考慮する項目 public Interface ISomethingProcesser { void process() } public Interface ISomethingProcesser2 { void process(SomethingData s_data) } public Interface ISomethingProcesser3 { void process(SomethingData …

オブジェクトの生存期間について

なるべく短くなるように設計、実装する。 短い方が管理しやすい。(生成し、用が済んだらさっさと解放する感じ。) 書き方によって生存期間が変わる1 public class SomethingProcesser { public SomethingProcesser(SomethingData s_data) public void proce…

入力コントロールについて

数字、日付を入力する項目は可能な限りそれ用のコントロールを使用する。 TextBoxで入力チェックや入力制限をかけるよりよほどコスト的にも可用性も高いと思う。 そんな単純なことに今更ながら気づいた。。。

等値演算子(==)とEqualsメソッド

C#

2つの値が等しいか調べる、等値演算子(==)とEqualsメソッドの違い: .NET Tips: C#, VB.NET 処理 参照型比較の場合はどちらの比較方法も、同じオブジェクトを参照しているか比較する。 値型比較の場合はどちらの比較方法も、同じ値であるか比較する。 早さ ど…

CompareTo

C#

基本的にCompareToは並べたときの順番を定義したものですので、等価の確認には使用しないほうが良いでしょう。

UnitTest書いてみた

C#

リフレクションの勉強をかねてUnitTestツールを書いてみた。 Formにはテスト一覧表示用のTreeViewとテスト結果出力用のTextBox、テスト実行ボタンButtonを配置する。 CompareToメソッドをGetMethod()で取得する際、目的のクラスとObjectクラスにCompareToメ…

QRコード

独自仕様でQRコードみたいな二次元バーコードが作れそう。 画像の中にこっそりバーコードを組み込んで、シークレット的な感じでできればおもしろそう。

クラス・データ配置

物理的な構造と、クラス・データ構造をそろえる。 それに関係して、処理クラスが駆動元コンポーネントに配置されているかを常に確認する。

設計の妥当性チェック

上記の例を見ればわかると思うが、適切ではない場所に配置してしまうと 実際の処理を行うところにアクセスするまでの手順がややこしくなってしまう。 ややこしくなった場合は、何かが違うサインなので死ぬ気で考えてみる。 データやイベントの流れがシンプル…

構造とデータ配置

物理的な構造と、クラス・データ構造をそろえる。 処理クラスが駆動元クラスに配置されているかを常に確認する。 メソッドを作成するときは処理対象のデータがあるクラスに作る。 クラスやメソッドに引き渡すデータは必要なときに必要な分だけを渡すようにす…

今までのプログラミングTipsまとめ

これらを常日頃に考えて設計・製造を行う。

TemplateMethodパターン

Template Method パターン - Wikipediaアルゴリズムのテンプレートを提供する。 abstract class TemplClass { //privateなメソッドは継承クラスで実装必要あり。 //実際に外部から使われる操作はあらかじめ定義されており、どの継承クラスで呼び出しても同じ…

Adapterパターン

Adapter パターン - Wikipediaラッパーパターンとも呼ばれる。 基本的な委譲の使い方。 「既に提供されているもの」と「必要なもの」の差を埋めるパターン。 class Adapter{ private ITarget target; public Adapter(ITarget target) { //メンバにセット } p…

Interpreterパターン

Interpreter パターン - Wikipedia構文解析に使用する。普段ではあまり使わないパターンかな。 Contextクラス 解析対象をトークンに分割する。 解析文字列をメンバに持つ。 非トークン文字列リストをメンバに持つ。 現在のトークンを取得する操作を持つ。(解…

ループ展開

◆マッチしたい条件 「"こんにちは"」のような、"で囲まれた文字列("含む)をマッチングさせる。 ただし、特殊文字としてダブルコーテーション自体を表す「\"」が文字中に現れる。◆ループ展開 1,パターンの開始・終了を表すパターンを考える。 →この場合だとど…

正規表現メモ

処理の流れ ◆文字列 「1234567890」 から 「\d*:」 パターンを抜き出す場合の流れ パターン「\d*」に一致する文字列を探す。この場合は全文字列が一致する。一致した文字列はステートに入る 次に「:」に一致する文字列を探そうとするが、全文字列が一致して…

クラス利用者の心得

ClassAのmethodAAA()はClassAの初期化メソッドinit()が呼び出されていない場合には、 内部で呼び出すような処理になっている。 その為にClassAを利用する側では初期化処理init()を呼び出さず、直接methodAAA() を呼び出す。 →こういう場合、利用側のコードは…

Commandパターン

Command パターン - Wikipedia どの種類の操作も"操作"とひとくくりにする -> Commandインターフェイス 操作毎に実装クラスを作成する。このクラスに実際の処理を行うクラスを内包する。 下記ソースは Commandインターフェイスとして「ICommand」 実装コマン…

今日の反省

・スレッド間の同期取りは本当によく考えて、最小範囲のみに使用する。範囲が大きすぎる・使用箇所が多すぎると、スレッド処理をしているのに逐次処理と変わらなくなるよ。・設計が正しく行われているかのチェック方法。関係するクラスとやりとりされるデー…

Xmlの操作 書き込み編

require 'rexml/document' doc = REXML::Document.new() doc << REXML::XMLDecl.new('1.0', 'UTF-8') root = doc.add_element("社員名簿") node = root.add_element("課", {"課名称" => "営業"}) name_node = REXML::Element.new("名前") name_node.attribut…

Xmlの操作 読み込み編

item.xml:これを下記コードで読み込みする。 <inventory title="OmniCorp Store #45x10^3"> <section name="health"> <item upc="123456789" stock="12"> <name>Invisibility Cream</name> <price>14.50</price> <description>Makes you invisible</description> </item> </section></inventory>

DataGridViewのVirtualModeサンプル

C#

using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace DataGridViewVirtualModeSample { public…

関係のあるデータを複数箇所で管理する場合

上記のようなことになった場合、まずはデータを 1,ベースとなるデータ 2,ベースを加工して使用するデータ(利用側) に分けて考える。その上で、 利用側データに対応するベースデータへの参照を持たせる(リンクを張る) ベースとなるデータは並び変えや削除…

ManualResetEvent

スレッド間のやりとりを実現する。 下記の例では、スレッドBはスレッドAの処理が終わるまで待機する。 MSDNにManualResetEventの配列を使ったサンプルがある。また、WaiteOne()後のリセットを自動で行ってくれる。AutoResetEventクラスも存在する。 考え方・…

readonlyとconstの違い

C#

readonlyは宣言時とコンストラクタ内のどちらかで初期化ができる。 constは宣言時のみ初期化ができる。 readonlyはインスタンス毎に別の定数を作ることができる。

volatile(ボラタイル)

private volatile int count_val = 0; 複数のスレッドから参照される可能性のあるメンバにつける。 これをつけると、コンパイラの最適化の対象にならない。メンバのRead/Writeを行う際に 必ずメンバ変数の実体にアクセスするようになる。 コンパイラの最適化…

スレッドのロック

ロックオブジェクトには同期をとるスレッドから参照した時に一意となるオブジェクトを指定する。 値型を指定した場合にはボックス化が行われて、各スレッドが別オブジェクトを参照することになる。 その為、ロックは行われない。thisオブジェクトを指定した…

スレッドの終了確認

Thread.Join()を使用する。 呼び出しもとスレッドを対象スレッドが終了するまでブロックする。 GUIプログラムでこれを呼び出すと、固まってしまうので注意すること。 そこで下記の用にして対応した。 while(thread.IsAlived()) { Application.DoEvents; }

スレッドの優先順位

ThreadクラスのPriorityプロパティにて設定。 startメソッド前に設定すること。 実際にサンプルを動かしてみたが 優先順位を上げたからといって、そんなに変わるものでは無かった。

WorkerThreadから情報を送信する

デリゲート、イベントを使用してスレッド処理中の状態の変化を送信する。 class Worker { public delegate void ThreadProcessUnitCompleteEventHandler(int state); public event ThreadProcessUnitCompleteEventHandler eventHandler; private bool finish…