• 締切済み

Javaのクラス生成について

「クラスを作成せよ」と言われたら、フィールドだけでなくメソッドも定義すべきでしょうか? 簡単な質問で申し訳ありませんが、宜しくお願い致します。

みんなの回答

noname#221368
noname#221368
回答No.3

 Javaだけでなく、どんな言語にも通じる話だと思います。  まずデータ保存や退避の目的のみのクラスを作成する事はあり得ます。カプセル化の方針に合うからです。カプセル化とは、データ構造を作れです。こういう場合、目立ったメソッドはほとんどありませんが、どんなクラスを作成する時でも、コンストラクト(Defaultの初期化メソッド)とデストラクタ(Defaultの後処理メソッド)を付けるのは、作法になってる気がします。なので多くの言語でこれらは、自動化されてる事も多いです。  次にフィールドのみか?ですが、そう考えるのであれば、フィールドか?プロパティーか?も検討すべきでしょう。結局#2さんの仰るように、何の目的でクラスを使用するのか?です。  プロパティーとメソッドの検討は、プログラムの中でのその位置付け(目的)をはっきりさせないと、クラスがサブルーティン置き場(捨て場?)に化したりします。  位置付けの明確化を前提に自分は、プロパティー,メソッドも含めて、密集積かつ疎結合の原則に従います。  要するに関係するものだけを集めて(密集積)、そのクラスにとって外部環境と思えるものとの抱き合わせは、抱き合わせが便利であっても避けます(疎結合)。こうするとモジュールの独立性が高まって再利用しやすくなり、プログラム単位の意味も明確化されるからです。  ここで注意すべきは再利用とは、プログラム開発後のメンテナンスや使いまわしだけの事でなく、開発中のモジュールの再利用や使いまわしの方が、圧倒的に多いという事です。  ここで難しいのは、クラスにとっての外部環境とは何か?(クラス境界は?)です。これは開発者の判断になります。個人的にこの判断は、「実行者を探せ」で自分は行っています(オブジェクト志向の5W1Hの簡略版)。  例えばデータ構造をクラスとして作成したら、そのデータ構造の内部論理に従う処理だけを、そのクラスにメソッド,プロパティーとして持たせます。データを使用する論理などは、それの使用者(クラスで、多くの場合プログラムのメイン部分)で実装します。  違う考えはもちろんあります。ありますが経験的にものになるなと思えたのは、上記のようなやり方でした。  しかし密集積・疎結合の原則に忠実に従うと、クラス間の相互依存度はどんどん高くなっていきます。またコード量も倍になったりするのはザラです。結局、自分は何を重視するか?です。  つまり、クラスを全面採用するなら(オブジェクト志向すると決めたなら)、ある程度最初から「俺はライブラリを作るのだ」という覚悟が必要になります。覚悟がないなら、やらない方がましです。  クラス作成とは、問題状況に特化したライブラリを作る事です。実際にはそこでは、普通の手続き型プログラミングよりも、プログラムの初期設計の完成度の良し悪しで、最終的な出来が左右されます。  この辺りの事情が実は最初のカプセル化の概念と裏で本質的につながっていて、オブジェクト志向はいくら読んでもようわからん、という事態になります。大概、やってみなけりゃわかりません(^^;)。  ちょっと脅かしましたが、「俺はオブジェクト志向なんかやらないのだ(^^)」という書き方もある訳です。その場合はクラスを、単なる初期化ルーティン便利機能付きデータ構造、とみなしても良い訳です(コンストラクタを除けば、フィールドのみ)。同様にサブルーティン置き場としてのクラスだってありえます(コンストラクタ無しのメソッドのみ)。  やっちゃいけないのは、開発スタイル(方針)を混ぜる事です。たいてい最後には収拾がつかなくなっています(^^;)。  まず自分のやりたい事を眺めましょう(^^)。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

単に「クラスを作成」だったら、メソッドは必須ではありません。 ですが、何のためにクラスを作るのか、そのクラスをどのように使うのか、を考えたら、メソッドを定義した方が便利かもしれません。 その見極めも含めて「クラスを作成」ではないでしょうか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

いや, そんな「べき」はないよ.

