2015-10-26 12 views
10

私はJavaの経験がなく、Cの背景を持っています。main()を専用のクラスに入れなければならないのはなぜですか?

抽象データ型のような新しいデータ型を作成したいと考えています。 Cでは、これは新しいデータ型の構造体を作成することによって行われます。私はJavaで、その新しいデータ型のクラスを作成し、そのクラスのオブジェクトを作成することを理解しています。

私はこの2つの異なる方法を書いており、どちらも機能するようです。しかし、私は第二の方法の欠点を理解していません。

  1. ここでは、データ型のクラスを作成し、そのインスタンスを作成して操作を実行します。私は、これがインターネット上のチュートリアルで使用されているデザインであることを発見しました。

    public class DesignOne { 
        public static void main(String[] args) { 
         MyDataType obj = new MyDataType(3,4); 
         System.out.println(obj.sum()); 
        } 
    } 
    
    class MyDataType { 
        int i; 
        int j; 
    
        MyDataType(int i, int j) { 
         this.i = i; 
         this.j = j; 
        } 
    
        int sum() { 
         return this.i + this.j; 
        } 
    } 
    
  2. ここでは、私は私のドライバ機能を持っているクラスと同じクラスでインスタンスを作成します。 sumのような操作もクラスのメンバーとして定義されます。基本的に、クラスは1つだけです。

    public class DesignTwo { 
        int i; 
        int j; 
    
        DesignTwo(int i, int j) { 
         this.i = i; 
         this.j = j; 
        } 
    
        int sum() { 
         return this.i + this.j; 
        } 
    
        public static void main(String[] args) { 
         DesignTwo obj = new DesignTwo(3,4); 
         System.out.println("sum == "+obj.sum()); 
        } 
    } 
    

何DesignTwoの欠点があり、そしてなぜDesignOneが好ましいですか?

+4

実際にはこれは悲しいことですが、私は最初のアプローチを好むでしょう。そこに所属していない主要な方法でクラスを混乱させないように、あなたのメインメソッドのためだけに余分なクラスがあります。代わりに、プログラムのエントリーポイントとして1つのきめ細かい定義済みメインメソッドがあります。 –

答えて

10

本質的にはAbstractionにまで沸騰します。それぞれのクラスに1つの役割を与えてください。ここでは、あなた充填する必要がある2つの役割があります。

  1. ロードオブジェクトをして
  2. それを表示するには、したがって、あなたが2つのクラスを使用する必要がありますオブジェクト

を表します。利点は、プログラムで複数のタイプのものを使用して表示したいときにはっきりします。

+2

また、MyDataTypeをデータのみのオブジェクトとして保持することは、長期的にデータを永続化したい場合、将来的には利点があります。 (https://en.wikipedia.org/wiki/Separation_of_concernsも参照してください) – Gus

10

2つの間には固有の違いはありません(一般的に非公開のパブリックフィールドは一般的には推奨されません)。唯一の違いは、概念的に特定のクラスに属していないmainメソッドを置く場所です。大規模なプログラムでは、それは通常、別のランチャークラスに属します。それは、それを任意のクラスに結び付けても意味がないからです。しかし、それはデータモデリングにはほとんど関係ありません。

関連する問題