Your SlideShare is downloading. ×
0
C#で始める
ゆるふわぷよぐやみんぐ2
May 6 2014amaya@0x17E
Object Oriented
 オブジェクト指向とは
部分ごとに分割整理し, 汎用性(多様性)を持たせること
現実のモノや概念と照らし合わせると考えやすい
動物<ー犬<ー柴犬
↑
猫<ーアメリカンショートヘアー
インスタンス: ポチ, コロ...
OOPとclass
 Classベースで実現される
Cの構造体と何が違うのか?
ー>多様性を持たせることができる
C#にも構造体(=struct)があるがあまり使われない
動物class(abstract)
・寝る
犬class
・寝る
・吠...
OOPとclass
 class
まとまりが欲しい…
例えば”犬”をプログラムで表したい
abstract class Animal{
abstract void Sleep()
}
class Dog: Animal{
override v...
OOPとclass
 使い方…例えばMain関数の中から使う
型 インスタンス名 = new 型();
インスタンス名.クラス内で宣言された変数やメソッド
static void Main(string[] args){
//Food app...
OOPとclass
 抽象クラス・インターフェイス
大まかな使い分け
縦の繋がり=>抽象クラス
横の繋がり=>インターフェイス
C#では多重継承は禁止されている
 メンバ
 プロパティ
• getter…値を取得(get)する時/sett...
OOPとclass
 同じようなことは組込型でも
int x = 10;
string y = x.ToString();
//int型のToStringメソッドを呼び出している
//ToStringはそのインスタンスを文字列に変換して返すi...
OOPとclass
 コンストラクタによる初期化
mydog.Name = “ポチ”; のようにして名前や種類をセットしたけれど…
名前や種類は最初から決めていいよね?
public 型(引数の型 引数,…){}
class Dog{
pub...
分数を表すクラスを作り, 分数同士の四則演算を実装
ただし演算子のオーバーロードは使わず, 分数クラスのメソッドで計算を行うものとする
演習: 分数
分数クラスサンプル解説
 コンストラクタ
 プロパティとアクセス修飾子
• private(デフォルト)…自クラスからのみ
• public…どこからでも
• 自動プロパティ
 例外…throw new Exception()
 静的メ...
List(とジェネリクス)
 恐らくc#で最もよく使われるコレクション(=データの集まり)
 最初に決めた型のみを要素として持つ
//文字列のListコレクション
List<string> strings = new List<string...
ジェネリクス
 ジェネリックなコレクション
List<T>, Dictionary<T, U>
 ジェネリックなクラス
class Xxx<T>{…}
 ジェネリックなメソッド
T Yyy(U zzz){…}
任意の型で使える!!
foreach/LINQ (IEnumerableの実装)
 コレクションにIEnumerableインターフェースを実装する(orし
てある)ことで従来のfor/whileループだけでなくforeachや
LINQを使えるようになる
List...
LINQ
 コレクションを扱いやすくするもの
 メソッド記法とSQL風の記法がある(同じ)
 今回はメソッド記法を紹介
List<string> newStrings =
strings.Select((str)=>{return str...
演習: リファクタリング de C#
 用意した酷いコードをリファクタリング.条件は以下の通り
 ポケモンバトルをしたい!
 唯一な名前を持つトレーナー, ポケモンをそれぞれ定
義する
 トレーナーにはたんパンこぞう, エリートトレーナ...
今回特に利用すると良い機能等
 Main関数に詰め込まない, ファイルを分ける
 コンストラクタ
 プロパティ
 Enum
 多様性
 配列/List
 ループ文/LINQ
 命名規則
C#らしさ
 オブジェクト指向
 多様性(多様なものを同列に扱う)
 隠蔽(≒機能の完結性)
• アクセス修飾子(private, public, protected,…)
• プロパティ(publicな変数???)
 関数志向
 ラ...
お わ り
Upcoming SlideShare
Loading in...5
×

getstartedc#_2

326

Published on

oucc第2回c#初心者講習会資料
最後の演習は飛ばしました

※演習のサンプルの一部(https://gist.github.com/amaya-382/6ccb3648510062930b81)

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
326
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "getstartedc#_2"

  1. 1. C#で始める ゆるふわぷよぐやみんぐ2 May 6 2014amaya@0x17E
  2. 2. Object Oriented  オブジェクト指向とは 部分ごとに分割整理し, 汎用性(多様性)を持たせること 現実のモノや概念と照らし合わせると考えやすい 動物<ー犬<ー柴犬 ↑ 猫<ーアメリカンショートヘアー インスタンス: ポチ, コロ, タマetc… 実装方法は1種類とは限らない Ex. 動物<ー犬(プロパティとして種類を持つ) ではこれをどうやってプログラミングで実現するか?
  3. 3. OOPとclass  Classベースで実現される Cの構造体と何が違うのか? ー>多様性を持たせることができる C#にも構造体(=struct)があるがあまり使われない 動物class(abstract) ・寝る 犬class ・寝る ・吠える 柴犬class ・寝る ・吠える ・色
  4. 4. OOPとclass  class まとまりが欲しい… 例えば”犬”をプログラムで表したい abstract class Animal{ abstract void Sleep() } class Dog: Animal{ override void Sleep(){…} string Kind;//種類 string Name;//名前 void Bark(){…}//吠える void Eat(Food food){…}//食べる }
  5. 5. OOPとclass  使い方…例えばMain関数の中から使う 型 インスタンス名 = new 型(); インスタンス名.クラス内で宣言された変数やメソッド static void Main(string[] args){ //Food apple = new Food(); Dog mydog = new Dog(); //newでインスタンス生成 mydog.Name = “ポチ”; //名前をセット(本来はプロパティを使うべき) mydog.Kind = “柴犬”; //種類をセット mydog.Bark(); //吠える mydog.Eat(apple) //appleを食べる(appleは既に宣言されているFood型) }
  6. 6. OOPとclass  抽象クラス・インターフェイス 大まかな使い分け 縦の繋がり=>抽象クラス 横の繋がり=>インターフェイス C#では多重継承は禁止されている  メンバ  プロパティ • getter…値を取得(get)する時/setter…値を入れる(set)時 • 型 名前{get{…return…} set{…value}}  メソッド  変数
  7. 7. OOPとclass  同じようなことは組込型でも int x = 10; string y = x.ToString(); //int型のToStringメソッドを呼び出している //ToStringはそのインスタンスを文字列に変換して返すint 型に実装されているメソッド ※F12で定義へ移動
  8. 8. OOPとclass  コンストラクタによる初期化 mydog.Name = “ポチ”; のようにして名前や種類をセットしたけれど… 名前や種類は最初から決めていいよね? public 型(引数の型 引数,…){} class Dog{ public Dog(string name, string kind){ Name = name; Kind = kind; } // 先程の宣言はここでは仮に省略 } これを Dog myDog = new Dog(“ポチ”, “柴犬”); とできるようになる
  9. 9. 分数を表すクラスを作り, 分数同士の四則演算を実装 ただし演算子のオーバーロードは使わず, 分数クラスのメソッドで計算を行うものとする 演習: 分数
  10. 10. 分数クラスサンプル解説  コンストラクタ  プロパティとアクセス修飾子 • private(デフォルト)…自クラスからのみ • public…どこからでも • 自動プロパティ  例外…throw new Exception()  静的メソッド…static  メソッドのオーバロード…同名メソッドの多重定義
  11. 11. List(とジェネリクス)  恐らくc#で最もよく使われるコレクション(=データの集まり)  最初に決めた型のみを要素として持つ //文字列のListコレクション List<string> strings = new List<string>(); //整数のListコレクション List<int> integers = new List<int>(); //T型のListコレクションのイメージ //List<T> t = new List<T>();  配列とは構造が大きく違う  Add/Removeなどができる  任意の型を使える(ジェネリクス)  使い道によって他にも多くのコレクションが用意されている
  12. 12. ジェネリクス  ジェネリックなコレクション List<T>, Dictionary<T, U>  ジェネリックなクラス class Xxx<T>{…}  ジェネリックなメソッド T Yyy(U zzz){…} 任意の型で使える!!
  13. 13. foreach/LINQ (IEnumerableの実装)  コレクションにIEnumerableインターフェースを実装する(orし てある)ことで従来のfor/whileループだけでなくforeachや LINQを使えるようになる List<string> strings = new List<string>{“x”,”yy”,”zzz”}; foreach(string str in strings){ Console.WriteLine(str); } //出力 //x //yy //zzz
  14. 14. LINQ  コレクションを扱いやすくするもの  メソッド記法とSQL風の記法がある(同じ)  今回はメソッド記法を紹介 List<string> newStrings = strings.Select((str)=>{return str + “!”;}); //newStringsは x!,yy!,zzz! Selectメソッドの引数に各要素に対する処理(ラムダ式)を渡す (引数)=>{処理…return 結果;} //ラムダ式
  15. 15. 演習: リファクタリング de C#  用意した酷いコードをリファクタリング.条件は以下の通り  ポケモンバトルをしたい!  唯一な名前を持つトレーナー, ポケモンをそれぞれ定 義する  トレーナーにはたんパンこぞう, エリートトレーナーな ど複数の種類がいるものとし, 更に個々に名前を持つ  ポケモンには複数の種類がいるものとし, 更に個々に 名前を持つ. 技は4つ. もちものを持てる.個々の能力 を持つ.余裕があるなら進化の概念も取り込む.  バトルはトレーナー対トレーナー, 手持ちのポケモン は6匹まで. バトルの詳細は省いて良い.敗者が勝者 に所持金の半分を渡す.(切り捨て)  すべて実装する必要はない. 設計を根本から見直す
  16. 16. 今回特に利用すると良い機能等  Main関数に詰め込まない, ファイルを分ける  コンストラクタ  プロパティ  Enum  多様性  配列/List  ループ文/LINQ  命名規則
  17. 17. C#らしさ  オブジェクト指向  多様性(多様なものを同列に扱う)  隠蔽(≒機能の完結性) • アクセス修飾子(private, public, protected,…) • プロパティ(publicな変数???)  関数志向  ラムダ式(細分化, 移譲, 遅延)  LINQ(replace loop statements)  型推論(不完全…)  I/O, using・try-catch-finally(Dispose pattern)  非同期処理(GUI, レスポンス)  .Net Framework etc.
  18. 18. お わ り
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×