こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

通販システム

プログラム初心者です。
通販システムの商品問い合わせメソッドである、
QueryShop(in pShop : shop)の記述内容がわかりません。
とても困っています。
足りない点があれば補足いたしますので、よろしくお願いいたします。

●シナリオ
1.「田中さん」は「大阪店」に商品情報を問い合わせる
2.「大阪店」は商品情報を表示する
3.「大阪店」にある商品は商品情報を表示する

●オブジェクト
大阪店(osaka:Shop)
商品(goodsValue:Goods)
顧客(tanaka:Customer)
買い物かご(shoppingBagValue:ShoppingBag)

●シーケンス図の流れ(商品問い合わせ部分のみ)
Client(QueryShop(in pShop))→Customer(PrintShop)→ ShoppingBag(PrintGoods)→Goods

●設計クラス図の内容
集約 osaka:Shop, goodsValue:Goods
集約 tanaka:Customer, ShoppingBagValue:ShoppingBag
関連 shoppingBagValue:ShoppingBag, goodsValue:Goods
依存 tanaka:Customer, osaka:Shop

(VB.net)

投稿日時 - 2012-05-13 14:16:08

QNo.7473372

すぐに回答ほしいです

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

#4です。

ははぁ、そうですか。


---逆質問 1---

●シナリオ
2.「大阪店」は商品情報を表示する

2.って商品情報じゃなくて店舗情報の間違いじゃないの?

2.「大阪店」は商品情報を表示する
3.「大阪店」にある商品は商品情報を表示する

の違いがわかんないんだよね。




>例えば、Client「田中さんオブジェクトをつくってください」Customer「つくりました」
>Client「買い物かごオブジェクトを作ってください」Customer「委譲します」ShoppingBag「つくりました」という流れになっています。問い合わせなども同様です。


これを続けていけばできると思うんだけどなぁ。
誰が、何に、どのようなことをお願いして、結果として何をもらうのか
っていう書き方で
ずーっと続けていったらそれがその処理ですよ。


もしわからなければ
QueryShopっていうメソッドの役割を日本語で書いてみてください。
"その際にクラス名を積極的に使って日本語文章を作る"---(*)と
処理方式が見えてくると思います。


で、ループとか条件判定とか出てきたら初めてその実装言語の言葉で書けばいいだけです。
(この場合だったらVB.netなんですよね?)


#Goodsという名前がよくないね、Goodsは複数形だからクラス名としてはふさわしくない
#どの問題集なのか教えてほしい・・・ダメ本すぎる。

投稿日時 - 2012-05-13 23:52:03

補足

ご回答ありがとうございます!

・商品情報でなく店舗情報ではないか
はい。正しくは店舗情報です。誤解を招く表現をしてしまい、申し訳ありません。
テキストには商品情報とありますが、Shopは(店舗情報・商品情報の表示)を持っているので、Goodsにある(商品情報)を呼び出して店舗・商品情報をClientに渡します。


>誰が、何に、どのようなことをお願いして、結果として何をもらうのか
tanaka.shop.Printshop()のような感じですか…?依存の関係は、呼び出し方と引数の使い方が全く分かりません。
実は他の問題と合わせて2週間は頭を抱えています。適切なテキストも見当たらず、他の課題もでてきているわなので、そろそろこの問題を解決したいところなのです。

・どの問題集なのか
某研修会社で使われている演習問題集です。解答も用意がないようで、いただけませんでした。
あまりよいテキストではないのですかね・・・。

投稿日時 - 2012-05-14 00:44:30

お礼

できました!

Clientde(呼び出す側)は、tanaka.QueryShop(osakashop)でした。
Customer(呼び出される側)では、paramShop.PrintShop()でした。

質問に対して、丁寧にやりとりを行ってくださり有難うございました。

投稿日時 - 2012-05-14 01:20:44

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

#3です

みればみるほど訳わからんので想像でいいますけど、
おそらくですがClientはCustomerクラスのインスタンスなんですよね。

で、Clientは店を店クラスのインスタンスを引数にとってQueryShop(in pShop)メソッドを実行するわけです。
で、おそらくですがClientが持っているShoppingBagの中にあるGoodsを一個一個Shopに渡して確認するんだろうな。

でもさShopとGoodsの関連もないしメソッドもないじゃない。
だからこれって実現できなくない?

シーケンス図でいうところの、
ShoppingBag(PrintGoods)
がなんか適当に書いちゃってるんじゃない?

投稿日時 - 2012-05-13 18:10:05

補足

私の説明が悪く伝わりづらい点が多いと思います。
お付き合いくださり有難うございます。
補足いたします、よろしければ追加コメントをいただければ幸いです。

・ClientとCustomerは別クラスです。
アクセスする側(client)で呼び出される側(customer,shopingbag,shop,goods)にわかれています。
メインは4つ(customer,shopingbag,shop,goods)のオブジェクト(クラス)です。
なんといったらいいかわかりませんが、ここからすべての命令がでています。
例えば、Client「田中さんオブジェクトをつくってください」Customer「つくりました」
Client「買い物かごオブジェクトを作ってください」Customer「委譲します」ShoppingBag「つくりました」という流れになっています。問い合わせなども同様です。


