初心者プログラマーとして、OOPの基本を学んだばかりですが、練習プログラムの基本的な包含構造に関して多くの問題に遭遇しました。私はさまざまな書面およびオンラインのリソースを使用してプログラミングを自分自身に教えてきました。しかし、ここに私の問題があります(まあ、そのうちの1つ...):
抽象化、カプセル化、クラス間の結合度の低さの重要性を理解している一方で、プログラムの構造化とクラスの設計に非常に苦労しています。お互いを知るための異なるファイルのクラス。
もちろん、これは私の大きな問題であり、すべての基本的なプリンシパルOOPをウィンドウから外し、コードにグローバル変数、すべての前方宣言を入力し始めた後、私が望む方法でのみ機能する、ずさんなハックっぽいコードになりました。どこでも、そしてクラスのメンバーを公開します。
簡単に言えば、私のプログラミングは混乱しています... C ++は私の最初のプログラミング言語であり、オブジェクト指向の方法で設計/作成するために最善を尽くしても、ファイルの醜い混乱に終わります。すべてのファイル、およびめったに機能しない手続き型とOOPスパゲッティコードの奇妙な組み合わせ!
私は自称プログラミング初心者であり、プログラムの構成方法を学ぶのに時間がかかることを認めますが、もうすぐ終わりです。私の問題は、OOPについて少し知っているという事実に起因していることを私は知っています。単一のタスクを処理する独立したクラスを作成したいことはわかっています。しかし同時に、プログラムの他の部分の存在を各クラスに適切に警告する方法がわかりません。どんな食べ物を食べるべきかはわかっているが、フォークの使い方はわからないようなものです...
それが私の問題です。そして、私が持っているいくつかのより具体的な質問をさらにフォローアップするために:
C ++マルチファイルプロジェクトでは、main()関数を独自のクラス内に配置するのが普通/必要ですか?それとも、main()をグローバルスコープに残すのが標準的なことですか?
以前、私がC ++で作成した手続き型プログラムでは、main.cppファイルの先頭に定数変数または#definesがグローバルスコープにあることは珍しくありませんでした。たとえば、画面の寸法やその他の有用な情報は、プログラムの開始時に定義される可能性があります。OOPでは何が起こりますか?この慣行は完全に避けるべきですか?または、MAIN.Hファイルを作成し、プロジェクト内の他のすべてのヘッダーに#includeしますか?私はこれについて何をすべきか分かりません...
私の最初の中規模の練習用OOPプログラムを書いているとき、StateMachineクラスを書き始めたとき、私の仕事はひどく止まりました。StateMachineクラスに、プログラムが使用する可能性のあるすべての画面状態を含めることが私の意図でした。ただし、StateMachineクラスが他のStateクラスの一部を認識していないように見えるという問題が発生しましたが、それらはすべて#includeされていました。人々がクラスの前方宣言を行うのを見たことがありますが、それは必要ですか?私はあちこちでクラスの前方宣言をスパムするべきですか、それともコードの臭いですか?
最後に、#includeコマンドと前方宣言コマンドの順序は重要ですか?
これはおそらく非常に基本的な質問だと思いますが、単一ファイルの手続き型c++初心者プログラムから複数ファイルのOOPプログラミングへの移行に非常に苦労しています。すべてが正しく機能するようにプログラムを構成するための一般的な経験則はありますか?私はインクルードガードを使用していますが、すべてのソースファイルのすべてのヘッダーを#includeできない理由はありますか?各クラスの各ヘッダーファイルに#includeされたcommon.hファイルが必要ですか?
コミュニティが私に与えることができるどんな助け/アドバイスにも本当に感謝します。これは、OOPスキルの開発を開始する前に通過する、単純でありながら重要なハードルであることを私は知っています。私は、クラスを互いに分離しておくことの重要性を頭の中で掘り下げようとしてきました。クラス/ファイルを実際に相互作用できるように設定する方法がわからないほどです。助けてくれてありがとう!