Javaで学習してきたこと（その１）Java開発の流れと全体像

#Javaの振り返り
Javaを勉強してきた内容を大まかに振り返りたいと思います。
#Javaの環境構築
Javaを学習するにあたって必要または使用した環境（道具）
1.JDK
　Javaを作る際に必要な機能をまとめたもの
　参考：https://wa3.i-3-i.info/word15006.html
　インストール参考：https://eng-entrance.com/java-install-jdk-windows
2.Eclipse
　IDE（統合開発環境）　→　実際にJavaを開発していくためのツール
　参考：https://www.sejuku.net/blog/72127
　インストール参考：https://techfun.cc/java/windows-eclipse-install.html
3.Eclipse日本語化パッケージ
　Eclipseを日本語で使用するためのもの
　インストール参照：https://www.javadrive.jp/eclipse3/install/index4.html
#Java開発の流れ
環境（道具）が揃ったら次は開発の流れです。
###1.ソースコードの作成
コンピューターへの命令文を書きます。
実際にメインの作業はここになります。
例えばこんな感じ

```Java
package abc;

public class Main {
	public static void main(String[] args) {
		System.out.println("はじめまして");
	}
}
```
※System.out.println("");とはコンソール（簡単に言うとコンピューターと会話が出来る場所）に表示するためのものです。
要するに「はじめまして」と表示させる命令文です。
###2.コンパイル
上記で記述したソースコードをコンピューターが理解できる言葉に翻訳、
または文法が間違っていないかなどのチェックをしてくれます。
こちらはEclipseで行ってくれます。文法が間違っていた場合はソースコードを修正します。
###3.実行
ソースコードで指示した内容でコンピューターが動作します。
上記のソースコードでコンソール（コンピューターと会話が出来る場所）
という部分に「はじめまして」と表示されます。
![スクリーンショット 2020-11-04 115350.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/ff109842-349e-4b76-c70d-4276d0bbc062.png)
#Javaの構成イメージ
※個人的な感覚で書かせていただきます。
Javaでシステムを開発していくイメージとしては「箱を作っていく」です。
![スクリーンショット 2020-11-04 140545.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/e2563d45-e2ca-3a8b-3eed-a38081fcd44a.png)
※イメージしずらかったらごめんなさい。
プロジェクトというシステム全体の「箱」を作ります。
その中にパッケージという「箱」を作って、、、
とそれぞれの「箱」を作っていきます。
先ほどのコードでいうと、、、

```java
package abc;

public class Main {
	public static void main(String[] args) {
		System.out.println("はじめまして");
	}
}
```
![スクリーンショット 2020-11-04 151037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/1156f5dc-6a39-d6fa-f939-aca00a8c57d0.png)
プロジェクトは全体を囲む「箱」なので表示されませんが
abcパッケージ（1行目）内にあるMainクラス（3行目）の
mainメソッド（4行目）を使用していることがわかるかと思います。
#試しに作ってみる
それぞれの「箱」について「会社」に例えてみたいと思う。
今回は図の「会社（プロジェクト）」と書かれている部分を
作っていきたいと思います。
※下記イメージ図
![スクリーンショット 2020-11-05 115146.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/b1c2b5c9-1d81-f8fd-8195-ebeeba0456d6.png)
はじめに受付（Mainクラス）のmainメソッドで受付を行い、
システム開発部のengineerメソッドを呼び出して作って
もらいたいモノを伝えて作ってもらうというシステムです。
※言葉遊びみたいな感じで見てください！

受付（Mainクラス）

```java
package generalAffairsDepartment;

import systemDevelopmentDepartment.FirstDivision;

public class Main {
	public static void main(String[] args) {
		System.out.println("受付：はじめまして、どのようなご用件でしょうか？");
		
		//自分の名前と呼び出す相手を入力します。
		System.out.println("あなたの名前を入力してください。");
		String yourName = new java.util.Scanner(System.in).nextLine();
		System.out.println("呼び出す相手を入力してください。");
		String callerName = new java.util.Scanner(System.in).nextLine();
		
		System.out.println("自分：私、" + yourName + "と申します。");
		System.out.println("自分：" + callerName + "様はいらっしゃいますでしょうか？");
		System.out.println("受付：" + callerName + "ですね？");
		System.out.println("受付：お呼びいたしますのでこちらでお待ちください");
		
		//ここでシステム開発部のengineerメソッドを呼び出します。
		String requestDetails = FirstDivision.engineer(yourName, callerName);
		
		System.out.println("数時間後、、、");
		System.out.println(callerName + "：お待たせしました。");
		System.out.println(callerName + "：" + requestDetails + "が完成しました。");
		System.out.println("自分：ありがとうございました。");
	}
}
```
※FirstDivision.engineer(yourName, callerName);という部分で
engineerメソッドを呼び出します。

システム開発部第一課（FirstDivisionクラス）

```java
package systemDevelopmentDepartment;

public class FirstDivision {
	public static String engineer(String yourName, String callerName) {
		System.out.println(callerName + "：はじめまして、" + callerName + "と申します。");
		System.out.println(callerName + "：どういったご用件でしょうか？");
		System.out.println("作ってもらいたいものを入力してください。");
		
		//エンジニアに何を作って欲しいかを入力します。
		String requestDetails = new java.util.Scanner(System.in).nextLine();
		
		System.out.println("自分；" + requestDetails + "を作っていただきたいです。");
		System.out.println(callerName + "：承知いたしました。" + requestDetails + "ですね？");
		System.out.println(callerName + "：受付でお待ちください。");
		
		//作られたものをmainメソッドに返します。
		return requestDetails;
	}
}
```
実行、入力結果（コンソールに表示される内容）
![スクリーンショット 2020-11-05 113759.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/2bd728fb-7e13-ff94-2d15-024946ad7e9e.png)
mainメソッドとengineerメソッドを一つのクラスにまとめることも可能ですが、
今回はパッケージやクラスに役割を持たせることを見ていただきたかったので
このような形を取りました。

次回は「変数」について書いていきたいと思います！