関連するQ&A

  • javaのクラスなど

    現在次のようなクラスを作成していて、自分なりに作ってはみたもののうまく分かりません。 どこが間違っていてどのように修正したらよいのか、詳しく教えてください。 9と10は分かりませんでした。 (1) 次に示す内容を満たすバー(Bar)クラスを作成せよ。 1. バーの右端のx座標(=バーの長さ)、バーの名前を扱う2つのprivateなインスタンス変数を持つ。 2. バーの総数を扱うprivateなクラス変数を持つ。ただし、 ここでいう総数とは、(1)コンストラクタで作成したもの、(2)代入操作で作成したもの、の両方を含む。 3. 引数無しのコンストラクタが呼び出されてバーオブジェクトが作成されると、そのバーのx座標は0以上400未満でランダムに決定され、名前は文字「A」とランダムに決定された0以上10000未満の整数が連接されたものに決定される。 4. バーのx座標を設定するインスタンスメソッドを持つ。 5. バーの名前を設定するインスタンスメソッドを持つ。 6. バーのx座標を取得するインスタンスメソッドを持つ。 7. バーの名前を取得するインスタンスメソッドを持つ。 8. 作成されたバーの総数を取得するクラスメソッドを持つ。 9. 作成されたバーの総数を1増やすクラスメソッドを持つ。 10. 作成されたバーの総数を1減らすクラスメソッドを持つ。 こちらが作ってみたものです。 class Bar{ private int x; private String name; private int count; private Bar(){ x=0; count=0; name=""; } public void Bar(){ x = (int)(Math.random()*400); name = "A" + (int)(Math.random()*10000); } public void setBar(int bx){ x=bx; } public void setName(String nm){ name=nm; } public void getX(int bx){ } public void getName(String nm){ } public void getCount(int c){ } }

    • ベストアンサー
    • Java
  • javaについてです。

    このプログラミング全部を教えて下さい。 staticでないものでお願いします。 ●CustomerManagerクラスに以下のフィールドを作成する  ・他のクラスからアクセスできない長さ5のCustomerCardの配列  ・整数型フィールド(名称:index、初期値0) ●CustomerManagerクラスに以下のメソッドを作成する   ・メソッド1  メソッド名:addCustomerCard  引数1:整数型  引数2:文字列型  動作:    ・配列のindex番目にCustomerCardインスタンスを作成    ・作ったインスタンスに引数の2つを設定    ・indexを1増やす ・メソッド2  メソッド名:printAllInfo  引数なし  動作:   配列にいれられた全てのCustomerCardの情報を表示する ●mainメソッドを以下のように修正する  addCustomerCardメソッドを使って以下の情報を登録する     ID = 1 , 名前 = "山田一郎"   ID = 2 , 名前 = "鈴木太郎"   ID = 3 , 名前 = "田中次郎"  printAllInfoメソッドを使って登録された全ての情報を表示する 以上よろしくお願い致します。

    • ベストアンサー
    • Java
  • javaで、オブジェクトを生成しないとメソッドは使えないんですか?

    javaで、オブジェクトを生成しないとメソッドは使えないんですか? そのように習ったのですが、サブクラスのメソッド定義の中で、オブジェクトを生成せずにスーパークラスのメソッドを使える例(下に簡単に書きました)をみて、分からなくなってしまいました。 おしえてください、よろしくおねがいします。 ------------------------------- class superclass { method_a(){ ~~~~ } } --------------------------- class subclass { method_b(){ super.method_a(); }

    • ベストアンサー
    • Java
  • クラスの継承の仕方

    後学のため、JavaScriptについて勉強しています。 JavaScriptでもクラス(のようなもの)を定義してオブジェクトを作成できるようですが、サブクラスを定義する方法が分かりません。メソッドやコンストラクタはどのように継承すればよいのでしょうか。 お分かりの方おられましたら、ご教授のほどお願い致します。

  • java のメソッドの使い方について

    現在のjavaの勉強しております。 そこでフィールドについてどうしてもわからないことがあったので質問させていただきます。 他クラスのメソッドを利用したい時、通常インスタンス化を行いますが、下記のようにフィールドに宣言しても、他クラスのメソッドを利用できることに疑問を感じました。 public class Test{ public String show(){     ~~   return null; } } //Testクラスのshowメソッドを呼び出します public class Test2{ private Test test_; public String triaezu(){    String str = test_.show(); ~~   … このようにフィールドにもつ呼び出しとインスタンス化をして呼び出す方式とは一体何が違うのでしょうか? プログラムの先輩方、基礎的なことすぎて申し訳ないのですが、どうかご教授ください。

    • ベストアンサー
    • Java
  • 使えるメソッドはクラスで予め指定されている?

    javaを始めたばかりでまだ右も左も分からないのですが、 (オブジェクトは作成してみましたが、クラス自体は作ったことがありません。) 例えば、Aというオブジェクトを作る為に、Bというクラスを使ったとします。 この際、使用できるメソッドというのは、クラスで予め定義されているものが使えるのでしょうか? それとも、クラスとオブジェクトというのは、全く切り離されたもので、 メソッドはjavaの世界で予め用意され、どんなオブジェクトを作成する時にも全て使用出来るものなのでしょうか? 教えてください!!

    • ベストアンサー
    • Java
  • ファイルからの入力 Scannerクラス

    ファイルの内容を読み込むプログラムをJavaで作成しています。 Scannerクラスを利用するため、以下のようにimport宣言しました。 package bc; import java.util.Scanner; class FileScanner {  コンストラクタ{   }  メソッド{   }    :    :  mainメソッド{   } } という感じで書いているのですが、この場合のメソッド名は、 Scannerクラスで定義されている名前でないとダメなのでしょうか? 自分で作った名前でメソッドを定義したのですが、 Scannerクラスで定義されていません。 というようなエラーが返ってきてうまくいきません。 どなたか、ご教授くださいm(_ _)m

    • ベストアンサー
    • Java
  • JAVAのクラスの考え方は・・?

    JAVAの勉強をしていている学生です。 常々思っていたのですが、クラスの考え方がしっくりきてませんヽ(~-~ よく参考書などで書かれていることで 「クラスは設計図のようなもの、オブジェクトはそこから作成した実体」 「鋳型がクラスでどんどん作れるのがインスタンス」 といった話が疑問でならないのです。 というのも・・クラスの設計って、自分自身をフィールドに宣言したりできますよね。。 でそこから生成して、また自分自身のフィールドに生成して・・とか。 インターフェースを実装したクラスで、、、内部クラスを持ったクラスで、、、ジェネリッククラス、、。 となってくると、最初の考え方では、論理的に無理?私の脳内では変換しきれないです(´;ω;) 多分前提となる考え方が間違っていたり、私の想像力が乏しいだけだと思います。 どなたか、「クラスってこう考えればオブジェクト指向が見えてくる」と表現している本やサイトなどご存じないでしょうか。 一朝一夕で理解しようとは思っていませんので、きちんと参考にして理解しようと頑張ります! 「私的には・・」や「あなたが勘違いしている箇所は・・」といったご意見もぜひお聞きしたいです! クラスかオブジェクト指向かどっちかというより、クラスありきでJAVAのオブジェクト指向が本当に理解できると考えています。参考書やWEBを探してみた限りではやっぱり理解できないです(´;ω;) ちなみにC言語を中学生で始め、プログラミングに触れました。

  • javaにおけるクラスの定義

    クラスとは「データ(属性)とその操作手順であるメソッドをまとめたオブジェクトの雛型(形式・様式を示す見本)を定義したもの。」という意味であるようですが、これは具体的にどういうことでしょうか? 私なりに考えてみたので、それが正しいかどうか判断してください。その上で、より本質的且つわかりやすい例えがあればご教示ください!(私はプログラミング初心者なので、それを念頭に置いた上で、より分かりやすい解説お願いします。) 上記の定義をもとにした私が考えるクラスの具体例 →例えば、属性として「血液型」、メゾットとして「家事」というオブジェクトの雛形を定義すると、Aさん(血液型A)、Bさん(血液型B)、c(血液型o)さん、そして家事をする主婦としての人間オブジェクトが生成できる。このオブジェクトをまとめて管理する仕組みがクラス。このクラスに属しているオブジェクトは、必ず属性として「血液型」、「家事」としてメゾットを持つ。 私の例えは、なんかいまいちしっくりきません。 もっとわかりやすく且つ厳密で本質的なご教示お願いします!

    • ベストアンサー
    • Java
  • 別クラスのメソッドの呼び出し

    どうしても期待した値が取れず、バイナリが返ってきてしまいます。 簡単な内容なので申し訳ないのですが書き方を教えて下さい。 下記内容です。↓ クラス01にmainメソッドを作成。 そこに「一」「二」「三」を格納する変数を宣言。 クラス02にpublic以外のメソッドを作成。 そこで「一」「二」「三」を引数として受け取り、その3つを「+」以外で文字列連結する。 クラス01のmainメソッドから、クラス02のメソッドを呼び出し、最後にSystem.out.printlnで戻ってきた文字列を出力。 ソース貼っておらず申し訳ないのですが宜しくお願いします。

    • ベストアンサー
    • Java