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

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

魁!dcWORKS塾とは?

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

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

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

問題

Shape(図形)という名前のインターフェースを作成し、area()とperimeter()という2つのメソッドを定義してください。

  • area()メソッド・・・面積を返す。
  • perimeter()メソッド・・・周囲長を返す。

Rectangle(長方形)、Circle(円)、Triangle(正三角形)という名前の3つのクラスを作成し、それぞれShapeインターフェースを実装してください。
また、各クラスには必要な変数とコンストラクタを定義してください。
main関数を持つクラスを作成し、Rectangle、Circle、Triangleのオブジェクトを作成して、各オブジェクトの面積と周囲長を出力するプログラムを作成してください。

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

解答例

package lesson_03.works_01_01;

/**
* 3.インターフェース
* <p>
* 1.Shape(図形)という名前のインターフェースを作成し、<br>
* area()とperimeter()という2つのメソッドを定義してください。<br>
* <ul>
* <li> area()メソッド・・・面積を返す。</li>
* <li> perimeter()メソッド・・・周囲長を返す。</li>
* </ul>
* <p>
* Rectangle(長方形)、Circle(円)、Triangle(正三角形)という名前の3つのクラスを作成し、<br>
* それぞれShapeインターフェースを実装してください。<br>
* また、各クラスには必要な変数とコンストラクタを定義してください。<br>
* <p>
* main関数を持つクラスを作成し、Rectangle、Circle、Triangleのオブジェクトを作成して、<br>
* 各オブジェクトの面積と周囲長を出力するプログラムを作成してください。<br>
*
* @author tomo-sato
*/
public class Lesson_03_01_01 {
    /**
    * main関数
    *
    * @param args 起動引数
    */
    public static void main(String[] args) {
        Shape rectangle = new Rectangle(1, 2);
        System.out.println("面積=" + rectangle.area() + ", 周囲長=" + rectangle.perimeter());
        Shape circle = new Circle(4);
        System.out.println("面積=" + circle.area() + ", 周囲長=" + circle.perimeter());
        Shape triangle = new Triangle(3);
        System.out.println("面積=" + triangle.area() + ", 周囲長=" + triangle.perimeter());
    }
}


Shape.java
package lesson_03.works_01_01;
/**
* 図形を表すインターフェース。
*
* @author tomo-sato
*/
public interface Shape {
    /**
    * 面積を返します。
    * @return 面積を返します。
    */
    double area();

    /**
    * 周囲長を返します。
    * @return 周囲長を返します。
    */
    double perimeter();
}


Rectangle.java
package lesson_03.works_01_01;
/**
* 長方形を表す図形クラス。
*
* @author tomo-sato
*/
public class Rectangle implements Shape {
    /** 幅 */
    private int w;

    /** 高さ */
    private int h;

    /**
    * コンストラクタ
    *
    * @param w 幅
    * @param h 高さ
    */
    public Rectangle(int w, int h) {
        this.w = w;
        this.h = h;
    }
    @Override
    public double area() {
        return this.w * this.h;
    }
    @Override
    public double perimeter() {
        return (this.w * 2) + (this.h * 2);
    }
}


Circle.java
package lesson_03.works_01_01;
/**
* 円を表す図形クラス。
*
* @author tomo-sato
*/
public class Circle implements Shape {
    /** 半径 */
    private int radius;

    /**
    * コンストラクタ
    *
    * @param radius 半径
    */
    public Circle(int radius) {
        this.radius = radius;
    }
    @Override
    public double area() {
        return this.radius * this.radius * Math.PI;
    }
    @Override
    public double perimeter() {
        return 2 * this.radius * Math.PI;
    }
}


Triangle.java
package lesson_03.works_01_01;
/**
* 正三角形を表す図形クラス。
*
* @author tomo-sato
*/
public class Triangle implements Shape {
    /** 辺 */
    private int side;

    /**
    * コンストラクタ
    *
    * @param side 辺
    */
    public Triangle(int side) {
        this.side = side;
    }
    @Override
    public double area() {
        // 高さ(√3/2×1辺の長さ)
        double height = Math.sqrt(3) / 2 * side;
        // 面積(1辺の長さ×高さ÷2)
        double area = side * height / 2;
        return area;
    }
    @Override
    public double perimeter() {
        return this.side * 3;
    }
}

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

インターフェースについて
インターフェースはJavaにおける重要な概念の一つで、関連するクラスが共通のメソッドを実装するための設計要素です。
インターフェースは、クラスに対して「約束」や「ルール」を定義するものと考えることができます。
例えば、Shape(図形)というインターフェースは、図形に関する共通のルールや操作を定義します。
このインターフェースには、面積を計算するためのメソッド(area)や周囲長を計算するためのメソッド(perimeter)が含まれています。

/**
* 面積を返します。
* @return 面積を返します。
*/
double area();

/**
* 周囲長を返します。
* @return 周囲長を返します。
*/
double perimeter();

クラスがこのインターフェースを実装するということは、そのクラスがShapeという約束事を守ることを約束するということです。
つまり、実装するクラスはareaメソッドとperimeterメソッドを提供しなければなりません。
これにより、異なる形状の図形でも共通の操作方法を提供することができます。
具体的には、Rectangle(長方形)やCircle(円)といったクラスがShapeインターフェースを実装することで、それぞれのクラスは自身の面積や周囲長を計算するメソッドを持つことになります。

/**
* 長方形を表す図形クラス。
*
* @author tomo-sato
*/
public class Rectangle implements Shape {
    /** 幅 */
    private int w;

    /** 高さ */
    private int h;

    /**
    * コンストラクタ
    *
    * @param w 幅
    * @param h 高さ
    */
    public Rectangle(int w, int h) {
        this.w = w;
        this.h = h;
    }
    @Override
    public double area() {
        return this.w * this.h;
    }
    @Override
    public double perimeter() {
        return (this.w * 2) + (this.h * 2);
    }
}

インターフェースは、異なるクラス間で共通の操作や機能を提供するための仕組みです。
そのため、インターフェースを利用することで、クラス間の互換性が生まれ、柔軟なプログラミングが可能になります。

インターフェースの特徴

  1. メソッドのシグネチャ(メソッド名と引数の型)のみを定義しますが、具体的な実装は提供しません。
  2. クラスがインターフェースを実装する場合、インターフェースで定義されたメソッドを全て実装する必要があります。
  3. クラスは複数のインターフェースを同時に実装することができます。
  4. インターフェースは他のインターフェースを継承することができます。

インターフェースは、プログラムの柔軟性と再利用性を高めるために使用されます。
複数のクラスが同じインターフェースを実装することで、異なるクラスでも同じメソッド名を使用して一貫性のある操作が可能になります。
また、インターフェースを介して異なるクラスを扱うことができるため、ポリモーフィズムの特性を活用することができます。
例えば、サンプルコードの場合、Shapeインターフェースは図形の性質や振る舞いを定義しています。
Rectangleクラス、Circleクラス、TriangleクラスはそれぞれShapeインターフェースを実装することで、共通のメソッドであるarea()やperimeter()を提供します。
インターフェースは、抽象化と組織化に役立つ重要なツールであり、クラスの設計やプログラミングの実践において理解して活用することが重要です。
インターフェースを理解し、プログラミングのスキルを向上させていきましょう!

メンバー募集のお知らせ

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

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

募集要項はこちら

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

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

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

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

詳細はこちら

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

CONTACT