匠の伝承w マルチな時代の設計と開発 パート4.

Slides:



Advertisements
Similar presentations
Tt_clown ( 津川 知朗) 俺 Tokenizer を作る ~ Boost.Tokenizer のカスタマイズ~ 2009/12/121 Boost 勉強会.
Advertisements

プログラミング第5回 1 while ループ 文字列の操作
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
匠の伝承 マルチな時代の設計と開発.
GridLayout オブジェクト(省略)
匠の伝承w マルチな時代の設計と開発 パート3.
~手続き指向からオブジェクト指向へ(Ⅰ)~
Win32APIとMFC H107102 古田雅基 H107048 佐藤一樹 H107126 山下洋平.
PF(Project Facilitation) プロジェクト・ファシリテーション
とても使いやすい Boost の serialization
とても使いやすい Boost の serialization
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
匠の伝承w マルチな時代の設計と開発 パート2.
PF(Project Facilitation) プロジェクト・ファシリテーション
アルゴリズムとデータ構造 2011年6月13日
AspectScope によるアスペクトとクラスのつながりの視覚化
第20章 Flyweight ~同じものを共有して無駄をなくす~
Bridge Pattern
補足説明.
マルチな時代の設計と開発 駆け足で PART(3,4),5,6
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
XNAアプリ→WindowsPhone \(\◇ ̄ )ヘン~(  ̄▽/)ゝシン!!! \(○ `O´ ○)/トゥーー!!
ソフトウェア工学 知能情報学部 新田直也.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
匠の伝承w マルチな時代の設計と開発 パート7.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第3回 2007年4月27日 応用Java (Java/XML).
WPF、MVVMパターン構成.
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
第6回 2007年6月1日 応用Java (Java/XML).
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
Collection, Generics, Iterator
ソフトウェア制作論 平成30年12月5日.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
ソフトウェア制作論 平成30年11月21日.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
匠の伝承w マルチな時代の設計と開発 パート6.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
TDD ってどんな感じ? FizzBuzz を作ってみる 2010/01/22 biac 1.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
匠の伝承w マルチな時代の設計と開発 パート4.
アルゴリズムとデータ構造 2012年6月11日
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
ソフトウェア制作論 平成30年11月28日.
匠の伝承w マルチな時代の設計と開発 パート7.
クラスの追加 メソッドの追加 TestCaseの追加 Test Methodの追加.
JAVA入門⑥ クラスとインスタンス.
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
How To WPF アプリケーション Part4 By 中博俊.
モジュール分割.
   _,,....,,_  _人人人人人人人人人人人人人人人_ -‘’“:::::::::::::`‘’> ゆっくり待っていってね!!! < ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄  |::::::;ノ´ ̄\:::::::::::\_,.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
俺 Tokenizer を作る ~Boost.Tokenizer のカスタマイズ~
How To WPF アプリケーション Part3 By 中博俊.
Presentation transcript:

匠の伝承w マルチな時代の設計と開発 パート4

スピーカー自己紹介 / \ / ─ ─\ ゆーちです。 / ,(●) (●)、\ ハンドル名です。 | (__人__) |     /      \    /  ─    ─\    ゆーちです。  /    ,(●) (●)、\   ハンドル名です。  |       (__人__)    |     \     ` ⌒´   /    本名は、内山康広といいます。 ,,.....イ.ヽヽ、___ ーーノ゙-、.   48歳です。 :   |  ‘; \_____ ノ.| ヽ I おっさんです。_| ̄|○     |  \/゙(__)\,|  i |      >   ヽ. ハ  |   ||  株式会社シーソフト代表取締役です。                  現役のエンジニアです。プログラム書いてます。 にこにこカレンダーシートを販売しています。 2ちゃんねらーではありません。 Special thanks for 2ch.

前回までのおさらい /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒:::::\ | |r┬-| | がんばったお。      /⌒  ⌒\          /( ●)  (●)\   /::::::⌒(__人__)⌒:::::\   |     |r┬-|     | がんばったお。    \      `ー'´     /

『モノ』に対する時間軸のイベントを列挙。 時間軸へのイベントが『状態』を作る。 開発は『状態』別に分けて考える。          ____           / ―  ―\ .     / (―)  (―)\    ・・・ちゃんとまじめな話をしたんだお。           /   ⌒(__人__)⌒ \     |      ` ―     |         \           /     ノ            \      /´               ヽ                |    l              \  ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.       ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒)) PART 1 開発者はプロセス指向にとらえがち。 オブジェクト指向は『モノ』をとらえる。 『モノ』に対する時間軸のイベントを列挙。 時間軸へのイベントが『状態』を作る。 開発は『状態』別に分けて考える。

処理の依存性を切り離す 非同期の事象はループを分断して考える。 イベントトレース図→状態遷移表。 ステートパターンの実装。 PART 2       ____      /⌒  ⌒\    /( >)  (<)\   /::::::⌒(__人__)⌒::::: \  ぐだぐだだったお。   |     /| | | | |     |   \  (、`ー―'´,    / 処理の依存性を切り離す 非同期の事象はループを分断して考える。 イベントトレース図→状態遷移表。 ステートパターンの実装。

クラスの依存性を少なくし独立性を高める。          ____           / ―  ―\ .     / (―)  (―)\    デモをまじえて説明したんだお。           /   ⌒(__人__)⌒ \     |      ` ―     |         \           /     ノ            \      /´               ヽ                |    l              \  ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.       ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒)) PART 3 クラスに「時間軸」を考える。 オブザーバパターンによるイベント通知。 クラスの依存性を少なくし独立性を高める。

本日のテーマ 依存性をなくすことのメリット。 DIってなんだ? _ _ / \ / ─ ─ \ / (●) (●) \       _ _    /      \   /  ─    ─ \    /    (●)  (●) \   |       (__人__)  | ふむ。  /      ∩ノ ⊃  /    (  \ / _ノ |  |    .\ “  /__|  |      \ /___ /  

Copy(string DestFileName, string SrcFileName); 依存性をなくすって コピー処理の例(PART2) Copy(string DestFileName, string SrcFileName); ↓ Copy(string DestFileName, string SrcFileName, DWORD *CopyTime); Copy(string DestFileName, string SrcFileName, DWORD *CopyTime, CALLBACK *OnProgress); CALLBACK *OnProgress, bool &Canceled); 書き込み時間を計測 プログレスバーを表示 中止ボタンに応答 「コピー」だけを独立できないの?

コピーロジッククラスの例(PART3) オブザーバパターン 処理中の経過や変化を見てる人に通知 class CopyFileLogic { private: HANDLE Source; HANDLE Dest; LARGE_INTEGER FileSize; char *Buffer; static const int BufferSize = 32768; // コピー状態の通知者 ObserverSubject *Subject; public: CopyFileLogic(); virtual ~CopyFileLogic(); bool Open( CString& source, CString& dest ); void Close(); bool Execute(); // コピー状態の観察者の追加と削除 void AddObserver( Observer *observer ); void RemoveObserver( Observer *observer ); }; オブザーバパターン 処理中の経過や変化を見てる人に通知

関連するクラスや モジュールとの依存性 を少なくすることで 何がよくなるの? 依存性をなくすメリット 関連するクラスや モジュールとの依存性 を少なくすることで 何がよくなるの? 依存性をなくす 独立性を高める 設計と開発が楽になる 再利用できる

DI(Dependency Injection) IoC(Inversion of Control)とも呼ばれます。 Strategy パターン、Factory パターンを使って、依存性を切り離そうという考え方です。 世界中のあちこちで解説してありますので、詳細は略。        ____      /ノ   ヽ、_\     /( ○)}liil{(○)\       /    (__人__)    \   ええっ!?。   |   ヽ |!!il|!|!l| /   |      \     |ェェェェ|     /   /              \

再び「ファイルのコピー」を考える ファイルコピーロジック 転送元ファイル フォームの構成要素 ・ファイル名の入力コントロール ・終了のためのボタン ・コピー開始のためのボタン ・プログレスバー 転送先ファイル

プログラムの構造 Formのクラス{ Logic = new CopyFileLogic(); OnButtonCopy(){ Logic->SetSourceFile( Edit1->Text ); Logic->SetDestnationFile( Edit2->Text ); Logic->Execute(); } OnOk(){ ExitProgram(); OnSetProgressSize( int Size){ //プログレスバーのサイズ設定 OnProgressChanged( int Position ){ //プログレスバーを移動 とかなんとか。 この辺がクラスの依存関係

DIを使ってみる。 DEMO Spring.NETを使ってみる

どのへんが「匠の伝承」なのか、について(笑)            / ̄ ̄\           /   _ノ  \           |     -◎-◎)              |     (__人__)                  |     ` ⌒´ノ                  |         }                  ヽ        }                ヽ、.,__ __ノ        _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、   /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_  丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、 . i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::! /;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::| ;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|::: そのくらいのことは、もう一般常識だよ、君。          ____        /      \    いじめないでよ。      /  _ノ  ヽ、_  \        / o゚((●)) ((●))゚o\ ここまで書くの、     |     (__人__)    | たいへんだったんだお     \     ` ⌒´     /    /´           `\   /  /          l  l   .___ __l  l_¶______/_/__/     ヽ   \, ´-'ヽ  ̄| ̄ ̄ ̄ ̄|   l二二二二l     ヾ_ノ   | '''' '   |   l二二二二l    | 9=ε-8. | '''..--  |   l二二二二l:::..    |   ..''  |  ''-.  ,|

