Microsoft PowerPoint - 09-object

Size: px
Start display at page:

Download "Microsoft PowerPoint - 09-object"

Transcription

1 9 ソフトウェア工学 Software Engineering オブジェクト指向プログラミング OBJECT-ORIENTED PROGRAMMING オブジェクト指向プログラミングの考え方とその 3 大特徴および Java 言語によるプログラムの記述例を学ぶ.Java はインターネットなどと連携した現代的なプログラムを記述するのに適した実用的なプログラミング言語である. ただし, この講義は Java を修得してもらうことを目的としているわけではないので,Java の細部は理解できなくてもかまわない. オブジェクト指向の概念と 3 つの特徴を理解してほしい. 1

2 構成 Part1 オブジェクト指向の基本概念 Part2 オブジェクト指向の 3 大特徴 1 カプセル化 2 継承 ( インヘリタンス ) 3 ポリモーフィズム ( 多相性 ) 今回の授業では, オブジェクト指向プログラミングの最も特徴的な考え方を学ぶ. 具体的なプログラミングは Java を用いるが,Java の詳細を学ぶことが目的ではない. Part1 でオブジェクト指向の基本概念を説明した後,Part2 でオブジェクト指向の 3 大特徴を学ぶ. 2

3 Part1 オブジェクト指向の基本概念 3

4 オブジェクトとは? データと操作をカプセル化した もの オブジェクト カプセル化 X 軸方向のみに進むロボット 位置速度燃料どこ? 変速 データ ( フィールド ) メンバ 操作 ( メソッド ) オブジェクト (object) とは何か? その答えを短く言うと, データと操作をカプセル化したもの となる. とはいえ, それで内容が理解できるとは思えないので, 順を追って内容を見ていく. この授業では, このスライドに表示されているようなロボットを動かすプログラムを考える. このロボットが オブジェクト のつもりである. このロボットは x 軸上を進むものである. ロボットの状態は, 現在の 位置, 現在の 速度, 現在の 燃料 の 3 つのデータで表すことができる. それらのデータはロボットの胸のあたりにあるメモリーに内蔵されている. また, このロボットはリモコンの 3 つの操作を受け付ける. 1 つめの操作は, どこ? というボタンを押すことで, 現在位置 (x 座標の値 ) を返してくれる.( それは, たとえば, リモコンの表示画面に表示される.) 2 つめの操作は, 変速 というボタンを押して, 速度を設定できる. 実際には, このボタンを押すほかに, さらに設定すべき新しい速度の値を補助情報として入力する必要がある. 3 つめの操作は, ボタンで, これを押すと,1 秒間だけ, 現在の設定速度でロボットが前進する. リモコンからのこれらの指示を実行するためのプログラムがロボットの足のあたりに内蔵されている. オブジェクト指向プログラミングの用語では, いま述べた データ のことを フィールド (field), 操作 のことを メソッド (method) という. フィールド と メソッド を総称して メンバ (member) ということもある. 一般的なプログラミング用語で言えば, フィールドは変数, メソッドは関数のようなもので, いずれもデジタルなデータあるいは機械語コードで表現できる. それらが, このロボットという オブジェクト の中にまとめて閉じこめられている様子を カプセル化 (encapsulation) というのだが, もっと正確な説明は後にわかってくる. 重要なのは, オブジェクト というのは単なる概念ではなく, これらのデジタルなデータまたはコードからなり, コンピュータのメモリの一定領域を占める具体的な 実体 だということである. この 実体 あるいは もの が英語の object という単語の意味である. 4

5 メモリ内にオブジェクトがうようよできる 位置 速度 燃料 どこ? どこ? どこ? 変速 変速 変速 オブジェクト は一定の実メモリ領域を占める もの であるが, ふつう, オブジェクト指向でプログラムを書くと, そのようなオブジェクトがたくさん生成される. それぞれのオブジェクトごとにメモリ領域が占められる. ロボットの場合には, このスライドのように, 状態 ( 各フィールド 位置, 速度, 燃料 のそれぞれの値 ) の異なるロボットが生成されるわけである. ただし, 操作 ( メソッド ) を表すプログラムコードはこれらのオブジェクトに共通である. 5

6 いろんな種類 ( クラス ) のオブジェクトが共存する ロボットクラス 船クラス オブジェクトにはいろいろな種類のものがあってよい. たとえば, オブジェクト指向で書かれたあるコンピュータゲームの中では, ロボットのほかに船が出てきて, ロボットが船に乗って, いろいろな島に渡って冒険をするのかもしれない. この場合, ロボット と 船 は異なる種類のオブジェクトである. オブジェクトの種類のことを クラス (class) という. この例の場合, ロボットクラス, 船クラスという 2 つのクラスのオブジェクトが存在することになる. 6

7 オブジェクトはクラス ( ひな形 ) から生成されるインスタンス ( 実例 ) クラス 6 2 位置 速度 燃料 インスタンス 操作 ( メソッド ) は クラスで共通 どこ? 変速 データ ( フィールド ) は インスタンス毎 オブジェクト指向プログラミングで初心者が最初につまづく点は, クラス と インスタンス の区別である. クラス (class) とは, オブジェクトを作るための ひな形 あるいは 設計図 のようなものである. ロボットの例の場合, 位置, 速度, 燃料 というフィールドがあることがこの設計図に書かれている. しかし, 当然だが, その 現在の値 というのはない. 一方, インスタンス (instance) とは, この設計図から作られた 実例 のことであり, 各フィールドには 現在の値 が記録されている. このスライドでは,1 つのクラスから異なる 3 つのインスタンスが生成されている. これまで出てきた オブジェクト という言葉は, この インスタンス と同じ意味である. メソッドの具体的なコードもクラスに記述されている. このクラスからインスタンスを生成すると, 各インスタンスにはこれらのメソッドがそのままコピーされる.( ただし, これは概念上の話で, 実際には,1 台のコンピュータ内に同じものをたくさんコピーしておくのは無駄が多いので, ポインタなどを用いて効率的に実装されている.) 以上の結果, 操作 ( メソッド ) はクラスで共通に使用され, データ ( フィールド ) はインスタンス毎に異なるものとして使われることになる. 7

