匠の伝承 マルチな時代の設計と開発.

Slides:



Advertisements
Similar presentations
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
Advertisements

わんくま同盟 東京勉強会 #10 オブジェクト指向 #1 Windows メッセージを使いこな す -Windows 流オブジェクト指向 - とっちゃん 高萩 俊行 Microsoft MVP for Windows SDK 2005/ /09.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
情報基礎演習I(プログラミング) 第9回 6月22日 水曜5限 江草由佳
相互作用図 FM11010 田中健太.
プログラマのレベルアップ.
コンピュータプラクティス I 再現性 水野嘉明
アルゴリズムとプログラミング (Algorithms and Programming)
Excelによる統計分析のための ワークシート開発
匠の伝承w マルチな時代の設計と開発 パート3.
USB2.0対応PICマイコンによる データ取得システムの開発
C#によるWindowsFormApplication入門
PF(Project Facilitation) プロジェクト・ファシリテーション
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
ユースケース図 FM12012 比嘉久登.
コーパス言語学実践 2006年度2学期 第5回.
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
匠の伝承w マルチな時代の設計と開発 パート2.
PF(Project Facilitation) プロジェクト・ファシリテーション
RAD Studio 14/09/27 TEffectを使った綺麗なForm
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
3-3 クラス図の関係その2.
UMLの概要と オブジェクト指向の 基本概念
HTTPプロトコルとJSP (1) データベース論 第3回.
USB2.0対応PICを用いたデータロガーの製作
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
発表者 2011/01/08 楽しい256バイトイントロの 世界 発表者 2011/01/08.
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
オブジェクト プログラミング 第1回.
UMLとは           032234 田邊祐司.
3 Macintoshの基本操作(3) 3.1 エイリアス エイリアスを作る ファイルなどの分身となるファイル アイコンを選択
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
~手続き指向からオブジェクト指向へ[Ⅱ]~
その他の図 Chapter 7.
匠の伝承w マルチな時代の設計と開発 パート7.
Microsoft MVP for Development Tools – Visual C++
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
Microsoft MVP for Development Tools – Visual C++
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
Microsoft MVP for Development Tools – Visual C++
Ibaraki Univ. Dept of Electrical & Electronic Eng.
匠の伝承w マルチな時代の設計と開発 パート6.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
UMLの概要とオブジェクト指向の基本概念
第1章 いよいよプログラミング!! ~文章の表示 printf~
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
匠の伝承w マルチな時代の設計と開発 パート4.
Javaによる Webアプリケーション入門 第4回
本当は消去できていない!? ~データを完全消去する方法~
本当は消去できていない!? ~データを完全消去する方法~
匠の伝承w マルチな時代の設計と開発 パート7.
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
第6回放送授業.
匠の伝承w マルチな時代の設計と開発 パート4.
   _,,....,,_  _人人人人人人人人人人人人人人人_ -‘’“:::::::::::::`‘’> ゆっくり待っていってね!!! < ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄  |::::::;ノ´ ̄\:::::::::::\_,.
コンパイラ 2012年10月11日
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
C#プログラミング実習 第1回.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

匠の伝承 マルチな時代の設計と開発

最近、「やるおがIT土方になったようです」を読みました。 スピーカー自己紹介     /      \    /  ─    ─\    ゆーちです。  /    ,(●) (●)、\   ハンドル名です。  |       (__人__)    |     \     ` ⌒´   /    本名は、内山康広といいます。 ,,.....イ.ヽヽ、___ ーーノ゙-、.   47歳です。 :   |  ‘; \_____ ノ.| ヽ I おっさんです。_| ̄|○     |  \/゙(__)\,|  i |      >   ヽ. ハ  |   ||  株式会社シーソフト代表取締役です。                  現役のエンジニアです。プログラム書いてます。 メールソフト Becky! 用の BkReplyer という作品が微妙に有名らしす。 2ちゃんねらーではありません。 最近、「やるおがIT土方になったようです」を読みました。

Seasoft Corporation=海援隊から命名。 IT革命の寵児をめざし、1996年設立。 株式会社シーソフト 独立系ソフトハウス Seasoft Corporation=海援隊から命名。 IT革命の寵児をめざし、1996年設立。

