魁!dcWORKS塾 〜エンジニア編 vol.3〜

こんにちは! dcWORKSでエンジニアをしているミネです。
弊社のエンジニアチームやデザインチームの実態をより詳しく知ってもらうべく始まった「魁!dcWORKS塾」エンジニア編 第3回をお届けしていきます!

魁!dcWORKS塾とは?

技術研修や勉強会など、それぞれで実際に取り組んでいるような内容を問題・課題の形式でご紹介します。
エンジニアの問題では解答や解決するためのポイントを、またデザインチームでは制作過程など、各チームの取り組みを具体的に紹介していきますのでお楽しみに!
BLOGを見てくださっているみなさんも一緒に楽しみながら取り組んでいただけると嬉しいです。

エンジニア編 第3回ということで、弊社が運営しているプログラミングスクールのEngineersGateでも講師を務めるサトウ先生からの出題です。

人物紹介・サトウ先生
エンジニアズゲート講師。みんなから愛されるキャラクターとボディーの持ち主

問題

X軸(int) 、Y軸(int)の座標を保持するPointクラスを作成してください。
また、2点の座標の距離を求める関数を作成し、main関数を持つクラスで計算結果を表示してください。

2点の座標を計算する計算式: Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))


みなさん、解けましたか?
解答は下記です!サトウ先生からのワンポイントアドバイスもあるのでぜひ参考にしてみてください!

解答例

package lesson_02.works_03;

/**
* 1.基礎構文(クラス、静的メソッド、動的メソッド)
* <p>
* 2.X軸(int) 、Y軸(int)の座標を保持するPointクラスを作成してください。<br>
* 2点の座標の距離を求める関数を作成し、main関数を持つクラスで計算結果を表示してください。<br>
* <p>
* 2点の座標を計算する計算式: Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
*
* @author tomo-sato
*/
public class Lesson_02_03 {
   /**
   * main関数
   *
   * @param args 起動引数
   */
    public static void main(String[] args) {
        Point p1 = new Point(3, 4);
        Point p2 = new Point(7, 1);

        // 静的メソッドで実装した場合の例。
        double ans1 = Point.distance(p1, p2);
        System.out.println(ans1);

        // 動的メソッド(インスタンスメソッド)で実装した場合の例。
        double ans2 = p1.distance(p2);
        System.out.println(ans2);
    }
}

Point.java

package lesson_02.works_03;

/**
* 座標を表すクラス。
*
* @author tomo-sato
*/
public class Point {
    /** X座標 */
    private int x;
    /** Y座標 */
    private int y;

    /**
    * コンストラクタ
    *
    * @param x X座標
    * @param y Y座標
    */
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    /**
    * このクラスの座標と引数p座標との距離を返します。
    * (動的メソッド「インスタンスメソッド」での実装サンプルです。)
    *
    * @param p 座標
    * @return このクラスの座標と引数p座標との距離を返します。
    */
    public double distance(Point p) {
        // このクラス(this)と、引数のPointを引数に渡し、結果を得る実装です。
        // 使用方法はmain関数を参照ください。
        return distance(this, p);
    }

    /**
    * 2点間の距離を返します。
    * (静的メソッドの「スタティックメソッド」での実装サンプルです。)
    *
    * @param p1 座標1
    * @param p2 座標2
    * @return 2点間の距離を返します。
    */
    public static double distance(Point p1, Point p2) {
        return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
    }
}

サトウ先生によるワンポイントアドバイス

1. Pointクラスのコンストラクタ

public Point(int x, int y) {
   this.x = x;
   this.y = y;
}

コンストラクタはクラスのインスタンスを初期化するための特別なメソッドです。
この例では、X座標とY座標を引数として受け取り、インスタンスの状態を設定しています。
コンストラクタはクラス名と同じ名前を持ち、戻り値の型を宣言しません。
オブジェクトの初期化や必要な準備を行うためのコードを含めることができます。
コンストラクタの役割を理解し、必要な引数を適切に設定しましょう。
また、「this.x」や「this.y」は、インスタンス変数を参照するために使用されます。
インスタンス変数に値を代入する際には、「this」キーワードを使用して明示的に自身のインスタンスを指定しましょう。

