C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: vb.netクラス1対多のプログラミングの書き方


(過去ログ 111 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■65873 / inTopicNo.1)  vb.netクラス1対多のプログラミングの書き方
  
□投稿者/ 白のpants (1回)-(2013/03/21(Thu) 16:08:11)

分類:[.NET 全般] 

vb.net2008 os xp
オブジェクト指向プログラミング初心者でして、プログラムのイメージが全然できません。
車クラスとバスクラスは継承関係でプログラムを組めばいいのかわかるのですが、
車クラスとエンジンクラス、車クラスとタイヤクラスのプログラムの書き方が全然わかりません。


どのようになるのか指導していただければ幸いです。
また、バスクラスとエンジンクラス、タイヤクラスとの関係も指導していただけると幸いです。(サンプルプログラムがあるととても助かります。)

基本的なことですいません。

車クラス-------------------エンジンクラス-------------------タイヤクラス

メーカー-------------------排気量---------------------------インチ
車種-----------------------始動する()---------------------回転する()
走る()---------------------停止する()---------------------停止する()
曲がる()          
とまる()        

車クラス--1--------------1エンジンクラス
車クラス--1--------------4タイヤクラス

バスクラス
運行ルート
乗車料金
車内アナウンス()
ドア開閉()  
引用返信 編集キー/
■65875 / inTopicNo.2)  Re[1]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ howling (253回)-(2013/03/21(Thu) 16:23:01)
No65873 (白のpants さん) に返信
こんにちわ。

> オブジェクト指向プログラミング初心者でして、プログラムのイメージが全然できません。

たまに言われるのですが、オブジェクト"志"向でお願いします。(意味合いが異なる)

さて、今回の考え方自体ですが、

どれがどういう関係なのか、というのを自分で考えてみると、比較的うまくわかるかなと。

車にエンジンとタイヤがついているのは必須でしょう。
でも、車はエンジンという種類の何かではなく、同様にタイヤという種類の何かでもないです。

すると、車クラスの中にメンバとして、エンジンとタイヤを持てばいいんじゃないか、ということになります。

次にエンジンとタイヤの関係を調べます。
エンジンがかかったから、タイヤを動かす、というのは正しいですね。
でも、エンジンが無い場合でも、タイヤだけある場合はありますか?ありますね。
例えば三輪車だったり、自転車はエンジンが無いのにタイヤがあります。

というわけで、エンジンはエンジンで1つのオブジェクト、タイヤはタイヤで…車は車、となります。

さて、「エンジンがかかったのでタイヤを動かそう」というエンジンがかかった事を知っているのは
エンジンそのものと、エンジンを保持している車クラスになります。
先程も話しましたが、エンジンが無くてもタイヤだけある可能性があることから、
車クラスがエンジンクラスから「エンジンがかかったこと」の通知を受け取った場合に、
車クラスがタイヤクラスに対して、「回転しろ」と命令を下すのが良いかと。

…これをやった場合に、
タイヤ自体は指定されたパワーで回転し、その速度を知るだけのオブジェクト
エンジン自体はエンジンがかかっているのかどうかを知るだけのオブジェクト、
車自体はタイヤとエンジンをコントロールするオブジェクト、という形になります。

タイヤの故障ならタイヤクラスに、
エンジンの故障ならエンジンクラスに割り当てておき、
車クラスはそれぞれが故障したかどうか、などを調べるだけでいいかなと。

…という説明でわかるかなぁ?
引用返信 編集キー/
■65876 / inTopicNo.3)  Re[1]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ 774RR (67回)-(2013/03/21(Thu) 16:36:02)
「オブジェクト志向」=オブジェクトをこころざす
ってのは事前の分析に時間をかけて、開発やメンテナンスの時間を減らそうって考えなので
ある程度「具体的にどうしたいのか」って話がないと理解しづらい面がある。

バスの運行表とか運賃とか、そういう案件があるとき
「車」「タイヤ」「エンジン」といった話は考える必要がないはず。
案件にないものを無理やり関連付けしようとするからわけわからんのだ。

「・・・がしたい」んだけど、皆様ならどう分析しますか?
ってな感じでもう少し具体論にもっていくほうが理解が早いだろう。

引用返信 編集キー/
■65878 / inTopicNo.4)  Re[2]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ 白のpants (2回)-(2013/03/21(Thu) 16:49:31)
返信、ありがとうございます。
なんとなくイメージできました。

指定していただいた内容を元にサンプルプログラムを作成したいと思います。
その際はまた、宜しくお願いします。
また、どういう風にしたかということも書いておきます。
引用返信 編集キー/
■65896 / inTopicNo.5)  Re[1]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ shu (241回)-(2013/03/22(Fri) 07:53:06)
No65873 (白のpants さん) に返信

車とエンジン、車とタイヤの関係は
製品と部品の関係です。つまりここに派生関係はありません。

車とバスの関係は
車をより具体的に表現したものがバスなので、派生関係を考えることが出来ます。
車クラスの作り方、バスの表現の仕方によっては車クラスのプロパティを設定するだけで
バスを表現出来るかもしれません。例えばバスとタクシーを考えたとしても使う情報として
特に区別するような情報がなければ1つのクラスで構わないです。


運行ルート、乗車料金は車、バスに付随する情報ですが車やバスがなくても表現できるので
これらのクラスに車やバスの情報を持つ必要はありません。
バスAの運行ルートといった場合はバスAの1情報として保持してもよいかもしれません。
運行ルートがどの車両のものなのか知る必要あるのならばそういう情報を持っても良いかもしれません。


実際にどういう風に使うのかどんな物があってそれらの関係性はどうなっているのかを
考えればよいと思います。運行ルートを管理するシステムにエンジンの情報はいらないです。
引用返信 編集キー/
■65897 / inTopicNo.6)  Re[2]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ 白のpants (3回)-(2013/03/22(Fri) 09:11:30)
2013/03/22(Fri) 09:20:27 編集(投稿者)

返信、ありがとうございます。

サンプルプログラムを作る前に、ひとつ疑問がでてきました。

車とタイヤ、エンジンは製品と部品との関係は理解できます。
その際、クラスのデータとしてタイヤ、エンジン等をもたせる。
あっていますでしょうか?

また、製品と部品の関係の時は部品はクラス化しないのでしょうか?
それとも一般的に部品もクラス化するのでしょうか?
★★そもそも、オブジェクトの抽出方法がわかっていないです。

最初に書いたクラス図はネットで拾ってきたものでありまして、中身が仕様にそくしていません。サンプルのために拾ってきました。
これから、車を通してオブジェクト指向を理解したいと思っております。仕様も考えようと思っております。

引用返信 編集キー/
■65898 / inTopicNo.7)  Re[3]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ shu (242回)-(2013/03/22(Fri) 09:23:00)
No65897 (白のpants さん) に返信
> また、製品と部品の関係の時は部品はクラス化しないのでしょうか?
> それとも一般的に部品もクラス化するのでしょうか?
部品にもつ情報によります。部品の型番だけ必要なのであれば特に部品用のクラス
は必要はなく文字列で良いわけです。部品の形状とか性能とか色とかの情報を持つので
あればクラスにすれば良いです。
引用返信 編集キー/
■65899 / inTopicNo.8)  Re[3]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ 774RR (68回)-(2013/03/22(Fri) 09:40:05)
クラスってのは要件に適合するように設計するものだから
要件(=仕様)なし、つまり「中身が仕様に即していない」状況で何を考えても
机上の空論、理解しづらいのは否めないだろう。

車に乗る人にとって、車に求められるものは
・乗り込む(使用準備をする:ロックを解除し座りエンジンをかける)
・移動する(動く・必要なとき停まる)
・降りる(終了処理をする:エンジンを切りロックする)
くらいのものであって、タイヤの数とかエンジンの構造なんてものはあまり関係ない。

車を乗る人にとって、車とは・・・
車を設計する人にとって、車とは・・・
車を整備する人にとって、車とは・・・
車を解体する人にとって、車とは・・・
すべて違うものであろう=クラスの内容ってのはまったく違うものになるはず。

> それとも一般的に部品もクラス化するのでしょうか?
> ★★そもそも、オブジェクトの抽出方法がわかっていないです。
「オブジェクト」とは部品
「クラス」とは部品の性質とか設計図とか
部品と部品を組み合わせたものもまた部品
# 部品として使えるものをオブジェクト(クラス)として抽出する。

タイヤも部品、エアバルブも部品、ホイール単体も部品。
タイヤとエアバルブとホイールとバランスウエイトを組み合わせたら「車輪ASSY」という部品。
いかにうまく再利用できるよう設計するかが腕の見せ所。
引用返信 編集キー/
■65905 / inTopicNo.9)  Re[4]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ 白のpants (1回)-(2013/03/22(Fri) 10:34:12)
返信ありがとうございます。

仕様が決まっていない中、回答とても助かります。

結局のところ、ひとつひとつを部品化しそれを組み合わせて、プログラムを作成する。
部品はオブジェクト(クラス)として扱い、取替え可能なようにしておく。

そしてクラスが決まれば、そこにどんなメソッドや属性を持たせるのかを考える。

それを仕様にあわせてやっていけばいいのですね。ある程度経験つまないといいものはできそうにないですね。

仕様を考えて、サンプルプログラムを作成したいと思います。
また、わからないことがありましたら、よろしくお願いします。
引用返信 編集キー/
■65929 / inTopicNo.10)  Re[5]: vb.netクラス1対多のプログラミングの書き方
□投稿者/ 白のpants (4回)-(2013/03/25(Mon) 10:50:23)
車とは関係のない話でサンプルをつくりました。
わかりやすいように別スレ載せますので宜しくお願いします。

この話題については解決づみとします。
ありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -