• 検索結果がありません。

オブジェクト指向 プログラミング

N/A
N/A
Protected

Academic year: 2021

シェア "オブジェクト指向 プログラミング"

Copied!
34
0
0

読み込み中.... (全文を見る)

全文

(1)

オブジェクト指向  プログラミング

第2回 

箕原辰夫

(2)

命令型プログラム

Go to the center of the garden ; Find a rabbit ;

Hold her ;

Bring her to your home ; Give her a bit of lettuce ;

Bring back her to the garden ;

Imperative Program

(3)

Python Programming

プロセスとプログラム

3 Program

( as static text ) Process

( running )

(4)

Python の文について

1行に1つの命令を記述する 上から順番に実行

例: 

print( 1 )  print( 2 )  print( 3 ) 

1行の中で2つ以上の命令を記述する場合は、命令を 


; (セミコロン)で区切る。 命令は、左から右に実行 される

例:print( 1 ); print( 2 ); print( 3 )

(5)

Python Programming

空白とコメント

左側に空白が空いているのがアウトラインのレベルを 示す

TAB キーを使う,  Delete で戻せる 

インデントがあっていないと動作しない

# この後改行するまでがコメント

""" """ 囲まれた範囲がコメント

5

(6)

クラスとオブジェクト

Class “Rabbit” Method eatCarrot

eatLettuce

jump

Object “Mary”

Object “Jane” Object “Melody”

Object “しろ

(7)

Python Programming

クラスを使うのは?

共通の特性を持つ対象について、その特性だけをプロ グラムで記述すれば、同じ特性を持つ対象をどんどん 増やしていける。

7

(8)

クラス間の階層

Class “Creature”

Class “Plant”

Class “Animal”

Inheritance

(9)

Python Programming

差分プログラミング

上位クラス(スーパークラス)で用意されている機能 を使えば、その部分はプログラムする必要はない。

下位クラス(サブクラス)では、差分として必要な部 分だけをプログラムすれば良い。

オブジェクト指向の利点

9

(10)

オブジェクト指向の基本

対象を作る

相手(対象: Object )を指定して、何かを頼む

Message

オブジェクト

A

オブジェクト

B

「塩を取ってください」

(11)

Python Programming

オブジェクトの生成

対象を作る書式: クラス名 ( パラメータ )

Turtle クラスのオブジェクトを作る場合

Turtle( window )  

11

new

a Turtle Object

Turtle class TurtleFrame

Window

(12)

オブジェクト指向の基本

相手(対象)は頼まれたことを、処理する記述がなけ ればならない。

sleepShortTime

playPiano

eatFood object

(13)

Python Programming

オブジェクトを保持する変数に割付け

turtle = Turtle( window )

13

Turtle turtle

Turtle Object

(14)

呼出し側と受取り側

メソッドの呼出し側

Method

メソッドを持つオブジェクト

メソッドの呼出し

実行の回復

オブジェクト . メソッド名 ( パラメータ )

例: window.drawString( “Hello”, 20, 20 )

(15)

Python Programming

Pythonでの記述

Python の文法では

頼む相手 . 頼みたいこと ( パラメータ )

パラメータは頼むときに渡したい情報

15

(16)

オブジェクト指向の動き

オブジェクトのメソッドを呼び出しながら、進んで行く

Process

Object

Object

(17)

Python Programming

Python の記号

17

記号 呼び方 意味

; セミコロン 文の区切りを示す(1行に複数の 文がある場合)

. ドット 所属を示す「〜の〜」

, カンマ 羅列を示す「〜と〜」

" ' クォーテーション 囲んで文字列を示す

# ナンバーマーク 行の終わりまでコメント

