ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

オブジェクト指向のクラスとDBのエンティティが一致する理由を、正規化操作から考える。

2008-06-30 18:35:10 | Weblog

 DBの正規化によって出てきたエンティティは、テーブルに相当するが、
このエンティティをモデル上のクラスとしていい理由というのは、
どこにも書いてないような気がするので、ちょっと書いてみました。

 その理由は、正規化理論から来ると思います。以下、DBの正規化から、それを
オブジェクト指向の世界からみると、どーなるかという関係を交えつつ、書きたい
と思います。




■そもそも

 そもそも、正規化とは、データベースにおいて、1事実1箇所に纏め上げる作業です。
 1事実1箇所に書くために、IDを振って、一意になるように管理します。

 一方、オブジェクトというのは、1つの存在であり、IDを振って管理できる
(アイデンティファイできる)ようなものです。

 つまり、エンティティもオブジェクトも、IDを振って一意に管理できる存在なわけで、
そのエンティティを導き出す正規化は、同時にクラスを導き出す操作でもあるといえます。




■第一正規形をオブジェクト指向的に見ると・・

 第一正規形は、繰り返しを排除しています。
 繰り返している要素というのは、1個1個区別できるわけです
 (1個目、2個目と区別できるから、繰り返しとわかる)

 そーいうものは、繰り返し各要素が、それぞれのオブジェクトともいえます。

 そこで、1個1個の存在にとりあえず分けます(分けなくてもいいけど・・)




■第二正規形をオブジェクト指向的に見ると

 第二正規形は、主キーを決めています。
 主キーは、IDを振って一意にする行為ですが、これはまさに、オブジェクトに
IDを振って一意にして、オブジェクトを管理している行為です。

 ということで、これは、オブジェクト(クラス)を決定している行為ともいえます。

 その後、第二正規形においては、複合キーの場合、キーを構成する一部のキーが
他項目と従属関係にあるかどうかチェックして、そうなっている場合、分離します。

 この行為をオブジェクト指向的に考えると、キーの一部に共通性があり、それを別に
抜き出して定義できるということで、継承できる親を分離している行為になります。




■第三正規形をオブジェクト指向的に見ると

 第三正規形は、推移従属関係を抜き出します。
 これは、主キーがきまると、ある項目(主キー以外の項目)がきまりますが、
その項目がきまると、値がきまってしまうというものです。

 これをオブジェクト指向的に考えると、
 主キー項目によって、オブジェクトそのものが定義されるわけですが
 そのオブジェクトの構成要素がある場合、構成要素のIDがきまってしまえば、
構成要素の属性値はきまります。そこでこの場合、その構成要素を分離している
ことになります。

 つまり、オブジェクトが、他オブジェクトが集まって構成されている場合、
その構成要素ごとに分離している操作ということになります。

 ただ、わざわざ、構成要素を分離しなくてもいいこともあります。
 車はタイヤから出来ていますが、自動車税の計算をするときに、タイヤに分割する
必要性はありません。これが、第三正規形まで行わない、正規化崩しになってきます。




こんなかんじで、正規化の行為は、クラスを導き出す行為ともいえそうです。

なので、エンティティとモデルのクラスが一致して来るんだと思います。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

修正可能なシステム その8 入出力のほか、副作用によって、再利用可能か決まる

2008-06-28 14:33:05 | Weblog

 シリーズ修正可能なシステムのつづきです。
 前回、修正可能なシステムで、修正の必要があるかないかは、

  ・入出力が同じ
  ・副作用部分が同じ

 という話をかいて、副作用について、書かなかったので、今日はその話の続きです。




■副作用とは

 副作用とは、あるメソッドの入力(引数)と出力(返り値)以外に、値を変更(追加、削除含む)しているところです。
 多くは、ファイル、DB、メモリ(セッションや共有メモリなど)への書き出しになります。

 これらの部分への操作が、副作用になります。




■副作用が同じでないといけない
 当然、ファイルとか、セッションの設定内容が同じでないといけません。
 ただし、ほかのプログラムで、ここを書き変えられてしまった場合、
 (つまり、DBの構造が変わってしまった場合、自分はなにも変更してなくっても
  修正っていうこと)

 で、実は、この副作用の変更が、一番わかりずらく、変なところで、セッションの値を変えられたり、DBの項目の意味を変えられたりします。
 この辺の、副作用の管理が、いちばん修正において、重要になってきます
 (引数と返り値に関しては、注意がいくけど、副作用の変更までを、網羅しきれないことが多い)




 ってなところです。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

トップレベルドメイン名部分に好きな文字列を使用することが可能に

2008-06-27 19:39:19 | Weblog

ここのGIGAZINEの記事
「.com」や「.net」といったトップレベルドメイン名部分に好きな文字列を使用することが可能に
http://gigazine.net/index.php?/news/comments/20080627_tld/

によると(以下斜体は上記サイトより引用)


わかりやすく言うと、今までは「gigazine.net」「gigazine.biz」のようにできたわけですが、これが「yahoo.gigazine」とか「google.gigazine」のようにして、トップレベルドメイン名の部分に好きな文字列を使用することができるようになるというわけです。


こーなると、URL見ただけでは、どこの国のサイトか、わかんないね(^^;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

やっぱり

2008-06-26 17:13:52 | Weblog

わかってないのに、Webから、ソースコード
パチってきて、はりこむから、
プログラムがおかしくなるんだよね(-_-;)

インターネットがでてきて、新人教育がやりにくくなった??

うー、新人教育で、想定外の不必要に複雑なプログラムを書かれ
(意味分かってないのにパチってきたらしいプログラムを張り込まれ
 ぐっちゃぐっちゃになってる)
それへの対処で、今日はブログ書くひまもないよ(-_-)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

修正可能なシステム その7 修正の必要性の見極め方

2008-06-25 17:45:48 | Weblog

 以前書いていた修正可能なシステムのつづきです。
 今、ここの(6)までおわったので、今度は、(7)サービス部分設計についてですが、その前に、そもそも、修正の必要があるかどうかについての見分け方の話を先にします。




■修正の必要性

 たとえば、毎週売り上げを計算していたのを、毎日売り上げを計算するように仕様変更したとします。
 このとき、足しこむ部分を配列として受け取り、それを足している使用であれば、
 この部分の修正はありません。
 一方、このモジュールで、今週部分を切り出し、対象レコードをはじめから計算していたとしたら、
 切り出す範囲が変わるため、修正が必要になります。

 このような修正の要、不要は、結局引数と返り値の型と範囲の違いからきています。



 ただし、ここで副作用部分が問題になりますけど、それは、時間がないので、このつぎに。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

要件定義の知識体系「BABOK」

2008-06-25 12:07:04 | Weblog

が話題なんですって(^^;)

ここに
PMBOKの次は「BABOK」が来る?
http://itpro.nikkeibp.co.jp/article/OPINION/20080513/301525/

記事があって、日経コンピューターでも、2008年6月1日号22ページにもあるんだけど。。

みてみますか・・そのBABOK(Business Analysis Body of Knowledge)

ここ http://download.theiiba.org/files/BOKV1_6.pdf
(PDFです)

英語で、329ページもある・・・(>_<!)
めげた・・

P.S上記のサイトのURLにあるように、BABOKを作っているIIBA,
URLが、The IIBAなんですね(^^;)
Theを強調したかったのか、URLがとられていたからなのか・・


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

「Hiphone」=なんちゃってiPhone - 中国

2008-06-24 17:32:01 | Weblog

ここのニュース
なんちゃってiPhoneに脅かされる中国携帯大手
http://www.itmedia.co.jp/news/articles/0806/24/news014.html

によると(以下斜体は上記サイトより引用)

 「Nokiaユーザーはうちのお客ではないが、Ningbo Birdユーザーはうちの製品を使いたがる」と語るのは、海賊版や未登録の携帯電話を販売するサイトを運営しているフー・ジャンガン氏だ。

 フー氏は現在、Appleの人気のスマートフォンiPhoneのコピー製品「Hiphone」をアップグレードしようと思っている。Hiphoneの価格は本物の何分の1かだ。


そうな。。

どんなのだろう・・・「Hiphone」??


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Ruby1.9、Windowsで-その9 文字と数字の変換

2008-06-24 11:46:12 | Ruby

 超ひさびさに、シリーズ「Ruby1.9、Windowsで」です。

 たしか・・・??ここの順番の3-1-3「数値と文字の変換」を飛ばしているような気がするので、今回は、それをやります。




■文字から数字へ変換

●整数への変換
 2とおりあります。文字列に対して、to_iするか、Integerの引数を文字列にします。

a = "10"
a.to_i + 5
Integer(a) + 8

みたいなかんじ・・

 ちなみに、変換できないところで、とまります。

a = "10desu"
a.to_i

は、10になります。

●実数への変換

同様に、文字列に対して、to_fするか、Floatの引数を文字列にします。

a="10"
a.to_f

で10.0になります。

Float(a)

でもOKです。

●その他

hexで16進になります。
a="10"
a.hex
で16になります。

octで8進になります。
a="10"
a.oct
で8になります。




■数字から文字

整数.to_sで、数字から文字になります。

b = 10
b.to_s

で"10"になります。

実数.to_sでも、数字から文字になります。
c=10.6
c.to_s

で"10.6"になります。

なお、sprintfや、それを簡単に書く % (文字列に対して適用する場合)を使って、数字から文字にすることも出来ます。




ということで、今回は、おしまい



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

汎用編集用メモリエリアとして、DOMもいいかも。。

2008-06-23 17:36:00 | Weblog

 エディタをつくるとかいう場合・・

 それは、あるプログラム言語のエディタでも、
 テキストエディタでも、
 DTP用のエディタでも、

 なんでもいいんだけど、そー言う場合。

 内部的に持っているメモリエリアが必要で、
 それを連結リストなどで実現し、編集操作に応じて、そのメモリを操作するプログラムを書く。




でも、そのプログラム言語、テキスト、DTPで表現される内容が、
XMLで表現できるなら、それを読み込み、操作するDOMで表現
できるわけで。。

 ならば、DOMでメモリ上に表現してしまったほうが、
早い気がする。

 たとえ、外部出力フォーマットとしては、XMLにしないにしても。。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

テストについて、簡単にまとめる

2008-06-23 12:25:54 | Weblog

テストについて、簡単にまとめると、こんなかんじかしら
(独断と偏見なので、解釈違いもあるかも・・)




■テストのレベル
・単体テスト
・結合テスト
・システムテスト
・運用テスト

それぞれの内容は、
ここ http://itpro.nikkeibp.co.jp/article/COLUMN/20051102/223934/?SS=imgview&FD=-192991770&ST=system




■テストの種類

ホワイトボックステスト=ソースを見て行うテスト
    命令網羅、分岐網羅、条件網羅
http://itpro.nikkeibp.co.jp/article/COLUMN/20051102/223934/?SS=imgview&FD=3561930&ST=system

ブラックボックステスト=ソースを見ないで、入出力から行う
同値分割、境界値分割
http://itpro.nikkeibp.co.jp/article/COLUMN/20051102/223934/?SS=imgview&FD=4485451&ST=system

※単体テストはソースを見て行うので、ホワイトボックステストが可能。
 (単体でも、JUnitで入出力だけチェックするような、ブラックボックステストも可能)
 それ以上は、必ずしもソースが来る保証がないので、ブラックボックスしかできない場合も多い。




■ホワイトボックステストの場合
・命令網羅、分岐網羅、条件網羅のどれで行くか?
・網羅率を考え、テストの縮退など・・




■ブラックボックステストの場合
同値、境界値=入力する字種がきまった上での話。そこにいたるまで、いたった後にもテストあり。

●形式的なチェック
・文字種チェック・フォーマットチェック
数字(実数、負の数?)、文字(漢字?カナ?)
    フォーマットチェック(数字3桁のあと、ハイフン、数字4桁など)

・桁数/文字数チェック
バッファオーバーフロー
未入力

・SQLインジェクション

●意味的なチェック
・文字/数値範囲チェック
同値、境界値

・項目間チェック
項目間に関連があるとき

・存在チェック


※形式的なチェックは正規表現などで出来る場合も多いが、意味的なチェックは値をとって吟味する必要がある。
 存在チェックは、クライアント側で(JAVASCRIPTで)は出来ず、サーバーアクセスが必要なことが多い。




あっさりまとめると、こんなかんじ・・


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ユースケースシナリオに、画面入れて、操作マニュアル作らないと・・

2008-06-20 18:07:32 | Weblog

 ユースケースシナリオっていうのがありますよね。

 その手順ごとに、具体的な内容と操作を追っていったもので、
要求仕様の業務フローの確認や、外部設計の終わりに、ユーザーとの
確認として入れるもの。
(ユースケース”図”ではなく、図をいろいろ言葉足して、順番に並べて、
 言葉で表したもの)。

 で、これに、画面を入れると、事実上、操作マニュアルが作れる・・

 で、こうやって、操作マニュアルを作らないと、結合テストのときに、
テストの操作方法やテスト範囲が分からない気がする・・

 なことない??

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JDBCとVisual C#におけるDBアクセスの対応を説明するために・・・

2008-06-20 12:07:09 | Weblog

ウィリアムのいたずらは、Visual Studio 2003を使っています。
で、Visual Studio 2003のC#だと、以下の手順で、データベースアクセスします。

(1)サーバーエクスプローラー(ツールボックスと同じウィンドウにあるタブ)
   のタブをクリックし、サーバーを追加します。

    Accessの場合、プロバイダにJETを選ぶと「次」の画面でファイルを選択
    できます。

(2)ツールボックスの「データ」の中にある、oleDbDataAdapterを選択し、
   フォームにドロップし、
   上記(1)のデータ接続を選択して、SQLをテキトーに作ります。

(3)そーすると、((2)のアダプタを選択していれば)
   プロパティの下のほうかな?に、
   「データセットの生成…」っていうのがあるので、それを選択して、
   テキトーに設定すると、データセットが出来る。

(4)「ツールボックス」の「Windowsフォーム」から、「DataGrid」とか、
   「Combobox」とか、好きなのを選んで、DataSourceに(3)を設定
   (Comboboxは、DisplayMemberも選ぶ)

(5)ソースコードのテキトーなところに(フォームを生成したところとか、
   ボタンを押されたときとかに

     アダプタ.Fill(データセット)

   をいれる。

   たとえば、(2)のアダプタがoleDbDataAdapter1で、
   (3)のデータセットがdataSet11なら、こんなかんじ。

         oleDbDataAdapter1.Fill(dataSet11);

これで、実行すると、(4)に、データが入って実行できる。




この場合、アダプタをつくると、コネクションもできる。したがって、
JDBCとの対応が説明しやすい。

JDBCの場合、

(あ)Class.forNameで、ドライバを読み込む

(い)DriverManager.getConnectionで、コネクションを作成する

(う)コネクションのcreateStatementで、ステートメントを作成し、

(え)SQLを適当に入れる

(お)検索の場合、ステートメントのexecuteQueryで、SQLを実行、
   結果をレコードセットに入れる

(か)レコードセットからテキトーにデータを取り出す。

というふうになっていく。




これを、上記のC#のアクセスに対応させると、

(あ)のドライバ読み込みは、C#の
  (1)のドライバでJETを選んだところに相当し、

(い)のコネクションは、C#の
  (2)でAdapterを作成したときに出来た、コネクションに相当し、

(う)で作ったステートメントが、Adapterに相当。

(え)のSQL設定が、AdapterでSQLを設定するところに相当。

(お)のSQLの実行は、(5)のアダプタ.Fill(データセット)に
   相当します。
   なので、(3)のデータセットが、JDBCのレコードセット相当とすると、

(か)で、データをセットしているけど、それは、(4)でDataSourceを
   指定しているので、自動的にできます。

ということで、説明は簡単簡単。




と、余裕ぶっこいていたら・・・

うん、うん。。。
2005から、なんか、自動的にやってくれて、AdapterとかConnectionとか、
いらないの?
(って、書いてある本発見&この本、テキストにして説明しようと思ったんだけど・・)

あれ、でも、昨日、2008のVWDみたら、Adapterあったけどなあ。。。

うーん、自動的にやられると、説明がしにくいんだけどなあ(-_-;)

やっぱ、2008のExpress版、落としてきて、確認しないと、だめかなあ。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ドコモが個人向けにBlackBerryを発売するらしい・・・

2008-06-19 17:27:00 | Weblog

ここのGIGAZINEの記事
NTTドコモ、iPhoneに対抗して世界的人気のスマートフォン「BlackBerry」を発売へ
http://gigazine.net/index.php?/news/comments/20080619_blackberry/

によると(以下斜体は上記サイトから引用)


産経新聞社の報道によると、7月11日にソフトバンクモバイルから発売される「iPhone」に対抗して、NTTドコモが世界的な人気を誇るスマートフォン「BlackBerry(ブラックベリー)」を個人向けに販売することにしたそうです。

また、年内にハイエンドな最新モデルを販売する予定とのこと。


うーん、iPhone対抗に・・・なるの(^^;)?


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

プロジェクトの経理処理の話。工事進行基準が、20年度から法人税でも適用対象になると。。

2008-06-19 14:05:56 | Weblog

ここの記事
会計基準コンバージェンスが迫る
工事進行基準による経営成績の開示
http://itpro.nikkeibp.co.jp/as/ms_kojireg/1st_1.shtml

てっきり、ウィリアムのいたずらは、

上場企業は全部、工事進行基準、ほかは、どーでも(^^;)
だと思っていたら・・・・
(以下斜体は上記サイトより引用)

工事進行基準が適用されるのは(1)工事収益総額,(2)工事原価総額,(3)決算日における進捗度の3要素について信頼性をもって見積もることができる場合のみ。この要件を満たさない場合は,工事完成基準を適用することになる。


あ、そーなんだ・・・
でも、そしたら、どんなプロジェクトも信頼性がないので、
工事完成基準(^^;)・・・なわきゃーない・・
っていうか、さらに

「平成20年度税制改正により,従来より広い範囲の工事やソフトウエアの受注制作について工事進行基準に基づく経理処理が法人税法上も適用対象となる予定です」と,野村氏は注意を促した。


ってことは、上場企業じゃなくっても、法人税のかんけいで。。
やっぱ、プロジェクト管理の会計は、工事進行基準になるんですかねえ。。

そーすると、完成基準とちがって、まじめに(^^;)
プロジェクトの見積もりださないといけませんよねえ。。

さらに、上場企業の場合、

工事損失が見込まれる期には工事損失引当金の計上も義務付けられる。


っていうことで、かなり、まじめに見積もらないと、いけないんですかね。。
もちろん、下請けにも影響しそうですよね。。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

拡張ACLの勘違い、わかった(^^;)

2008-06-19 12:47:11 | Weblog

 まえに、ここで、アクセスコントロールリスト(ファイヤーウォールなんかをつくるときに、パケットを通過させるか拒否するかの指定)の、拡張ACLで、

access-list 番号 permitかdeny プロトコル IPアドレス ワイルドカードマスク 
  のあとにくるanyの意味が分からないと書いたけど、
これについて。

セキュリティ編<第2回> 拡張ACLに書いてあった。

拡張ACLは、送信元と、宛先、両方指定できる。
なので、
access-list 番号 permitかdeny プロコトル 送信元IP ワイルドカード (ltかgtかeq ポート番号)
       あて先IP ワイルドカード  (ltかgtかeq ポート番号) (オプション)

となるようだ。ということで、上記の質問、anyの意味は、宛先IPが、anyということになる。

うん、
標準は、送信元のみ、
拡張は 送信元と宛先
と、違っているところを、勘違いしておった。。(^^;)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする