オブジェクト指向についてある程度勉強しました。そしてだいたいのプログラムの組み方は分かってきました。しかし、まだまだはじめたばかりなので実際のところ利点と欠点がわかりません。オブジェクト指向の原理はだいたいわかりますが、多分経験が不足している状態です。カプセル化や継承、多様性...を使うことで度のようなメリット、デメリットがあるのか具体的に教えてください。

A 回答 (1件)

方法論について細かい利点や欠点を語るのは無理があります。


そういう話が出来るのは、もっと具体的な話になってからです。
勉強中ということなので、カプセル化、継承、多態など
要素毎の利点はすでに理解されていると仮定して・・・。

よく言われているところでは、
規模の小さいものを作るのには向いてません。
規模の大きいものを作るに向いています。
また設計が重要です。全てを決定すると言ってもよいです。
設計さえ上手く行けば、あらゆる変更に柔軟に対応出来ます。
その代わり設計は難しいですし、設計を生かすために実装技術も
色々勉強しなくてはならないでしょう。

方法論に根ざした深遠な議論に興味がないなら、
とりあえずライブラリを使ってみることをお勧めしますよ。
MFCはお勧めしません。WindowsやるならBorlandのOWL等。

C++ではSTL,Javaなら各種コレクションなどのライブラリは、
多態や隠蔽がどのように活用されて
使いやすいインターフェイスを提供してくれるかという優れた見本になります。
    • good
    • 0
この回答へのお礼

そうですよね。特に「何かを作っていく」わけでもないのに、それでいて利点や欠点を聞くのは間違ってたように思います。しかし、それでも答えを返して頂きとても嬉しく思います。ありがとうございました。やはり最終的には自分の経験と感覚でなんとなく「あ、いいかも」と思うことが利点なのかな…と思いました。もう少し勉強&設計してみます。ありがとうございました。

お礼日時:2002/02/05 09:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphpでオブジェクト指向と呼べる設計をするには・・・

phpで、なるべく同じ処理は関数化し、
ひとつの大きな処理としてまとめています。

これは、オブジェクト指向といえるのでしょうか?
オブジェクト指向とはもっと高度で汎用性が高く
たんなる関数化ではオブジェクト指向とはいえないでしょうか?

綺麗なオブジェクト指向とは一体のどようなものなのでしょうか?

どこまでオブジェクト化すれば
オブジェクト指向なのかよく分かりません。
使いまわしがきけばオブジェクト指向なのでしょうか?
他のプログラムに影響を与えなければオブジェクト指向なのでしょうか?

質問が抽象的ですが、よろしくお願いします。

Aベストアンサー

>たんなる関数化ではオブジェクト指向とはいえないでしょうか?

いえない。それは「構造化プログラミング」というものだ。プログラムを処理ごとに整理し構造化する手法だな。

オブジェクト指向は、「処理ごと」に整理するのを超え、「独立して扱える個々のプログラムの集合体」として設計する。これはクラスとして設計される。それぞれのクラスは、他のプログラムに依存せずそれぞれ単独で機能する形で設計されなければならない。そうして設計されたクラスの組み合わせによりプログラム全体を構築する。これがオブジェクト指向プログラミング。

関数は、ただ「一つの機能をまとめたもの」に過ぎない。これに対し、クラスは「機能と、値をパッケージ化」する。そのクラスに必要な機能をメソッドとして用意し、そのクラスを利用するために必要な情報をすべてメンバー変数として自身の中に保持する。そのクラスを利用するのに必要な情報は、すべて自分自身の中にある。そうした独立性のあるオブジェクトとしてプログラムを定義するのがオブジェクト指向。

ただ、PHPの場合、ちょっとしたものだとわざわざオブジェクト指向を持ち出さなくとも作れてしまうので、なかなかオブジェクト指向の考えを実践するのは難しいところがある。オレも、ちょっとしたものならまずクラスなんて定義しないで作っちまうし。すっきりと美しく作られたオブジェクト指向を理解したいなら、PHPの場合、MVCによるフレームワークを勉強するのが割と手っ取り早いんでないかと思うな。CakePHPとかZend frameworkなんかを実際に使ってみると、オブジェクト指向がどういうものか、次第にわかってくるんでないかな。

>たんなる関数化ではオブジェクト指向とはいえないでしょうか?

いえない。それは「構造化プログラミング」というものだ。プログラムを処理ごとに整理し構造化する手法だな。

オブジェクト指向は、「処理ごと」に整理するのを超え、「独立して扱える個々のプログラムの集合体」として設計する。これはクラスとして設計される。それぞれのクラスは、他のプログラムに依存せずそれぞれ単独で機能する形で設計されなければならない。そうして設計されたクラスの組み合わせによりプログラム全体を構築する。こ...続きを読む

Qオブジェクト指向の「カプセル化」について

>>@ITより
http://www.atmarkit.co.jp/fjava/devs/object02/fig2_1.gif
オブジェクトが、「固有の状態」と「振る舞い」をカプセル化して隠ぺいしている
>>MSより
メソッド (振る舞い) とプロパティ (属性) をインタフェースとして備えています

@ITの記事では、メソッド自体(振る舞い)もカプセル化により隠ぺいされていると理解したのですが、
MSではインターフェイスとしてメソッドとプロパティが公開されていると説明されていました。

カプセル化では、インターフェイスとして何が公開されているのか、
隠ぺいされているものは何なのか。以上の二点がわかりません。

ちなみに各記事のURLはこちらです。
http://www.microsoft.com/japan/msdn/academic/Articles/csharp/02/csharp2.aspx
http://www.atmarkit.co.jp/im/carc/serial/object02/object02.html

>>@ITより
http://www.atmarkit.co.jp/fjava/devs/object02/fig2_1.gif
オブジェクトが、「固有の状態」と「振る舞い」をカプセル化して隠ぺいしている
>>MSより
メソッド (振る舞い) とプロパティ (属性) をインタフェースとして備えています

@ITの記事では、メソッド自体(振る舞い)もカプセル化により隠ぺいされていると理解したのですが、
MSではインターフェイスとしてメソッドとプロパティが公開されていると説明されていました。

カプセル化では、インターフェイスとして何が公開されているのか...続きを読む

Aベストアンサー

オブジェクトのカプセル化の目的は、内部の振る舞いと属性を外部から隠蔽することで再利用性・メンテナンス性を高めることにあります。
すべてのメソッド(=メッセージ)を隠蔽してしまっては、外部とのインターフェイスが取れなくなりますので、メソッドをすべて隠蔽することはありません。
プロパティ (属性) が外部に公開されても構いませんが、プロパティを外部から書き換えられることで内部の振る舞いに支障が出るようなカプセル化は失敗です。
という前提でMSと@ITの言葉を整理してみましょう。

・@IT「固有の状態」
内部の振る舞いに関する属性を固有の状態と呼んでいると思われます。カプセル化には必須のことです。
・@IT「振る舞い」
内部の振る舞いの事を呼んでいると思われます。同じくカプセル化には必須のことです。
・MS「メソッド (振る舞い)」
外部とのインターフェイスのためのメソッドです。外部の要求に対してメソッドとしての振る舞いをしますが、内部の振る舞いが隠蔽されているならばカプセル化は問題ありません。
・MS「プロパティ (属性)」
外部とのインターフェイスのための属性です。これ単体で使われることはありません。何らかのメソッドで対で使われる必要があります。属性に値を入れてメソッドを呼ぶか、メソッドを呼んで属性に値を入れてもらうかどちらかでしょう。
これ以外に内部の振る舞いのための属性が存在する前提で書かれたものと思われます。

オブジェクトのカプセル化の目的は、内部の振る舞いと属性を外部から隠蔽することで再利用性・メンテナンス性を高めることにあります。
すべてのメソッド(=メッセージ)を隠蔽してしまっては、外部とのインターフェイスが取れなくなりますので、メソッドをすべて隠蔽することはありません。
プロパティ (属性) が外部に公開されても構いませんが、プロパティを外部から書き換えられることで内部の振る舞いに支障が出るようなカプセル化は失敗です。
という前提でMSと@ITの言葉を整理してみましょう。

・@I...続きを読む

Qオブジェクト指向設計について

オブジェクト指向設計に興味を持って、いくつかオブジェクト指向の本を読んでみたのですが、
どうもオブジェクト指向に関する基礎知識の説明ばかりで、
オブジェクト指向でどのように設計するのか、どのように生かされるのか、
肝心な部分がいまいちピンときません。

オブジェクト指向による設計に重点を置いたお薦めの書籍などありましたら是非教えてください。

Aベストアンサー

私も「オブジェクト指向のこころ」がお勧めです。
http://www.amazon.co.jp/dp/4894716844
通して読むと、オブジェクト指向の考え方が分かります。

他には下記のものもお勧めです。
「オブジェクト指向でなぜつくるのか」
http://www.amazon.co.jp/dp/4822281957/

「アジャイルソフトウェア開発の奥義」
http://www.amazon.co.jp/dp/4797347783/

「Code Complete第2版〈上〉」(6章にクラスの解説が有る)
http://www.amazon.co.jp/dp/489100455X/

Qオブジェクト指向について

C#でプログラミングをしているのですが、オブジェクト指向を一切使わずに作っています。

作っていくにしたがってツールが重くなってきたのですが、オブジェクト指向を使ってい書いたほうがアプリケーションは軽くなりますか?

Aベストアンサー

描画のやり方がまずいとか、スレッドにすべき部分をしていないとかじゃないでしょうか。
オブジェクト指向と速度には直接の関係はありません。
ただ、ちゃんとオブジェクト指向できる人は、大抵プログラムの設計や最適化もちゃんと出来ると思います。

Qオブジェクト指向の特徴

プログラミングにおいて

Java言語などのオブジェクト指向とは

「クラス(設計図)からインスタンス(実体)を量産できる。」がオブジェクト指向ではないプログラミング言語との決定的な違いなのでしょうか?

またオブジェクト指向とオブジェクト指向ではない言語の決定的な違いや
実際に実務において経験した感覚的な違いなどがあれば教えてください。

インターネットに乗っていない些細なことでも構いません。

Aベストアンサー

数学の世界では、関数(写像) の引数には定義域というものがあって、範囲外の値を入力することは許されません。

しかし、定義域を変えて新しい関数を定義することはできます。

例えば対数関数 log x の場合、定義域は x>0 ですが、x=0 の時、log 0=-∞ と定義することもできます。

高校数学では、x<0 を可能にするために log|x| とすることが多いのですが、多値関数の概念を学ぶと

cosπ+i sinπ=e^(iπ)
log(-1)=i(2n-1)π

のように負の対数も定義可能になります。

オブジェクト指向の概念はこれと似ており、入力側の型や範囲を拡げて定義することで既存のプログラムの書き換えをする手間を減らそうというものです。

Qオブジェクト指向のプログラミング言語の勉強法について

オブジェクト指向のプログラミング言語の勉強法について

お尋ねします。
iPhoneアプリを作ってみたいと思い、最近プログラミングの勉強を始め、C言語の入門書を一通り熟読しました。そして、次にオブジェクト指向の言語を勉強しようと思っているのですが、iPhoneアプリの開発に用いる言語は「Objective-C」で、他にも開発に使用できる言語として、「C++」や「Java」などいくつかあると聞き、どれから勉強すればいいのか迷っています。
Objective-CとC++やJavaでは、技術的(表現力?)に大きな差はあるのでしょうか?それとも、Objective-Cだけでも十分なのでしょうか?

そのほか、まだC言語を勉強したばかりでわからないことが多いのですが、ゲームアプリの開発にどのような知識が必要なのか、また効率のよい学習順序、お勧めの書籍など助言を頂ければ幸いです(__)


ちなみに、
・プログラミングの経験は全くありません。
・はじめはシューティングなど動的なゲームアプリを作ろうと思っています。
・妥協せず、基礎からきちんと勉強したいと思っています。

オブジェクト指向のプログラミング言語の勉強法について

お尋ねします。
iPhoneアプリを作ってみたいと思い、最近プログラミングの勉強を始め、C言語の入門書を一通り熟読しました。そして、次にオブジェクト指向の言語を勉強しようと思っているのですが、iPhoneアプリの開発に用いる言語は「Objective-C」で、他にも開発に使用できる言語として、「C++」や「Java」などいくつかあると聞き、どれから勉強すればいいのか迷っています。
Objective-CとC++やJavaでは、技術的(表現力?)に大きな差はあるのでしょう...続きを読む

Aベストアンサー

iphoneアプリを作るならObjective-Cのみです。
先月辺りの規約改定でiphoneアプリの開発環境はapple純正(有料)に制限されました。(個人的には良いことと思ってません。)そこで使用できる言語はObjective-Cだけだったと思います。(確認してください)

先の方も言っているように、まずはどんな形でも動作するものを作るところから始めてください。正直いきなりシューティングはハードルが高いです。

Objective-Cの書籍を買って読みつつサンプルプログラムを動作させつつ一冊終えた辺りで開発環境を購入するぐらいで良いのではないでしょうか。

言語としてのC, C++, JavaはC<=C++<<Javaで左の方がよりハードウエア寄りです。JavaのみでOSは作成できません。アプリを作るならJavaの方が楽です。要するに向き不向きがあるので何をしたいかに拠ります。

オブジェクト指向がきちんとわかれば、C++もJavaも扱いは似たようなものです。
基礎からきちんと勉強するのであればまずは書籍を一冊きっちり終わらせましょう。がんばってください。

iphoneアプリを作るならObjective-Cのみです。
先月辺りの規約改定でiphoneアプリの開発環境はapple純正(有料)に制限されました。(個人的には良いことと思ってません。)そこで使用できる言語はObjective-Cだけだったと思います。(確認してください)

先の方も言っているように、まずはどんな形でも動作するものを作るところから始めてください。正直いきなりシューティングはハードルが高いです。

Objective-Cの書籍を買って読みつつサンプルプログラムを動作させつつ一冊終えた辺りで開発環境を購入するぐ...続きを読む

Qオブジェクト指向の利点とは?

汎用機でCOBOLのSEを10数年やってました。(今は自営業)
COBOLはプロセス型の言語といわれているのに対して
C言語はオブジェクト指向型の言語といわれています。

私はC言語やJAVAで開発したことはないのですが、
C言語、すなわちオブジェクト指向の利点ってなんでしょう?
JAVA、C言語はオブジェクト指向ですよね。

私はソフトウェア開発技術者の資格など持っていますのでオブジェクト指向の表面的な意味は分かります。
ですが実際、アプリ開発時・運用時にどのような利点があるのかがイマイチ分かりません。
「どっちでもいいんじゃないか」なんて思ってしまいます。
プロセス指向(VB、COBOL等)とオブジェクト指向(C言語、JAVA)の差異って何なんでしょう。

よろしくお願いします。

Aベストアンサー

当方は、単なる学部卒の人間ですので、もっとおおざっぱな回答を試みます。(ていうか、そういった事しか出来ないだけなんですが。)

>C言語はオブジェクト指向型の言語といわれています。

C言語も、VBも、COBOLも、確か、同じ「手続き型言語」の一種ですよね。で、それとは別に「非手続き型言語」が何タイプかあり、その中の一つとして、オブジェクト指向型の言語(C++やJavaやSmalltalkなど)があったものと思われます。(以上、第3世代に属する高水準言語です。)