・申し訳ありません。
Shopクラスに-goods Value :Goodsを記入し忘れていたようです。
訂正箇所については下記に書きましたのでご覧いただければ幸いです。
ちなみに、クラス同士の関係性ですが、
ShopとGoodsは、集約関係にあります。
CustomerとShopingBagは、集約関係にあります。
CustomerとShopは依存の関係にあります。
ShoppingBagとGoodsは、関連の関係にあります。


(1)訂正箇所:フィールドのCustomerNameをCustomerNameValueに訂正
●Customer
----------------------------------
-CustomerNameValue(in paramCustomerName:String)
-shoppingBagValue:ShoppingBag
-----------------------------------
+New(in paramCustomerName:String)
+CreateBag(in paramMoney:Integer)
+PrintCustomer()
+QueryShop(in paramShop:Shop)

(2)訂正箇所:フィールドにgoods Value :Goodsを追加
●Shop
----------------------------------
-shopNameValue : String
-telNoValue : String
-goods Value :Goods
----------------------------------
+New(paramGoodsName:String,paramPrice : Integer)
+CreateGoods(in paramName:String, inparamTelNo:String)
+PrintShop()
+SaleGoods(in paramGoodsName:String,in paramShoppingBag:ShoppingBag)

投稿日時 - 2012-05-13 19:05:04

ANo.3

なるほど、問題集としてある程度制約があるんですね。

じゃあクラス図の
何クラスが何のメソッドもっているのか教えてください。
Client(QueryShop(in pShop))
がわからんのです。

ClientがQueryShop(in pShop)っていうメソッドをもっているんですか?
だとしたらClientはQueryShopメソッドの中でShopクラスの何かのメソッドを呼び出すと思われるのですが、
「じゃあShopクラスは何メソッド持っている?」という情報がないので
ここで手詰まり。

投稿日時 - 2012-05-13 16:24:25

補足

説明がややこしくてもし訳ありません。
CustomerがQueryShop(in pShop)を持っています。
Clientは操作する側だと説明を受けました。

以下が4つのクラスが持つフィールドおよびメソッドです。
よろしくお願いいたします。

●Custmer
----------------------------------
-CustmerName(in paramCustomerName:String)
-shoppingBagValue:ShoppingBag
-----------------------------------
+New(in paramCustomerName:String)
+CreateBag(in paramMoney:Integer)
+PrintCustomer()
+QueryShop(in paramShop:Shop)

●ShoppingBag
----------------------------------
-moneyValue:Integer
-goodsValue:Goods
----------------------------------
+New(in paramMoney:Integer)
+PrintShoppingBag()

●Shop
----------------------------------
-shopNameValue : String
-telNoValue : String
----------------------------------
+New(paramGoodsName:String,paramPrice : Integer)
+CreateGoods(in paramName:String, inparamTelNo:String)
+PrintShop()

●Goods
----------------------------------
-goodsNameValue :String
-priceValue :Integer
----------------------------------
+New(in paramGoodsName : String, paramPrice : Integer)
+PrintGoods()

投稿日時 - 2012-05-13 17:11:19

ANo.2

#1です
いやいや、まだ言語関係ないって。。。
フローチャート書いているレベルです。


実現したいことを考えるときは言語は一旦離れてください。
あなたの文章は(はっきりいってよくわかんないんですけど(笑))
言語が限定されうるものないですよね。


で、他の質問のほうもみました。
どこまでが問題集の情報で、どこまでがあなたの意見ですか?


もしQueryShop(in pShop)なんてメソッド名を作っちゃう問題集だったら
別の本よんだほうがいい気がします。


メソッド名で「店に問い合わせ」なんて作りません。
(あえてそういうことする場合もあるのですが、理由なくやりません)
"店に"商品を問い合わせるんです。
だからpShopが何かよくわかりませんが、
引数に店を取るメソッドなんて普通つくりません。


で、質問はなんですか?

投稿日時 - 2012-05-13 15:23:06

補足

今見返したら、確かに要点を得ない質問でした。
申し訳ありません。
意見はありません。全てテキスト記載のものです。
シナリオはおっしゃるとおりです。

Customerから、ご回答いただいた内容を呼び出すための、メソッドの中身がわかりません。
Byval paramShop As Shopの扱い方が分かりません。

一応考えたのは
Public Sub QueryShop(Byval paramShop As Shop)
shopValue = New Shop()
shopValue = paramshop
osaka.PrintShop()
ですが、多分違います。
shopValueはフィールドの宣言はしていないので使えないんです。

投稿日時 - 2012-05-13 15:58:53

お礼

記入漏れがありましたので、追記いたします。
Byval paramShop As ShopのparamShopの意味ですが、
申し訳ありませんが、設計クラス図に書かれていたとしか言いようがありません。

投稿日時 - 2012-05-13 16:04:41

ANo.1

[顧客]が[店舗]に[店舗が取り扱っている商品]の[商品情報]を問い合わせるというシナリオですかね?

店舗クラス{
- List 店舗が取り扱っている商品

+取扱い商品情報の表示(){
for each 商品 in 店舗が取り扱っている商品
      print 商品.商品情報の表示
next
}
}

みたいな感じですか?

投稿日時 - 2012-05-13 14:42:58

補足

ご回答ありがとうございます。
書き忘れまてしまい申し訳ありませんが、VB.netを使っています。マイナー言語のため、回答が寄せられない心配がありこちらに投稿しました。

Javaは全く分からないので、よろしければ理屈を説明していただけると助かります。

投稿日時 - 2012-05-13 14:50:23

あなたにオススメの質問