visual studio 2008による 開発環境・プログラミングの進化

72
INETA Day 2008

Upload: fujio-kojima

Post on 12-Nov-2014

458 views

Category:

Technology


4 download

DESCRIPTION

「INETA Day 2008~コミュニティパワーをリアルに体験しよう」 2008年5月17日 日本科学未来館 みらいCanホール http://ineta.jp/tabid/173/Default.aspx セッション 1-1 『Visual Studio 2008による 開発環境・プログラミングの進化』 新たな開発環境はどのように進化しているか、テクノロジや言語の進化がプログラミング スタイルにどのような変化をもたらすかといった 2 つの視点から、Visual Studio 2008の世界をご紹介します。 サンプルソースはこちら: http://ineta.jp/Portals/0/Event/1day_event/2008/20080517_1_1_VS2008.zip

TRANSCRIPT

Page 1: Visual Studio 2008による 開発環境・プログラミングの進化

INETA Day 2008

Page 2: Visual Studio 2008による 開発環境・プログラミングの進化

Visual Studio 2008 による開発環境・プログラミングの進化

2008/05/17 VSUG 開発プロセスフォーラムリーダー小島

富治雄

INETA DAY 2008 セッション 1-1

~プログラミングはどう変わるか 中級編~

Page 3: Visual Studio 2008による 開発環境・プログラミングの進化

はじめに

Page 4: Visual Studio 2008による 開発環境・プログラミングの進化

資料はイベント後にダウンロードできるように

します。

Page 5: Visual Studio 2008による 開発環境・プログラミングの進化

自己紹介• 小島 富治雄 (Fujiwo)

– 福井コンピュータ株式会社• INETA 所属コミュニティ所属

– VSUG (Visual Studio User Group)• フォーラムリーダー

– こみゅぷらす (COMU+)• 運営スタッフ

–福井情報技術者協会[FITEA]• 運営委員

• Microsoft MVP for Development Tools - Visual C#

Page 6: Visual Studio 2008による 開発環境・プログラミングの進化

自己紹介ジャグリング

自転車通勤

万年筆

世界のなべあつ

マイブーム

Page 7: Visual Studio 2008による 開発環境・プログラミングの進化

今日話したいこと

• Visual Studio 2008 による開発環境・プログラミングの進化

• プログラミングはどう変わるか 中級編

• LINQ 周りを中心に

Page 8: Visual Studio 2008による 開発環境・プログラミングの進化

Agenda1. 復習2. .NET の進化と Visual Studio3. Demo4. 美しいプログラムについて

( オプション )

Page 9: Visual Studio 2008による 開発環境・プログラミングの進化

1. 復習

Page 10: Visual Studio 2008による 開発環境・プログラミングの進化

まずは… .NET1.0 でのプログラミングで

キモとして押さえておくべきところ

• .NET らしい Cool な書き方–delegate と event–データバインド– 属性 ( アノテーション )

• プログラム部品 ( コンポーネントなど ) 同士を、ゆるめに結合

Page 11: Visual Studio 2008による 開発環境・プログラミングの進化

データバインドの例

: DrawingUI : Data描画する

: Application

Page 12: Visual Studio 2008による 開発環境・プログラミングの進化

+ 追加() : void

+ <<event>> Changed : Action<T>

Data

+ OnChanged() : void

DrawingUI

IDataSource<T>

DataSource

<<realize>>

Application

- drawingUI

- data

データバインドdrawingUI.DataSource = data;

Page 13: Visual Studio 2008による 開発環境・プログラミングの進化

+ 追加() : void

+ <<event>> Changed : Action<T>

Data

+ OnChanged() : void

DrawingUI

+ <<event>> Changed : Action<T>

<<interface>>IDataSource<T>

<<interface>>IEnumerable<T>

<<realize>>

DataSource

interface IDataSource<T> : IEnumerable<T>{ event Action<T> Changed;}

