質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

11回答

10950閲覧

mainメソッドに全ての処理を書いてはいけない理由

hkrkgyk7

総合スコア26

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

3グッド

4クリップ

投稿2016/06/28 07:34

編集2016/06/28 08:50

java開発初心者です。

ある程度複雑なプログラムを書く場合、
mainメソッドのなかに全ての処理を書くのは良くないと聞きます。

具体的にどういった面で良くないのでしょうか?
特に、品質管理の面でどのような問題があるのかお聞きしたいです。
また開発初心者のため、恐縮ですができるだけ噛み砕いてご説明いただきたいです。

ご回答宜しくお願い致します。

追記
テスト工程で問題となる支障はありますか?

stereo_code, ozwk, yodel👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答11

0

思想の話になりますが…。
プログラマとして仕事をして3年程度の人の意見です。

たとえばです、全てmainで記載してしまう場合、1ファイルで全て記載することになります。
まず、これを念頭に考えた場合、以下の問題が発生します。

  • メンテナンスの問題

複雑な処理を実装する場合、どうしても似たような処理を多様する機会が発生します。
万が一、そのコードを修正する必要がある場合、全て修正が必要になります。
処理を共通化することで、修正漏れであったり、無駄をなくすことで未然に不具合への予防策になります。

  • 複数人開発の場合

複数の人間で同じファイルを編集すると、何かしら問題がおきやすいため、
分けて実装するほうが好まれます。

  • ソースコードの読解

全てをmainだけに記載してしまった場合、どの処理が何を意味しているのか、
という点について全て読解しないと理解ができない、という問題があります。
原則、設計書しかり仕様書を読めば、プログラムを読まなくとも実装内容を理解できるものです。
しかし、全てを1つに記載してしまうと、製作者にしか意図がわからないものになる可能性が高いです。

また、Javaはオブジェクト指向で開発することが一般的です。
そのことも考えると、mainのみに記載する、ということは非常に大きな問題を抱えることになります。
###結論
私の意見としては、「保守性」「汎用性」の2点を考えるのであれば、mainのみに記載してしまうのはよくないかなと思います。
1人で開発するものであるなら、それをあえて咎める理由にはならないと思いますが、
柔軟かつ、迅速に対応をしたいと考えるならクラスやメソッドに細分化し、必要に応じて使い分ける開発手法をとったほうが得策だといえます。

投稿2016/06/28 07:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラムではなく、文章を書く場合を考えます。
短い場合なら、1つの文で済ますことができます。
ある程度長くなってきたら、文は複数になります。
さらに長くながくなるなら、段落で区分けしていきます。
そして、次は章に分けたり、あるいは本を巻に分けていきます。

漫画でも、1コマまんが、4コマまんがというのはありますが、大抵は章や巻に分かれています。

プログラムで main() にすべてを書くというのは、
1つの文で書く、 1コマだけで書く という事に相当します。

投稿2016/06/28 22:04

編集2018/08/28 14:13
katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのようなプログラムを書くということは、そのプログラムの作者はオブジェクト思考、クラス、メソッドの意味や意義を理解していないということになります。そしてそれらを理解せず書いたコードは**「保守性がない」「拡張性がない」「バグが出やすい」「処理が追いにくい」「機能単位になっていない」「別プロジェクトへの移植性がない」**など、いくらでもダメな点が挙げられます。

Javaはオブジェクト思考言語と呼ばれているほどにオブジェクト思考に重きを置いて設計されていますが、mainに全て書くということはそれらを全て投げ捨てていることにほかなりません。

投稿2016/06/28 07:42

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ごく簡単な、main1つに書いて10数行で済むようなプログラムであれば、それで構わないでしょう。

それ以上の規模のプログラムを1関数で書くとなると、到底把握しきれなくなります。

投稿2016/06/28 07:55

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

問題しか思いつかないです。

メソッドを作ってはいけないという縛りでアプリケーションを作るとします。
・同じ処理をメソッド化できないので、同じコードをひたすら書かないといけなくなります。
この処理が間違っていた場合は全ての箇所に修正を入れないといけません。
・ローカル変数の競合の多発、どこで変数が使われているかを把握できない。
・フィールド変数は全てstaticにする必要がある
・影響範囲が絞れないのでデバッグできない。

投稿2016/06/28 07:50

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

すでにたくさん回答がついて今さらですが、
非常に重要なことなので改めて回答します。

プログラムを組む最初で最大のつまずきポイントなので、
この問題を早めに認識されるとバグによる苦労が減りますよ。

具体的にどういった面で良くないのでしょうか?
特に、品質管理の面でどのような問題があるのかお聞きしたいです。

品質が非常に低下します。

一定以上の規模のプログラムだと、
バグだらけでまともに動作しない、
そもそも完成しない恐れがあります。

テスト工程で問題となる支障はありますか?

テストしにくくなりますが、それ以前の問題として、
テストの目的はバグを予防することなのに、
そのバグが増えればとうぜん支障になります。


なぜ、プログラム開発がバグで破綻するかというと、
変数など状態を持つ要素が組み合わせ爆発を起こし、
人間がシステム全体を把握しきれなくなるからです。

ソフトウェアの開発は複雑さとの戦いです。

ですから、大きなものは分割して、分割統治するのが、
プログラム設計の最も基本的な戦略になります。
メインメソッドに全部書くというのはその逆になります。

メインに全部書くのは大部屋に寝泊まりする感覚です。
規模が大きくなるとホテルやマンションのように
個室で管理する方がうまくいきます。
Javaのオブジェクト指向(サポート)もそのための機構です。

投稿2016/07/09 13:26

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えばmain内で、同じ処理が何度も出てくる場合、何度も書くより一つの処理にまとめて、それを呼んだ方がよくないですか?→メソッド化
例えばmain内で、同じ種類の処理があればひとつのグループにまとめて管理した方がわかりやすくないですか?→クラス化、カプセル化

投稿2016/06/28 08:27

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

たとえば、質問者様が辞書を作っているとします。
その辞書には索引も無く、単語も「あいうえお」順ではないとします。
ある単語が間違っているので修正して欲しいと依頼されたときに
その単語を何千頁とある辞書から探したいですか?
みたいな感じでしょうか(笑)

余談ですが、10年くらい前は割とMainクラスのみで実装されてたり、可読性を度外視したものは見かけましたよ。
携帯アプリの出始めなんかはは30kbyte(だったかな?)に抑えるためにJavaのメリット全て捨ててそういう実装がされる場合もありました。

今は絶対無いですけどね。

投稿2016/06/28 08:08

Yossi_1982

総合スコア95

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

テスト時に支障があるとすれば、mainに全ての処理を書いてしまうと、一人しかテストができなくなります。
メソッドに分かれていれば、メソッド単位でテストができます。
また、何らかの修正が発生した場合、「影響範囲がわかりにくい」、「動作保証するために全てテストが必要」と
なると思います。

共通処理も分けなければ、バグの元になりますし、一括修正する際の修正箇所が増えるなど
色々な支障がでてきます。

上記の理由から、mainに全て記述するメリットは特にないと考えます。

投稿2016/07/04 00:15

tomo.ina

総合スコア357

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

20行から50行程度のプログラムを組んで見て下さい。
通常の初心者であれば一時間かけても取れないバグに当たるはずです。

その時に改めて、ソースコード付きで質問していただければ、メソッドを分けた解答例がもらえます。
そして、その解答例と自身のソースコードを比較すればメソッドを分ける意味を納得することになります。

投稿2016/06/30 17:33

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

書いたって悪い事はないのですが、たくさん書くとわかりづらくなります。

投稿2016/07/08 01:20

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問