表題の件に関して質問させていただきます。
最近やっとC++の初心者を抜け出し、次のステップに進みたいと思っています。
気づいたのですが、継承、関数のオーバーライド等の恩恵を得るにはある程度の規模を持ったプログラムでないといけないということです。
教科書を読んで小さなプログラムを書いているだけではオブジェクト指向的な書き方は身に付かないと感じました。
そこでオープンソフトを公開している
sourceforge.net(http://sourceforge.net/)
で色々探してみたのですが、あまりにも大規模でかつ私の能力では付いていくことができませんでした。
小規模、もしくは中規模のプログラムソースが置いてあるサイトをご存知でしょうか?
もしくは一連の作業を通してオブジェクト指向的なプログラムの書き方が学べるサイト等はないでしょうか?
また大規模のプログラムを開発しておられる方は教科書と実際の作業の溝をどのように埋められたのでしょうか?
漠然とした質問で申し訳ありませんがよろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
オープンソースのプロジェクトで、読みやすいと思うのを1つ紹介。
Xerces-C++ XML Parser
http://xerces.apache.org/xerces-c/
です、C++から使用するXMLパーサですが、結構綺麗なコードで書かれているので、
読みやすいと思います。
オブジェクト指向で作られているライブラリだと、STL(Standard Template Library)
も良いかもしれません。
●オブジェクト指向的な書き方が身につくようなポイント
(1)なぜオブジェクト指向で開発をするのか?
一度作った部品の再利用性の高める事によって、より大規模の開発プロジェクトも
実現可能となる。
そのための手段として、オブジェクト指向を使用出来る。
(2)再利用性の高いプログラムを書くには?
具体的な処理を記述したクラスばかりでなく、抽象的なクラスを作成しておく事によって、
より色々な場面への応用が利くようになる。
interfaceやabstract class、例外処理などを使用して、抽象的なクラスを作成すると、
具体的な処理をクラスを使用する呼び出し元に移譲できるので、より再利用性が高まる。
(3)作成したクラスを再利用しやすくしておくために
例えば、継承や、合成をして使用される事を目的としたクラスのメソッドには、
カプセル化をして置く事によって、クラス利用者は、知っておく必要のある内容と、
知らなくて良い内容を区別する事が出来る。
private:クラスを呼び出す側の人は内容を知る必要がない。
ptotected:クラスを継承する側の人は内容を知っておく必要がある。
public:クラスを呼び出す側の人が、メソッドの使用方法を知っておく必要がある。
ありがとうございます。教えていただいたサイトのソースは確かに読みやすいです。頑張って読んでみます。
●オブジェクト指向的な書き方が身につくようなポイント
はたいへん参考になりました。ありがとうございます。
今までに勉強用に作ったクラスはまだ構造体の進化版といった感じなのでこれから抽象的で汎用性があるものを作ってみたいです。
No.1
- 回答日時:
どんな大規模であっても必ず小分けにできるから それを可能な大きさになるまで分解して開発するのが基本だよ。
その中で毎回動的に使うような物をテンプレート化したりするのが通常の使い方じゃないかな。
ソースの話だけで考えてると判りにくいんだけどね。
ありがとうございます。
上記の検索ワードで引っかかった「矢沢流 これで納得!オブジェクト指向入門」
http://itpro.nikkeibp.co.jp/article/COLUMN/20070 …
は非常に分かりやすかったです。
まだテンプレートを本格的に使用したプログラムは書いたことがないのですが、これからやってみたいと思います。
僕のイメージではOOPは
オブジェクトに役割を持たせる
役割分担したものの外部の干渉を避ける及び役割以外は排除
似たようなものはまとめる
それらを取り囲む大きな枠組みを作る(制御部等)
と言うように階層構造になっているものです。
手続きを2次元的だとすると3次元的だと思うのですがこの考え方でOKなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング 大規模言語モデルは今後どのように進化していくでしょうか? 1 2023/07/20 19:17
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- IT・エンジニアリング 新卒IT社員です。キャリアの相談です。 私は現在、国内大手のSierに入社して研修を受けているのです 1 2023/04/19 20:07
- その他(ビジネス・キャリア) グーグルの障害者訓練プログラム募集あるがどうだろ?6時間勤務で月収22万!! 1 2023/02/17 20:36
- システム 古いWEBシステム。もう追加プログラムは作れない? それともできる? 6 2022/06/08 13:41
- 財務・会計・経理 業者間での注文書・請書の取り扱いについて 2 2022/06/27 15:53
- IT・エンジニアリング SEとWebエンジニアの業務内容の違いについて 3 2023/06/22 23:23
- 建築士 建築士製図試験での縦距離の数値の書き方を教えて下さい 3 2023/07/16 11:36
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
抽象クラスをJUNITでテストする...
-
抽象クラスからオーバーライド...
-
JavaにListElement型ってあるん...
-
「ラッパークラス」の存在意義...
-
オーバーライドとラッパーの違い
-
C#からDLLを呼びたいのですが・...
-
vb.net 自作プロパティの削除に...
-
(vba)他のアプリケーションの右...
-
setTextについて
-
抽象クラスのエラーが出ます
-
委譲って何ですか?
-
単体テストのテストケースにて...
-
【C#】クラスのコンストラクタ...
-
JavaでのAPIの覚え方ってみさな...
-
オブジェクト指向の特徴
-
JTextFieldの入力制限
-
ASP.NETでの共通コードの書き方...
-
「インターフェイス」って何の...
-
「IOException は対応する try ...
-
Javaのインターフェイスの意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
(vba)他のアプリケーションの右...
-
抽象クラスをJUNITでテストする...
-
「ラッパークラス」の存在意義...
-
ASP.NETでの共通コードの書き方...
-
JTextFieldの入力制限
-
「継承されたメソッドの可視性...
-
C# 「データが失なわれる可能性...
-
VB DLLプロジェクトについて
-
c++でのヘッダーファイルの循環...
-
【C#】クラスのコンストラクタ...
-
「IOException は対応する try ...
-
ファイルパスが取得出来ない(P...
-
メソッドの引数にクラス名を渡す
-
ゲッターを使わないで変数にア...
-
Javaのインスタンス化の構文の...
-
オーバーライドとラッパーの違い
-
vb.net 自作プロパティの削除に...
-
なぜインタフェースを使うのか?
-
VBがオブジェクト指向言語でな...
おすすめ情報