プログラミングでファイル構成とか聴きますが、それって別のファイルのものをmainのファイルで呼び起こしたりするんですか?

プログラミングでファイル構成とか聴きますが、それって別のファイルのものをmainのファイルで呼び起こしたりするんですか? Hello Worldぐらいしか書いたことないのでいくつもファイルを使った開発?は全くわからないのですが、ファイルを呼び起こしたりするのはすべての言語で共通の方法ですか? あとファイルを分ける意味ってなんですか?

プログラミング51閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

このベストアンサーは投票で選ばれました

0

一つのソフト、アプリケーションを作るのに複数のソースファイルに分けてコンパイルするやり方を「分割コンパイル」と呼びます。 > あとファイルを分ける意味ってなんですか? ソフト、アプリケーションの規模がある程度大きくなると一人で一つのソースファイルでプログラミングを行うのが困難になります。 チームで開発を進めるためには、メンバー間で担当するソースファイルを分けてプログラミングするのがどうしても必要になります。 Linuxのカーネル、デバイスドライバやWindowsなどのOSなどでもソースファイル全体の規模が大きすぎて単一のソースファイルとすることは手に余ります。現実的ではありません。 そうした分割コンパイルとリンケージ作業を一連の流れとして制御するツールがmakeコマンドです。 また、構造化プログラミングの考え方に基づけば、分割する各ファイルごとに「モジュール」という位置づけがされます。モジュール間の結びつきは必要最小限になる疎結合にしたほうが各ソースファイルの修正や変更による他のモジュールへの影響が少なくなり、他のモジュールの外部仕様だけを考えればいいのでバグの混入を防ぐことが出来ます。 一方でモジュール内では各関数などの結びつきは強くなります。これを凝集度と呼びます。凝集度を強めることでそのモジュールが何を行うためのものなのかが明確になります。 考え方としては「構造化プログラミング」に基づくものですが、これらは「オブジェクト指向」でのクラス設計につながるものを持っています。 巨大で雑多な機能を持つようなクラスを作らないようにすること、クラス間の依存性を少なくすることというのはエッセンスとして共通しています。 http://www.cc.kyoto-su.ac.jp/~hxm/cstext/prog06.html などの説明も参考になるはずです。ここで記述されている「オブジェクトファイル」は「オブジェクト指向」とは関係ない実行ファイルとしてリンクする前のコンパイルされたファイルであることには注意が必要ですが。 このあたりについて説明してある書籍も古いものになってしまいますが 「ソフトウェアの複合/構造化設計」 https://www.amazon.co.jp/dp/4764900521 がまとまっています。 「ファイル構成」と言った場合はこうしたコンパイル単位に分割されたソースファイルとヘッダファイルについてどう設計するかという時に使われるものと私は理解しています。 > ファイルを呼び起こしたりするのはすべての言語で共通の方法ですか? 基本的な考え方は一緒です。JavaでもC#などでも単独の巨大なソースファイルで作るものはそんなに多くありません。標準クラスライブラリ自体が多くの別ファイルで構成されています。 分割することでプログラミングを分業出来ますし、全体の見通しがよくなる効果もあります。 ただ、C言語などのオブジェクトファイルをリンクして実行ファイルを作るやり方だと分割して出来るオブジェクトファイルの仕様を知るすべはオブジェクトファイル自身にはありません。そのためにヘッダファイルなどに仕様を記述する必要があります。 その点ではJavaなどは事情が異なります。 C言語のようにアセンブリ言語から出来たオブジェクトファイルとリンクする必要がある、ソース内部にインラインアセンブラとして記述可能なことが必要にされているものとの違いかもしれません。

その他の回答(3件)

0

別のファイルのものをmainから呼べます。 他のファイルのコードを呼ぶのは、全ての言語で共通ではないです。 そもそも、複数のファイルに分けられない言語もあります。 ファイルを分けるのは、1つのファイルの肥大化を防いだり、管理しやすくするためです。 1つのファイルに1万行や2万行ものコードを書いたら、確認や修正が困難になります。 むやみに複数のファイルに分割しても意味はないので、たいていは機能毎など、何らかの意味を持った形に分割します。

0

現在は殆どがリレーショナルデータベースを使うのであまり使われる事はありませんが、データベースが無い時代にはデータをファイルに持って処理していました。リレーショナルデータベースもデータは主キー(他と区別できるデータの列)と主キーが決まれば決まる列を一つのデーブルとして持っています。ファイルの場合も主キーに当たるデータ単位にファイルを持って、データファイルを主キー単位にソート(並び替える)しファイル同士をマッチング(キーで突き合わせて)し計算をする処理を幾つも組み合わせて一つのシステムを作っていました。リレーショナルデータベースであればソートもマッチングも不要で単にテーブルを結合するだけで処理が出来るのでプログラミングの生産性が劇的に改善されています。