• ベストアンサー

クラスについて~根本的なことなんですが

プログラムの経験はCOBOL程度で、 先月からJAVAの勉強を始めました。 プログラムを作成する上での機能や定義や、 サンプルプログラムの流れや処理内容を理解することは 出来てきたのですが、 実習問題で ・CheckDataクラスのCheckNumber()メソッドは、引数に渡された数値の 正負を判定し、正の場合trueを返します。 ・以下の実行結果になるようにプログラムを作成してください。 <実行例> -1 is a negative number. 2 is a positive number. -50 is a negative number. 100 is a positive number. <CheckData.java> public class CheckData { public boolean checkNumber(int data) { if (data >= 0) { return true; } else { return false; } } } <UsePackage.java> class UsePackage { public stativ void main(String args[]){ int num[] = {-1, 2, -50, 100}; } } <条件> ・確認する数値は、UsePackageクラスに定義されたnum配列の整数を使用する。 ・CheckDataクラスはhoge.pkglabsにパッケージする という問題が出たときに、 どちらのクラスに System.out.println(正負の表示); 等の処理を入れればいいのか、 どの処理は何処のクラスに入れればいいのか等が ちんぷんかんぷんです。 新たなクラスをファイルを作るべきなのかも分からなく、 実際上の問題で新たなクラスファイルを作ろうとしてました。 実際一から作る時が来るかと思いますが、その時を考えると 焦ってしまいます。 私がオブジェクト指向の考え方を分かったつもりで、 実は正しく理解出来ていないのかもしれません。 Javaを習い始めた時に同じ問題にぶつかった方、 乗り越えた方がいらっしゃいましたら、 是非その勉強法(?)、クラスやプログラムの組み方を教えていただきたいのです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

う~ん、あまりオブジェクト指向の勉強に適した問題とも思えない。 そもそもクラスにする必然性の無いクラスだし、クラス名からして 手続き指向丸出しの名前ですしね。 ですので、 > どちらのクラスに System.out.println(正負の表示); > 等の処理を入れればいいのか、 については、どちらでもよいです。 多分出題者の意図としては、CheckData#checkNumber()の 返値を受け取ってUsePackageクラスの中で出力させようと しているんだと思いますけど、そうしなければならない 理由は無いと思います。 一般的には、一つのクラスは一つの「概念」に対応するのだと 考えると概ねうまくいきます。個々のインスタンスはその 概念に属する「物(オブジェクト)」というわけです。

torokonbu
質問者

お礼

有り難うございます。 この問題自体は 「パッケージとインポートが理解できているか」 を課題ポイントにしている物なのですが、 実用的なプログラムを使った方が分かりやすいのかも しれませんね。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • watapen
  • ベストアンサー率10% (5/48)
回答No.2