中小企業。 零細企業。 開発下請け、孫請け、ひ孫請け。 いつも潰れそうです。_| ̄|○ ____ /⌒ ⌒\ /( >) (<) \       ____      /⌒  ⌒\    /( >)  (<) \   /::::::⌒(__人__)⌒::::: \  しごとください。   |     /| | | | |     |   \  (、`ー―'´,    /

開発実績 ・プリント基板設計用CAD ・金融機関Windowsベースプラットフォーム ・ホール用音響制御システム ・ホテル有料サービスカードシステム ・ゴミ処理場入出庫管理、課金システム ・河川道路のビデオ映像連動管理図面システム ・遠隔監視カメラ映像配信システム ・信用取引システム ・金融機関WEBベースフロー制御システム ・航空機用上空風力&タービランスシステム ・溶融炉分析システム ・組み込み機器用ログデータ解析パッケージ ・テナントビル用デマンド管理 ほかにもいっぱい・・・

ほとんどが、デスマーチプロジェクト / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ / \ / \ / ――― ――― \ / _ _ \ カ                  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\                 /                      \               /                         \              /      ―――            ―――  \                     /          _                _    \     カ           /          /´ ,..::::::::::.ヽ ヽ         /´ ,..:::::::::::.ヽ ヽ \         タ         /        ,‘  ,;::::::::::::::::::’, ‘,     ,’  ,;:::::::::::::::::::‘, ’, \        /          {  {:::::::::::::::::::::} }     {  {::::::::::::::::::::::} }    \   カ      /           ‘、 ヽ::::::::::::::/ /      ’、 ヽ::::::::::::::/ /        \       |            (;;;;;;;;;;)) ̄ /       |     \   ̄             |     タ      |            /‘       /         ∧       ’,              |      |          {{        {         / ヽ      }                |      |           ヽ       ヽ___/ __ \___ノ               | . _______      \          人        ヽ   ´    `  ‘              /  ││        \           ( し.)                                  /   ││         \       `¨                           /    ..││          /                                     \      ││         /                                          \    ││ ほとんどが、デスマーチプロジェクト

先日、スタッフから言われました。_| ̄|○               /::.::.::/:// .::.::.::.::.::.:./ ! .::.::.::.::.::.::.::.::.::.:|::.::.::.::.::.::.::.::.       \   ゝ‐<::./::./ .::.::.::.::\/  | .::.::.::.::.::.:: /::.::.:|::.::.::.::.::.::.::.:::       \ 〃 / _  ヽ:/::.::.::.::.::.:/\  |::.::.::.::.::.:: /::.::.:: |::.::.::.::.::.ヽ::.::       {{ / / __ ヽ ',.::/::./   `ー |::.::.::.::.:: / |::.::.:/|_::.::.::.::.:l::.:: .   ──  |  ! /r ) } |イ斤テ左≡ォz /::.::.::.::/ 斗七 !::.::.::.::.::.::.|::.:: .         ∧ ヽヽ _/ /::! レヘ :::::::::/ /::.::. /    j /  | .::.::.::.::.:: |::.::    そんな星の元に生まれてるんですよ。 .     , -―ヘ  `ー   /.::.| rー‘゚:::::::/ /::.:/   テ左≠=ヵ::.::.::.::.::. |::.::     ____/   {     /.::.::.| ゞ辷zン //    う。::::::7 /イ .::. |::.::.::.|::.::    ざんね~ん。 彡_/     ヽ    イ ::.::. |             /ヘ:::::::/  |.::.::.:|::.::.:∧::. 〃   V    ヽ    ヽ.::.: |              ヾ辷:ン /:l::.::./!::.:/  l    {      ∨  }__.::.|\     <!         ・ /::.l::|::./│/  ヽ   ヽ     {      ̄ ̄ ̄`ヽ _         イ::.: l::|:/ j/ 、 \   \    }           ) / ̄ ̄ ̄l7::.:|::.::.j::l′ / 先日、スタッフから言われました。_| ̄|○

