文法を一通り覚えただけの初心者なんですが、自分で100行くらいのちいさなプログラムを組んで、後でそのプログラムをちょっと機能拡張させようとすると、もとのプログラムをだいぶ変えないと機能拡張できない、もしくはプログラムがやばいくらい汚くなりそう・・ってほぼ100%なります。
機能拡張しやすいように心がけてプログラムを書こうと思っても、何を心がけて書けばいいのかわかりません。みなさんは機能拡張性に優れたプログラムを書くとき、どういったことを心がけていますか?
適当な具体例があれば、示してほしいです・・・。もちろんなくてもいいです。いろんな人の考えが聞きたいです。お願いします。
No.3ベストアンサー
- 回答日時:
機能拡張しやすくするには、プログラムの書き方というよりもプログラム全体構造の設計方法が大きく影響すると思います。
ただ、拡張性を考慮した設計というのはとにかく色々書いてみないとつらいと思います。プログラミング面では個人的には機能や処理の意味にあわせて関数やファイルを分割したりですかね。
でも、結局は経験則で色々設計、実装してしまうことが多いです。
また、複数プラットフォームで動くという意味での拡張性を作成しようとするとシステム依存しそうな関数を全部取り替えやすく実装したりですかね。そういうことをすると例えば、windowsでもlinuxでもmacosxでもsolarisでもfreebsdでも動くようなプログラムを書けます。
本で勉強するというのもあります。
「アンチパターン―ソフトウェア危篤患者の救出」
「アナリシスパターン―再利用可能なオブジェクトモデル」
人の書いたプログラムを読むという方法もあります。
「Code Reading―オープンソースから学ぶプログラミングテクニック」
最初から拡張性を考慮しながらプログラムを書きたくなるというのは非常に良いことなので、それを意識しつつ経験を積むとそのうち自動的に拡張性が高いプログラムを書けるようになると思います。
回答ありがとうございます。大変参考になります。
プログラムの設計方法が大きく影響するんですね。
自分は設計はせず、とりあえず書いてみる、ことから初めていました。
設計方法については、学んだほうがいいみたいですね。以前、UMLの本を読んで即挫折した経験があるんですが、基本の設計方法ならたぶんいけますよね・・。
拡張性について、複数プラットフォームで動くという意味での拡張性というのは自分の中ではまったく意識してなかったので、意識するようにします。今の知識、技術ではこの意識をいかしきれないかもしれませんが・・。
やはり、プログラムを書きまくることが一番みたいですね。紹介していただいたおもしろそうな書籍を読みつつ、ひたすらプログラムを書く、そういうふうにやっていきたいとおもいます。
No.6
- 回答日時:
C++なら
JavaやVisualC++のMFC等、完成されたクラス群をみると
その設計思想が参考になると思います。
CというかC++もですが
関数や変数の命名規則を統一する。
これだけで随分コードはみやすくなりますし
整理されたコードは機能拡張がしやすいと思います。
例えばハンガリアン記法とか取り入れると良いと思います。
int iIndex;みたいに
ある程度自分でコードを書いたなら
次にやることは人のソースを見ることです。勉強になります。
他の人のソースやライブラリを自分のソースに融合してみてください。
使いにくかったなら、何故そのライブラリは使いにくいのか
使いやすかったなら、何故使いやすいのか
追求すれば答えはみえてくるでしょう。
回答ありがとうございます。
ハンガリアン記法ですか。調べてみます。
ソースはいくらでも公開してるみたいなので、こちらも調べまくります。
No.5
- 回答日時:
基本的な文法やアルゴリズム、データ構造を身につけたら、こんどはソフトウェアの設計方法論や開発プロセスについて学ぶことをお勧めします。
具体的には、「構造化分析、構造化設計」や「オブジェクト指向分析・設計」などです。ppokaanさんご自身が、プログラムの拡張性で悩まれたのは大変よい体験だったと思います。自分で悩んだ上で先人の知恵を借りると、格段に理解が高くなりますからね!(悩まず教わったことは頭の中を素通りするだけです。)
ppokaanさんがどのプログラミング言語を勉強されたかわかりませんが、C言語なら「構造化分析・設計」を、C++なら「オブジェクト指向分析・設計」の本やウェブサイトを探して読んでみることをお勧めします。先人が如何にして、理解しやすく、拡張性高く設計する方法を考えたか参考になりますよ。
回答ありがとうございます。大変参考になります。
C言語を勉強中なので、構造化分析というキーワードでいろいろ調べてみます。おもしろそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
コンソールアプリでファイル選...
-
VBS:コンピュータ名を取得し、...
-
Sleep命令で指定した待機時間が...
-
UNIX環境でのCプログラム上でC...
-
ゲームを作成したい
-
プログラミングのスキル
-
プログラミングでどうしてもよ...
-
ニンテンドーDS用、自作プロ...
-
VBで暗号化した文字列をJavaで...
-
小中学校でプログラミングなん...
-
製品比較のウェブサイト制作に...
-
BiilderとD-Show フレームレー...
-
プログラム言語の種類
-
マイページ機能
-
1年無職の彼氏 別れるべきですか?
-
VirtualDub 使い方がわかりま...
-
社内からのルーティングを行い...
-
ftpで「ホストが見つかりません...
-
ExcelとWordの検定の資格について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
VBプログラムをEXCEL VBAに移植...
-
SNMPトラップ情報をC#.netで作...
-
C言語のHP-UXからLinuxへのポ...
-
Ryzen 3700(無印)はWin11に対応...
-
VBS:コンピュータ名を取得し、...
-
VB.net エラーメッセージを英文...
-
PHP+MySQLで家計簿を作りたい
-
変数の大きさを超える代入
-
プログラムとは理系ですか文系...
-
OSとCPUの関係について
-
コンソールアプリでファイル選...
-
プログラマーという御仕事(質...
-
Timerイベントについて
-
EXCEL-VBAのプログラムを移植し...
-
Perl5とActivePerl
-
MS-DOSで作ったBASICプログラム...
-
VC++で単機能ブラウザを作...
-
掲示板の作り方を教えてください
-
小中学校でプログラミングなん...
おすすめ情報