- 締切済み
小規模のオープンソースについて
表題の件に関して質問させていただきます。 最近やっとC++の初心者を抜け出し、次のステップに進みたいと思っています。 気づいたのですが、継承、関数のオーバーライド等の恩恵を得るにはある程度の規模を持ったプログラムでないといけないということです。 教科書を読んで小さなプログラムを書いているだけではオブジェクト指向的な書き方は身に付かないと感じました。 そこでオープンソフトを公開している sourceforge.net(http://sourceforge.net/) で色々探してみたのですが、あまりにも大規模でかつ私の能力では付いていくことができませんでした。 小規模、もしくは中規模のプログラムソースが置いてあるサイトをご存知でしょうか? もしくは一連の作業を通してオブジェクト指向的なプログラムの書き方が学べるサイト等はないでしょうか? また大規模のプログラムを開発しておられる方は教科書と実際の作業の溝をどのように埋められたのでしょうか? 漠然とした質問で申し訳ありませんがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Yanch
- ベストアンサー率50% (114/225)
オープンソースのプロジェクトで、読みやすいと思うのを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:クラスを呼び出す側の人が、メソッドの使用方法を知っておく必要がある。
- SAYKA
- ベストアンサー率34% (944/2776)
http://www.google.com/search?lr=lang_ja&q=c%2B%2B%20%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%20%E5%85%A5%E9%96%80 どんな大規模であっても必ず小分けにできるから それを可能な大きさになるまで分解して開発するのが基本だよ。 その中で毎回動的に使うような物をテンプレート化したりするのが通常の使い方じゃないかな。 ソースの話だけで考えてると判りにくいんだけどね。
お礼
ありがとうございます。 上記の検索ワードで引っかかった「矢沢流 これで納得!オブジェクト指向入門」 http://itpro.nikkeibp.co.jp/article/COLUMN/20070531/273154/?ST=develop は非常に分かりやすかったです。 まだテンプレートを本格的に使用したプログラムは書いたことがないのですが、これからやってみたいと思います。 僕のイメージではOOPは オブジェクトに役割を持たせる 役割分担したものの外部の干渉を避ける及び役割以外は排除 似たようなものはまとめる それらを取り囲む大きな枠組みを作る(制御部等) と言うように階層構造になっているものです。 手続きを2次元的だとすると3次元的だと思うのですがこの考え方でOKなのでしょうか?
お礼
ありがとうございます。教えていただいたサイトのソースは確かに読みやすいです。頑張って読んでみます。 ●オブジェクト指向的な書き方が身につくようなポイント はたいへん参考になりました。ありがとうございます。 今までに勉強用に作ったクラスはまだ構造体の進化版といった感じなのでこれから抽象的で汎用性があるものを作ってみたいです。