言語は何ができますか? CISC/RISC アセンブラ COBOL Pascal BASIC, Visual BASIC C C++           ____        / \  /\ キリッ .     / (ー)  (ー)\    なんでも書けるお     /   ⌒(__人__)⌒ \        |      |r┬-|    |      \     `ー'´   /     ノ            \   /´               ヽ  |    l              \  ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.   ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒)) よく、聞かれます CISC/RISC アセンブラ COBOL Pascal BASIC, Visual BASIC C C++ Perl Java

言語にこだわらない コンピュータにできること= CPUとメモリと周辺機器でのやりとり。 言語は違っていても、できることは限られているし、おんなじ。 思想の違い   :手続き型言語、オブジェクト指向言語 ライブラリの違い:標準ライブラリ、クラスライブラリ、 フレームワーク、etc…

そろそろ本題 匠の伝承 ____ /⌒ ー、\ /( ●) (●)\ そんなことないんだお。 / ⌒(__人__)⌒ \        ____     /⌒  ー、\      /( ●)  (●)\    そんなことないんだお。   /  ⌒(__人__)⌒  \     | //// |r┬-/ ‘ //// |     \     `ー'      /   /              \

本日覚えて帰っていただきます。 オブジェクト指向のとらえかた 状態のとらえかた / \ / ─ ─\ / (●) (●) \ 最初から知ってるよ・・・ってひとは、再認識ってことで。 m(_._)m    /      \   /  ─    ─\    /    (●)  (●) \   |       (__人__)    |   /     ∩ノ ⊃  /    (  \ / _ノ |  |     .\ “  /__|  |       \ /___ /  

オブジェクト指向ってなんだ? 継 クラス ポリモーフィズム バーチャル関数 承 メソッド カプセル化 デザイン・パターン 継    クラス          ポリモーフィズム            バーチャル関数 承          メソッド      カプセル化         デザイン・パターン     多態性                      OOP             インスタンス             Java        C++     CLI         UML         アクティビティ図  汎化/特化                                 オートマトン         多重継承       集約       属      メンバー変数                                性               コラボレーション図  基底クラス       情報隠蔽             関連                    内包                 イベント           / ̄ ̄ ̄\         仮想関数    ステートマシン           ./ ─    ─ \        派生クラス                              /  <○>  <○>   \   is-a と has-a   プロパティ          |     (__人__)     |          抽象モデリング   インスタンス        サブクラス      \     ` ⌒´    /メタクラス         アジャイル開発             /              \        ユビキタス                             #$%◎▽▲×・・・      ソフトウェア部品化                          再利用      コンポーネント それぞれのオブジェクト指向

実案件から考察してみよう 客先からの要件 1.USBメモリの製造工程で製品検査 2.転送速度が規定値の範囲内かを検査 3.検査が完了したら抜き差しで次の製品       _ _    /      \   /  ─    ─ \    /    (●)  (●) \   |       (__人__)  |   /      ∩ノ ⊃  /    (  \ / _ノ |  |    .\ “  /__|  |      \ /___ /   予算少ないから、UIとか設定とかいらないから。 ちょちょいって作るだけでイイから。 ね!?おねがい。

技術的な課題解決が先行する USBメモリの抜き差しをどうやって検出するんだろう? 転送時間を計るって? ____ / \          ____        /      \           /  _ノ  ヽ、_  \        / o゚((●)) ((●))゚o \     |     (__人__)    |     \     ` ⌒´     /    /´           `\   /  /          l  l   .___ __l  l_¶______/_/__/     ヽ   \, ´-'ヽ  ̄| ̄ ̄ ̄ ̄|   l二二二二l     ヾ_ノ   | '''' '   |   l二二二二l    | 9=ε-8. | '''..--  |   l二二二二l:::..    |   ..''  |  ''-.  ,|       _ _    /      \   /  ─    ─ \    /    (●)  (●) \   |       (__人__)  |   /      ∩ノ ⊃  /    (  \ / _ノ |  |    .\ “  /__|  |      \ /___ /  

フロー(処理の流れ)を検討する おおきなファイルを転送する ファイルのオープン ファイルの新規作成 転送 ファイルを読み込む ファイルを書き込む EOF 継続 書き込み部分だけ経過時間を測定 ファイルのクローズ ファイルのクローズ

製品の検査の流れ 設計/開発者の思考は、 内部処理の実現手続きから 始まっていく 試料をUSBポートに差し込む 検知したらファイルを転送する        ____      /      \    /  _ノ  ヽ、_  \   /  o゚⌒   ⌒゚o  \     |     (__人__)    |   \     ` ⌒´     / 転送時間 OK/NG OK表示 NG表示 設計/開発者の思考は、 内部処理の実現手続きから 始まっていく

ボトムアップ開発 設計すっとばしてすぐ開発 handle = Open( "・・・", .. ); Read( handle, buffer, .. ); Write( handle, .. ); Close( handle ); ・・・ ボトムアップ開発           ____                /⌒   ⌒\              /( ○)  (○) \      うひょひょひょひょ~      /::::::⌒(__人__)⌒::::: \       |      |r┬-|     |      \       `ー'´     /     カ      ノ            \      タ    /´               ヽ                 カ   |    l   l||l 从人 l||l      l||l 从人 l||l   カ    タ   ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ   タ    ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))  タ       ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐    ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l

追加要件に対応しづらい 再利用しづらい / ̄ ̄\ / _ノ \ | -◎-◎) | (__人__) (あらさがし、あらさがし・・・)            / ̄ ̄\           /   _ノ  \           |     -◎-◎)              |     (__人__)   (あらさがし、あらさがし・・・)              |     ` ⌒´ノ   不良品のUSBメモリをさすと、ダンマリになりますね。                |         }    中止ボタンを出しておいて               ヽ        }    いつでも中止できるようにしてください。             ヽ、.,__ __ノ        _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、   /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_  丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、 . i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::! /;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::| ;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::          ,, -──- 、._         .-"´         \.         :/   _ノ    ヽ、_ ヽ.:         :/   o゚((●)) ((●))゚oヽ:       :|       (__人__)    |:  プギャー!!!       :l        )  (      l:  聞いてねぇよ!       :` 、       `ー'     /:        :, -‐ (_).        /        :l_j_j_j と)丶─‐┬.''´           :ヽ   :i |:              :/  :⊂ノ|:

手戻りが多く発生しやすい あ。納期2日ね。 / ̄ ̄\ / _ノ \ | -◎-◎)             / ̄ ̄\           /   _ノ  \           |     -◎-◎)              |     (__人__)    (がたがた言ってると、もう仕事 流さねぇぞ!)              |     ` ⌒´ノ   動いてんのか、死んでんのかわかりませんね。                |         }    プログレスバーを出すように               ヽ        }    してください。             ヽ、.,__ __ノ        _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、   /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_  丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、 . i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::! /;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::| ;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::                                  ,.へ   ___                             ム  i  「 ヒ_i〉                            ゝ 〈  ト ノ                           iニ(()  i  {              ____           |  ヽ  i  i           /__,  , ‐-\           i   }  |   i         /(●)   ( ● ) \       {、  λ  ト-┤.      /    (__人__)    \    ,ノ  ̄ ,!  i   ゝ、_     |     ´ ̄`       | ,. '´ハ   ,! . ヽ、    `` 、,__\              /" \  ヽ/    \ノ ノ   ハ ̄r/:::r―--―/::7   ノ    /        ヽ.      ヽ::〈; . '::. :' |::/   /   ,. "         `ー 、    \ヽ::. ;:::|/     r'"      / ̄二二二二二二二二二二二二二二二二ヽ      | 答 |     手 続 き 指 向       │|      \_二二二二二二二二二二二二二二二二ノ あ。納期2日ね。

実現手段 「手続き=手段」 「視点をモノに注目」 開発フェーズ 目的 設計フェーズ オブジェクト指向

