SlideShare a Scribd company logo
1 of 47
Download to read offline
超初心者向け!
C#とオブジェクト指向
那由多(@nayuta_1999)
自己紹介
● 那由多(@nayuta_1999)
● LOCAL学生部,MPC所属
● 使用言語:C++,C#,python(使えるとは
言っていない)
● 何かをやろうとして色々手を出して何も
できていない.
目次
● オブジェクト指向とは
● 関数のオーバーロード
● カプセル化
● 継承
● クラスの型とキャスト
● ポリモーフィズム
注意!
● なるべくどの言語にも活かせるようなスライドにす
るつもりですがサンプルコードはC#で書きます.
● ぶっちゃけC#のステマも兼ねてますが一応オブ
ジェクト指向がメインなので入出力などの基礎は
今回は説明しません.
● 時間が足りないのでふんわり理解しましょう
というわけで早速オブジェクト指向とは
オブジェクトを組み合わせて
作っていくプログラミング手法
いやわからんて
もうちょっと噛み砕いて電子レンジとかで例えてみると
大きさ
重さ
温め機能
いろんな機能や要素があるね
これをクラスと呼ばれる設計図のようなも
のにまとめていき(定義して),実体(インスタ
ンス)を生成して組み合わせてプログラミン
グしていくプログラム手法をオブジェクト指
向と言います.
用語1
● メソッド:オブジェクトの内部に定義された関数.
● クラス:オブジェクトの設計図のようなもの.
● インスタンス:クラスを実体化させたもの.
メソッドのオーバーロード
メソッドのオーバーロードとは
同名の関数を引数の違いで
複数定義できる機能
具体的にどんなことに使うの?
サンプルコード見せるね
こんな感じ
関数のオーバーロードは便利だよって話
カプセル化とは
● 操作可能な値やメソッドだけを公開し他
の操作されたら困る値を隠蔽すること.
● メリットをまた電子レンジに例える
というわけで
基盤をいじってみよ
う
出力をめっちゃあ
げてみよう
電子回路の知
識がないと電
子レンジって扱
えないの?
電子レンジに
いろいろ繋いで
遊んでみよ
つまり?
● 使うのに知っていればいい機能のみに絞る.
● いじられると壊れかねない値を隠蔽することによっ
てプログラムを守る.
● 無駄に他のものに依存させないことによってクラス
の書き換えを容易にする.
どうやって制限するの?
アクセシビリティ使おう
アクセシビリティって?
メンバーの前に書いてあるpublicやprivate
など
とりあえず3つ覚えよう
アクセシビリティの種類
● public:どこからでもアクセス可能
● protected:クラス内部と派生クラス(継承
で説明)からならアクセス可能
● private:クラス内部からアクセス可能
なんでこんなことするのー!
プログラムは一人で作るもんじゃ
ねぇからだよ!
クラスを書いた人とプログラム書く
人は違う場合も多い
ようするに?
何されるかわからんから
触っていい部分と触られると
まずい部分できちんと分けよう
とは言っても
値欲しい場合もあるし
値をどうしても変更したい場合もあるよね
setterとgetterを定義しよう
● setter:値を代入するメソッド
● getter:値を取得するメソッド
具体的には?
サンプルコード見せるね
プロパティ(C#のみの機能)
● 内部からはメソッドに見えるけれど外か
らはフィールドに見えるもの.
● 必須機能ではないが便利
● setterとgetterに使うよ
具体例
サンプルコード見せるね
継承
● 継承はあるクラスからその性質を受け
継いだ新しいクラスを作ること
● 別名として派生とも言う
例えば
電子レンジ
オーブンレンジ
要するに?
● オーブンレンジにはレンジの機能があるよね
● いちいち書くの面倒じゃね?
継承しよう
実装してみよう
サンプルコード(ry
コードを短くかけるね
やったぜ
静的な型と動的な型
● classの宣言の仕方をやった時に左側と右側で同
じクラス名を宣言しました
● 左側が代入される変数の型で静的な型と言います
● 右側は生成されるインスタンスの型で動的な型と
いいます
クラスのキャストについて
● 基底クラスの変数には派生クラスのイン
スタンスを代入できる.
● 逆はできる場合とできない場合がある
なんで?
要するに
● オーブンレンジは全て電子レンジ
● 電子レンジはオーブンレンジではない
ネーミング
● 基底クラスの変数に派生クラスのインス
タンスを代入する操作をアップキャスト
● 逆をダウンキャストという
さっきもいったけど
● アップキャストは常にできる(暗黙的に行
える)
● ダウンキャストはできない場合がある(明
示しなければならない)
ダウンキャストには方法がいくつかある
● キャスト
● is演算子を使ったキャスト
● as演算子
キャスト
● ダウンキャストは必ずキャストできるとは限りませ
ん.
● キャストを行うことでキャストできる場合はキャスト
できます.
● キャストできない場合はInvalidCastExceptionとい
う例外を吐きます
is演算子を使ったキャスト
● is演算子を使うとそのインスタンスをキャ
ストできるかどうかをbool型で返してくれ
ます
● if文などと組み合わせて使いましょう
as演算子を使ったキャスト
● as演算子を使うとキャストできます
● as演算子は普通のキャストと違ってキャストに失
敗した時nullを返します.
● C#では基本的に例外は本当に予期せぬ場合や
失敗すると致命的なエラーを起こす時に使うもの
なのでなるべくas演算子を使いましょう
ポリモーフィズム(多態性)
英語だ・・・
日本語で説明
● 同じメソッド呼び出しに対してオブジェク
トによって異なる動作をすること
● それを実現するために仮想メソッドとい
うものがある.
意味わかんね
● 例えば魔法使いと戦士で攻撃って関数
を呼び出したとしてもダメージ算出方法
は変えたいよね
● 魔法使いは魔力依存に,戦士は力依存
に
静的な型と動的な型で判定する
● 基本は静的な型で行うよ.
● 動的な型で判定を行う場合メソッ
ドのオーバーライドが必要
メソッドのオーバーライドって?
● 動的な型で判別する時には仮想メソッドと呼ばれ
るものを使う
● 同じクラスを継承した時にメソッドの上書きを行え
ればできそう
● それをメソッドのオーバーライドと呼ぶ
実際にやってみよう
サンプルコード(ry
まとめ
● オブジェクト指向は大規模プログラムを
組む時によく使う手法
● どうせB2でやるんだし今のうちに理解し
ておこうね
おまけ
今日の内容をざっとまとめた記事がこちらなので読んでくれたら嬉しい
https://qiita.com/nayuta_1999/items/f656
04fb13f182b81e6e
ご静聴ありがとうございました

More Related Content

What's hot

About myon
About myonAbout myon
About myon
myuon
 
先端技術 関数型プログラミング
先端技術 関数型プログラミング先端技術 関数型プログラミング
先端技術 関数型プログラミング
聡 中川
 
他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法
Takeshi Sugiyama
 
Lt python腕試しネタ
Lt python腕試しネタLt python腕試しネタ
Lt python腕試しネタ
kiwofusi
 

What's hot (20)

Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
 
運用で爆発四散しないためのメタプログラミングとの付き合い方
運用で爆発四散しないためのメタプログラミングとの付き合い方運用で爆発四散しないためのメタプログラミングとの付き合い方
運用で爆発四散しないためのメタプログラミングとの付き合い方
 
20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う
 
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
 
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数
 
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLRubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
 
ぼくたちRubyプログラミング少年団!~小・中学生向けプログラミング言語Rubyの学習塾の運営、学習教材の開発・販売事業~
ぼくたちRubyプログラミング少年団!~小・中学生向けプログラミング言語Rubyの学習塾の運営、学習教材の開発・販売事業~ぼくたちRubyプログラミング少年団!~小・中学生向けプログラミング言語Rubyの学習塾の運営、学習教材の開発・販売事業~
ぼくたちRubyプログラミング少年団!~小・中学生向けプログラミング言語Rubyの学習塾の運営、学習教材の開発・販売事業~
 
Requestsで始める5分前帰社
Requestsで始める5分前帰社Requestsで始める5分前帰社
Requestsで始める5分前帰社
 
bottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアルbottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアル
 
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
 
About myon
About myonAbout myon
About myon
 
Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)
 
先端技術 関数型プログラミング
先端技術 関数型プログラミング先端技術 関数型プログラミング
先端技術 関数型プログラミング
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法
 
Lt python腕試しネタ
Lt python腕試しネタLt python腕試しネタ
Lt python腕試しネタ
 
PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介
 
前振りスライド#2
前振りスライド#2前振りスライド#2
前振りスライド#2
 
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙Chrome拡張で改善 表紙
Chrome拡張で改善 表紙
 
CA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについてCA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについて
 

Similar to (超初心者向け)オブジェクト指向とC#

Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
azuma satoshi
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
shoma h
 

Similar to (超初心者向け)オブジェクト指向とC# (20)

YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
 
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
 
第0回プログラミング講座
第0回プログラミング講座第0回プログラミング講座
第0回プログラミング講座
 
オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)
 
C#とaop
C#とaopC#とaop
C#とaop
 
Web技術勉強会 20110611
Web技術勉強会 20110611Web技術勉強会 20110611
Web技術勉強会 20110611
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
 
楽しいプログラミング
楽しいプログラミング楽しいプログラミング
楽しいプログラミング
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
 
C#erがF#に這い寄ってみた
C#erがF#に這い寄ってみたC#erがF#に這い寄ってみた
C#erがF#に這い寄ってみた
 
プログラミング初心者の壁の越え方
プログラミング初心者の壁の越え方プログラミング初心者の壁の越え方
プログラミング初心者の壁の越え方
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
こわくないPython その2- ファイナルファンタジーとグレンラガンで学ぶOOP
こわくないPython その2- ファイナルファンタジーとグレンラガンで学ぶOOPこわくないPython その2- ファイナルファンタジーとグレンラガンで学ぶOOP
こわくないPython その2- ファイナルファンタジーとグレンラガンで学ぶOOP
 
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
 
20180824 DLLab推論ナイト_深層学習モデル推論ライブラリ「Menoh」の紹介/Python以外でDeepLearning
20180824 DLLab推論ナイト_深層学習モデル推論ライブラリ「Menoh」の紹介/Python以外でDeepLearning20180824 DLLab推論ナイト_深層学習モデル推論ライブラリ「Menoh」の紹介/Python以外でDeepLearning
20180824 DLLab推論ナイト_深層学習モデル推論ライブラリ「Menoh」の紹介/Python以外でDeepLearning
 
こわくないPython
こわくないPythonこわくないPython
こわくないPython
 
Go 言語を語ってみるか
Go 言語を語ってみるかGo 言語を語ってみるか
Go 言語を語ってみるか
 
TypeScriptについて
TypeScriptについてTypeScriptについて
TypeScriptについて
 

Recently uploaded

Recently uploaded (7)

LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

(超初心者向け)オブジェクト指向とC#