最近も、以下のJavaカテゴリの方で、「オブジェクト指向とは何たるか?」について、回答しておきましたので(#5の所)、そちらの方も参考にされたら、と思います。

「教えて下さい☆」
http://oshiete1.goo.ne.jp/qa2864855.html

上記の過去ログ内にも書かれていますが、「オブジェクト指向の利点」の一つに、「デザインパターンを利用することが出来る」というのが挙げられます。このデザインパターンとは、手短にいえば、過去の熟練したソフト設計者の方々が、数々の試行錯誤の上に得られた、オブジェクト指向設計を行う上で定石とも言える効率的な設計手法(パターン)をまとめたものです。当初は、C++を元に作成され、一番最初に提唱した4人の方々に敬意を表して、GoFパターンとも呼ばれています。(GoFとは、Gang of Four「4人のギャング」の頭文字を取ったもの。)

現在では、この汎用的な23のデザインパターン以外にも、Javaで言えば、J2EEの技術に特化した「J2EEパターン」なるものも存在したりします。こういった事から、若手であまり設計などの経験に乏しい技術者でも、そのような便利な設計手法を利用することができ、一から過去の設計者の方々が経験した、様々な成功や失敗などの体験を繰り返すことがなくなるわけですね。(まあ、実際にはあくまでも手段であって、全部のデザインパターンを使うといったこともないですし、かなり抽象的で難しい事もあってか、逆に使用しない方がいい、といった場合もあるらしいですが。)

あとそれから、以下の書籍の15ページの所に、次のような記述があります。

「ゼロから学ぶC/C++ フリーのコンパイラで気軽に始めよう!」
(編:日経ソフトウェア編集,発行:日経BP社,2005年1月24日 第1版第1刷発行)

「(前略)いったい、オブジェクト指向プログラミングができると何がうれしいのでしょうか。端的に言えば、効率よくプログラムを開発できるようになるのです(図7)。そもそもプログラムをオブジェクトの集合体としてとらえることで、プログラムの構造がぐっと見やすくなります。2000個の変数と1000個の関数から構成した売上管理プログラムだって、わずか数十種類のクラスに整理することが可能なのです。これが開発効率を高めるのは容易に想像できるでしょう。開発時だけでなく、後からプログラムの機能を追加したり、改造を加えることも容易になります。(後略)」

この文章自体がまさに、「オブジェクト指向の利点」を言い表していますね。同じページ内にも「*19 もちろんC言語でも再利用可能なソフト部品を実現できますが、C++のクラスのほうが継承(後述)などによって、より再利用しやすい部品を作ることができます。」といった記述もあります。

最後に、現在Javaの開発においては、Strutsを始めとした「MVCフレームワーク」が主流となっていますが、これ自体もまた、実際には「MVCパターン」というデザインパターンの一種を活用したものとなっています。このことに関して、以下の過去ログでは、「それじゃあ、なぜそのような新しい技術であるフレームワークを利用するのか?」といったような質問がなされています。

「ストラッツ(Struts)って本当にいいの?」
http://oshiete1.goo.ne.jp/qa2049016.html

ここで回答された方々の内容いずれもが、まさに「オブジェクト指向の利点」となっていますね。実際に、M(Model)とV(View)とC(Controller)の3つに分けることによって、担当する部分をより明確にして、切り分けているのです。部品化による恩恵が、こういった所にも表れているわけですね。

参考URL:http://www.ascii.co.jp/books/books/detail/4-7561-4155-2.shtml

当方は、単なる学部卒の人間ですので、もっとおおざっぱな回答を試みます。(ていうか、そういった事しか出来ないだけなんですが。)

>C言語はオブジェクト指向型の言語といわれています。

C言語も、VBも、COBOLも、確か、同じ「手続き型言語」の一種ですよね。で、それとは別に「非手続き型言語」が何タイプかあり、その中の一つとして、オブジェクト指向型の言語(C++やJavaやSmalltalkなど)があったものと思われます。(以上、第3世代に属する高水準言語です。)

最近も、以下のJavaカテゴ...続きを読む

Qオブジェクト指向

 C++ではクラスがありますが、このクラスで「公開(public)」「非公開(private)」キーワードがあります。クラスが変数を持つ場合、どういった変数を公開にしておき、どういった変数を非公開にしておくべきでしょうか。
 Setなんたら()、Getなんたら()というメンバ関数を大量につければ一応変数は全部privateでもできるようですが・・・。なんか非効率的な気がします。

Aベストアンサー

変数を基準に考えてるのではオブジェクト指向になりません。オブジェクトの中でどのような操作が行われているかは、外からすれば気にしないで良いように設計するべきです。
オブジェクトが外に公開するのは、その操作(実装で言えばメンバ関数)です。どのような操作をそのオブジェクトは提供するか、という視点で考えてみてください。

例えば複素数クラスであれば、
 ・足し算可能
 ・掛け算可能
 ・コピー可能
 ・偏角・絶対値取得
 ・Re・Im取得
などを使えれば十分でしょう。このように、使用させる操作だけ公開しておけば、中の変数が(x,y)で管理されていたとしても(r,θ)で管理されていたとしても外から見れば関係ありません。

基本的には、内部の変数そのものは外からタッチさせないものです。

Qオブジェクト指向、理解しやすい?

 最近、Javaの解説書や解説サイトを見ていて、しばしば、「Javaは完全なオブジェクト指向だから理解しやすい」といった記述を見かけます。(「プログラムが見やすくなる」とかではなく)
 Javaに限った話ではないのですが、個人的に、オブジェクト指向の概念は、プログラミング初心者の最大の関門ではないかと勝手に思っています。僕はPHPから入ったのですが、ある程度基本事項をマスターした後も、オブジェクト指向だけは長い間苦手としてきました。(最近やっと慣れてきたところです。)
 そこで伺いたいのですが、最初にやったプログラミング言語がオブジェクト指向だったという方、オブジェクト指向の概念は、

1.わかりやすかった
2.そこでつまずいた
3.特に意識せずに通り過ぎた
4.その他

いずれでしょうか?

※最初にJavaについて書きましたが、これはただの例なので、オブジェクト指向言語全般についての質問であるととらえてください。

Aベストアンサー

自分は最初の言語がVB6.0とJavaでした(VB6.0は業務で、Javaは個人的に)
なので、最初の言語がオブジェクト指向かどうかは微妙な所です。
(VB6.0はオブジェクト指向言語だと思ってないので)

で、オブジェクト指向の理解については、
2.そこでつまずいた
ですね。
本に書いてある内容は別に難しくも何ともないのですが、
それが何で便利なのか?構造化プログラムとどう違うか?がよく分からなかった。
(完全に独学だったのもありますが)
これを乗り越えなくてはオブジェクト指向を理解する意味ないですから。

また、オブジェクト指向自体も、オブジェクト指向プログラミングと
オブジェクト指向設計/分析とに大きく分かれると思いますが、
それを混同していたというのもありました。
※「モノと捉える」と言いながら、一方で「インターフェース」なんてものが出てくる。
インターフェースって「モノ」なのか?…とか考えてた。

ただ、分かった時はすぐでしたね。ちょっとずつ分かった、という感じではなかった。
真っ暗な部屋でドアが中々見つからなかったのに、部屋の明かりを点けたらそれまでが嘘のように分かった。
そんな感じです。
UMLで設計の勉強したのと、デザインパターンをかじりだしたのがきっかけです。
ずいぶん回り道した気がする…

オブジェクト指向は、ちゃんとした設計で作れば管理しやすく再利用性も高い技術です。
逆に言えば、設計に手を抜くとかえって扱いづらく再利用性のない無駄なコードにもなります。
そういう意味で実践で敬遠されてるのかもしれないですね。
何にしても、奥が深い技術なのでまだまだ勉強中です。

自分は最初の言語がVB6.0とJavaでした(VB6.0は業務で、Javaは個人的に)
なので、最初の言語がオブジェクト指向かどうかは微妙な所です。
(VB6.0はオブジェクト指向言語だと思ってないので)

で、オブジェクト指向の理解については、
2.そこでつまずいた
ですね。
本に書いてある内容は別に難しくも何ともないのですが、
それが何で便利なのか?構造化プログラムとどう違うか?がよく分からなかった。
(完全に独学だったのもありますが)
これを乗り越えなくてはオブジェクト指向を理解する意味ないですか...続きを読む

Qオブジェクト指向 集約の実装について

例えば、
学校クラス--学年クラス--学級クラス--班クラス

というクラスがあった場合、それぞれのクラスには集約といわれる関連があると思いますが、この場合の実装は一般的にどのようにされているのでしょうか。

自分の考えでは、

class Gakko
{
vector<Gakunen> GakunenObj;
};

class Gakunen
{
vector<Gakkyu> GakkuObj;
};

class Gakku
{
vector<Han> HanObj;
}

class Han
{
void ShowName();
}

このように学校クラスが消えれば内包される学年クラス・学級クラス・班クラスも消える必要があるので、オブジェクトの寿命を親のクラスと同じにするため、各クラスに子クラスのインスタンスを持たせています。

この方法だと班の名前を表示したい場合、

Gakko Obj;

Obj.GakunenObj[a].GakkuObj[b].HanObj[c].ShowName();

といった感じでアクセスすることになると思います。

ただ、こんな長たらしいプログラムコードを見たこともありませんし、実際は通常の関連としてクラスのポインタを持たせた方がいいでしょうか。

突っ込みどころ満載ですが、よろしくお願い致します。

例えば、
学校クラス--学年クラス--学級クラス--班クラス

というクラスがあった場合、それぞれのクラスには集約といわれる関連があると思いますが、この場合の実装は一般的にどのようにされているのでしょうか。

自分の考えでは、

class Gakko
{
vector<Gakunen> GakunenObj;
};

class Gakunen
{
vector<Gakkyu> GakkuObj;
};

class Gakku
{
vector<Han> HanObj;
}

class Han
{
void ShowName();
}

このように学校クラスが消えれば内包される学年クラス・学級クラス・...続きを読む

Aベストアンサー

>この方法だと班の名前を表示したい場合、
>Gakko Obj;
>Obj.GakunenObj[a].GakkuObj[b].HanObj[c].ShowName();
>といった感じでアクセスすることになると思います。

上記の例の場合、直接Hanに対してアクセスするのではなく、
Gakko Obj;
... Gakko の中身生成 ...

const Gakunen& GakunenObj = Obj.Gakunen[a];
const Gakku& GakkuObj = GakuenObj.GakkuObj[b];
const Han& HanObj = GakkuObj.HanObj[c];
HanObj.ShowName();

のような流れになると思います。

また、個人的にはGakkoオブジェクトから直接班の名前を参照する、という状況自体が間違っているのだと思います。
大概「どこのクラスのどこの班の名前だけを表示する」という状況は余りなく、学年単位、クラス単位で処理を行うことが多いと思います(そのためにクラスが別になっているわけですし)。
なので、オブジェクト指向的には、「班の名前を表示する」というのが実は「その学校に所属している班の一覧を表示する」という処理の一部だとしたら、Gakkoクラスに所属している班の一覧を表示するというメソッドを実装するのがより正しいと思います。

>この方法だと班の名前を表示したい場合、
>Gakko Obj;
>Obj.GakunenObj[a].GakkuObj[b].HanObj[c].ShowName();
>といった感じでアクセスすることになると思います。

上記の例の場合、直接Hanに対してアクセスするのではなく、
Gakko Obj;
... Gakko の中身生成 ...

const Gakunen& GakunenObj = Obj.Gakunen[a];
const Gakku& GakkuObj = GakuenObj.GakkuObj[b];
const Han& HanObj = GakkuObj.HanObj[c];
HanObj.ShowName();

のような流れになると思います。

また、個人的にはGakkoオブジ...続きを読む


人気Q&Aランキング

おすすめ情報