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

More Related Content

PDF
機械学習入門とGPUと学習参考サイト
PPTX
✌(◔౪◔ )✌
PPTX
人口知能で色々試してみた
PDF
パターン認識にとっかかる
PDF
Playing with LibreLogo / LibreLogoで遊ぼう!
PDF
Techno TUT Lecture(scale)
KEY
Gcdについて?
PPTX
Mrsuzuki
機械学習入門とGPUと学習参考サイト
✌(◔౪◔ )✌
人口知能で色々試してみた
パターン認識にとっかかる
Playing with LibreLogo / LibreLogoで遊ぼう!
Techno TUT Lecture(scale)
Gcdについて?
Mrsuzuki

Viewers also liked (12)

PDF
puyoai
PPTX
漢直の世界へようこそ!
PDF
TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)
PDF
Techno TUT Lecture(Drums and Basses)
PPTX
戦技研 ぷよぷよAI 学生講義
PDF
Gestão de Projetos 2012 - Módulo 1
PPTX
Jet brainsnight resharper全社導入事例
PDF
VisualStudinoの役に立ちそうな拡張機能をまとめてみた
PDF
Debug Hacks at Security and Programming camp 2011
PDF
ReSharperを使ってみた
PDF
「コトナス」:出会わなくても良いアプリ『Match★Contact』
PDF
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
puyoai
漢直の世界へようこそ!
TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)
Techno TUT Lecture(Drums and Basses)
戦技研 ぷよぷよAI 学生講義
Gestão de Projetos 2012 - Módulo 1
Jet brainsnight resharper全社導入事例
VisualStudinoの役に立ちそうな拡張機能をまとめてみた
Debug Hacks at Security and Programming camp 2011
ReSharperを使ってみた
「コトナス」:出会わなくても良いアプリ『Match★Contact』
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
Ad

Similar to getstartedc#_2 (17)

PDF
2019年度 若手技術者向け講座 オブジェクト指向
PDF
第3回勉強会 オブジェクト指向
PPTX
実践C#2
PDF
オブジェクト指向プログラミング教育法序説
PDF
デザインパターンとともに学ぶオブジェクト指向のこころ
PPTX
C# 9.0 / .NET 5.0
PPT
第1回java実習(helloworld)2011
PDF
C#勉強会
PDF
Boost.Flyweight
PDF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
PPTX
C#とJavaの違い
PPTX
F流 『オブジェクト指向の考え方の基礎の基礎』 ~ソフトウェア開発の原則編~
PPTX
C# 8.0 Preview in Visual Studio 2019 (16.0)
PDF
(超初心者向け)オブジェクト指向とC#
PDF
ハトでもわかるオブジェクト指向
PDF
ハトでもわかるオブジェクト指向
PPT
オブジェクト指向最強
2019年度 若手技術者向け講座 オブジェクト指向
第3回勉強会 オブジェクト指向
実践C#2
オブジェクト指向プログラミング教育法序説
デザインパターンとともに学ぶオブジェクト指向のこころ
C# 9.0 / .NET 5.0
第1回java実習(helloworld)2011
C#勉強会
Boost.Flyweight
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
C#とJavaの違い
F流 『オブジェクト指向の考え方の基礎の基礎』 ~ソフトウェア開発の原則編~
C# 8.0 Preview in Visual Studio 2019 (16.0)
(超初心者向け)オブジェクト指向とC#
ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向
オブジェクト指向最強
Ad

More from Ryuichi ITO (7)

PPTX
scala.collection 再入門 (改)
PDF
ゼロから始めるScala文法
PDF
ゼロから始めるScalaプロジェクト
PDF
Internship final report@Treasure Data Inc.
PPTX
OUCC LT会2
PPTX
サクサクアンドロイド
PPTX
getstartedc#_1
scala.collection 再入門 (改)
ゼロから始めるScala文法
ゼロから始めるScalaプロジェクト
Internship final report@Treasure Data Inc.
OUCC LT会2
サクサクアンドロイド
getstartedc#_1

getstartedc#_2