質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

1回答

1544閲覧

Java, メソッドを呼び出しオブジェクトを生成する

alastashim

総合スコア16

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

2クリップ

投稿2021/05/08 04:28

編集2021/05/08 07:58

前提・実現したいこと

Javaで店クラスと商品クラスを定義し,店に商品を配置した後,店情報に加えて,商品情報を表示するシステムを作っています.
表示する情報として,店の名前と電話番号,商品の名前と値段です.

店の名前: Hogehoge-ya
店の電話番号: XX-XXXX-XXXX
商品の名前: hoge
商品の値段: 1000

発生している問題・エラーメッセージ

画面表示に合わせると設計シーケンス図の順に実行しておらず,
設計シーケンス図通りに実行したい.

例えば,StartUpクラスにおいて,createProducts()メソッド呼び出しをStoreオブジェクト生成の次に実行され,実行結果画面が同じになるようにしたい.

該当のソースコード

Java

1public class StartUp { 2 3 public static void main(String[] args) { 4 5 Store store = new Store("Hogehoge-ya","XX-XXXX-XXXX"); 6 Store.printStore(); 7 Store.createProducts("hoge",1000); 8 9 10 } 11 12}

Java

1public class Store { 2 3 //メンバ変数を宣言 4 private String storeName; 5 private String tel; 6 //メンバ変数を宣言(集約) 7 private Products products; 8 9 //引数がないコンストラクタを生成 10 public Store() {} 11 12 //引数がStoreName,telとするコンストラクタを生成 13 public Store(String storeName,String tel) { 14 this.storeName = storeName; 15 this.tel = tel; 16 } 17 18 //Productsクラスを生成するcreateProducts()メソッドを定義 19 public void createProducts(String productsName, int price) { 20 products = new Products(productsName, price); 21 products.printProducts(); 22 } 23 24 //店名や電話番号を表示するメソッドを定義 25 public void printStore() { 26 System.out.println("(Store)"+storeName+", TEL:"+tel); 27 } 28 29 //StoreName:Setter&Getter 30 public void setStoreName(String storeName) { 31 this.storeName = storeName; 32 } 33 34 public String getstoreName() { 35 return storeName; 36 } 37 38 //tel:Setter&Getter 39 public void setTel(String tel) { 40 this.tel = tel; 41 } 42 43 public String getTel() { 44 return tel; 45 } 46 47 //products:Setter&Getter 48 public void setProducts(Products products) { 49 this.products = products; 50 } 51 52 public Products getProducts() { 53 return products; 54 } 55 56}

Java

1public class Products{ 2 3 4 //メンバ変数を宣言 5 private String productsName; 6 private int price; 7 8 //引数がないコンストラクタを生成 9 public Products() {} 10 11 //引数がStoreName,telとするコンストラクタを生成 12 public Products(String productsName,int price) { 13 this.productsName = productsName; 14 this.price = price; 15 }; 16 17 //商品名や値段を表示するメソッドを生成 18 public void printProducts() { 19 System.out.println("(products)"+productsName+" "+price+"円"); 20 }; 21 22 //productsName:Setter&Getter 23 public void setproductsName(String productsName) { 24 this.productsName = productsName; 25 }; 26 27 public String getproductsName() { 28 return productsName; 29 }; 30 31 //price:Setter&Getter 32 public void setPrice(int price) { 33 this.price = price; 34 }; 35 36 public int getPrice() { 37 return price; 38 }; 39 40 41}

画面表示

(Store)Hogehoge-ya, TEL:XX-XXXX-XXXX (products)hope 1000円

###設計クラス図

イメージ説明

###設計クラス図
イメージ説明

###補足
SetterとGetterはテスト段階で使うため記述しています.
まだまだ初心者でわからないことが多いのですが,ご教授よろしくお願いいたします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/05/08 07:03

StartUpクラスのmainメソッドで書いているままに動いているだけだと思うのですが、 > Store Store = new Store("Hogehoge-ya","XX-XXXX-XXXX"); > Store.printStore(); > Store.createProducts("hoge",1000); この処理で何を行っているか分からないということでしょうか。 尚、直接関係ないのですが、変数名をクラス名と同じにして宣言するのは悪い習慣です。 > Store Store = new Store("Hogehoge-ya","XX-XXXX-XXXX"); だと、Storeと言う変数がStoreクラスなのか変数名なのか強力に分かりづらいです。 一般的には Store store = new Store("Hogehoge-ya","XX-XXXX-XXXX"); とします。
alastashim

2021/05/08 07:56

dodox86様 ご指摘ありがとうございます. 変数名とクラス名については直していきたいと思います. mainメソッドで動いていることはわかっているのですが, 設計シーケンス図において,Storeクラスを生成したのちcreateProducts()メソッドを呼び出すと書かれているので, > Store Store = new Store("Hogehoge-ya","XX-XXXX-XXXX"); > Store.printStore(); > Store.createProducts("hoge",1000); この処理だと先にprintStore()メソッドを呼び出してしまっているのではないかと考えています. そこで,先にcreateProducts()メソッドを呼び出したのちにprintStore()メソッドを呼び出すソースコードはどのようにして書けばいいのかというのが今回の投稿した理由となります. 拙い文章ではありますが,どうぞよろしくお願いいたします.
guest

回答1

0

createproductの前にprintStoreしてるからとしか言いようがないのですが?
コードは目で追えてますか?追えないのならeclipseなどのデバッガーで一行ずつ実行しては?

あと、一般的にproductsとされると、複数あるように思われるので、
クラス名ならProduct,複数ありうるなら配列かListを使ってください。
Product配列のあるProductsクラスは何か特別な操作がしたい場合に作るのがベターです。(多分)

投稿2021/05/08 08:03

snowshink

総合スコア140

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alastashim

2021/05/09 04:26

snowshink様 ご指摘ありがとうございます.複数形の使い方など次回から生かしていきたいと思います. createproductしたのちprintStoreを行うと,実行結果が >(products)hope 1000円 >(Store)Hogehoge-ya, TEL:XX-XXXX-XXXX となってしまうので望んでいる実行結果にはならないのです. そこでどこを書き直したらシーケンス図通りかつ理想の実行結果が得られるかというのをよろしければお聞きしたいです.
alastashim

2021/05/09 07:11

ご返信ありがとうございます. snowshinkさんはどの部分を直せばシーケンス図通りになると思いますか. お手数ですが,具体的によろしくお願いいたします.
snowshink

2021/05/09 07:57

え。そこを考えてください。 何をしたくて、今どうなってるのか整理すれば自然とわかるはずです。 ざっくり言えば、printするタイミングが違うんですよね?ならお望みどおりに変えては? 正常に動くようにしてから、リファクタリングするのをよいのですが、 シーケンス図があっていて、これに合わせるのが前提なら、自分のと見比べて正しく修正してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問