ここまでは、実は前フリです。 ____ /ノ ヽ、_\ /( ○)}liil{(○)\ / (__人__) \ ええっ!?。        ____      /ノ   ヽ、_\     /( ○)}liil{(○)\       /    (__人__)   \   ええっ!?。   |   ヽ |!!il|!|!l| /   |      \     |ェェェェ|     /   /              \

/ ─ ─\ ざんねんながら、時間が迫ってきたようです。 / ,(●) (●)、\ 次回、本シリーズの本領に踏み込んでいきます。        ____     /      \    /  ─    ─\    ざんねんながら、時間が迫ってきたようです。  /    ,(●) (●)、\   次回、本シリーズの本領に踏み込んでいきます。  |       (__人__)    |   世界中の技術者を幸せに(謎)  \     ` ⌒´   /        ,,.....イ.ヽヽ、___ ーーノ゙-、.   :   |  ‘; \_____ ノ.| ヽ I       |  \/゙(__)\,|  i |     >   ヽ. ハ  |   ||          ____        /      \          /  _ノ  ヽ、_  \        / o゚((●)) ((●))゚o\  原稿が間に合わない     |     (__人__)    |  気がするお。     \     ` ⌒´     /    /´           `\   /  /          l  l   .___ __l  l_¶______/_/__/     ヽ   \, ´-'ヽ  ̄| ̄ ̄ ̄ ̄|   l二二二二l     ヾ_ノ   | '''' '   |   l二二二二l    | 9=ε-8. | '''..--  |   l二二二二l:::..    |   ..''  |  ''-.  ,|

ご静聴ありがとうございました。 m(_._)m        ____      /      \    /  _ノ  ヽ、_  \   /  o゚⌒   ⌒゚o  \  また今度だお。   |     (__人__)    |   \     ` ⌒´     /                                  ,.へ   ___                             ム  i  「 ヒ_i〉                            ゝ 〈  ト ノ                           iニ(()  i  {              ____           |  ヽ  i  i           /__,  , ‐-\           i   }  |   i         /(●)   ( ● )\       {、  λ  ト-┤.      /    (__人__)    \    ,ノ  ̄ ,!  i   ゝ、_     |     ´ ̄`       | ,. '´ハ   ,! . ヽ、    `` 、,__\              /" \  ヽ/    \ノ ノ   ハ ̄r/:::r―--―/::7   ノ    /        ヽ.      ヽ::〈; . '::. :' |::/   /   ,. "         `ー 、    \ヽ::. ;:::|/     r'"      / ̄二二二二二二二二二二二二二二二二ヽ      | |       お し ま い         │|      \_二二二二二二二二二二二二二二二二ノ Special thanks for Yaruo charactors