• ベストアンサー

機能拡張しやすいプログラムの書き方

文法を一通り覚えただけの初心者なんですが、自分で100行くらいのちいさなプログラムを組んで、後でそのプログラムをちょっと機能拡張させようとすると、もとのプログラムをだいぶ変えないと機能拡張できない、もしくはプログラムがやばいくらい汚くなりそう・・ってほぼ100%なります。 機能拡張しやすいように心がけてプログラムを書こうと思っても、何を心がけて書けばいいのかわかりません。みなさんは機能拡張性に優れたプログラムを書くとき、どういったことを心がけていますか? 適当な具体例があれば、示してほしいです・・・。もちろんなくてもいいです。いろんな人の考えが聞きたいです。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • joe-
  • ベストアンサー率34% (11/32)
回答No.3

機能拡張しやすくするには、プログラムの書き方というよりもプログラム全体構造の設計方法が大きく影響すると思います。ただ、拡張性を考慮した設計というのはとにかく色々書いてみないとつらいと思います。 プログラミング面では個人的には機能や処理の意味にあわせて関数やファイルを分割したりですかね。 でも、結局は経験則で色々設計、実装してしまうことが多いです。 また、複数プラットフォームで動くという意味での拡張性を作成しようとするとシステム依存しそうな関数を全部取り替えやすく実装したりですかね。そういうことをすると例えば、windowsでもlinuxでもmacosxでもsolarisでもfreebsdでも動くようなプログラムを書けます。 本で勉強するというのもあります。 「アンチパターン―ソフトウェア危篤患者の救出」 「アナリシスパターン―再利用可能なオブジェクトモデル」 人の書いたプログラムを読むという方法もあります。 「Code Reading―オープンソースから学ぶプログラミングテクニック」 最初から拡張性を考慮しながらプログラムを書きたくなるというのは非常に良いことなので、それを意識しつつ経験を積むとそのうち自動的に拡張性が高いプログラムを書けるようになると思います。

ppokaan
質問者

お礼

回答ありがとうございます。大変参考になります。 プログラムの設計方法が大きく影響するんですね。 自分は設計はせず、とりあえず書いてみる、ことから初めていました。 設計方法については、学んだほうがいいみたいですね。以前、UMLの本を読んで即挫折した経験があるんですが、基本の設計方法ならたぶんいけますよね・・。 拡張性について、複数プラットフォームで動くという意味での拡張性というのは自分の中ではまったく意識してなかったので、意識するようにします。今の知識、技術ではこの意識をいかしきれないかもしれませんが・・。 やはり、プログラムを書きまくることが一番みたいですね。紹介していただいたおもしろそうな書籍を読みつつ、ひたすらプログラムを書く、そういうふうにやっていきたいとおもいます。

その他の回答 (6)

回答No.7

ちょいと横槍。 --- ANo.6 --- > JavaやVisualC++のMFC等、完成されたクラス群をみると > その設計思想が参考になると思います。 MFCはWindowsべったりだし、その実装自体さほど褒められたもんじゃありません。 OO的に美しくないんです。

ppokaan
質問者

お礼

OO というのも設計に関するキーワードとして覚えとく必要がありそうですね。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.6

C++なら JavaやVisualC++のMFC等、完成されたクラス群をみると その設計思想が参考になると思います。 CというかC++もですが 関数や変数の命名規則を統一する。 これだけで随分コードはみやすくなりますし 整理されたコードは機能拡張がしやすいと思います。 例えばハンガリアン記法とか取り入れると良いと思います。 int iIndex;みたいに ある程度自分でコードを書いたなら 次にやることは人のソースを見ることです。勉強になります。 他の人のソースやライブラリを自分のソースに融合してみてください。 使いにくかったなら、何故そのライブラリは使いにくいのか 使いやすかったなら、何故使いやすいのか 追求すれば答えはみえてくるでしょう。

ppokaan
質問者

お礼

回答ありがとうございます。 ハンガリアン記法ですか。調べてみます。 ソースはいくらでも公開してるみたいなので、こちらも調べまくります。

  • Interest
  • ベストアンサー率31% (207/659)
回答No.5

基本的な文法やアルゴリズム、データ構造を身につけたら、こんどはソフトウェアの設計方法論や開発プロセスについて学ぶことをお勧めします。具体的には、「構造化分析、構造化設計」や「オブジェクト指向分析・設計」などです。 ppokaanさんご自身が、プログラムの拡張性で悩まれたのは大変よい体験だったと思います。自分で悩んだ上で先人の知恵を借りると、格段に理解が高くなりますからね!(悩まず教わったことは頭の中を素通りするだけです。) ppokaanさんがどのプログラミング言語を勉強されたかわかりませんが、C言語なら「構造化分析・設計」を、C++なら「オブジェクト指向分析・設計」の本やウェブサイトを探して読んでみることをお勧めします。先人が如何にして、理解しやすく、拡張性高く設計する方法を考えたか参考になりますよ。

ppokaan
質問者

お礼

回答ありがとうございます。大変参考になります。 C言語を勉強中なので、構造化分析というキーワードでいろいろ調べてみます。おもしろそうです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

機能拡張を考えたプログラムは、場合によってはオーバースペックになりがちです。 修正がしやすいようにプログラムする時に考えておくというのはあると思いますが、あらかじめ機能拡張を計画しているのでなければ、反って、機能を絞ってプログラムを作成するほうが、組み合わせによる機能の拡張がしやすくなると思います。 そのように、機能を絞る場合には、他への依存する部分を少なくして独立性を高めるのが良いと思います。

ppokaan
質問者

お礼

回答ありがとうございます。大変参考になります。

  • parapa
  • ベストアンサー率15% (42/273)
回答No.2

自分は極力、機能ごとで関数に分割している。

ppokaan
質問者

お礼

回答ありがとうございます。自分もそのことには気をつけているつもりなんですけど・・・経験を重ねるしかない気がしてきました。

回答No.1

> 後でそのプログラムをちょっと機能拡張させようとすると、もとのプログラムをだいぶ変えないと機能拡張できない 初めはそれでいいんです。 さんざん書き換えることを繰り返すうちに、定石が見えてきます。

ppokaan
質問者

お礼

回答ありがとうございます。始めはそれでいいと言われるとほっとします。ひたすらプログラムを書いては、いじる、を繰り返すことで身についていくものなんですね。

関連するQ&A