class Data<T> : IDataSource<T>{ List<T> list = new List<T>();

public event Action<T> Changed;

public void Add(T item) { list.Add(item); if (Changed != null) Changed(item); }

public IEnumerator<T> GetEnumerator() { return list.GetEnumerator(); }

IEnumerator IEnumerable.GetEnumerator() { return list.GetEnumerator(); }}

public delegate void Action<T>(T item);

interface IDrawable{ void Draw();}

class DrawingUI<T> : UserControl where T : IDrawable{ IDataSource<T> dataSource = null;

public IDataSource<T> DataSource { set { dataSource = value; value.Changed += OnChanged; } private get { return dataSource; } }

public void Draw() { if (DataSource != null) foreach (T item in DataSource) item.Draw(); }

void OnChanged(T item) { item.Draw(); }}

データバインド サンプル (C#2.0)

Page 14: Visual Studio 2008による 開発環境・プログラミングの進化

2. .NET の進化と Visual

Studio

Page 15: Visual Studio 2008による 開発環境・プログラミングの進化

.NET Framework の進化1.0 1.1 2.0 3.0 3.5

ランタイム (CLR)

1.0.3705 1.1.4322 2.0.50727832

2.0.507271433

トピック ADO.NETASP.NET

WinForm

ASP.NET1.1 ADO.NET 2.0ASP.NET 2.0

C# 2.0VB 8.0

WPFWF

WCFCardSpace

ASP.NET AJAXLINQ

C# 3.0VB 9.0

VS2002 ◎

VS2003 ◎

VS2005 ◎ △

VS2008 ○ ○ ◎

サポート期限 2007/07/10 2008/10/14 2011/01/12 2012/04/10 ----

Page 16: Visual Studio 2008による 開発環境・プログラミングの進化

.NET Framework 全体像.NET Framework 3.5 の構成

Base Class Library (BCL)

ASP.NETADO.NET Window Forms

WCF WF WPF CardSpace

WCF 追加 WF 追加 WPF 追加 BCL 追加

ASP.NET 追加(ASP.NET AJAX) LINQ

New!

ライブラリの拡張・強化 !

Page 17: Visual Studio 2008による 開発環境・プログラミングの進化

Visual Studio 2008 でのプログラミングで変わること

• IDE の進化–各種図解的言語のデザイナ

• WPF• データ モデル (LINQ to SQL など )• ワークフロー

Page 18: Visual Studio 2008による 開発環境・プログラミングの進化

Visual Studio 2008 でのプログラミングで変わること

–LINQ(Language-INtegrated Query:言語に統合されたクエリ )• C#3.0/Visual Basic9.0• LINQ プロバイダ

–LINQ to Object–LINQ to SQL–LINQ to DataSet–LINQ to XML

Page 19: Visual Studio 2008による 開発環境・プログラミングの進化

参考 : LINQ の種類

.NET LINQ

LINQ to Objects

LINQ to Datasets LINQ to SQL LINQ to

Entities LINQ to XML

C# VB その他の言語

ObjectData Base

XML

Page 20: Visual Studio 2008による 開発環境・プログラミングの進化

参考 : Linq とは何か

  IEnumerable<T> ベースのすべての情報ソースにクエリを適用する技術

Page 21: Visual Studio 2008による 開発環境・プログラミングの進化

参考 : Linq to Object

var bookList = new[] { new { タイトル = "C# 入門 " , ISBN コード = "AAAAAAA", 価格 = 2980 }, new { タイトル = "VB 入門 " , ISBN コード = "BBBBBBB", 価格 = 3300 }, new { タイトル = ".NET Framework", ISBN コード = "CCCCCCC", 価格 =

7800 } };

var books = from aBook in bookList where aBook.ISBN コード == "BBBBBBB" orderby aBook. タイトル select new { タイトル = aBook. タイトル , 価格 = aBook. 価格 }; books.ForEach(item => Console.WriteLine(item));

•IEnumerable<T> なオブジェクトをクエリ

例 .

Page 22: Visual Studio 2008による 開発環境・プログラミングの進化

Visual Studio 2008 でのプログラミングで変わること

更なるマルチ パラダイム化• 1.0 の頃…

–手続き型–オブジェクト指向–コンポーネント指向

• 2.0 以降–ジェネリック–関数型–より動的に–DSL (Domain Specific Language: ドメイン特化言語 ) の進化

Page 23: Visual Studio 2008による 開発環境・プログラミングの進化

例 . C# 1.0 → 2.0 、 3.0によるプログラミングの進化

• オブジェクトへの委譲 → メソッドへの委譲–class → delegate → 匿名メソッド ( クロージャ ) → ラムダ式

• yield による継続• これらと拡張メソッドによるメ

ソッド チェーン

Page 24: Visual Studio 2008による 開発環境・プログラミングの進化

Anders Hejlsberg

Page 25: Visual Studio 2008による 開発環境・プログラミングの進化

Anders Hejlsberg

Page 26: Visual Studio 2008による 開発環境・プログラミングの進化

Anders Hejlsberg 談 :C# の今後について

2006/02/02 at 横浜

Q. 今後 C# は、関数型言語として進化していくのか ?

A. Yes. C#3.0 や LINQ で導入された「ラムダ式」などの機能は、 Haskell や ML などの関数型言語に触発されたものだ。これらの機能は開発をもっと自由な形にする。設計しているだけでワクワクするような機能だ。C# 3.0 というのは、オブジェクト指向言語と関数型言語の「ハッピーな結婚」といってよいものになるだろう。

Page 27: Visual Studio 2008による 開発環境・プログラミングの進化

Anders Hejlsberg 談 :C# の今後について

Q. AOP ( アスペクト指向プログラミング ) 機能 ( =オブジェクトに対して後付けで機能を挿入する仕組み ) を提供する予定は ?

A. AOP は、個人的には懐疑的。 AOP が役立つ場面もあるが副作用もある。

C# の機能 ( 属性や Partial Class) で代用できるケースも多い。

Page 28: Visual Studio 2008による 開発環境・プログラミングの進化

3. Demo

Page 29: Visual Studio 2008による 開発環境・プログラミングの進化

世界のなべあつ

Page 30: Visual Studio 2008による 開発環境・プログラミングの進化

例 . 世界のなべあつ

• 手続き型パラダイムなべあつ• マルチパラダイムなべあつ• LINQ なべあつ• コンポーネント指向なべあつ

Page 31: Visual Studio 2008による 開発環境・プログラミングの進化

手続き型なべあつ

Page 32: Visual Studio 2008による 開発環境・プログラミングの進化

手続き型なべあつ

「 3 の倍数と 3 の付く数字だけ

アホになり、5 の倍数だけ

犬っぽくなります」

Page 33: Visual Studio 2008による 開発環境・プログラミングの進化

手続き脳で考えてみる

1. 順次実行、条件分岐、繰り返し処理の組み合わせで考える

2. 処理の順序を考える3. 各繰り返しの中で何をするか考

える4. 更により小さい粒度の処理で、

同様に考える

Page 34: Visual Studio 2008による 開発環境・プログラミングの進化

手続き脳で考えてみる

1. 1 から 40 まで繰り返す2. 繰り返しの中で、各の数につい

ておもろーに言う– 数をおもろーに言う

• 三が付くかまたは三の倍数で五の倍数のときはあほっぽく犬っぽく言う

• 三が付くかまたは三の倍数のときは、あほっぽく言う

• 五の倍数のときは、犬っぽく言う• それ以外のときは、普通に言う

Page 35: Visual Studio 2008による 開発環境・プログラミングの進化

手続き型なべあつフローチャート 1

数をおもろーに言う

「ヘーイ」と言う

「今から、三が付く数字と、三の倍数の時だけ、アホになり、五の倍数のときは、犬っぽくなります。」と言う

数 = 1, 40, 1

おもろーなギャグ.やる

Page 36: Visual Studio 2008による 開発環境・プログラミングの進化

手続き型なべあつフローチャート 2

数をアホっぽく犬っぽく言う

数をアホっぽく言う

数を犬っぽく言う

数を普通に言う

数をおもろーに言う

三が付くかまたは三の倍数 && 五の倍数

三が付くかまたは三の倍数

数が五の倍数

その他

Page 37: Visual Studio 2008による 開発環境・プログラミングの進化

手続き型なべあつ

Demo

Page 38: Visual Studio 2008による 開発環境・プログラミングの進化

手続き型なべあつの分割の様子言う

おもろーに言う

倍数かどうか

含むかどうか

アホっぽく犬っぽく言う

言う

犬っぽい読みへの変換

アホっぽい読みへの変換

読み

アホっぽく言う

或る桁の数の読み

犬っぽく言う

言う

犬っぽい読みへの変換

普通に言う言う

読み 或る桁の数の読み

読み 或る桁の数の読み

アホっぽい読みへの変換

言う

言う

倍数かどうか

読み 或る桁の数の読み

「手続き型なべあつ」おもろーなギャグ .やる

Page 39: Visual Studio 2008による 開発環境・プログラミングの進化

マルチパラダイムなべあつ

Page 40: Visual Studio 2008による 開発環境・プログラミングの進化

別の考え方

1. 「 1~ 40 の数の集合」を2. 「集合に対する『おもろーな加工』をするフィルタ」に通したものが

3. 「集合を出力するもの」のデータだ

Page 41: Visual Studio 2008による 開発環境・プログラミングの進化

シーケンシャルな .次の範囲の数 (1, 40)

そのそれぞれに次の変換をし( 数 => おもろーに読む ( 数 ))

列挙可能 (IEnurarable) な何か

列挙可能 (IEnurarable) な何か

ギャグ

データバインド !

(列挙可能な何かを加工する汎用的な )

フィルタ !

列挙可能な何かを出力できる何か

new おもろー ()

new なべあつ ()

読み上げてくれる何か

遅延評価 !

Page 42: Visual Studio 2008による 開発環境・プログラミングの進化

ニューなべあつ

なべあつ

+ Main() : void

なべあつプログラム

+ 言う(台詞 : string) : void

<<interface>>読み上げ可能な何か

読み上げてくれる何かが

+ GetEnumerator() : IEnumerator

<<interface>>IEnumerable

string

+ 言う(台詞 : string) : void

音声読み上げ

+ 言う(台詞 : string) : void

コンソール読み上げギャグ

+ GetEnumerator() : IEnumerator

おもろー

・フィルタのチェーン・yield return (遅延評価)

データバインド!(ForEach) 言う(台詞)

Page 43: Visual Studio 2008による 開発環境・プログラミングの進化

関心の分離

• 分離される関心が違う–手続き–オブジェクト–汎用アルゴリズム–汎用データ構造

• 手続きだけ、オブジェクトだけ、では分散する関心が多い

Page 44: Visual Studio 2008による 開発環境・プログラミングの進化

ニューなべあつ

Demo

Page 45: Visual Studio 2008による 開発環境・プログラミングの進化

音声なべあつ

Demo

Page 46: Visual Studio 2008による 開発環境・プログラミングの進化

LINQ なべあつ

Page 47: Visual Studio 2008による 開発環境・プログラミングの進化

Enumerable.Range(1, 40)

Select( 数 => おもろーに読む( 数 ))

IEnurarable

IEnurarable

ギャグ

データバインド !

(列挙可能な何かを加工する汎用的な )

フィルタ !

列挙可能な何かを出力できる何か

new おもろー ()

new なべあつ ()

読み上げてくれる何か

遅延評価 !

Page 48: Visual Studio 2008による 開発環境・プログラミングの進化

LINQ なべあつ

Demo

Page 49: Visual Studio 2008による 開発環境・プログラミングの進化

参考 : Linq to Objectvar books = from aBook in bookList where aBook.ISBN コード == "BBBBBBB" orderby aBook. タイトル select new { タイトル = aBook. タイトル , 価格 = aBook. 価格 };books.ToList().ForEach(item => Console.WriteLine(item));

bookList.Where (aBook => aBook.ISBN コード == "BBBBBBB") .OrderBy(aBook => aBook. タイトル ) .Select (aBook => new { タイトル = aBook. タイトル , 価格 = aBook. 価

格 }) .ToList().ForEach(item => Console.WriteLine(item));

Page 50: Visual Studio 2008による 開発環境・プログラミングの進化

BookList

Where (aBook => aBook.ISBN コード == "BBBBBBB")

ForEach(item => Console.WriteLine(item))

列挙可能 (IEnurarable) な何か

列挙可能 (IEnurarable) な何か

(列挙可能な何かを加工する汎用的な )

フィルタ群 !

列挙可能な何かを何かする何か

遅延評価 !

OrderBy(aBook => aBook. タイトル )

Select (aBook new { タイトル = aBook. タイトル , 価格 = aBook. 価格

})

列挙可能 (IEnurarable) な何か

列挙可能 (IEnurarable) な何か

Page 51: Visual Studio 2008による 開発環境・プログラミングの進化

コンポーネント指向なべあつ

Page 52: Visual Studio 2008による 開発環境・プログラミングの進化

なべあつ .Win

+ Main() : void

なべあつプログラムメインフォーム

+ GetEnumerator() : IEnumerator

おもろー

- 或るおもろー

音声読み上げ

- 或る音声読み上げ

- 台詞の表示() : void

なべあつ

- 世界のなべあつ

+ 言う(台詞 : string)

+ <<event>> 台詞の更新

<<interface>>読み上げ可能な何か

読み上げ

+ GetEnumerator() : IEnumerator

<<interface>>IEnumerable

string

ギャグ

Component

UserControl

Form

データバインド!(ForEach)

・台詞の更新イベントの登録・言う(台詞)

・フィルタのチェーン・yield return (遅延評価)

Page 53: Visual Studio 2008による 開発環境・プログラミングの進化

なべあつ .Win

Demo

Page 54: Visual Studio 2008による 開発環境・プログラミングの進化

様々な仕様変更への対応の例

「3の倍数と3の付く数字だけアホになります」

• 「3の倍数と3の付く数字だけアホになり、5の倍数だけ犬っぽくなります」

• 「3の倍数と3の付く数字だけアホになり、5の倍数だけナルシストになります」

• 「3の倍数と3の付く数字だけアホになり、8の倍数だけ気持ち良くなります」

• 「3の倍数と3の付く数字だけ憤りを感じます」• 「3の倍数と3の付く数字のときだけアホになり、

8の倍数だけすごく疲れます」

Page 55: Visual Studio 2008による 開発環境・プログラミングの進化

4. 美しいプログラムについて

Page 56: Visual Studio 2008による 開発環境・プログラミングの進化

分割攻略 (Divide-and-Conquer)について復習

1. プログラム開発は複雑さとの戦い2. 問題はサイズが小さいほうが簡単に解ける3. もし大きなサイズの問題を、いくつかのよ

り小さなサイズの問題に分割でき、それぞれを解けば良い状態にできれば、その方が容易に解ける

4. 小さな問題に分けてそれぞれに解を与える

Page 57: Visual Studio 2008による 開発環境・プログラミングの進化

分割攻略 (Divide-and-Conquer)について復習

• 「分かる」とは「分けらる」ということ– 「これとこれは違う問題と言えるように

なる」こと– 「これであるものとないもの境界を知

る」こと

• どう分けるか ? が重要– 低結合 (low coupling) & 高凝集 (high cohesion)

Page 58: Visual Studio 2008による 開発環境・プログラミングの進化

どう関心を分離したいか

• ひとつのパラダイムだけでは、様々な分離のケースに対応が困難–手続き型パラダイムは処理単位で

の分割

数をおもろーに言う

「ヘーイ」と言う

「今から、三が付く数字と、三の倍数の時だけ、アホになり、五の倍数のときは、犬っぽくなります。」と言う

数 = 1, 40, 1

おもろーなギャグ.やる

Page 59: Visual Studio 2008による 開発環境・プログラミングの進化

ひとつのパラダイムに捕らわれない

• 「無執無着」

『一枚の葉にとらわれては木は見えん。一本の木にとらわれては 森は見えん。どこにも心を留めず 見るともなく全体を見る。それがどうやら「見る」ということのようだ。』– バガボンド ( 井上雄彦 /講談社 ) 第 4巻よ

Page 60: Visual Studio 2008による 開発環境・プログラミングの進化

新たなパラダイムに関する態度

新たな概念の習得→ 自分の既知の概念と結び付ける

これを安易にやってしまうと、思考停止を招くので要注意「分かったつもり」

Page 61: Visual Studio 2008による 開発環境・プログラミングの進化

• 「それって結局××× のことだよね」• 「それって昔からやってきたことで、別に新しくな

いじゃん」• 「そんなの ××× でもできるじゃん」• 「結局現場じゃ使えないし使わない」• 例 . プログラミング言語 C の説明を受けて

– 「そんなのアセンブリ言語でも『全部』できるじゃん」

– 「アセンブリ言語でできることでできないことがあるから、現場じゃ使えないよ」

→ 要パラダイム シフト !

新たなパラダイムに関する態度

Page 62: Visual Studio 2008による 開発環境・プログラミングの進化

新たなパラダイムに関する態度

例 . LINQ「どう使おうか ? 別に要らないよ

ね ? 」ではなく

「書きたかったようにやっとできるようになった」

Page 63: Visual Studio 2008による 開発環境・プログラミングの進化

美しいコード例 .

– 「何でも手続きで書くのが美しいのか ?」– 「オブジェクト指向ですべてうまくいく ?」– 「何でも C# で書くのが美しい ? 」– 「なんでもかんでも XML で」– 「モデルは全て UML で」

→ 適材適所– 手続きは手続き– ワークフローはワークフローデザイナで– UI は UI デザイナで– データはデータのデザイナで

Page 64: Visual Studio 2008による 開発環境・プログラミングの進化

手続き的 or 宣言的

// 手続き的for (int i = 0; i < 10; i++)

何かする ();

// 宣言的10.回 ( 何かする );

Page 65: Visual Studio 2008による 開発環境・プログラミングの進化

C# の記述 : 

var textBlock = new TextBlock();textBlock.FontSize = 18;textBlock.Text = "Hello";textBlock.SetValue(Canvas.LeftPropert

y , 150);textBlock.SetValue(Canvas.TopProperty

, 50); 

手続き的

Page 66: Visual Studio 2008による 開発環境・プログラミングの進化

XAML の記述 :

<TextBlock FontSize="18" Text="Hello" Canvas.Top=“50" Canvas.Left=“150"/> 

宣言的

Page 67: Visual Studio 2008による 開発環境・プログラミングの進化

VS2008デザイナによる記述 : 

 

C# ( 手続き的記述 ) や XAML (宣言的記述 ) と

比較して意図以外のノイズが少ない

図解的

Page 68: Visual Studio 2008による 開発環境・プログラミングの進化

VS2008 と WF

図解的

Page 69: Visual Studio 2008による 開発環境・プログラミングの進化

VS2008 で EDM (Entity Data Model)

図解的

Page 70: Visual Studio 2008による 開発環境・プログラミングの進化

「選択肢が増えた」

更に多くのパラダイムからの

選択が可能に

手続き的 +宣言的+ 図解的

Page 71: Visual Studio 2008による 開発環境・プログラミングの進化

これからのプログラマ

手続き脳+オブ脳+関数脳+右脳

Page 72: Visual Studio 2008による 開発環境・プログラミングの進化

懇親会に参加ください

• INETA 1 Day イベントの参加いただきありがとうございました。

• 本日17時30分から7階のレストランbasara にて、懇親会を開催します。

• ぜひ、参加ください。

• アンケートの記入、よろしくお願いします。

• 今後も、アイネタでは、コミュニティと一緒に勉強会等を開催してまいります。