""" 3つの

"

囲まれた範囲がコメント

* アスタリスク 「すべて」または「掛け算」

(18)

Pythonのドキュメント

http://docs.python.jp/3/  にアクセス

Python 3.9 日本語ドキュメント 

 チュートリアル 

 言語仕様 

 標準ライブラリ

(19)

Python Programming

プログラムは式を記述していく

式の構成要素

変数 

定数(リテラル) 

演算子 

定数は、値のこと

一 定 の 値 を 取 り 続 け る と い う こ と で 、 定 数 ( constant )と呼ばれる 

プログラミング言語では、定数が型を持つ

19

(20)

値の型

Java/C/C++/C#

では、値の型が厳格に参照される。

Strict type languages

 厳格な型言語

Python/JavaScript/Ruby

などでは、結果的に値の型が決まって いく

プログラム上で値を記述できる型(

primitive type)

には次のよ うなものがある

論理型 

整数型 

実数型 

複素数型 

文字列型 

(21)

Python Programming

論理型

条件が満足されたかどうかを示す真偽値。

bool 型(ブール代数から)と呼ばれる。

値としては、次の2つだけになっている。

True …条件を満足した(真) 

False …条件を満足しない(偽) 

None… オブジェクトを何も指していないことを表わす

が、条件式で使われた場合は、 False として解釈される

21

(22)

整数型と実数型

整数は、離散数( Discrete Number )と呼ばれ、実数 は連続数( Linear Number )と呼ばれている。

0.0 -1.0

-2.0 1.0 2.0

0 -1

-2 1 2

Integer( 離散数 )

Real( 連続数 )

(23)

Python Programming

整数型

整数型の型名は、 int

Python では、整数の桁数の制限はない( C/C++/

Java/C# などの他の言語では、 42 億ぐらいまでとか、

922 京ぐらいまでの制限がある)

長い数字列は途中で _ (アンダーバー)を入れることが

できる( Python3.6 より)

整数の例:

7     2147483647    3     

79228162514264337593543950336 

100̲000̲000̲000

23

(24)

8進数、2進数と 16 進数の整数

8 進数の整数

0o を先頭につける(0から7までしか使えない) 

0o262730  

16 進数の整数

0x を先頭につける 

  0x45a

2進数の整数

0b を先頭につける 

(25)

Python Programming

実数型

浮動小数点数で表現される

Python での型名としては、 float

小数点をつけると自動的に実数型として認識される

2.3 4. → 4.0 .05 → 0.05   指数表記が可能

2.45×10

16

→ 2.45e16 あるいは 2.45e+16  

長い数字列は途中で _ (アンダーバー)を入れることが できる( Python3.6 より)

実数の例:

3.14 10. .001 1e100 3.14e-10 0e0

3.14_15_92_65_35_89_79

25

(26)

複素数型

虚数(数学では

i

を使うが、工学系や Python では

j

を用いる)

虚数値の例:

1j   3.14j   10.j    10j     .001j   1e100j 

3.14e-10j   3.14̲15̲93j 

実数部と虚数部を加減算することで

複素数を表現することができる

型名は、 complex

− 1 = i

i × i = − 1

虚軸

(27)

Python Programming

複素数平面(Complex plane)

複素数平面は、ガウス平面( Gaussian plane )とも呼 ばれる

共役複素数は、 conjugate を使って求めることができる

例:(1+1j). conjugate( )  

実数部を取り出すのは、 .real 
 虚数部を取り出すのは、 .imag 
 を用いる

例: (1+0.5j).real (3+4j).imag

27

(28)

複素数とオブジェクト

複素数はオブジェクトになっている(実は整数や実数 もオブジェクト)

オ ブ ジ ェ ク ト は 、 そ の オ ブ ジ ェ ク ト 固 有 の 属 性

( attribute, フィールド field とも呼ぶ)を持っており、

変数としてアクセスできる

オブジェクトは、そのオブジェクト固有の関数(メ

ソッド m e t h o d と呼ばれる)を持っており、そのオブ

ジェクトを介して呼び出すことができる

属性とメソッドを合わせて、プロパティ( property )

と呼ぶことがある

(29)

Python Programming

Pythonでのオブジェクトのプロパティ

属性の場合

オブジェクト.属性名 

例:(3+4j).real…3.0が返される 

例:(3+4j).imag…4.0が返される  メソッドの場合

オブジェクト.メソッド名( パラメータ ) 

パラメータが必要ないときは括弧内には何も書かな い 

例:(3+4j).conjugate( )…3-4jが返される

29

(30)

文字列型

文字はすべて Unicode で符号化されている。

ファイルなどを読み込むときに、別の符号( J I S や

Shift JIS )を用いるときは、符号(エンコーディング:

encoding )の指定をしなければならない。

文字列は string クラスになっている ( str 関数 )

Python では、どちらかの引用符を用いる

値を記述するときは一重引用符で囲む  ' a'  

値を記述するときは二重引用符で囲む

(31)

Python Programming

JIS/Shift JIS/EUC/Unicodeの違い

A S C I I … アメリカが作った英語用のコード(1バイト) 0 x 0 0 〜 0x7f

JIS X0208… 日本でつくられた2バイトの漢字・かななどが入った

文字コード体系

JIS X0201… 日本でつくられた1バイトの半角カナを含む文字コー

ド 0x80 以降も含む   \…0x5c ¥ …0x5c

C:\Program Files\Excel.exe  ←  C: ¥ Program Files ¥ Excel.exe JIS X0208 の漢字コードと半角カナを両方使いたい→ Shift JIS コー ド

EUC は、1バイト単位で JIS + 0x80

Unicode は、 Apple/Microsoft などアメリカが勝手に考えたコード

31

(32)

Unicode による文字列

string

クラスという形で定義されている

\n

は改行、

\t

は水平タブ

\"

はダブルクォーテーション、

\'

はシングル

\\ はバックスラッシュ自身を表わす

\u

を用いて

16

進数

4

桁で、文字を指定できる。

\u4e00

 → 一 

\U

で拡張部分の

Unicode

を指定できる(

16

進数

8

桁)

パレットで

Unicode

のコード表を見てみましょう(以下

Mac OS X

環境設定(キーボード)→キーボードタブ

→メニューバーに絵文字とキーボードビューアを表示にチェック 

言語メニューから、絵文字と記号を表示→歯車メニューからリス

(33)

Python Programming

構造的な型のリテラル

タプル

書式:( 値, 値, … ) 

複数の値をまとめることができる 

それぞれの要素を書き換えることはできない 

例:  ( 34, "ABC", 78.9 )  

リスト

書式: [ 値, 値, … ] 

複数の値をまとめることができる 

それぞれの要素を取り換えることが可能 

例:  [ 34, "ABC", 78.9 ]

33

(34)

構造的なリテラル(その他)

集合

書式:{ 値, 値, … } 

複数の値をまとめることができる 

同じ値の要素は1つしか登録されない 

例: { 34, "ABC", 78.9, True }  

辞書

書式:{ キー:値, キー:値, … } 

複数の値をまとめることができる 

同じキーの要素は1つしか登録されない 

34: 56, "ABC": 12, 78.9: "A" }

参照

関連したドキュメント

48 第 12 回 オブジェクト指向プログラミング オブジェクト指向プログラミングの考え方について学ぶ。

は、 「拡張に対して開いており、修正に対しては閉じている」

Python Programming n進数との変換 ..

大きな問題から、小さな問題に分割していく方法は、段階的詳細 化( stepwise refinement )あるいはトップダウン設計( top- down design

読込みは、 getImage( ) メソッド …init メソッドなどで 描画は、 drawImage( ) メソッド …paint メソッドで. Image image = getImage( getCodeBase( ),

C++のクラスによって複素数などを実現し,関数

C++のクラスによって複素数などを実現し,関数

構造体について復習し,複素数やスタックなどを例 に,抽象データ型をC言語で実現する方法を習得す る。 D2:1-2