設計フェーズで「モノ」をとらえる すでにあるモノ。 要件に必要なモノ。 これから形になるモノ。 「パソコン」(そこにある) 「OS」(そこにある) 要件に必要なモノ。 「USBメモリ」(用意できる) 「でっかいファイル」(用意できる) これから形になるモノ。 「プログラム」(まだできていない) それがオブジェクト指向ヌクモリティ         \、       ___>` ー---|`ー -- 、     ,ィ´ ァ:.: : : : : : : :.:.:.:|: : : : : : : \    / / : /:.: /: :.,イ: :./|:.!: \: .: : : : :<⌒ヽ     /:/: :/: :./___/ !: / .|:.|l: .:__ヽ: :.\:.:ヽ\ \     /イ: :/: :./´:./` |/  |:.||ヽ: :`ヽ: : :.ヽ: :} \{      /: :.‘: :.:i: :./  |   Ⅵ  \: :|: : : :.∨ /     .    ': : { : : |:./ ,_        _, ヽ!:.:: :.|:.:|ィ´     |: :/|: : :|イ ィ=ミ    ィ=ミ } : : ト、!:|          |;イ: ! :./`|           ム : : |:/: |       |:|.:V:l`ri^ixx  、__,   xxrvィヘ : |: : :|       |:|: : :l: :〉、`ー-、 .___ ,.-‐' /:.:.:V: : : |       |:|: : :l:/ `ァ  〉r‐┤  r‐':./}:!: : : :|       |:|: : :l{.  /   /:.:l ./|   |: :/  |:l:.:. :.:.|       |:|: : :l| /   ∧:.:|/:.l  |:/  .!:l: : :.:.|

ヽ(*`Д´)ノ / ,..--、iヽ,イ, ---、、 | キミね。                             /              ,..--、iヽ,イ, ---、、       |  キミね。         <`´::::::::::::::::::::::::::::::::::`ヽィ    |   馬鹿にしてるのかな?         ∠:::::::::::::::::::::::::::::::::::::::::::::::::ゝ    |  そのくらいのことは          イ:::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ  ∠  だれだって知ってるんだよ。         ム:::::::::ィ、:::::;:イ;ハ;ハ;iヘ;ハ;イ::::::::k    |  ねむっちゃうよ!?         ‘7::::::::ツ’⌒ヾ    ‘⌒ヽl::::::::メ   \__________         ケ:::r、l ∠__ヽ    ∠__ヽ〉ヘム         冫:ト、! t=゚=ヲ `i t=゚=ヲ レハ         リ;:| {  `´  l   `´ │j:{    〃r‐、r‐、r-、 __          ヘ ,ハ   i^ l ^i    l/:メ      | !l  !l ,!f }            リメi;`!i `'ヽ_r'`  ノノl;「     | ll  ll リ /           /[jトiル,;uiillllliiu、|「j#″   f´Y ⊥ ⊥⊥ / 〃   仄丁汀TTT7l l i ㌦l{ 、─-ッ }lメ゙ヘTh┬r-{  !      {   //ハ|│l│l l/ l l lヽ ^'!ix`ー'_,ijドハ N│l│l ト、`ヽ    }  ///ハl l│l レ1 l l l l `i、`ヘ!l!l!!lト゛,イ i l N l│l l ヽ     ノ ////∧ |│lムl┴zl_l_l_l i\   /l⊥!┴ ゝ! ! l l レ)     イ┐ /////∧l ! l l¦l¦! l 〈 i l l ∨l¦!〉!¦l l l l¦! !ハ     | ノ

実際に携わった仕事の例 通信クラス 保守クラス 運用クラス RS-232Cのシリアル通信で特殊な機器とやりとりをさせようと作られていたクラス。   特に違和感も問題もなく使えました。 保守クラス 運用クラス 通常運用ではなく、特殊な起動方法やコマンドを入力することでログの参照や特殊な処理が実行できるようになる保守モードを持っていました。 その2つを区別してクラス設計されていました。          /: : : :/ : : : : : : i: : : : : :ヽ : : : : ー 、 : : \            /: : : / : : : : : : : ,イ : : : : : : :l: : : : : : : \- 、:\ .          /: : : / : /: : : : : : / |: : : : : :| : |、: : : : : : : : \ \}        .' : : :/ : /: : : : : : /  v : : : : l : |斗-: : ヽ: : : : ヘ        |: : :/ : /| : : :― x   ∨: : :∧ | ∨: : :ハ: : : : :ハ        |: :/ : /: | : : : : / `  |: : :/ j/- ∨: : :l: : : : : :|         r┴、/:ヽ| : : : /     |: :/  示旡アV : :|: :|ヽ: : |            |  | : :│: : /|.     | /   ト::爿/ ハ: :|: :| ‘,: :|            ‘vーく ,x┤: / :|三≧x j/   込;リ { : | ∧ |  ∨           /   ヽ. | /: :│ ,/      '    .:・} : |/ i/          |  /⌒}:Ⅵ : :ヘ:.:.:.    ー‘ーr’   /: : |        なにがいけないのかわかるかな~?          {    /´}_ム: : :≧r 、 .. _ ー ' .. </: : : |         ヽ    / }ヘ: : \\   厂}ヽ._/ | : : : | .          \   __/  \: : \\x-┴く ヽ| : : :.′           /   /ヽ     \ : ヽ \   |  |: : :/        /     {ヽ}}     ヽ: : }  \ l  |: :∧