2. 引数の使用

/**
* このクラスの座標と引数p座標との距離を返します。
* (動的メソッド「インスタンスメソッド」での実装サンプルです。)
*
* @param p 座標
* @return このクラスの座標と引数p座標との距離を返します。
*/
public double distance(Point p) {
    return distance(this, p);
}

インスタンスメソッドは、特定のインスタンスに関連付けられた操作を実行するためのメソッドです。
この例では、自身「this」の座標と引数で渡された座標との距離を計算して返しています。
インスタンスメソッド内で別のメソッドを呼び出すこともできます。
この例では、静的メソッド「distance」を呼び出して計算を行っています。
インスタンスメソッドはインスタンス化されたオブジェクトに対して呼び出す必要があるため、メソッド呼び出しの際にはオブジェクト名を使用して呼び出しましょう。
「p1.distance(p2)」のように呼び出します。

3. 静的メソッド(distance)

/**
* 2点間の距離を返します。
* (静的メソッドの「スタティックメソッド」での実装サンプルです。)
*
* @param p1 座標1
* @param p2 座標2
* @return 2点間の距離を返します。
*/
public static double distance(Point p1, Point p2) {
    return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}

静的メソッド(スタティックメソッド)は、クラス自体に関連付けられた操作を実行するためのメソッドです。
この例では、2つの座標間の距離を計算して返しています。
静的メソッドは特定のインスタンスに依存せず、クラス名を使用して直接呼び出すことができます。
この例では、「Point.distance(p1, p2)」のように呼び出しています。
静的メソッドはインスタンス変数にアクセスできないため、引数として必要な情報を明示的に受け取る必要があります。

以上で基礎的な文法についての問題は終了です。
今回の問題を通じて、コンストラクタや動的メソッドと静的メソッドの違いについて学ぶことができたと思います。

今回の学習ポイント

    1. クラスとは、関連するデータとそれに関連する動作をまとめたものです。
      クラスのインスタンス化を行い、オブジェクトを作成することで、そのクラスの機能を利用できます。
    2. クラスのインスタンス変数は、そのクラスの各インスタンス(オブジェクト)ごとに異なる値を持つことができます。
    3. メソッドは、クラス内で実行される動作を表すブロックです。
      静的メソッド(スタティックメソッド)はクラスに関連し、インスタンスメソッドはオブジェクトに関連します。
    4. コンストラクタは、オブジェクトの初期化を行う特別なメソッドです。
      クラス名と同じ名前を持ち、オブジェクトが作成される際に自動的に呼び出されます。
    5. メソッドの引数を使ってデータを渡し、戻り値を使って結果を返すことができます。
    6. 静的メソッドは、「クラス名.メソッド名()」の形式で呼び出されます。
      インスタンスメソッドは、「オブジェクト名.メソッド名()」の形式で呼び出されます。

これらのポイントを理解して実際のコーディングに取り組むことで、プログラミングの基礎を築くことができます。
継続的な学習と実践を通じて、Javaのスキルを向上させていきましょう!

メンバー募集のお知らせ

dcWORKSでは一緒に働く仲間を常時募集しています。私たちと一緒に人々の心を動かすものを創りませんか?
今なら就職お祝い金プレゼントキャンペーンを実施中です。ぜひご応募ください。

興味がある方は以下からお気軽にご応募ください。

募集要項はこちら

ITエンジニアを目指したい方へ

dcWORKSではIT業界の慢性的な人材不足解消・20代人材のキャリアプラン創造のためEngineers Gateを運営しています。
Engineers Gateでは無料でITエンジニア(プログラマー・インフラエンジニア)の育成型就職サポートを実施しております。

・IT業界に興味があるがどうやったら就職できるのか
・ITの勉強方法がわからない
・独学で限界を感じている方 etc

上記の様な悩みをお持ちの方は以下からお気軽に相談してください。

詳細はこちら

お気軽に
お問い合わせください。

CONTACT