モジュール分割.

Slides:



Advertisements
Similar presentations
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
Advertisements

システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
情報処理演習C2 ファイル操作について (2).
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
プログラミング入門2 第6回 関数(2) 芝浦工業大学情報工学科 青木 義満
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
第13回 プログラミングⅡ 第13回
記憶クラス 変数をどのような記憶領域に割り当てるかを指定するのが記憶クラス 記憶クラスには、自動変数、静的変数、外部変数などがある。
C言語講座 第4回 ポインタ.
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
関数 関数とスタック.
構造体 構造体, 構造体とポインタの組み合わせ,.
10: ファイル入出力 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
第2回 Microsoft Visual Studio C++ を使ってみよう
C言語講座 第3回 ポインタ、配列.
プログラミング2 関数
Cプログラミング演習 中間まとめ2.
Cプログラミング演習 第6回 ファイル処理と配列.
プログラミング 2 ファイル処理.
プログラミング論 ファイル入出力
Cプログラミング演習.
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング演習I 2003年6月25日(第10回) 木村巌.
知能情報工学演習I 第12回(後半第6回) 課題の回答
プログラミング入門2 第11回 情報工学科 篠埜 功.
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
プログラミング論 ファイル入出力
第11回 プログラミングⅡ 第11回
Cの実行モデル.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
関数への道.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
ファイルの読み込み #!/usr/bin/env perl #Perlスクリプトの指定 open(FILE, "food.txt");
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
プログラミング演習I 2003年7月2日(第11回) 木村巌.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
高度プログラミング演習 (11).
extern の意味 (C プログラミング演習,Visual Studio 2019 対応)
ファイル操作について (1).
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
C言語プログラミング・課題 ファイルを読み込んで、その内容を表示するプログラムを作成せよ。
プログラミング演習I 2003年6月11日(第9回) 木村巌.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング序論演習.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミング 2 静的変数.
Presentation transcript:

モジュール分割

大規模なプログラム プログラムは,多数の関数の集まり モジュール分割が必要 すべてのプログラムを1つのファイルに入れるのでなく,複数のファイル(モジュール)に分けて格納

あらすじ プログラムを「モジュール」に分割することの利点 他のモジュール内の「関数」を呼び出す方法

モジュール分割の利点 Aさん Bさん Cさん プログラム プログラムの共同開発がしやすい モジュール1 Aさん モジュール2 Bさん モジュール3 Cさん プログラム プログラムの共同開発がしやすい 関連の深い関数を,同じモジュールに集まることで,プログラム全体の見通しがよくなる

例題2.プログラムのファイル分割 ファイルの中身を表示するプログラムを作る 役割ごとに,関数を作る. ファイル名の読み込み ファイルのオープン ファイルの読み込み ファイルのクローズ プログラムは,3つのファイル main.cpp, input.cpp, file.cpp に分割する

ファイル分割の例 関数 get_file_name ファイル input.cpp 関数 main 関数 open_file 関数 close_file 関数 print_file ファイル main.cpp ファイル file.cpp ファイルには,いくつかの関数(1つ以上)を入れる

プログラム例 ファイル名の読み込み ファイルのオープン ファイルの表示 ファイルのクローズ

ファイル名の読み込み void input_file_name( char* file_name ) { char *buffer[80]; printf( "ファイル名をどうぞ?\n" ); fgets( buffer, 80, stdin ); sscanf( buffer, "%s", file_name ); }

ファイルのオープン FILE* file_open( char* file_name ) { FILE* in_file = fopen( file_name, "r" ); if ( in_file == NULL ) { printf( "ファイルオープンに失敗しました"); } return in_file;

ファイルの表示 void file_open( FILE* in_file ) { char *buffer[100]; lseek( in_file, LEEK_SET ); while ( fgets( buffer, 100, in_file ) != NULL ) { printf( "%s\n", buffer ); }

ファイルのクローズ void file_close( FILE* in_file ) { fclose( in_file ); }

プログラムと関数呼び出し #include <stdio.h> int main() { char file_name[80]; get_file_name( file_name ); open_file( file_name ); print_file(); close_file(); }

関数の関係 関数 get_file_name ファイル input.cpp キーボードからの 入力を行う 関数 main 関数 open_file 関数 get_file_name ファイル main.cpp 他のファイル内の 関数を使って仕事を行う ファイル file.cpp ファイル操作を行う

モジュールの意味 機能のまとまり 呼び出し呼び出されの関係 他のモジュール内の「関数」を呼び出す必要あり ローカルな変数と共有変数

main モジュールの例 #include <stdio.h> extern void inc_counter(); extern void print_counter(); int main() { int i; for ( i = 0; i < 10; i++ ) { inc_counter(); } print_counter(); 関数 int_counter の使用を宣言 (「extern」は,他のモジュール にある関数を使いたい」という 意味) 関数 int_counter の呼び出し

count モジュールの例 #include <stdio.h> static int counter = 0; void inc_counter() { counter = counter + 1; } void print counter() { printf( "counter is %d\n", counter ); 変数 counter の宣言 (「static」 は「変数はこのモジュール の中でのみ使う」という意味) 関数 int_counter の実体 (実は,関数は,他の  モジュールからも使うことができる)

モジュールの意味 main モジュール 呼び出す側 count モジュール 呼び出される側 ファイル count.cpp 「数を数える」機能  「数を数える」機能 ファイル main.cpp  count モジュールを使って,実際の仕事を行う

main モジュールと count モジュール の数を数える関数 inc_counter を使 いたい 関数 inc_couner の実体 は実はここ ファイル名: main.cpp ファイル名:count.cpp ふつう,1モジュールは,1つのファイル main モジュールと count モジュールは,呼び出し・呼び出されの関係

「static」 + 「変数宣言」 static int counter = 0; static あり (static 変数)   変数を,このモジュールの中でのみ使う場合 int counter = 0; static なし (global 変数)   変数を,他のモジュールから使うかも知れない場合   C++では,「モジュール」ごとに,好きな変数を自由に使えるので,プログラムしやすい

変数の有効範囲 static 変数: モジュールの中だけ global 変数: 他のモジュールからも使える   (例) static int counter = 0; global 変数: 他のモジュールからも使える (例) int age = 0; /* static なし */  → 他のモジュールの変数を直接使うと,結局,変数が     どこで書き変わったか分からなくなってしまう  → 「他のモジュールの変数を使う」のはなるべく止めて   「他のモジュールの関数を呼び出す」だけにしよう   (global 変数はなるべく使わない)

まとめ モジュール分割時の変数と関数の宣言 プログラムを「分割」することの意味 static 変数: モジュールの中でのみ使う変数 プログラムが分かりやすくなって,結局は,プログラムを早く,正しく作れるようになる

設問 1.モジュール作成 ファイル操作を行う次の2つの関数を含むモジュール file.cpp を作成して下さい.ファイルのオープンのモードは「r」とせよ.   open_file( char *name ); /* ファイルのオープン */ close_file(); /* ファイルのクローズ */ 2.extern 文 1.で作成したモジュールを使用する main 関数を含む main.cpp を作成して下さい main 関数には,「中身の表示」,「行数の表示」など役に立つ機能を実装すること file.cpp, main.cpp をコンパイルし,動作を確認して下さい