構造体ポインタ渡し&オブジェクト指向
先週の構造体の基本の説明を受け、構造体の実際的な使い方の紹介を行う。 後半では、構造体をうまく使えば、データ隠蔽、手続き隠蔽ができて、 手続き・データ設計者と、それを利用する人に分かれて大きいプログラムが書ける… といった説明を行う。 また、この発展形としてのオブジェクト指向の導入部分を説明する。 ただし、オブジェクト指向のネタは、本来の授業範囲外でテストには出さない。
構造体のポインタ渡し
構造体を使っていると、そのデータを使った処理の記述が増えてくる。 この場合は、以下のように関数に構造体へのポインタを渡して操作を行う。
struct Person { char name[ 10 ] ; int age ; } ; // ポインタ渡しに慣れるまではアロー演算子は使わない。 void set( struct Person*p , char s[] , int a ) { // 質問:なぜ (*p).name = s ; ではいけないのか? strcpy( (*p).name , s ) ; (*p).age = a ; } // 慣れたら、アロー演算子。 void print( struct Person*p ) { printf( "%sさんは%dさいです\n" , p->name , p->age ) ; } void main() { struct Person saitoh ; set( &saitoh , "saitoh" , 45 ) ; print( &saitoh ) ; }
このようなスタイルに慣れると、呼び出し側(この例ではmain()の中)には、 データ構造の中身、手続きの中身を知らなくても、プログラムが書ける。 このようにデータ構造をブラックボックスでとらえられることをデータの隠蔽化、 処理の中身をブラックボックス化することを手続きの隠蔽化という。
そのまんまオブジェクト指向に…
この辺に慣れてくると、オブジェクト指向も理解しやすくなってくる。 オブジェクト指向では、データ構造⇒オブジェクト、データに対する手続き⇒メソッドと呼び、 この2つを合わせてクラスと呼ぶ。
class Person { char name[ 10 ] ; int age ; void set( char s[] , int a ) { strcpy( name , s ) ; age = a ; } void print() { printf( "%s%d" , name , age ) ; } } ; void main() { Person saitoh ; saitoh.set( "saitoh" , 45 ) ; saitoh.print() ; }
授業で眠そうにしている学生さんがいたので、ちょいとイヤミきつめで注意。 緊迫感がなさそうだし、3年だと「あと2年しかない」、「不景気で就職も進学も大変」 というネタでやる気をださないと苦労するのは自分…と雑談を交えた授業となった。
情報処理技術者試験の2009年度からの新制度
学生さんへの勉強への意欲拡大で、資格試験の積極取得を伝えているが、 情報処理技術者試験の2009年度からの変更にともない、情報収集。 秋の試験願書受付期間も7/13-8/19の期間みたい。
新しい区分になったけど、直感的に分かりやすい資料を探してみた。 これを見ると、基本情報(FE)は、ほとんどそのままの様子。 新しい「ITパスポート試験(IP)」は、情報システムの利用者側の視点での出題で、 初級システムアドミニストレータが、入門的になったものだろうか… 試験問題の例などを見たけど、どうも経営・法律・業務などの業務系関連知識が 要求される知識ネタが多そう。 3年ならば、今までどおり基本情報にチャレンジするのが、無難だと思う。