自分もJavaを習い始めたばかりなのですが、 とりあえず意見として書いてみます。 CheckDataクラスができることはかなり汎用度が高いものだと思われます。しかも引数の値しか使っていないところをみると CheckDataの public boolean checkNumber(int data)は public static boolean checkNumber(int data) にしてもいいのだと思います。 特にCheckDataクラスのインスタンスを作らなくてはいけない必要を感じませんので。 System.out.println(正負の表示); は呼び出しが戻り値を標準出力に出したいのかどうかの判断をすればいいのでUsePackageクラスに実装しておけばいいのだと思います。もしかしたらそのうちファイルに出力なんてこともあるかもしれないのでCheckDataに実装してしまうとできませんから。 >Javaを習い始めた時に同じ問題にぶつかった方、 >乗り越えた方がいらっしゃいましたら、 >是非その勉強法(?)、クラスやプログラムの組み方を教>えていただきたいのです。 自分はまだ乗り越えてはいませんが、 とりあえずひたすら書くっていうのが一番いいかなぁなんて思います。たくさん書いているうちに自分のなかでこっちの作りのほうがいいなぁとかあの作りはこうすべきなのではなんて考えるチカラがついたような気がします。 ちょっとへんな意見になってしまうのですが、 プログラムというか仕様は動いてなんぼだと思います。 とりあえず動くものを作って、そのあとに正しく動くことを維持したまま修正を加えていったほうがいいのかなぁっって。 もちろんコーディング前に設計ができるのであれば、その方がいいと思いますけど、作ってみて初めてわかることもありますし。。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • クラス内で自分自身をインスタンス化

    javaで開発をしております。 あるソースコードに、クラス内のメソッドで自分自身をインスタンス化しているものを見ました。初めて見たのですが、どういった場合に使われるのでしょうか。 public class Sample { public Sample hoge() { Sample sa = new Sample(); //何らかの処理 return sa; } }

    • ベストアンサー
    • Java
  • 複素数の計算するクラスを足せる人がもしいたら

    このJavaプログラムはAdd(足し算)とSud(引き算)を計算するプログラムです。 import Java.io.*; class INT { public int Add(int x,int y){ return x+y; } public int Sub(int x,int y){ return x-y; } } class REAL extends INT { public double Add( double x,double y){ return x+y; } public double Sub( double x,double y){ return x-y; } } class CAL extends REAL { } … public class Cale { public static void main(String args[]) { CAL c = new CAL(); System.out.println( c.Add(1,2) ); System.out.println( c.Add(1.0,2.0)); System.out.println( c.Sub( 1,2)); System.out.println( c.Sub( 1.0,2.0)); } } このプログラムに「複素数の足し算と引き算をするクラス」をクラスの仕様も併せて 作成することが出来る人がもしいたら宜しくおねがいします☆

  • サブパッケージについて

    jp.co.checkに格納したCheckDataクラスを jp.co.dataのmainメソッドで呼び出したいのですが、 C:\j\jp\co\alpha\subject>javac data\ex31.java data\ex31.java:7: check.CheckData にアクセスできません。 クラスファイル .\check\CheckData.java は不正です。 ファイルにクラス check.CheckData が含まれていません。 削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。 check.CheckData a = new check.CheckData(); というエラーメッセージが出ます。 作成したソースは package jp.co.data; public class ex31 { public static void main(String args[]) { int x = 333; check.CheckData a = new check.CheckData(); a.checkNum(x); } } これと以下の package jp.co.check; public class CheckData { public int checkNum(int a) { if(a > 0) System.out.println("true"); } } 2つです、どなたか教えてください。

  • クラスの中のクラスへのアクセス

    お世話になります。 クラスが以下のようにあります。 class ClassName1{ var $classname2_obj; // クラス「ClassName2」のオブジェクト function getClassName2Obj(){ return $this->$classname2_obj; } } class ClassName2{ var $array_list; // 配列です  function getArrayList(){ return $this->array_list; } } やりたいのは、ClassName1のgetClassName2Obj関数でClassName2の配列をgetArrayListで取得したいのです。 $a = new ClassName1; $b = $a->getClassName2Obj(); $c = $b->etArrayList(); 上の$b = … と$c = …の部分の処理を一行にまとめることはできないでしょうか? 何卒よろしくお願い致します。 PHPは5です。

    • ベストアンサー
    • PHP
  • Javaのプログラムについて至急教えてください!

    //Sub.java class Super{ public void A(){} } class Sub extends Super{ /* (1) */ } このプログラムの(1)に入るものを下から2つ選んで他のクラスのメインメソッドから呼び出すのですがどうやってもわかりません。わかる方教えてください! public void A(){} public String A(){ return "pool";} public int A(String str){return Integer.parseInt(st);} public int A(){return 3;} public Object A(){return new Object();}

    • ベストアンサー
    • Java
  • クラスの使い方

    php5です。 --- test1.class.php --- class TEST1 { function hoge1() { // 実際に複雑な処理ですが概要として簡易化してます $aaa = 'hoge1'; // クラスの実行で単純に戻り値を返す return $aaa; } } --- test2.class.php --- class TEST2 { function hoge2() { // 実際に複雑な処理ですが概要として簡易化してます $bbb = 'hoge2'; // クラスの実行で単純に戻り値を返す return $bbb; } } --- MySmarty.class.php --- require_once 'test1.class.php'; require_once 'test2.class.php'; class MySmarty extends Smarty { function MySmarty() { //ここでclassTEST1,2の戻り値を利用しif文で分岐をしたい if ($aaa == 'hoge1') { $ccc = 'あああ'; } elee { $ccc = 'いいい'; } if ($bbb == 'hoge2') { $ddd = 'ううう'; } elee { $ddd = 'えええ'; } $this->assign('aaa', $aaa); $this->assign('bbb', $bbb); ・・・ } } このような使い方はできないものでしょうか?クラスに触れてまだ間も無く理解も深めれて いない状態で参考サイトなどを調べてみたのですがこのような使い方を書いている説明は みつかりませんでした。 思いつく方法としてはMySmartyに継承すればいいようなのですが継承は1つまでと 制限があるようでそれもできない状態です。 単純に1つのクラスにまとめて書けば済むような気もあるのですが他にも別のクラスの 戻り値を利用して分岐等をさせたく思っているのですがこの場合どうすればいいのでしょうか? もし不可能な場合(可能だけど方法的に良くない場合)の別の方法としてアドバイスを 頂けますと幸いです!宜しくお願いします!

    • 締切済み
    • PHP
  • Visual Basic 2005 クラスライブラリの使い方

    異なるクラス間で共通の変数aを使いたいのですが、うまくいきません。あるクラスForm1でaを宣言しても他のクラスClass1でも宣言しないとエラーが出てしまいます。 以下のクラスをデバイスアプリケーションとして作成し、 Public Class Form1 Public a As Integer = 100  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Test As New MyLibrary.Class1 Test.Plus1() MsgBox(a, MsgBoxStyle.Information, "実験") End Sub End Class 以下のクラスをクラスライブラリMyLibraryとして作成します。 Public Class Class1 Dim a As Integer = 0 Public Sub Plus1() a += 1 End Sub End Class Form1でボタンを押すと、メッセージボックスに100と表示されます。 (関数Plus1の効果なし) ちなみにClass1の「Dim a」を「Static a」にしてクラスライブラリ(DLL)を最初に呼び出したときだけ初期化すればよいと思ったのですが、そうすると「'Static' は、メンバ変数宣言では有効ではありません。」というエラーが出てしまいます。 解決方法をご存知の方、ご教授願います。 また、クラスライブラリ(DLL)を作成するとまとまりができてプログラムの変更がしやすいと思いますが、やはり処理速度が遅くなるなどの問題もあるのでしょうか?

  • importでクラスを呼び込みたい

    今、javaプログラムでjarファイルの中のクラスを呼び込む というものを作成しています。 プログラムでjarファイル内のクラスを呼び込むためにimportを 使ってクラスを使いますということを宣言しなくてはいけないのですが、importが上手くいかずエラーが出てしまい、プログラムがコンパイルできません。 クラスを含んだjarファイルの場所は /home/kimura/javahello/JarTest.jar です。その中にHello.classというクラスメソッドが入っておりそれを 別の場所で作成しているプログラムで呼び出し使いたいと思っています。 importの記述方法が分からず困っています。 この記述方法分かるという方がいらっしゃったら教えてください。 参考サイトなどもお知りでしたらよろしくお願いします。

    • ベストアンサー
    • Java
  • 違うクラスのデータを読み込むにはどうすればいいですか?

    はじめまして、Javaを勉強したばかりの初心者です。 下のようばプログラムでclassAのdata配列を class Cで参照するにはどうすればよいでしょうか? public class A extends B{ ・・・・ short data[] = new short[10]; } public class C extends D{ }

    • ベストアンサー
    • Java
  • クラスの継承、メソッドのオーバーライド

    ↓の問題が全然わかりません。 問題:サブクラスのsiki2にax2+bx+c=0(b2-4ac>0)とコンストラクタ を定義して、スーパークラスのsiki1にax+b=0とコンストラクタを定義し、解を求めるkaiメソッドを定義する という問題です。途中のプログラムを↓に書きました。 スーパークラス class houteisiki1{ private int kai; private int a; private int b; private int x; //コンストラクタ houteisiki1(int s, int d, int e, int f){ solve=s; a=d; b=e; x=f; } //kaiメソッド kai=(a*x)+b; } サブクラス class houteisiki2 extends houteisiki1{ static int kai(int a, int b, int c, int x){ kai=(a*x*x)+(b*x)+c; if((b*b)+(-4*a*c)>0){ return kai; }else{ println("エラー"); } } } テストクラス class test{ public static void main(string[] args){ ここまで作りましたが、解らなくなりましたので教えてください。 まだ、JAVAを勉強して日が浅いので解りやすく教えてください。

    • ベストアンサー
    • Java
このQ&Aのポイント
  • Lenovo Legion Pro 5 Gen8(16ARX8)のM.2とメモリのアップグレード方法を紹介します。
  • アップグレードを検討しているパーツは、メモリとM.2 SSDです。
  • また、M.2 SSDの装着には注意が必要ですが、おすすめの商品もご紹介します。
回答を見る

専門家に質問してみよう