8 整数型 戻り値のデータ型 値を戻す 戻り値なし Java ではクラスを記述する ( ロボットになったつもりで書く ) class ロボット int 位置 ; int 速度 ; int 燃料 ; メソッド名 int どこ?() { return( 位置 ); void 変速 (int 新速度 ) { 速度 = 新速度 ; 続くクラス名 フィールド名 種々の名前には日本語を使える このスライドのプログラムが, これまで設計したロボットを Java で記述したものである. Java で記述するものは, 実際にはクラスである. ここではクラス名を ロボット としている. フィールドは, 他のプログラミング言語 ( たとえば,C 言語 ) における変数宣言のような形で宣言される. メソッドは,(C 言語における ) 関数定義のような形で定義される. ロボットメソッドのプログラムを書くときのコツは, 自分自身がロボットになったつもりで書くことである. どこ? メソッドは, 自分が どこ? と質問されたつもりで考えて, 戻り値として, 現在位置の値を返すことにする. 変速 メソッドは, 指定された 新速度 の値に変えよと命令されたつもりになって, 自分自身の状態変数である 速度 に, 外部から指定された 新速度 の値を保存する. 8

9 Java ではクラスを記述する ( 続き ) class ロボット { int 位置 ; int 速度 ; int 燃料 ; // int () { if ( 燃料 > 0) { 位置 = 位置 + 速度 ; 燃料 = 燃料 - 1; return 0; else { return (-1); 再掲続く メソッドは, 自分が と命令されたらどうするかを考えて書く. ここでは, 現在設定されている速度で 1 単位時間だけ前進し, 燃料が 1 単位消費される. その結果, 位置 と 燃料 の値が更新される. この場合, 正常終了したので, エラーコードとして戻り値 0 を返すような設計としてある. 燃料が 0 なら, 進むことはできず, エラーコードとして -1 を返すことにした. 9

10 クラス定義の終わり コンストラクタも記述する class ロボット { int 位置 ; int 速度 ; 再掲 int 燃料 ; // ロボット (int p, int v, int f) { 位置 = p; 速度 = v; 燃料 = f; インスタンス生成時フィールドを初期化 Constructor ロボットのインスタンスが生成されたときに, そのフィールドを初期化するなどのために, コンストラクタ (constructor) という特別なメソッドを定義しておく. Java では, コンストラクタの名前はクラス名と同じにするという約束になっている. したがって, このスライドでは, ロボット というコンストラクタを定義している. この定義の内容は, ロボットのインスタンス生成時にプログラマから引数として渡される p, v, f という 3 つの整数値を, それぞれ, 位置, 速度, 燃料 の 3 つのフィールドの現在値 ( 初期値 ) として記録 ( 代入 ) することを表している.(p, v, f は,position, velocity, fuel の頭文字.) これが典型的なコンストラクタの定義である. すなわち, 引数で与えられたデータをフィールド ( 状態 ) の初期値として記録するのである. 10

11 ロボットを生成し, 使用する ( ロボットのコントローラを持ったつもりで書く ) public class ロボットのテスト { public static void main(string args[]) { ロボット robocop = new ロボット (0,1,10); ローカル変数宣言 robocop. (); ロボット生成 robocop. 変速 (2); ( コンストラクタ呼出し ) while(robocop. どこ?() < 10) { robocop. (); ロボットを使う ( メソッド呼出し ) これはロボットを使う簡単なプログラムである. ロボットを使うプログラムを書くときのコツは, 自分がロボットのコントローラを持ったつもりで, いろいろなボタンを押しまくるように書く. ここで比喩的に言っている ボタンを押す とは, すでに定義した 3 つの メソッドを呼び出す ことである. オブジェクト ( インスタンス ) は,new というキーワードの後にコンストラクタを呼び出す形式で生成する. この例では,new ロボット (...) によって, ロボットのインスタンスを生成し, コンストラクタの記述にしたがって, 位置 =0, 速度 =1, 燃料 =10に設定している. そのロボットを robocop と名付ける. これは robocop という変数を ロボット型 と宣言し, その変数の初期値として, いま生成されたロボット ( への参照 ( ポインタ )) を代入することである. Java では, オブジェクト. メソッド名 ( 引数,..., 引数 ) の形の式を書くことによって, オブジェクトのメソッドを引数を指定して呼び出す ( 実行する ) ことができる. このプログラムでは,Robocop. () によって 1 秒だけロボットを進ませ, つぎに Robocop. 変速 (2) によって速度を 2 に変える. つぎに while ループの中で,rococo. どこ?( ) によって現在位置を取得し, それが 10 未満である間, ループの中でボタンを連打する. 現在位置が 10 以上になった時点でプログラムは停止する. このようにして, ロボットクラスで定義された 3 つのメソッド, 変速, どこ? を ( コントローラーのボタンを押しているかのように ) 適切に呼び出しながらロボットを動かすプログラムである. プログラミングの際には, ロボットを作る メーカー と, ロボットを買って動かす ユーザ - との区別が大事である. メーカーは, ロボットを動かす汎用的なソフトウェア部品をクラスとして制作する. そのプログラムは自分がロボットになったつもりで書く. それに対してユーザーは, 自分の応用目的に応じて, アプリケーションを制作する. そのプログラムは自分がロボットのコントローラーを持ったつもりで書く. 11

12 Part2 オブジェクト指向の 3 大特徴 1 カプセル化 2 継承 ( インヘリタンス ) 3 ポリモーフィズム ( 多相性 ) オブジェクト指向プログラミングにはさまざまな特徴があるが, このスライドに示したものが, もっとも大きな 3 つの特徴と考えられている. それぞれを見ていこう. 12

13 特徴 1: カプセル化 (encapsulation) 1 カプセル化 2 継承 ( インヘリタンス ) 3 ポリモーフィズム ( 多相性 ) 13

14 用可ロボットクラス使いろんなクラスが出てきたら... 制作者 B 船クラス 船のフィールドの宣言 船のメソッドの宣言 アクセス不可カプセル化制作者 A ロボットのフィールドの宣言ロボットのメソッドの宣言 カプセル ( 殻 ) の硬さも重要 制作者 A がロボットクラスをプログラムし, 制作者 B が船クラスをプログラムしているとしよう. これらのプログラムは最終的に 1 つの計算機の同一メモリ内で実行されるので,2 人の制作者は連絡を密にして注意深くプログラムを作らないと思わぬミスを生むことがある. たとえば, 制作者 B が, 船のメソッドの中でロボットのフィールドの値を勝手に変更するプログラムを書くと, ロボットが制作者 A の思わぬ状態変化をして, 大変都合が悪い. そのため, オブジェクト指向の考え方では, 基本的に,1 つのクラスの中のプログラムが, 他のクラスのフィールドの値を直接読み書きすることを禁じている. そのかわり, メソッドの呼び出しを通して, フィールドにアクセスできるようにする.( 読み書き をまとめて アクセス という.) これにより, 意図しないプログラムの動作を防止して, バグ ( 誤り ) の生成を抑制し, セキュリティを高めている. つまり, 各クラスはある種の殻によって, 内部へのアクセス方法を制限している. あるいは, 内部のフィールドを保護している. この機能を カプセル化 と呼ぶ. このスライドの太いピンク色の部分が殻 ( あるいはカプセル ) のつもりである. カプセルの殻の中にフィールドとメソッドが閉じ込められている. この殻の固さは, ほかのクラスのプログラムが内部のフィールド に直接アクセスすることを防御できる程度に固い. しかし, ほかのクラスのプログラムが自分のメソッドを呼び出すことを許す程度に柔らかい. カプセルという言葉で, 薬が思い浮ぶ. 子供などが粉薬 ( こなぐすり ) を飲みやすくするために, オブラートでできているカプセルに入れることがある. カプセルを飲み込むと, カプセルは胃の中で解け, 中の薬が胃の中に出てきて吸収される. このカプセルの固さにも注意が必要である. 飲むときに破れて口の中に薬がこぼれてしまわない程度に固い必要がある. しかし, 胃の中で溶ける程度には柔らかくなければならない. このように, カプセル化は, オブジェクトの内部情報へのアクセスを, 適切なレベル ( 殻の硬さ ) で保護している. 14

15 カプセル化メソッドを通してのみ, フィールドにアクセス メソッド フィールド アクセス メソッド フィールドフィールド メソッド. メソッド名 ( 引数,..., 引数 ) メソッド オブジェクトとは, データと操作をカプセル化した もの オブジェクトのフィールドには, メソッドを通してのみアクセスできる という概念を図にすると, このスライドのような感じとなる. ちょうど, フィールドがたまごの黄身で, メソッドがその白身であるかのように, フィールドはメソッドによって周囲を囲まれ, 守られている. そのため, フィールドの中味にオブジェクトの外部から直接アクセスすることができない. フィールドにアクセスするには, オブジェクト. メソッド名 ( 引数,..., 引数 ) の形のプログラムコードを書いて, オブジェクト内のメソッドを起動するしかない. このスライドの図は, このプログラムコードの文法に似せて描いてある. 15

16 ゲッター, セッター, コンストラクタは超基本メソッド class Robot int position; int getposition() { return(position); void setposition(int p) { position = p; Robot(int p) { position = p; Getter 値を取得 Setter 値を設定 ローカル変数寿命が短い Constructor 値を初期化 最も基本的なメソッドは, ゲッター (getter), セッター (setter), コンストラクタ (constructor) である. ゲッターは, 値を読み取る ( ゲットする ) ためのメソッドである. サッカーなどのスポーツでたくさん点を取る人を point getter というが, それと同じ単語である. ゲッターには, 慣習的に,get の後ろにフィールド名を付加した名前を付けることが多い. このスライドのプログラム例の場合,position というフィールドのゲッターは getposition と命名されている. セッターは, 値を書き込む ( セットする, 設定する ) ためのメソッドである. バレーボールでも, トスを上げてアタックする準備を設定する選手を setter という. セッターには, 慣習的に,set の後ろにフィールド名を付加した名前を付けることが多い. この例の場合, position というフィールドのセッターは setposition と命名されている. この例では, setposition の引数で与えられた整数をローカル変数 p で受け取り, セッターのプログラム本体で, それをフィールド position に代入している. ローカル変数 p は, メソッドの実行が終了したら消えてしまうような, 寿命が短い変数である. それに対して, フィールド position は, オブジェクトが存在している限り共に存在するような長い寿命を持っている. セッターを用いて, 暫定的なデータをフィールドに保存することによって, オブジェクトの状態が変更されることになる. コンストラクタは, すでに見たように, インスタンス生成時の初期設定を定義している. コンストラクタの名前はクラス名と同じでなければならない. オブジェクトを新規に生成して, コンストラクタを呼び出してフィールドを初期化するには, new コンストラクタ ( 引数,, 引数 ) という形式を用いる. 16

17 ゲッター, セッターを通してフィールドにアクセス メソッド getposition( ) Position setposition( p ) アクセス.setPosition(10) Robot( p ) この例では,Position の値を 10 にセットするために,setPosition というセッターを使用している. 17

18 クラス図 (API: Application Programmer's Interface) クラス名 フィールド メソッド Robot int position Robot(int p) int getposition() void setposition(int p) メンバ いつもクラスを定義した Java のソースコードを見るのは大変なので, 設計内容の概略をこのようなクラス図として図式化することが多い. 長方形を 3 段に分け, 最上段にはクラス名を, 中段にはフィールド名 ( とそのデータ型名 ) を, 最下段にはメソッド名 ( と引数及び戻り値のデータ型名 ) を記入する. このような情報は, クラスを利用して応用プログラムを作成しようとするプログラマーに対して, 利用法の インタフェース ( ソフトウェア部品の使い方 ) を提供しているので, API (Application Programmer's Interface) と呼ばれることがある. 18

19 ロボットのクラス図 ロボット int 位置 int 速度 int 燃料 ロボット (int p, int v, int f ) int どこ?( ) void 変速 (int 新速度 ) int ( ) コンストラクタ ゲッター セッター オペレータ ( 一般のメソッド ) これはこれまで作ってきた ロボット クラスのクラス図である. どこ? メソッドはゲッター, 変速 メソッドはセッターになっている. メソッドはゲッター, セッターのような基本的なメソッドではなく, このロボット特有の応用的なメソッドである. 19

20 特徴 2: 継承 ( インヘリタンス ) (inheritance) 1 カプセル化 2 継承 ( インヘリタンス ) 3 ポリモーフィズム ( 多相性 ) 20

21 親子 再利用可能ロボット 位置 速度 燃料 容量 どこ? 変速 補給 新( インヘリタンス ) データ継承 親を再利用して子を作る 使い捨てのロボット 位置 速度 燃料 どこ? 変速 親 スーパークラス サブクラス 子 新操作オブジェクト指向の特徴は, すでに作ったコードを再利用して機能拡張をしていく仕組みが整っていることである. それが継承 ( インヘリタンス ) という機能である. この例では, これまで作成した ( 使い捨ての ) ロボットを拡張して, 再利用可能なロボットを作ろうとしている. つまり, 燃料が切れたら, 燃料補給できる機能を追加する. 新しいフィールドとして, 燃料タンクの 容量 を追加する. 新しいメソッドとして, 補給 メソッドを追加する. このようなクラス間の関係を, 図のように, 親 / 子と呼んだり, スーパークラス / サブクラスと呼んだりする. ものつくり の観点から言えば, スーパークラス ( 親クラス ) は部品であり, ソフトウェア部品メーカーが供給することもある. それを目的に合わせてユーザ側のプログラマーがカスタマイズしたり機能拡張するなど, 有効に再利用して作るものがサブクラス ( 子クラス ) である. 21

22 新データ操作スーパークラスの指定新新コンストラクタサブクラスの定義 新属性, 新機能, 新コンストラクタのみ記述 class 再利用可能ロボット extends ロボット int 容量 ; void 補給 () { 燃料 = 容量 ; 再利用可能ロボット (int p, int v, int f, int c) { super(p, v, f); 容量 = c; スーパークラスを書き直したり再コンパイルする必要はない Java ではこの図のように extends 親クラス名 と書くことによって, 親クラスを再利用して子クラスを定義できる. この例では, すでに作成した ロボット クラスを親クラスとし, その子クラスとして 再利用可能ロボット クラスを定義している. 子クラスには, 新しく追加するフィールドやメソッドだけを記述する. すでに親クラスで定義してあるフィールドやメソッドは, 書かなくても, あたかも書いてあるかのように, 子クラスに引き継がれる. また, この子クラスをコンパイルする際には, スーパークラスを書き直したり, 再コンパイルする必要はない. さらに重要なのは, スーパークラスのソースコード ( ソースファイル ) は無くてよく, そのコンパイルされたコード ( クラスファイル ) さえあれば OK である. これは特にスーパークラスが商用で, 価格のある商品の場合に重要である. スーパークラスを作成したソフトウェアメーカーは, それを販売するにあたって, ふつうはソースコードを公開したくない. 公開すれば他社等に設計情報を知られるからである.Java の場合, スーパークラスを購入したユーザーは,API だけを知っていれば, ソースファイルがなくても, クラスファイルさえあれば, 購入したスーパークラスを部品として利用し, 子クラスを自分で定義できるのである. 22

23 継承のクラス図 ロボット int 位置 int 速度 int 燃料 スーパークラス int どこ?( ) void 変速 (int 速度 ) int ( ) 再利用可能ロボット int 容量 void 補給 ( ) クラス図を書くときには, 子クラスから親クラスに矢印を付けておく. 23

24 継承の使用例 public class 再利用可能ロボットのテスト public static void main(string args[]) { 再利用可能ロボット robo2 = new 再利用可能ロボット (0,1,10,10); for (int i=0; i<100; i=i+1) { if(robo2. ()< 0) { robo2. 補給 (); robo2. (); 継承されたメソッドの使用 ( ) は, 正常にたら 0, 燃料切れだったら -1 を返す. 新しいメソッドの使用 再利用可能ロボットを使ってみよう. この例では, 再利用可能ロボット robo2 を生成し, for ループを使って ボタンを 100 回連打する. ただし, 途中で燃料切れになったときは, メソッドは負のエラーコードを返すので, 燃料を補給して, ボタンを 1 回押し直している. 24

25 特徴 3: ポリモーフィズム ( 多相性 ) (polymorphism) 1 カプセル化 2 継承 ( インヘリタンス ) 3 ポリモーフィズム ( 多相性 ) 25

26 ポリモーフィズム ( 多相性 ) 同じメッセージでもクラスによって処理が異なる ロボットクラス. ( ) メッセージ船クラス 先生クラス. ( ) 授業をる. ( ) このスライドに図示してある 3 つのクラス ( ロボット, 船, 先生 ) に, いずれも メソッドがあるとしよう.3 つのメソッドの内容 ( プログラムコード ) は全く異なるものである. ロボットが 進む とは, 足を動かすプログラムコードを実行することだし, 船が 進む とは, スクリューを回転させるコードを実行することである. 先生が 進む とは, 脱線していた授業を進ませることである. したがって, 本来なら異なるメソッド名を付けるのがスジである. しかし, 人間にとって という言葉が適切なら, その言葉を共通に使えるようにした方が便利である. 言葉の数の節約になり, 人間にとって心理的に覚えやすい. プログラミングの世界でその考え方を採り入れたのが ポリモーフィズム という機能である.( このスライドでは 多相性 という和訳を採用したが, 多態性, 多様性 などと呼ばれるときもある. カタカナ書きでも, ポリモフィズム, ポリモルフィズム などの表記が使われることがある.) オブジェクト指向の言葉で述べると, 同じメッセージ ( メソッド ) でも, 受け手のオブジェクトのクラスによって, 処理 ( 意味 ) が異なる という機能である. ここで 同じメソッド と言っているのは, 一般には, メソッドの名前が同じであることに加えて, そのインタフェース ( すなわち, 引数の数と型, およびメソッドからの戻り値の型 ) までも同じであることを指している. 26

27 型の階層 ( 包含 ) るもの型 ロボット型船型先生型 ロボット クラスのオブジェクトは ロボット 型というデータ型である. 同様に, 船 クラスは 船 型, 先生 クラスは 先生 型である. これらのクラス ( データ型 ) は, 共通に という同一の名前をもつメソッドをもっている. そのような共通性を認識して, これらの複数のデータ型をまとめて,1 つのデータ型として総称的に定義することができる. このスライドの例ではそれを るもの という名前のデータ型としている. 27

28 るもの のインタフェース interface るもの { int (); 抽象メソッド Java でこの考え方を実現する方法の 1 つが, インタフェース という機能である. その書き方はクラスの書き方と似ているが,class のかわりに interface というキーワードを用いる点が異なる. 最も重要な違いは, メソッドの本体 ({ と で囲まれて記述されるプログラムコード ) を書くことが許されない点である. そのようなメソッドを抽象メソッドという. この Java コードの例は, るもの は, int (); というメソッドを共通に持っていることを宣言している. Java で良く使われるインタフェースとして,Runnable インタフェースというのがある. これは,run メソッドを持つクラスを総称するためのもので, 実際にはつぎのように定義されている. interface Runnable { void run( ); 28

29 るもの の実装 ここを追加する class ロボット implements るもの int 位置 ; int 速度 ; int 燃料 ; int どこ?() { return( 位置 ); void 変速 (int 新速度 ) { 速度 = 新速度 ; int () { if ( 燃料 > 0) { 位置 = 位置 + 速度 ; 燃料 = 燃料 - 1; return 0; else { return (-1); ロボット型が, るもの型に含まれることを,implements というキーワードを用いてこのスライドのように記述する. このような場合, ロボット クラスは るもの インタフェースを 実装している という.Java の約束によって, インタフェースを実装するクラスの中では, そのインタフェース内で記述された抽象メソッドの本体を具体的に記述する必要がある. この例の場合, るもの インタフェースには,int ( ) という抽象メソッドが記述されていたことを思い出そう. したがって, るもの インタフェースを実装する ロボット クラスの中で, int ( ) メソッドの本体が具体的に記述されている. 29

30 実装のクラス図 interface るもの int ( ) ロボット int 位置 int 速度 int 燃料 int どこ?( ) void 変速 (int 速度 ) int ( ) 実装 ロボットが るもの を実装していることを, 破線の矢印を使って, このようなクラス図で表す. 30

31 ポリモーフィズムの使用例いろいろな るもの を統一的に進ませる るもの [] A = new るもの [3]; A[0] = new ロボット (0,1,10); A[1] = new 船 (" 横浜 "); A[2] = new 先生 (" 数学 "," 舞黒素太 "); 配列0 1 2 ポリモーフィズムが便利と感じるようなプログラムの例を紹介しておこう. それは同じインタフェースが実装されたいろいろなクラスのオブジェクトを一次元配列に記憶しておき, それらに対して同じメッセージを送る ( 同じ名前のメソッドを実行する ) ことにより, 各オブジェクト特有の適切な動作を統一的なコーディングによって起こさせる例である. Java で整数 (int) の一次元配列を作るには, つぎの例のようにする. int [ ] a = new int[n]; または int a[ ] = new int[n]; これは,n 個の要素 a[0],a[1],...,a[n-1] をもつ int 型の配列を生成し,a という名前の変数に代入している例である.int 型以外の配列を作るときには, 型の名前を int でない適切なものに変えればよい. このスライドのプログラムでは, るもの 型のオブジェクトを 3 つまで記憶できる配列を用意して,A という名前の変数に代入している. プログラムの第 2~4 行目では,A の 3 つの要素に, それぞれ, ロボット, 船, 先生のインスタンスを記憶させている. そもそもポリモーフィズムがなければ, こういうことはできない. なぜなら, 配列というものは, 同じデータ型のデータを複数個記憶するためのデータ構造だからである. たとえば, 整数型や実数型や文字列型のデータを混在させて記憶することはできない. しかし, ポリモーフィズムがあればそれができる. この例では, ロボット, 船, 先生は異なるデータ型で, ふつうは同じ配列に混在させることはできないのだが, それらの 3 つのデータ型を包含する るもの 型の配列を導入することにより, すべてを記憶できるようになる. なぜなら, ロボットも船も先生も るもの 型という同じデータ型に属するからである. 31

32 ポリモーフィズムの使用例 ( 続き ) いろいろな るもの を統一的に進ませる るもの A[] = new るもの [3]; A[0] = new ロボット (0,1,10); A[1] = new 船 (" 横浜 "); A[2] = new 先生 (" 数学 "," 舞黒素太 "); for(i=0; i<3; i++) A[i]. (); 配列0 1 2 さて, つぎに進もう. ここが山場である. 前のコードに続いて, このスライドでは for 文が書かれている.for ループの中で,i を 0,1,2 というふうに変化させながら, ループの本体 A[i]. ( ); が 3 回実行されるのだが, そこでは という同じ名前のメソッドによって, 異なる意味と異なるメカニズムのもとで A[ i ] に記憶されているオブジェクトが 進む こととなる. すなわち, ループの第 1 周目 (i=0) ではロボットが足を動かしながら進み, 第 2 周目では船がスクリューを回転させて進み, 第 3 周目では先生が授業をるというバラエティに富んだ処理が行われる. 要するに, 全員に一斉に という指示を与えたときに, 各自がそれぞれの の意味に従って行動する様子が表現できているのである. このような処理を簡潔な 1 行で記述できるのは大変便利である. ポリモーフィズムがなければ, オブジェクトがどのクラスのインスタンスなのかの判別に instanceof という Java の機能を用いて,if 文を使って, for( i=0; i<3; i++) if (A[i] instanceof ロボット ) A[i]. ロボット ( ) else if (A[i] instanceof 船 ) A[i]. 船 ( ) else if (A[i] instanceof 先生 ) A[i]. 先生 ( ); のように, インスタンスのクラスが何であるかに応じて, ロボット, 船, 先生 という, 名前の異なるメソッドを実行させることになる. その程度のことはたいした面倒なことではないのだが, プログラムのバージョンアップのときに を実行できる第 4, 第 5 のクラスが導入されてくるとその違いが明確になる. ポリモーフィズムがあるときは, 第 4, 第 5 のクラスをこれまでのように定義すればそれで済み, このスライドの for ループのプログラムを書き直す必要はない. しかし,if 文を使うプログラムでは,if 文の条件判定を新クラス向けに追加しなければならないので, この for 文を書き直し, 再コンパイルする必要が生ずるのである. ましてや, メーカーがソースコードを公開していない場合, 末端のユーザー ( アプリケーションプログラマ ) には, このバージョンアップの作成は不可能になってしまう. このようなプログラミングテクニックは Java のプログラムコードでたくさん見かけるものなので, ぜひ覚えておこう. 良く知られているものは,Runnable インタフェースである.Java では, アニメーションを動かすと同時に,GUI のクリックも受け付ける などのように, 複数のプログラムを同時に動かすときには, スレッド (Thread) と呼ばれるオブジェクトを使う. その場合, プログラマは, 応用に合わせて, オブジェクトに void run( ) というメソッドを記述しておく必要がある. この run ( ) メソッドは Java が事前に用意している Runnable というインタフェースの中で記述された抽象メソッドである. プログラマは,Runnable インタフェースを実装するようなクラスを自分で定義し, その中で run ( ) メソッドの中身を具体的に記述できる. つまり, 先ほどの説明と比較すると, メソッドが run, るもの インタフェースが Runnable に対応している. 32

33 オブジェクト指向のまとめ 基本用語 オブジェクト, フィールド, メソッド, メンバ クラス, インスタンス ゲッター, セッター, コンストラクタ スーパークラス, サブクラス, クラス図 インタフェース, 抽象メソッド, 実装特徴 1 カプセル化 2 継承 ( インヘリタンス ) 3 ポリモーフィズム ( 多相性 ) このスライドでまとめた用語のおよそのイメージが, それぞれ数秒で想起されるように復習してね. 33

34 演習問題 9 オブジェクト指向プログラミングのもつ 3 つの大きな特徴について説明しなさい. 字数は全体で 400 字程度とする. 34

Microsoft PowerPoint - HITobject.ppt

Microsoft PowerPoint - HITobject.ppt 人工知能北海道工業大学情報デザイン学科 AI プログラミング Java とオブジェクト指向プログラミングの基礎 人工知能 の授業では, 人工知能のさまざまなアルゴリズムを学ぶことになるが, 可能ならばそれを実際のプログラミング言語で実装してみることが大事である. しかし, この授業では, 時間の関係でそこまで扱うことができないので, 興味のある人が将来, 自立的に実装できるように, 最小限のプログラミングの知識を今回の授業で学ぶ.

More information

Microsoft PowerPoint - object.ppt

Microsoft PowerPoint - object.ppt 知能情報処理北海道大学情報工学科 AI プログラミング Java とオブジェクト指向プログラミングの基礎 知能情報処理 の授業では, 人工知能のさまざまなアルゴリズムを学ぶことになるが, 可能ならばそれを実際のプログラミング言語で実装してみることが大事である. しかし, この授業では, 時間の関係でそこまで扱うことができないので, 興味のある人が将来, 自立的に実装できるように, 最小限のプログラミングの知識を今回の授業で学ぶ.

More information

Microsoft PowerPoint - object.ppt [互換モード]

Microsoft PowerPoint - object.ppt [互換モード] 認知システム論 の授業では, 人工知能 (AI) のさまざまなアルゴリズムを学ぶことになるが, 可能ならばそれを実際のプログラミング言語で実装してみることが大事である. しかし, この授業では, 時間の関係でそこまで扱うことができないので, 興味のある人が将来, 自立的に実装できるように, 最小限のプログラミングの知識を今回の授業で学ぶ. 具体的には,AIプログラミング言語の歴史の概略を学んだ後,

More information

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード] 第 3 回 Java 基本技術講義 クラス構造と生成 33 クラスの概念 前回の基本文法でも少し出てきたが, オブジェクト指向プログラミングは という概念をうまく活用した手法である. C 言語で言う関数に似ている オブジェクト指向プログラミングはこれら状態と振る舞いを持つオブジェクトの概念をソフトウェア開発の中に適用し 様々な機能を実現する クラス= = いろんなプログラムで使いまわせる 34 クラスの概念

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念

More information

プログラミング基礎I(再)

プログラミング基礎I(再) 山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

More information

Microsoft PowerPoint - chap10_OOP.ppt

Microsoft PowerPoint - chap10_OOP.ppt プログラミング講義 Chapter 10: オブジェクト指向プログラミング (Object-Oriented Programming=OOP) の入り口の入り口の入り口 秋山英三 F1027 1 例 : 部屋のデータを扱う // Test.java の内容 public class Test { public static void main(string[] args) { double length1,

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 基本 Java プログラミング演習 第 13 回 担当 : 植村 今後の予定 7/15 第 13 回 今回 7/22 第 14 回 小テスト ( クラス ) 7/29 第 15 回 総まとめテスト レポート提出 期末テストの時間割に Java のテストの欄がありますが無視してください 再テストはまた別途連絡いたします 2 CHAPTER 11 はじめてのクラス前回の復習 クラスクラスを構成する要素

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念

More information

Javaの作成の前に

Javaの作成の前に メディアプロジェクト演習 1 参考資料 Javaとは JavaScript と Java 言語の違い オブジェクト指向 コンストラクタ サーブレット 本資料内のページ番号は, 以下の参考書のページを引用している 高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに プログラミング言語とは? オブジェクト指向とは? Java 言語とは? JavaとJavaScriptの違いとは?

More information

メディプロ1 Javaプログラミング補足資料.ppt

メディプロ1 Javaプログラミング補足資料.ppt メディアプロジェクト演習 1 Javaプログラミング補足資料 l Javaとは l JavaScript と Java 言語の違い l オブジェクト指向 l コンストラクタ l 継承 抽象クラス 本資料内のページ番号は, 以下の参考書のページを引用している高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに l プログラミング言語とは? l オブジェクト指向とは?

More information

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name クラス ( 教科書第 8 章 p.267~p.297) 前回は処理をまとめる方法として メソッドについて学習した 今回はメソッドとその処理の対象となるデータをまとめるためのクラスについて学習する このクラスはオブジェクト指向プログラミングを実現するための最も重要で基本的な技術であり メソッドより一回り大きなプログラムの部品を構成する 今回はクラスにおけるデータの扱いとクラスの作成方法 使用方法について説明していく

More information

GEC-Java

GEC-Java Copyright (C) Junko Shirogane, Waseda University 2019, All rights reserved. 1 プログラミング初級 (Java) 第 14 回継承 白銀純子 第 14 回の内容 継承 オーバーライド ポリモーフィズム Copyright (C) Junko Shirogane, Waseda University 2019, All rights

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが

More information

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ 11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デザインパターンの主な内容 そのデザインパターンの目的と効果 どのような役割の部品 ( クラス, インタフェース

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 1 第 8 回メソッド (2) 授業開始前に自己点検 前回までの必須課題はすべてできていますか 前回までの学習項目であいまいな所はありませんか 理解できたかどうかは自分自身の基準をもとう Java 1 第 8 回 2 前回のテーマ メソッドとは いくつかの命令の列を束ねて 一つの命令として扱えるようにしたもの 今回学ぶメソッドの役割は その他のプログラミング言語では関数またはサブルーチンと呼ばれることがある

More information

Javaプログラムの実行手順

Javaプログラムの実行手順 戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失

More information

レコードとオブジェクト

レコードとオブジェクト レコードとオブジェクト レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb irb(main):004:0> load("point.rb") => true irb(main):005:0> p = Point.new() => # irb(main):006:0> p.x = 3 => 3

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 2 回クラス インスタンス メソッド フィールド コンストラクタ ICPC の宣伝 国際大学対抗プログラミングコンテスト 3 人一組のチームでプログラムを書く速さを競う 国内予選 : ネットワーク上で 6 月末 ~7 月頭 アジア地区予選 : 日本国内で秋に開催 世界大会 :2020 年は 6 月にモスクワで 参加登録締切 : 国内予選の 2~3 週間前 今年は

More information

Prog2_12th

Prog2_12th 2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java

More information

メソッドのまとめ

メソッドのまとめ メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか

More information

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - prog04.ppt プログラミング言語 3 第 04 回 (2007 年 10 月 15 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 15 日分と書いてある部分が 本日の教材です

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 3 回継承 オーバーライド インタフェース 前回までのお話 モジュール化 大きなプログラムは部品に分けて設計する オブジェクト指向 モノ中心に考える プログラムでは クラス ( モノの種類 ) を定義する ある特定のモノは インスタンスで表す クラスは型 インスタンスは値 プログラムを書くときも部品ごとに書く モノの部品であるモノはフィールドに書く 手順の部品である手順はメソッドに書く

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 1 第 9 回 メソッド (3) 授業の前に自己点検 以下の質問に答えられますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか 戻り値はどのように利用しますか 変数のスコープとは何ですか

More information

基本情報STEP UP演習Java対策

基本情報STEP UP演習Java対策 トレーニング編 1. 予約語 extends アクセスレベル class サブクラス名 extends スーパクラス名 { (1) スーパクラス ( 既存のクラス ) を拡張して, サブクラス ( 新しいクラス ) を定義する場合に extends を利用する (2) extends の後ろには, スーパクラスの名前を一つだけ指定できる (3) サブクラスからインスタンスを生成すると, スーパクラスに定義されたインスタンス変数やメソッドがこのインスタンス内部に引き継がれる

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 8 回目抽象クラスとインタフェース課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) 抽象クラスのオブジェクトは生成できる (2) 抽象メソッドとはメソッドの本体が未定義のメソッドである (3) 抽象メソッドをメンバーにもつクラスは抽象クラスである (4) 抽象クラスを拡張してすべての抽象メソッドをオーバーライドすれば サブクラスのオブジェクトを生成できる

More information

Java言語 第1回

Java言語 第1回 Java 言語 第 2 回簡単な Java プログラムの作成と実行 知的情報システム工学科 久保川淳司 kubokawa@me.it-hiroshima.ac.jp 簡単な Java プログラム Java プログラムのファイル名 Java プログラムのファイル名命名ルール ファイル名とクラス名は同じでなければならない HelloJava.java public class HelloJava { public

More information

ガイダンス

ガイダンス プログラムの 1 行目に以下のように自分の入れること // vm12345 杉崎えり子 情報科学 B 第 10 回 GUI 情報科学 B Info2/3 info10 今日のフォルダー作成 Example10_1.java 1 今日やること Windows などで見られるウィンドウを作 成して (GUI プログラム ) そこに実行結 果を表示させる 2 ウィンドウの作成 Java を使用してウィンドウを作成をしたい

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 独習 Java ( 第 3 版 ) 6.7 変数の修飾子 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 Object クラスと Class クラス 6.7 変数の修飾子 (1/3) 変数宣言の直前に指定できる修飾子 全部で 7 種類ある キーワード final private protected public static transient volatile 意味定数として使える変数同じクラスのコードからしかアクセスできない変数サブクラスまたは同じパッケージ内のコードからしかアクセスできない変数他のクラスからアクセスできる変数インスタンス変数ではない変数クラスの永続的な状態の一部ではない変数不意に値が変更されることがある変数

More information

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀 できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀 内容 オブジェクト指向とは オブジェクト指向のしくみ Java 言語とオブジェクト指向 属性と振る舞い クラスとメソッド オブジェクト指向の特徴 演習問題 勉強会の参考書 Java ( アジャイルソフトウェア開発技術シリーズ 基礎編 ) 発売日 2012 年 5

More information

ガイダンス

ガイダンス プログラムの 1 行目に以下のように自分の入れること // vm12345 杉崎えり子 情報科学 B 第 10 回 GUI 情報科学 B Info2/3 info10 今日のフォルダー作成 Example10_1.java 1 今日やること Windows などで見られるウィンドウを作 成して (GUI プログラム ) そこに実行結 果を表示させる 2 ウィンドウの作成 Java を使用してウィンドウの作成をしたい

More information

ガイダンス

ガイダンス 情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 2 第 6 回継承 コンストラクタ 1 講義資料について 新しい言語の機能 ( オブジェクト指向の機構 ) については 随時参考書などを参照するのがよい 過去の資料も参考になる http://java2005.cis.k.hosei.ac.jp/ 今回の範囲は 上記ページの 17 回に詳しい 2 テーマ : 継承 コンストラクタ 継承 (inheritance) インスタンス変数の継承

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 3 回目クラスの機能 (1) アクセス制限 オーバーロード課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) クラスの private メンバは そのクラスからのみアクセス可能なメンバである (2) 一般に クラスのフィールドはどこからでもアクセスできるように public メンバで宣言すべきである (3) クラスは private メンバと public

More information

C#の基本

C#の基本 C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない

More information

Prog2_9th

Prog2_9th 2017 年 11 月 30 日 ( 木 ) 実施 Canvas による描画 Canvas とは Canvas は, 描画コールを保持するためのクラスである 描画には, 次の 4 つの要素が必要である (1) ビットマップピクセル ( 画素 ) を保持 (2) キャンバス描画コール ( ビットマップへの書き出し要請 ) に対応 (3) 描画プリミティブ描画領域, パス, テキスト, ビットマップ等

More information

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

書式に示すように表示したい文字列をダブルクォーテーション () の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf( 情報処理基礎 ); printf(c 言語の練習 ); printf 情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 2 回クラス インスタンス メソッド コンストラクタ 先週の出席確認 Webブラウザはどのようなプログラムでできているかこの問に答える前に Webブラウザとは 何か? 普段使ってますよね? Webブラウザを使ってできることと Webブラウザがやっていることを区別する必要がある 何をすれば Web ブラウザ と言えるのか NHK チコちゃんに叱られる! Web

More information

ガイダンス

ガイダンス プログラムの 1 行目に以下を入れること // vm12345 杉崎えり子 情報科学 B 第 10 回 GUI 情報科学 B Info2/3 info10 今日のフォルダー作成 Example10_1.java 1 今日やること Windows などで見られるウィンドウを作 成して (GUI プログラム ) そこに実行結 果を表示させる 2 ウィンドウの作成 Java を使用してウィンドウの作成をしたい

More information

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Javaセキュアコーディングセミナー2013東京第1回 演習の解説 Java セキュアコーディングセミナー東京 第 1 回オブジェクトの生成とセキュリティ 演習の解説 2012 年 9 月 9 日 ( 日 ) JPCERT コーディネーションセンター脆弱性解析チーム戸田洋三 1 演習 [1] 2 演習 [1] class Dog { public static void bark() { System.out.print("woof"); class Bulldog

More information

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n を入力してもらい その後 1 から n までの全ての整数の合計 sum を計算し 最後にその sum

More information

Microsoft Word - no11.docx

Microsoft Word - no11.docx 3. 関数 3.1 関数関数は数学の関数と同じようなイメージを持つと良いでしょう 例えば三角関数の様に一つの実数値 ( 角度 ) から値を求めますし 対数関数の様に二つの値から一つの値を出すものもあるでしょう これをイメージしてもらえば結構です つまり 何らかの値を渡し それをもとに何かの作業や計算を行い その結果を返すのが関数です C 言語の関数も基本は同じです 0 cos 1 cos(0) =

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 6 回目継承課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) 新しいクラスを宣言するとき既存のクラスを利用することはできない (2) 新しいクラスが既存のクラスのメンバーを受け継ぐことを継承という (3) クラスの拡張における既存のクラスをサブクラスという (4) サブクラスからスーパークラスの private メンバーをアクセスすることはできない (5)

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラマー勉強会 1 回 basic.h 補足 [ 修飾子 ] const 付けた変数は初期化以外で値を設定することができなくなる 定数宣言に使う unsigned 付けた変数は符号がなくなり 正の値しか設定できない [ 条件コンパイル ] #ifdef M ここ以前に M がマクロとして定義されていれば ここ以下をコンパイルする #ifndef M ここ以前に M というマクロが定義されていなければ

More information

Microsoft PowerPoint pptx

Microsoft PowerPoint pptx PFCore(RT ミドルウェア ) トレーニング中級編 10:00-11:00 第 1 部 :RT コンポーネントプログラミングの概要 担当 : 安藤慶昭 ( 産業技術総合研究所 ) 概要 :RT コンポーネントの作成方法, 設計時の注意点などの概要について解説します 第 2 部 :RT ミドルウェア (PFcore) 開発支援ツールと RT コンポーネントの作成方法 11:00-12:00 12:00-13:00

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

2

2 プログラミング応用演習 b 10 月 5 日演習課題 2016/10/05 PAb 演習課題 プログラム仕様書作成課題 課題クラスを読み 次に示すクラスの仕様書を完成させよ なお 仕様書は クラス 1 つに付き 1 つ作成す る 加えて 図 1 のようなクラス継承の模式図を作成せよ < クラス名 のプログラム仕様書 > 作成者 : 学籍番号 名前 (1) クラスクラス名 : クラス名 説明 : クラスが何を表現しているか

More information

V8.1新規機能紹介記事

V8.1新規機能紹介記事 WebOTX V8.1 新規機能 EJB 3.0 WebOTX V8.1より Java EE 5(Java Platform, Enterprise Edition 5) に対応しました これによりいろいろな機能追加が行われていますが 特に大きな変更であるEJB 3.0 対応についてご紹介いたします なお WebOTX V7で対応したEJB 2.1についてもWebOTX V8.1で引き続き利用することが可能です

More information

JAVA入門

JAVA入門 JAVA 入門後期 10 情報処理試験例題解説 H14 年度秋問 8 次の Java プログラムの説明及びプログラムを読んで, 設問に答えよ プログラムの説明 ディジタル論理回路シミュレータを作成するためのクラスとテスト用クラスである (1) ゲートを表す抽象クラス Gate のサブクラスとして, NOT ゲートを表すクラス NotGate 及び AND ゲートを表すクラス AndGate を定義する

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 7 回目オーバーライド課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) スーパークラスのメソッドと同じ名前 戻り値 引数の個数と型をもつメソッドをサブクラスで宣言すると これらのメソッドはオーバーライドの関係になる (2) メソッドのオーバーライドとは スーパークラスのメソッドに代わってサブクラスのメソッドが実行される機能のことである (3) スーパークラス型の変数にサブクラスのオブジェクトは代入できない

More information

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){ ソフトゼミ A 第 6 回 関数 プログラムは関数の組み合わせでできています 今までのゼミAでも printf や scanf など様々な関数を使ってきましたが なんと関数は自分で作ることもできるのです!! 今日は自作関数を中心に扱っていきます ゲーム制作でも自作関数は避けては通れないので頑張りましょう そもそもまず 関数とは 基本的には 受け取った値に関数によって定められた操作をして その結果の値を返す

More information

第2回講義

第2回講義 オブジェクト指向概論 第 2 講 クラスとカプセル化 立命館大学 情報理工学部 黄宏軒 1 オブジェクト指向の重要な概念 n クラス q 同じようなオブジェクトを まとめて 考える n 継承 ( インヘリタンス ) q 複数のクラスの 共通部分をまとめる n ポリモーフィズム ( 多態性 ) q 呼び出す側を 共通化 する n 複雑なものを簡単に 2 2.1 クラスとは何か n 類似のオブジェクトを

More information

Prog1_15th

Prog1_15th 2017 年 7 月 27 日 ( 木 ) 実施 応用プログラム (3) キー検索 コレクションには, ハッシュテーブルと呼ばれるものがある これは, キー (key) と値 (value) とを組として保持しているものである 通常の配列が添字により各要素にアクセス出来るのに比べて, ハッシュテーブルではキーを用いて各値にアクセスすることが出来る キー及びそのキーから連想される値の組を保持していることから,

More information

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

コンピュータ中級B ~Javaプログラミング~  第3回 コンピュータと情報をやりとりするには? Copyright (C) Junko Shirogane, Waseda University 2016, All rights reserved. 1 プログラミング初級 (Java) 第 10 回オブジェクト指向って? 白銀純子 Copyright (C) Junko Shirogane, Waseda University 2016, All rights reserved. 2 第 10

More information

ガイダンス

ガイダンス プログラムの 1 行目に以下を入れること // vm12345 杉崎えり子 情報科学 B 第 14 回課題作成 3 情報科学 B Info2/3 info14 今日のフォルダー作成 情報科学 B 第 14 回課題作成 3 Report14_1.java 1 教科書 資料 過去のプログラムを見ながらで OK 課題 3( 提出 ) ボタンとアニメーション ( 第 13 回 ) を組み合わせて オリ ジナルのウィンドウを作成する

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

Microsoft PowerPoint - lec06 [互換モード]

Microsoft PowerPoint - lec06 [互換モード] 内 容 Ⅶ. クラスの定義 クラス定義の基本 フィールドの定義 メソッド定義 例題 : 円クラスのフィールドとメソッドの定義 コンストラクタ 例題 :Circle2を使ったアプレット 1 2 クラス定義の基本 オブジェクト指向のプログラム プログラム実行時に登場するオブジェクトの性質や挙動を記述する オブジェクトの性質や挙動を記述したものが クラス である Java プログラムを書くとはクラスを定義すること

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 1 p 1 T 0 S = i=0 p 0 T i = i=0 2

More information

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

レコード class Point attr_accessor(x, y) インスタンス変数の宣言 point.rb レコードとオブジェクト レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb irb(main):004:0> load ("point.rb") => true irb(main):005:0> p = Point.new() => # irb(main):006:0> p.x = 3 =>

More information

メソッドのまとめ

メソッドのまとめ 配列 (2) 2 次元配列, String http://jv2005.cis.k.hosei.c.jp/ 授業の前に自己点検 配列変数に格納される配列の ID と配列の実体の区別ができていますか 配列変数の宣言と配列の実体の生成の区別ができていますか メソッドの引数に配列が渡されるとき 実際に渡されるものは何ですか このことの重要な帰結は何ですか 引数の値渡しと参照渡しということばを例を挙げて説明できますか

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス

More information

ガイダンス

ガイダンス プログラムの 1 行目に自分の名前を入れること // vm12345 杉崎えり子 情報科学 B 第 14 回課題作成 3 情報科学 B Info2/3 info14 今日のフォルダー作成 情報科学 B 第 14 回課題作成 3 Report14_1.java 1 教科書 資料 過去のプログラムを見ながらで OK 課題 3( 提出 ) ボタンとアニメーション ( 第 13 回 ) を組み合わせて オリ

More information

レコードとオブジェクト

レコードとオブジェクト レコードとオブジェクト レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb irb(main):004:0> load("point.rb") => true irb(main):005:0> p = Point.new() => # irb(main):006:0> p.x = 3 => 3

More information

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt プログラミング言語 3 第 09 回 (2007 年 11 月 26 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/40 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 11 月 27 日分と書いてある部分が 本日の教材です

More information

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファイル名 :Sample10_1.java // HP よりインポート文をここへ貼り付けてください //

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問 Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問のメソッドを追加する public static void main(string[] args) {

More information

Microsoft PowerPoint - handout07.ppt [互換モード]

Microsoft PowerPoint - handout07.ppt [互換モード] Outline プログラミング演習第 7 回構造体 on 2012.12.06 電気通信大学情報理工学部知能機械工学科長井隆行 今日の主眼 構造体 構造体の配列 構造体とポインタ 演習課題 2 今日の主眼 配列を使うと 複数の ( 異なる型を含む ) データを扱いたい 例えば 成績データの管理 複数のデータを扱う 配列を使う! 名前学籍番号点数 ( 英語 ) 点数 ( 数学 ) Aomori 1 59.4

More information

PowerPoint Presentation

PowerPoint Presentation ソフトウェア演習 B GUI を持つ Java プログラムの 設計と実装 4.1 例題 :GUI を持った電卓を作ろう プロジェクトCalculator パッケージ名 :example ソースファイル : Calculator.java GUI.java EventProcessor.java 2 4.2 GUI とイベント処理 GUI の構成 :Swing GUI の場合 フレーム JFrame:

More information

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy オブジェクト指向プログラミング演習 2010/10/27 演習課題 スレッド ( その 2) 同期処理 結果不正 デッドロック 前回のスレッドの演習では 複数のスレッドを実行し 一つのプログラムの中の違う処理を同時に実行し た ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする )

More information

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt プログラミング言語 3 第 09 回 (2007 年 11 月 26 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/40 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 11 月 27 日分と書いてある部分が 本日の教材です

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 p 1 S = T i = 1 2 p i p i+1 i=0 i=0

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2016/04/26 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタ malloc 構造体 2 ポインタ あるメモリ領域 ( アドレス ) を代入できる変数 型は一致している必要がある 定義時には値は不定 ( 何も指していない ) 実際にはどこかのメモリを指しているので, #include

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード] 情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ 0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2 0.

More information

Sort-of-List-Map(A)

Sort-of-List-Map(A) Java オブジェクト集合のソートとラムダ式の初歩 山本富士男 2016-4-23 この資料は Java での コレクション Coections と ジェネリクス Generics に関してさらに深く学ぶためのものです 以下の事項を学びます レポート課題が 5 ページの末尾にあります 名称のない内部クラスである 匿名クラス を使う 一般のオブジェクトの集合 (List や Map など ) を何らかの基準でソートする

More information

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ 教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログラムを記述することはあり得ません 本節では 新規プロジェクトを続けて作る際の注意事項と 簡単な Java

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2017/04/25 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタの続き 引数の値渡しと参照渡し 構造体 2 ポインタで指されるメモリへのアクセス double **R; 型 R[i] と *(R+i) は同じ意味 意味 R double ** ポインタの配列 ( の先頭 ) へのポインタ R[i]

More information

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなどを設定できます ソースファイル名 :Sample8_1.java // HP よりインポート文をここへ貼り付けてください

More information

Microsoft Word - VBA基礎(6).docx

Microsoft Word - VBA基礎(6).docx あるクラスの算数の平均点と理科の平均点を読み込み 総点を計算するプログラムを考えてみましょう 一クラスだけ読み込む場合は test50 のようなプログラムになります プログラムの流れとしては非常に簡単です Sub test50() a = InputBox(" バナナ組の算数の平均点を入力してください ") b = InputBox(" バナナ組の理科の平均点を入力してください ") MsgBox

More information

C#の基本2 ~プログラムの制御構造~

C#の基本2 ~プログラムの制御構造~ C# の基本 2 ~ プログラムの制御構造 ~ 今回学ぶ事 プログラムの制御構造としての単岐選択処理 (If 文 ) 前判定繰り返し処理(for 文 ) について説明を行う また 整数型 (int 型 ) 等の組み込み型や配列型についても解説を行う 今回作るプログラム 入れた文字の平均 分散 標準偏差を表示するプログラム このプログラムでは calc ボタンを押すと計算を行う (value は整数に限る

More information

Microsoft PowerPoint - prog07.ppt

Microsoft PowerPoint - prog07.ppt プログラミング言語 2 第 07 回 (2007 年 06 月 18 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/32 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 06 月 18 日分と書いてある部分が 本日の教材です

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション ネットワークプログラミング 演習 第 12 回 Web サーバ上で動作するプログラム 2 今日のお題 PHPのプログラム例 おみくじ アクセスカウンタ ファイルの扱い lock ファイルの所有者 許可と権限 PHP の文法 ( の一部 ) if, for, while の制御の構文は C 言語と似ている 型はあるが 明示的な宣言はしなくてよい 変数には型がない 変数の宣言はしなくてよい 変数名には

More information

人工知能入門

人工知能入門 藤田悟 黄潤和 探索とは 探索問題 探索解の性質 探索空間の構造 探索木 探索グラフ 探索順序 深さ優先探索 幅優先探索 探索プログラムの作成 バックトラック 深さ優先探索 幅優先探索 n 個の ueen を n n のマスの中に 縦横斜めに重ならないように配置する 簡単化のために 4-ueen を考える 正解 全状態の探索プログラム 全ての最終状態を生成した後に 最終状態が解であるかどうかを判定する

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 11 回目スレッド課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) スレッドは 1 つの実行箇所をもつ一連の処理の流れである (2) マルチスレッドで各スレッドの処理は並行して実行される (3) Java はマルチスレッド処理を記述できない (4) 新たにスレッドを生成する場合 Thread クラスを拡張し かつ Runnable インタフェースを実装する必要がある

More information

プログラミングA

プログラミングA プログラミング A 第 10 回 演習 2015 年 6 月 29 日 東邦大学金岡晃 本日の内容 中間テストの解説 演習 1 2015/6/29 プログラミング A 中間テスト解説 : 問 1 < 問 1> 下記の命令が実行された後の a の値を書きなさい ( 省略 ). int a=13; 答え : 13 2 中間テスト解説 : 問 2 < 問 2> 下記の命令が実行された後の a の値を書きなさい

More information

kantan_C_1_iro3.indd

kantan_C_1_iro3.indd 1 章 C# の学習を始める前に プログラムの 01 基本 Keyword プログラムプログラミング言語 プログラムとは プログラムとは コンピューターへの命令の集まりです 学校の先生が プリントを持ってきて と生徒に指示した場合を考えてみましょう 先生をプログラマー ( プログラムの作成者 ) 生徒をコンピューターとしたとき プリントを持ってきて という指示がプログラムです 人間とは違い コンピューターは曖昧な指示を理解できません

More information

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - OOP.pptx 第 5 回 第 3 章継承 91 継承 ( インヘリタンス ): ウインドウシステムを例に説明 図 3.1: ウインドウの中にラベル, ボタン, リストの部品 各部品の属性と操作共通の属性と操作 ウインドウ内の左上を原点として (x, y) で場所指定 : 属性 (width, height) でサイズ指定 : 属性 識別のための名前 (name): 属性 置く位置の指定 (setlocation,

More information

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 1-1 32bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk-8u65-windows-i586.exe 2. jre-8u65-windows-i586.exe

More information

GEC-Java

GEC-Java プログラミング初級 (Java) 第 12 回メッセージのやりとり 白銀純子 Copyright (C) Junko Shirogane, Waseda University 2018, All rights reserved. 1 第 12 回の内容 メッセージのやりとり Copyright (C) Junko Shirogane, Waseda University 2018, All rights

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー HCI プログラミング 3 回目ウィンドウを表示してみよう 今日の講義で学ぶ内容 ウィンドウの表示 ウィンドウの最大/ 最小サイズと半透明化 複数のウィンドウと親子関係 ウィンドウの表示 1 ウィンドウを表示してみましょう ウィンドウアプリケーションは Application クラスを拡張して作成します ソースファイル名 :Sample3_1.java // ウィンドウの表示 public class

More information

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx シーケンスに基づく検索モデルの検索精度について 東京工芸大学工学部コンピュータ応用学科宇田川佳久 (1/3) (2/3) 要員数 情報システム開発のイメージソースコード検索機能 他人が作ったプログラムを保守する必要がある 実務面での応用 1 バグあるいは脆弱なコードを探す ( 品質の高いシステムを開発する ) 2 プログラム理解を支援する ( 第 3 者が書いたコードを保守する ) 要件定義外部設計内部設計

More information

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1 7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 10001 番地とすると, そこから int 型のサイズ, つまり 4 バイト分の領域が確保される.1

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 2 回目 ようこそ Java へ 今日の講義で学ぶ内容 画面へのメッセージの表示 文字や文字列 数値を表現するリテラル 制御コードを表すエスケープシーケンス 画面出力の基本形 ソースファイル名 : クラス名.java class クラス名 System.out.println(" ここに出力したい文字列 1 行目 "); System.out.println(" ここに出力したい文字列

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information