実際に困った。 システム 同一機器に対して2つのインスタンスを介して処理を呼び出さなければならない ターゲット機器 運用クラス インスタンス        ____      /ノ   ヽ、_\     /( ○)}liil{(○)\       /    (__人__)   \   |   ヽ |!!il|!|!l| /   |      \     |ェェェェ|     /   /              \ システム 同一機器に対して2つのインスタンスを介して処理を呼び出さなければならない ターゲット機器 運用クラス インスタンス 保守クラス インスタンス 同時に通信できるのは一方のインスタンスのみ。

動詞をクラス名にしない サ変動詞かどうかを必ずチェック! 「~する」という言葉を付けてみる 形容詞をクラスにとらえられるか? 通信する。    「~する」という言葉を付けてみる 通信する。 運用する。 保守する。 形容詞をクラスにとらえられるか? 「きれい」クラス 「重い」クラス    /      \   /  ─    ─ \    /    (●)  (●) \   |       (__人__)  |   /     ∩ノ ⊃  /    (  \ / _ノ |  |    .\ “  /__|  |      \ /___ /   プロペラクラスとかも話題になってたなぁ

オブジェクト指向開発の入り口 モノをとらえた設計になっているか 「モノ」=名詞 【重要】

抽象化モデリング 「目に映るモノから」クラス化していく 業務システムの例 「入金伝票」 「出金伝票」 「注文書」 形がある 「商品コード」 「商品名」 形がある 形がない

  ∧,,∧    ∧,,∧   ∧,,▲   (,,・∀・)   ミ,,・∀・ミ   (;;・∀・)   ・・・・ ~(_u,uノ @ミ_u,,uミ @(;;;;uuノ

状態を管理する ステートマシン オートマトン ステートパターン 状態遷移図 イベントトレース図 状態遷移表 ____ / \          ____        /      \            /  ─    ─ \    宇宙語が書いてある。     /    (●)  (●) \        |      (__人__)  | ________      \      ` ⌒´   ,/ .| |          |     ノ           \ | |          |   /´                 | |          |

USB検査プログラムの状態とは? USBメモリがさされるのを待っている状態(挿入待ち) USBメモリにファイルを転送している状態(検査中)          ____        )   そんなの、余裕のよっちゃんだお         /⌒  ⌒ \      )        /( ●)  (●) \    )/⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y丶      /::::::⌒(__人__)⌒::::: \     |      |r┬-|      |      \       `ー'´     /      カ       ノ            \       タ    /´               ヽ                 カ   |    l   l||l 从人 l||l      l||l 从人 l||l   カ    タ   ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ   タ    ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))  タ   タ       ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐    ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄ USBメモリがさされるのを待っている状態(挿入待ち) USBメモリにファイルを転送している状態(検査中) この2つかな? 

あってます? 状態と遷移の把握が重要 どうやって状態を切り出す? ___ / \ /ノ \ u. \ !? / (●) (●) \            ___        /      \       /ノ  \   u. \ !?     / (●)  (●)    \      |   (__人__)    u.   | クスクス>      \ u.` ⌒´      /     ノ           \   /´               ヽ          ____ <クスクス   /       \!??       /  u   ノ  \     /      u (●)  \     |         (__人__)|      \    u   .` ⌒/ 状態と遷移の把握が重要 どうやって状態を切り出す?

動きを表現する入口はイベント・トレース図 どのように考えるか? まず、「モノ」の動きをとらえる。 USBメモリ 検査システム オペレータ 動きを表現する入口はイベント・トレース図

イベント・トレース図を描く クラス名 1.クラス名を先頭に書き、縦に線を引く。 2.それだけ。 モノとしてとらえたクラスです 縦線は時間軸を表します

実際に書いてみる 検査システム /⌒ ⌒\ /( ●) (●) \ いっぽん!? /::::::⌒(__人__)⌒::::: \      /⌒  ⌒\          /( ●)  (●) \   いっぽん!?   /::::::⌒(__人__)⌒::::: \      |     |r┬-|      |     \      `ー'´     /

発生事象(イベント)を時系列順に書く 検査システム メモリの挿入検出 転送速度の検査 メモリの取り外し検出 ┏┓   ┏┓ ┏┛┗┓∧∧ ∧∧ ∧∧ ∧ ┗┓┏ ( (-( -( -( -д ( -д) ┏┛┗(つ(つ/つ//  二つ ┗┓┏ ) .| /( ヽノ  ノヽっ ━━ ・・・   ┗┛∪∪とノ(/ ̄ ∪ メモリの挿入検出 転送速度の検査   ┏┓ ┏┛┗┓∧∧ ∧∧ ∧∧ ∧ ┗┓┏ ( (-( -( -( -д ( -д) ┏┛┗(つ(つ/つ//  二つ ┗┓┏ ) .| /( ヽノ  ノヽっ ━━ ・・・   ┗┛∪∪とノ(/ ̄ ∪ メモリの取り外し検出

【重要】 状態の区別の仕方 状態は時系列軸に対するイベント受信で変化! 検査システム メモリの挿入検出 メモリの取り外し検出 挿入待ち 検査中 状態は時系列軸に対するイベント受信で変化! メモリの取り外し検出 【重要】 挿入待ち 状態=オブジェクトのイベント間を示す

状態遷移表の見方 横軸タイトルは、現在の状態 状態 イベント 状態名 (状態番号) 状態名B 状態名C イベント1 処理内容 →次の状態    : 現在の状態がBで、イベント1が発生したときの処理の内容とその後の状態を記す。 縦軸タイトルは、発生する事象

実際に書いてみる 「メモリ挿入待ち」状態でメモリの挿入を検出したら、検査を開始する。 状態は「検査中」になる。 1)検査中にメモリが挿入されたらどうなるの? 状態 イベント メモリ挿入待ち (0) 検査中 (1) メモリ挿入検出 検査を開始。 状態を検査中に→(1) メモリ取り外し検出        ____      /ノ   ヽ、_\     /( ○)}liil{(○)\    あれれ!?   /    (__人__)    \   |   ヽ |!!il|!|!l| /    |      \    |ェェェェ|     /   /              \ 2)挿入待ちの時に取り外し検出が来たら? 3)検査中にメモリが取り外されたらどうなる?

×あり得ないよね。 実際には組み合わせとして、発生することのない状態下のイベント発生を、「あり得ないよね!」といって書かない(該当箇所の対応コードを記述しない)ケースが多い。 バグの温床 物理的な事象ではなく、ソフトウエアの中身は数値化された値の組み合わせであり、バグや電子的な問題でそういった組み合わせになることがありえる(可能性がゼロではない)。          ____        /      \           /  ─    ─\   あり得ないよね?     /    (●)  (●) \        |       (__人__)    | ________      \      ` ⌒´   ,/ .| |          |     ノ           \ | |          |   /´                 | |          |

×フラグだよね。 状態の追加=イベントの追加 ※状態の追加(マトリクスの肥大化)を躊躇しない 検査中にメモリが抜き出されるのではなく、検査完了時にメモリを抜いても良い状態になることに気がつく。        / ̄ ̄ ̄ \  ホジホジ      / ―   ― \     /   (●)  (●)  \ フラグだよね?     |     (__人__)      |      \   mj |⌒´     /             〈__ノ       ノ   ノ フラグ追加で対応 状態の追加=イベントの追加 ※状態の追加(マトリクスの肥大化)を躊躇しない

イベントの追加と状態の追加 検査システム メモリの挿入検出 検査完了 メモリの取り外し検出 状態が追加される 取り外し 待ち 挿入待ち 検査中 ハ_ハ ('(゚∀゚∩  ヽ  〈  追加したよ ヽヽ_) 検査完了 取り外し 待ち メモリの取り外し検出 状態が追加される 挿入待ち

状態遷移表を更新 状態 イベント メモリ挿入待ち (0) 検査中 (1) 取り外し待ち (2) メモリ挿入検出 検査を開始 状態を検査中に→(1) エラー表示 検査中断 →(2) ログ記録 →(1) 検査完了通知 →(0) 検査結果を表示 メモリ取り外し検出 次の検査準備 正常なシーケンス マトリクスをすべて埋めること 事故につながったりします。

実際のコードって、どう書く? パターン1.「イベント」別にモジュールの入口を用意する? メモリ挿入検出処理() { if(現在の状態が「メモリ挿入待ち」) { 検査を開始() 状態を「検査中」に } else if(現在の状態が「検査中」) {    エラー表示()    検査中断→状態を「取り出し待ち」に } else if(現在の状態が「取り出し待ち」) { ログ記録() } 多くの開発ツールで、ボタンイベントに対応するコードなどが、こういった事象の発生箇所を入口にしてコードを書くようになっていますね。 OnButtonClick(), OnInitDialog() ON_WM_PAINT(),

パターン2.「状態」別にモジュールの入口を用意する? メモリ挿入待ち::メモリ挿入検出処理() { 検査を開始() 状態を「検査中」に } メモリ挿入待ち::検査完了通知(){ ログ記録() } メモリ挿入待ち::メモリ取り外し検出(){ { この形式にするには、状態ごとに切り分けられた単位を用意する必要がありますねぇ・・・       _ _    /      \   /  ─    ─ \    /    (●)  (●) \ どっちにしたらいいのかな?  |       (__人__)  |   /      ∩ノ ⊃  /    (  \ / _ノ |  |    .\ “  /__|  |      \ /___ /  

コーディングは状態別に 状態 イベント メモリ挿入待ち (0) 検査中 (1) 取り外し待ち (2) メモリ挿入検出 検査を開始 状態を検査中に→(1) エラー表示 検査中断 →(2) ログ記録 →(1) 検査完了通知 →(0) 検査結果を表示 メモリ取り外し検出 次の検査準備 状態別にイベント発生時の処理を書く

ステートパターン... ____ / \ / ─ ─\ / ,(●) (●)、\ | (__人__) | 残念ながら、時間が来たようです。 \ ` ⌒´ / 続きは、また別の機会にでも。 ,,.....イ.ヽヽ、___ ーーノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i | > ヽ. ハ | ||       ____      /⌒  ⌒\    /( >)  (<)\   /::::::⌒(__人__)⌒:::::\  こっからが肝心だお   |     /| | | | |     |   \  (、`ー―'´,    /        ____      /      \    /  _ノ  ヽ、_  \   /  o゚⌒   ⌒゚o  \  また今度だお    |     (__人__)    |   \     ` ⌒´     /

ご静聴ありがとうございました。 m(_._)m                                  ,.へ   ___                             ム  i  「 ヒ_i〉                            ゝ 〈  ト ノ                           iニ(()  i  {              ____           |  ヽ  i  i           /__,  , ‐-\           i   }  |   i         /(●)   ( ● )\       {、  λ  ト-┤.      /    (__人__)    \    ,ノ  ̄ ,!  i   ゝ、_     |     ´ ̄`       | ,. '´ハ   ,! . ヽ、    `` 、,__\              /" \  ヽ/    \ノ ノ   ハ ̄r/:::r―--―/::7   ノ    /        ヽ.      ヽ::〈; . '::. :' |::/   /   ,. "         `ー 、    \ヽ::. ;:::|/     r'"      / ̄二二二二二二二二二二二二二二二二ヽ      | |       お し ま い         │|      \_二二二二二二二二二二二二二二二二ノ 伝承でもナンでもなかった件について(w