お世話になります。Java勉強中です。
クラスを別のファイルに分けて、
1.入力受付クラス
2.処理クラス
と分けようとしているのですが、(1)で、
String tmpFirstName = "";
while(!Validation.requiredCheck(tmpFirstName)){
tmpFirstName = JOptionPane.showInputDialog(null, "苗字を入力", "苗字", JOptionPane.INFORMATION_MESSAGE);}
(2)で、
private String firstName
//コンストラクタ
ShortAddress(String firstName){
this.firstName = firstName;}
//ゲッター
public String getFirstName(){
return firstName;}
とした場合に、どういう論理で(2)に情報が受け渡されるのかよくわかりません。ここで言うと、
tmpFirstName と firstName の関連のしくみが分かりません。
他の人のコードを見ても、『入力順に受け付けているの?』ぐらいにしか。
仮に、『10個の入力と、対になる10個のメソッド』があったとして、一番最初の入力を(任意の)10番目のメソッドで処理するにあたり(出来るんだろうと思います)、どういった手続き、関連づけが必要なのか、そもそも必要があるのか教えてください。どうか宜しく。
m(_ _)m れざ(ちょっと壷状態)
No.2ベストアンサー
- 回答日時:
簡単なカプセル化について説明します。
カプセル化とは、中身が隠蔽されているためプロパティを
直接参照できないようなプログラムを指すと思って下さい。
たとえば以下のような構成にしたとします。
1.データの保持クラス(DataClass)
2.入力クラス(InputClass)
3.処理クラス(ProcessClass)
データの保持クラスには private なプロパティを設定します。
private String firstName;
private String familyName;
private int age;
これに対してgetterメソッドとsetterメソッドを作成します。
eclipseであれば右クリック→ソース→getter,setterの作成です。
// firstNameに対するGetter
public String getFirstName() {
return firstName;
}
// firstNameに対するSetter
public void setFirstName(int firstName) {
this.firstName = firstName;
}
firstNameはデータの保持クラスのprivate変数なので、
変数を直接操作できるのはデータの保持クラスだけですね。
他のクラスからfirstNameに値を設定したいときは
setFirstNameメソッドを使用し、値を取得したいときは
getFirstNameメソッドを使用することで入出力を可能とします。
では入力クラスの処理です。
入力クラスでは質問者様のソースコードのように、
任意に入力させるものとします。
名前入力の結果を変数 tmpFirstName にセットしたとしましょう。
データの保持クラスのインスタンスを生成します。
DataClass dataClass = new DataClass();
ここでデータの保持クラスの setFirstName を実行します。
引数には tmpFirstName を指定します。
dataClass.setFirstName(tmpFirstName);
これでデータの保持クラスの firstName には、setFirstName経由で
tmpFirstName の値がセットされたことになります。
同様にsetFamilyName、setAge …と設定していきます。
その後、処理クラスにデータの保持クラスのインスタンスを渡します。
次に処理クラスです。
処理クラスでは入力されたfirstNameの値が欲しいので、
データの処理クラスから値を取り出すことになります。
String tmpFirstName = dataClass.getFirstName();
これでtmpFirstNameに、データの保持クラスのfirstNameの値が
セットされるわけです。
いかがでしょうか。
この回答への補足
Splatter さん、早速の返答ありがとうございます!ゲッターとセッターは名前だけ知っていましたが、使い方はよく分かっていませんでした(てか、まだすべて手探り状態です。)
仕組みについてもう少し見えてきたように思います。実践をしないといけないので、頂いたコメントを参考に、あと数日のたくってみます。
結果報告しますので、質問は締めないでおきます。(^^)
このページにあがいた結果へのリンクを上げておきました。(他人様のを少し加工しただけです。しかも機能低下してるし(汗)) いちおうコンパイルは通ります。
検証の方法がいまいち掴めず、結局カプセル化を「使いこなす」には至りませんでしたが、ゲッター、セッターの役目や、入力されたデータがどういう経路を辿って、どういう処理を受け、最終的にどう処理されるのか、おおよそ見えるようになってきました。保持、入力、処理クラスの分別も今まで漠然と理解していた事に輪郭がついた感じで「おおっそうか」という感じです。
頂いた説明は簡潔で分かりやすく非常に役に立ったと思います。どうも有り難うございました。(^^)
No.3
- 回答日時:
この回答への補足
リンク有り難うございます(^^)。Wikiって手もありましたか。「焙煎JAVA」さんとか漁ってたんですが、私の実践にはちと高度過ぎて唸っていた所なので、こっちのほうが噛み砕いて説明してある感じで良いですね。
事後報告したいので質問は締めないでおきます。でも死にそう。。最初の方は楽勝だったのに(泣)。
…結局こんなんなりますた。激しく玉砕しています。課題の要項にも添ってないし。でも一応コンパイルするので、よしとしました。助言頂き有り難うございました。(^^)
構成は以下の通りです。
入出力-ドライバ
http://kinugosiigomadowff.arrow.jp/miscsc/WK5/WK …
検証
http://kinugosiigomadowff.arrow.jp/miscsc/WK5/Va …
格納1
http://kinugosiigomadowff.arrow.jp/miscsc/WK5/St …
格納2 ([1]の拡張)
http://kinugosiigomadowff.arrow.jp/miscsc/WK5/St …
No.1
- 回答日時:
ソースコードが省略されすぎていてなにやってるのかわからんちんです。
私にもどういう関連があるのかこのコードからでは読み取れません。
この回答への補足
ProKaseifuさん、またお世話になります(^^;)
私が??なのはカプセル化で入力と処理の分離の仕方が根本的に分かっていないという(事に最近やっと気付いた)。
入力用のクラスは
System.out.println("区画名を入力");
String streetNum = usrIn.readLine();
でも、JOptionpaneでも作れるのですが、さて、受け付けた情報をどうやってほかのクラスに受け渡すのか(仕組み)、という部分がポカッと抜けているので、カプセル化を厳しく言われ始めて、すっかりハマってしまった次第です。
参考コードは他人様の借り物なんですが、本来は4つのクラスファイルからなる物で、
1.入力受け付け(ドライバ)
2.バリデーション
3.住所録1
4.継承"super"を使った住所録2
という構成になってます。
以下はそれをひとまとめにしたページです(長いです&コメントが英語混じり)。
http://kinugosiigomadowff.arrow.jp/miscsc/Joel-C …
この例は私には高度すぎて流用できないのですが、クラス事の仕分けがきちんとされているようなので参考例として拝借しました。が、いったん入力された情報がどういう経路を辿るのか、部分的にしか理解できないのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c++でのヘッダーファイルの循環...
-
「継承されたメソッドの可視性...
-
マッピングとは?
-
インターフェイスの使い方がわ...
-
インタフェースのstatic変数(Java)
-
vb.net 自作プロパティの削除に...
-
EventListenerの実装について
-
interface,extend,implementの...
-
フレームワークによくあるイン...
-
(vba)他のアプリケーションの右...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
インスタンス参照でアクセスで...
-
VB.NETでフォーム上にExcelのよ...
-
変数名の付け方
-
配列の重複する値とその個数を...
-
配列のメソッド
-
VB.NET getとsetの概念がわかり...
-
C#でフォームのオブジェクト名...
-
java eclipse 型に解決できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ラッパークラス」の存在意義...
-
C# 「データが失なわれる可能性...
-
VB DLLプロジェクトについて
-
抽象クラスをJUNITでテストする...
-
「継承されたメソッドの可視性...
-
インターフェースとトレイトっ...
-
c++でのヘッダーファイルの循環...
-
JavaでのAPIの覚え方ってみさな...
-
(vba)他のアプリケーションの右...
-
ASP.NETでの共通コードの書き方...
-
なぜForm型にキャストするので...
-
vb.net 自作プロパティの削除に...
-
【C#】クラスのコンストラクタ...
-
委譲って何ですか?
-
interface,extend,implementの...
-
Javaのインスタンス化の構文の...
-
オーバーライドとラッパーの違い
-
Commons-Discovery.jarとは?
-
JTextFieldの入力制限
-
C#からDLLを呼びたいのですが・...
おすすめ情報