Python講座 第2回
-
Upload
kenta-owaki -
Category
Software
-
view
728 -
download
0
Transcript of Python講座 第2回
Python 講座 2015 年版 第 2 回名古屋工業大学大学院工学研究科創成シミュレーション工学専攻 2 年学籍番号 :26413508大脇 謙太
イントロダクション
ある疑問
なぜプログラミングをするのか ?
プログラミングが何の役に立つのか?
より良いシステムを作るため– 直感的に正しく– 社会の役に立つ– ( ミクロな視点で ) クライアントの役に立つ
もっと計算機を使いやすくする– 素人では触れないところに改良を施す
人の役に立つ「ものを作る」というのが工学における基礎理念情報工学において 「もの」 ハードウェア、ソフトウェア
プログラム
・・・と、言いましたが
当面のところは研究のためと割り切っておきましょう (^^;)
前回講座にて
オブジェクト指向
オブジェクト指向とは• プログラミングパラダイムの一つ– 命令型– 関数型– 手続き型– オブジェクト指向 etc…
( プログラミングパラダイムとはコーディング、プログラムに関する考え方のこと )
• Python は厳密にはマルチパラダイム• Python を扱う上でオブジェクト指向は重要
オブジェクト指向、プログラミングパラダイムは奥が深い
おすすめの本技術評論社いちばんやさしいオブジェクト指向の本 第 2 版井上 樹 著
「オブジェクト指向そのものを解説」した日本語の書籍オブジェクト指向が生まれた背景から概念の理解、プログラミングの特徴設計の指南( 教科書、読本と呼ぶにふさわしいと思います ぜひご一読あれ )
たつき
おすすめの本翔泳社オブジェクト指向入門 第 2 版原則・コンセプトBertrand Meyer 著酒匂 寛 訳
オブジェクト指向の第一人者バートランド・メイヤー氏の著作本 ( 前編 ) です。入門に適しているとは言えませんが、オブジェクト指向な定義・考え方・技法が詰まっています。( 内容は簡単ではありませんが、ソフトウェア開発技術者であれば一度は読むべき )
※ 申し訳ありませんが、こちらの本はまだ読んでおりません。
おすすめの本翔泳社オブジェクト指向入門 第 2 版方法論・実践Bertrand Meyer 著酒匂 寛 訳
オブジェクト指向の第一人者バートランド・メイヤー氏の著作本 ( 後編 ) です。モデリングのための視点、分析設計の原則を丁寧に解説。オブジェクト指向を熟知したい方向け( 内容は簡単ではありませんが、ソフトウェア開発技術者であれば一度は読むべき )
オブジェクト指向プログラミング
プログラミングの意義
より良いシステムを作ること
システムとはA system is a set of interacting or interdependent components
forming an integrated whole.
システムとは互いに作用しあい、依存しあう要素の集まりであり、要素は統合し全体を形成する。
―― 英 Wikipedia より
身近なシステム– 時計– 楽器– カメラ– PC etc…
システムとは情報工学においては
システムシステムデータ データ データ手続き 手続き 手続き
手続き手続き手続き
モジュールデータデータデータ手続き手続き手続き
モジュールデータデータデータ手続き手続き手続き
モジュールデータデータデータ手続き手続き手続き
手続き ( 関数 ) とデータ (変数 ) の集合体構造化プログラミング モジュール (部品 ) の集合体モジュール化プログラミング
よく似たシステム手続き ( 関数 ) とデータ (変数 ) の集合体構造化プログラミング モジュール (部品 ) の集合体モジュール化プログラミング
オブジェクト指向はこちらに近い
マルチエフェクター コンパクトエフェクター
オブジェクト指向のプログラミング先ほどの例でいくと1. まっさらなエフェクターボードを用意します ( インタプリタを起動 )2. 設計図からエフェクターを作成し3. 各種エフェクターを設定し4. エフェクターボードに並べ5. 配線します
ギターからの入力に対して所望の出力を施せるシステムの完成です
オブジェクト指向 ( オブジェクト製作 ) の方式クラスベース方式
– 設計図から作成する方式
オブジェクト指向 ( オブジェクト製作 ) の方式プロトタイプベース方式
– プロトタイプから改良する方式
クラスベースオブジェクト指向§1. オブジェクト指向とは§2. キーワード
§1. オブジェクト指向とは• 現実世界、実生活に根差した考え方をコンセプトにしている• もの ( 人 ) があって、それを操作する ( 命令を出す )• お互いにメッセージを送りながら協調し複雑なシステムを成す
§2.キーワード
1. オブジェクト2. クラス3. インスタンス
オブジェクト一つのテーマをもとに集めたデータと命令 (処理 )オブジェクト モジュール≒
vol の値Gate の値
Comp の値
Gate(x)
Volume( x )
Effect( ON/OFF)
オブジェクトデータ
手続きデータ --> メンバ変数、 クラス変数、プロパティ etc…手続き --> メソッド
クラスオブジェクトの設計書 ( 定義 )
クラス名
関数名
処理内容
インスタンスクラスをもとに作った 実体 ( オブジェクト )オブジェクトは量産可能です
クラスの利点• static変数、クラスメソッド– オブジェクトを生成しなくても呼び出せる変数やメソッドを定義できる– クラス内の変数やメソッドに直接アクセスできる
オブジェクト指向の特徴
§1. ポリモーフィズム§2. カプセル化§3. 動的型付け§4. 継承
キーワード
1. ポリモーフィズム2. カプセル化3. 動的型付け4. 継承
§1.ポリモーフィズム例 : ギターエフェクター
ELECTRO HARMONIXSMALL CLONE
( コーラスエフェクター )
BOSSTURBO Distortion DS-2( ディストーションエフェクター )
比較
ELECTRO HARMONIXSMALL CLONE
( コーラスエフェクター )
BOSSTURBO Distortion DS-2( ディストーションエフェクター )
– 設計書 ( クラス ) が違う– つまみ (変数 ) の数も違う– エフェクト (処理 ) も違うこの 2 つのエフェクターは全く別のオブジェクトところが、踏めばエフェクトがかかるという手続き ( メソッド ) は共通ユーザが新しいものを使用する際、抵抗感を減らす
ポリモーフィズム (多態性 ) とは同じメッセージでも、受け取ったオブジェクトによって動きが変わること
ポリモーフィズムの利点機能追加や仕様変更に強いシステムを作ることができる
手続き ( 関数 ) とデータ (変数 ) の集合体構造化プログラミング モジュール (部品 ) の集合体モジュール化プログラミング
機能を追加したいグレードアップしたい 買い替えコスト悪
機能の追加グレードアップ部分的買い替コスト良
§2. カプセル化
IbanezTS-9
( 本体 )IbanezTS-9( 内部基盤 )
IbanezTS-9( 設計図 )
インスタンス生成
比較
IbanezTS-9
( 本体 )
IbanezTS-9( 内部基盤 )
– 設計書 ( クラス ) が同じ– つまみ (変数 ) の数も同じ– エフェクト (処理 ) も同じ この 2 つのエフェクターは本質的に全く同じオブジェクトところが、
感覚的に使いやすいのは圧倒的に左側
カプセル化 (情報隠蔽 ) とはオブジェクトのデータと手続きを包み込み、ブラックボックス化すること
ユーザには必要最低限の内容を提示し、混乱、誤用、使いづらさを回避する
プロフェッショナルの領域
KEELEYTS-9 Mod Plus
Modify( 改造 ) --- オブジェクトの中身をよく理解し改良を施す
§3. 動的型付け
MaxonAD-999analog delay
MaxonAD-999analog delay
MaxonAD-999 クラス
比較
MaxonAD-999
Analog Delay
MaxonAD-999Analog Delay
この 2 つのエフェクターは同じクラスの異なるインスタンス
動的型付けとは実行時の実際の値によって変数の型を決定する型システムの性質のこと
「 Maxon AD-999 のエフェクトをかけて」エフェクターボードに 2台ある場合、どちらのエフェクトをかければよいのか
ステッカー (変数名 ) をつけることでそれぞれのインスタンスを識別「 Route 66 のエフェクトをかけて」オペレータからの要件が的確に伝わる
変数名のルール• 同じ名前 ( ステッカー ) は使えない
• 一つのオブジェクト ( インスタンス ) に 2 つ以上の変数( ステッカー ) を付けることができる
・・・
§4.継承
BossOD-1
BossOD-2
BossOD-3
1977 1985 1997
比較– 設計書 ( クラス ) が違う– つまみ (変数 ) の数も違う – エフェクト (処理 ) の回路も違う この 3 つのエフェクターはそれぞれ別のオブジェクトところが、これらは本質的に同じクラス
継承とは指定されたあるクラスの属性とメソッドをすべて引き継いで新しいクラスを定義する機能
ユーザには、開発の経緯、クラス間の関係を明らかにすることができる。共通した変数、処理を記述する手間を削減BossOD-1
BossOD-3
BossOD-2
(OD-1 をもとに、 OD-2 が開発され、 OD-2 をもとに、 OD-3 が開発された )
多重継承 (Mixin)2 つの ( あるいは複数の )違うクラスを継承する機能
多重継承は、クラス間の関係が複雑になりやすいため、 Mixin という手法を用いて構成することを推奨します
BOSS ツインペダルシリーズBOSS DD シリーズ
BOSS DD-20
参考 URL - メメメモモ (Mixin について ) : http://memememomo.hatenablog.com/entry/20100516/1273961982
なぜオブジェクト指向なのか
負担を減らすポリモーフィズム、カプセル化
オブジェクトに「エフェクトをかけて」と命令すれば、それぞれが自身のエフェクトにあった処理をかけてくれる .
↓ユーザの負担は軽くなる
処理を複雑にさせない• メインの処理がそれぞれのデータに対して細かく指示
– 処理が複雑になる傾向• 複雑なプログラムはバグを生み出しやすい
– 修正、変更が難しくなる
• 変更に強い作りは後々の修正作業を楽にする
マルチエフェクターコンパクトエフェクター
オブジェクト指向のポイント§1. 凝縮度と結合度§2. 概念、仕様、実装§3. 継承はどこで使うべきか
§1. 凝縮度と結合度• 凝縮度 ・・・ オブジェクトやモジュールが、自身のすべき処理 (責任 ) にどれだけ集 中しているかという尺度• 結合度 ・・・ オブジェクトや、モジュール、関数同士の結びつきを表す尺度
オブジェクト指向では、凝縮度が高く、結合度の低いオブジェクトやモジュールを作成することが良いとされています
新しく発売されたディストーションエフェクター [XXX] は… .• チューナー機能付き• コーラス、フランジャー付き• 同時発売されたディストーションエフェクター [YYY] と合わせることで、理想の歪みを実現できます
悪い例チューナー機能はいらない( 責任がはっきりしない処理を含む
= 凝縮度 : 低 )
コーラス、フランジャー機能もいらない(自身が担うべきでない処理を含む
= 凝縮度 : 低 ) 最初から一台にして発売して( オブジェクト同士の結びつきが高い
= 結合度 : 高 )
良い例新しく発売されたディストーションエフェクター [XXX] は… .• ギターの音を歪ませます• つまみは Volume と Gain と Comp の 3 つです。• これ一台で理想の歪みを実現必要な機能 (責任 ) を持っている = 凝縮度 : 高処理はそれぞれ独立している = 結合度 : 低
シンプル イズ ベスト
§2. 概念、仕様、実装ソフトウェア開発の際の、 3 つの観点
1. 概念 (concept)
2. 仕様 (specification)
3. 実装 (implementation)
― 「私が何に対して責任があるのか」― 「私はどのように使用されるのか ? 」― 「私はどのようにして自身の責任を全うするのか」
コンセプトを考え↓インターフェースを考え↓ソースコードを書く
§3.継承はどこで使うべきか• 継承はオブジェクトを分類するための手段• 概念や仕様に基づき、同じ概念を持つクラスをまとめる• 「同じ変数やメソッドを持っている」という 実装寄りの継承は非推奨
BossOD-1
BossOD-3
BossOD-2
おわりに、OOP は現在のソフトウェア開発でも広く使われている考え方ですが、絶対的なものでもないですし、万能でもありません。要件によっては別の考え方が適している場合もあります。OOP を無理矢理適用することで、逆にシステムが複雑になることもあり得ます。たくさんある考え方の中のひとつとして、OOP のことも知っておくといいんじゃないかなーと思います。― かまずにまるのみ。 (http://tdak.hateblo.jp/) より
参考文献• 初めての Python– O’REILLY Japan, Mark Lutz 著 , 夏目 大訳 , 2009
• いちばんやさしいオブジェクト指向の本– 技術評論社 , 井上 樹著 , 2009
• かまずにまるのみ。 < プログラミング勉強中の人にオブジェクト指向とは何なのかを何となく伝えたい話 >– http://tdak.hateblo.jp/entry/20140406/1396773476
次回予告Python を用いたオブジェクト指向プログラミング