K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1126] メンバーズホームページ
投稿者:yuya
2008/07/10 13:47:23

トップページ > kmaebashi.comに直接飛ぶように設定できるようになっていたことが判明。今はそのように設定しています。 以前から告知されていましたが、niftyのメンバーズホームページはリンクのサービスも停止してしまいましたね。 トップページの口上が現状と合致しなくなったので、(おせっかいながら)指摘しておきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1122] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:774RR
2008/06/24 08:33:37

もいちど駄レスしておくと オブジェクト指向な設計、というものはあっても 非オブジェクト指向な設計の元にオブジェクト指向なプログラム、ってのはありえない わけで、「基礎設計したことがないプログラマ」ではOOがわからなくて当然。 メタ度が違うっちぅことで。 俺も、基礎設計が気に入らなくなったという理由で、50%くらい作ったプログラムを 全部捨てて最初から再設計したなんて経験が何度もある。 ただ「実装するだけ」のOOでは意味が無いと思うのココロ そーいう人に限って「スーパークラスがごみ置き場」になるわけだ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1121] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:sumim
2008/06/22 14:19:36

>リスコフというと「え、ええと置換原則の人?」程度の私はまだまだ勉強が >必要のようです。 リスコフは「抽象データ型」とか「カプセル化」を考えた(言い出した)人です。 >新しいほうの3系統 >http://d.hatena.ne.jp/sumim/20080415/p1 > >は大変腑に落ちます。 それはよかった。ご紹介痛み入ります。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1120] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:(ぱ)こと管理人
2008/06/22 13:43:45

>新人はさしたる仕事もなく、昨日もオブジェクト指向のサイトを転々としておりました。 ああ、それはうらやましい。 戦力として配置されるとだんだん勉強の時間も削られてくるものですし、 さらに年を食うとろくにコードも書かせてもらえなくなるのがこの業界ですので。 > 継承:共通処理(親)をベースとして差分を子に付け加える。ライブラリを > includeするのと逆の発想。 うーん、これはまさに(最近評判があまりよろしくない)実装継承ですよね。 以前、この辺のスレッドで議論したことがあります。 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&thread=270 この中で出ているoo-squareのリンクは、現在切れていますがこっちです。 http://www.ogis-ri.co.jp/otc/hiroba/oosquare-ml/Archive/200501.month/thread.html よく使うメソッドをスーパークラスに置いて、なんてことをやっていると、 http://www.ogis-ri.co.jp/otc/hiroba/oosquare-ml/Archive/200501.month/4468.html | 継承は確たる「設計思想」が無い場合、スーパークラスが単なる「ごみ置き場」 | と化していることが多いようです。 なんてことになってしまう。それよりはむしろ、 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=276&range=1 | 「ほらほら、『使うほう』はその実体が具体的に何であるか気にしなくていいんだよ」 のほうが実際の使いどころに合っていると思いますが、こうなるとインタフェースと 一緒になっちゃうんですよね。実際、「継承なんかどうでもよくてインタフェースこそが 本質なのだ」と言う人もいますし。 じゃあ継承なんかなくていいのかというとそうでもなくて、実際私も使うというのが ややこしいところ。「継承とインタフェースのどっちを使えばいいんですか?」というのは FAQですが、私はこれはもう単純に ・データメンバがメインの構造体的なクラスにフィールドを追加するなら継承を、 ・それ以外はインタフェース でいいんじゃないかな、と思っています。 > 隠蔽:見せたくない処理はlocal変数、local関数にて実装する。 これは実態としてまさにそうだと思います。 よく「その『オブジェクト』だけが知っていればよいことはprivateにするんだ」と オブジェクトごとに丸を描いたりして「カプセル化」としている説明がありますが、 言いたいことはよくわかるものの、C++でもJavaでも実はprivateは 「別のクラスから見えない」だけで「別のオブジェクトから見えない」のでは ないんですよね。 これを、単にC++(およびその派生言語)が腐っているとか実用上の妥協だとか 言うことも可能ですが、私はこれを「privateというのは他の『プログラマ』に 対する隠蔽なのだ」と考えてしまってよいと思っています。 > 多態性:引数に基づき、サブルーチン側でif~elseで処理分岐する。 > またはincludeを変える。 「またはincludeを変える」のほうは良くわかりませんが、1行目は、用途としては そのとおりです。よくある図形(Shape)の描画ルーチンの例のように、 ポリモルフィズムを使うことで、プログラムからswitch caseを排除できます。 Cにはそれがないばかりに巨大なswitch caseを書いてる例: http://kmaebashi.com/programmer/devlang/diksam_src_0_2/S/7.html#693 ポリモルフィズムにおいて、一見単なる実装詳細に見えるけど実は結構重要なのは、 サブクラスを追加しても、呼び出し素(switch caseに相当する部分)再コンパイルの 必要がない、ということですね。だからAppletを継承したクラスを作れば すぐにブラウザで実行できるわけで。 > マルチプルインスタンス:サブルーチンをメインの実行状況によって任意に > (動的に)増やせる。 うーん、これはどうなんでしょう。オセロの例で言えば、Boardをいくつnewしても、 put()というルーチンは増えないと思うのですが… 「メソッドはインスタンスに付属している」というイメージからすると、 一緒に増えると考えることもできるのかもしれませんが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1119] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:(ぱ)こと管理人
2008/06/22 13:12:16

こんにちは、sumimさん。(いろいろなところで)いつもお世話になってます。 >すみません(汗)。 いえそんな(大恐縮) >当時はまだリスコフの抽象データ型(カプセル化)について理解があさく、 >ユーザー定義型に手続きを含むか、含まないかで、それぞれを OOP(あるいは、 >手続きによる抽象化。PDA)とするか、ADT(クック独自定義の抽象データ型) >とするかという分類はとてもクールに思えて必要以上に持ち上げてしまいました。 リスコフというと「え、ええと置換原則の人?」程度の私はまだまだ勉強が 必要のようです。 新しいほうの3系統 http://d.hatena.ne.jp/sumim/20080415/p1 は大変腑に落ちます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1118] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:Glory
2008/06/21 16:41:02

返信下さった皆さん、ありがとうございます。興味深く読ませて頂きました。 新人はさしたる仕事もなく、昨日もオブジェクト指向のサイトを転々としておりました。 やはり「猫」の例はヘンですよね。現実世界を模しているならば「鳴けとメッセージを送ると 鳴く」というよりは「腹が減ると鳴く」の方がピッタリでしょう。つまり完全自律型、プログラムで いったら暴走に近いかも・・・。 プログラミングは少々かじったことがあるのですが(学校の実習レベルです)、無理矢理 現実世界に例えるよりはこんな感じの説明の方がイメージに合っていると思います。  継承:共通処理(親)をベースとして差分を子に付け加える。ライブラリをincludeするのと逆の発想。  隠蔽:見せたくない処理はlocal変数、local関数にて実装する。  多態性:引数に基づき、サブルーチン側でif~elseで処理分岐する。またはincludeを変える。  マルチプルインスタンス:サブルーチンをメインの実行状況によって任意に(動的に)増やせる。  オブジェクト指向:これら個々の処理を分離して薄皮でくるみ、モノとして捉える。 わかってないとお叱りを受けそうですが、「犬・猫」よりはそれっぽい(笑)気がします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1117] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:sumim
2008/06/21 15:48:56

># 以前何度か読んで、そのたびに「手続きによる抽象化」について調べようと思いつつ ># 忘れていたらいつの間にか追記がついていた。あれ? すみません(汗)。 当時はまだリスコフの抽象データ型(カプセル化)について理解があさく、 ユーザー定義型に手続きを含むか、含まないかで、それぞれを OOP(あるいは、 手続きによる抽象化。PDA)とするか、ADT(クック独自定義の抽象データ型) とするかという分類はとてもクールに思えて必要以上に持ち上げてしまいました。 その後、リスコフは、手続きを型に含むか含まないかは抽象データ型の実現方法の バリエーションにすぎない(それぞれにメリット・デメリットがある…)と書いてある のを見つけて、追記にように認識を改めた次第です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1116] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:(ぱ)こと管理人
2008/06/21 02:55:11

>オブジェクト指向のごちゃごちゃが気になったら、とりあえずこのページを見ておくと良いと思います。 >http://d.hatena.ne.jp/sumim/20040525/p1 ページの紹介ありがとうございます。 # 以前何度か読んで、そのたびに「手続きによる抽象化」について調べようと思いつつ # 忘れていたらいつの間にか追記がついていた。あれ? というわけで、Javaの勉強をするのなら、「メッセージ」という言葉を多用している 入門書はひとまず避けておけ、と(ぉぃ 逆に言えばうちのページ http://kmaebashi.com/programmer/object/index.html はC++/Java流OO限定ですね。そういうわけで当時の掲示板でのバトルの末 「言語としてはJavaを使用します。」という文言を先頭のページに持ってきた、 という経緯はあるんですが、もうちょっとでかでかと書いてもよかったかも。 まあ当時は依怙地になっていたかと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1115] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:(ぱ)こと管理人
2008/06/21 02:48:48

>新人君 (大学では情報技術をやってなかった君) を見ていると >やはり[マルチプルインスタンス]にてつまづいているようだ。 >http://kmaebashi.com/programmer/object/othello.html この「マルチプルインスタンス」という言葉は別に私の造語ではなく、 http://kmaebashi.com/programmer/object/intro.html にも書いたようにC++ FAQにあった言葉を使ったのですが、上のページを私が書いた 時点では、「マルチプルインスタンス オブジェクト指向」でGoogleしても 0件でした。 それが今では258件だか出ます(私のページやそれに対する言及も多いですが)。 うちのページの影響だと思っても、自意識過剰じゃないですよね。きっと。たぶん。 プロトタイプベースまで含めるとまた話がややこしくなりますが、 クラスベースのOOに関する限り、複数のインスタンスが作れるという概念は 基本だと思うんですよね。あまりに基本すぎるせいか、入門書とかでは 飛ばされてしまっていたわけですが。 新人君がなにもかもstaticなプログラムを書いたら「オブジェクト指向的じゃない!」 と怒るくせに。 >マルチプルインスタンスが理解できても static という罠が待ち構えている。 しかもJavaの場合実行がすべてpublic static void main()から始まるために、 本当の入門者がいきなり罠にはまるという…
[この投稿を含むスレッドを表示] [この投稿を削除]
[1114] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:(ぱ)こと管理人
2008/06/21 02:32:07

Gloryさん、こんにちは。 >例題は「車」・・・このサイトの予想通り。ご多分に漏れずなかなか >理解できずにいます。 車ですか…これもよく使われる例かと思いますが、やっぱりたとえ話はよくないと 思います。 >そのうえ更に「よくある○○という説明は間違い、誤解をうむ、 >オブジェクト指向ではない」などと説明されると、卓袱台を引っくり返された >ような感覚すら。 >結局どれが”正”なんだ?と。お互いに自分の説明こそが正しいという立場で主張する >わけですから(当たり前ですが)、初心者は余計に混乱し、根気がないと挫折します。 すみません、一部加担しています。(_o_) >オブジェクト指向に対する根本的なモノの考え方は同じなのかもしれませんが、 >投稿・掲示板でも意見が分かれるように、統一見解がないことこそが >”なぜわからなくなってしまうのか?”の一番の原因なのかもしれません。 [1111]でこくぼさんが挙げておられるページのように、また、 http://practical-scheme.net/trans/reesoo-j.html こちらでも「オブジェクト指向というものが動く標的であるため、オブジェクト指向の 熱心な支持者はこのメニューのうちの適当なサブセットを気まぐれに選んで、 それを以って他の言語はオブジェクト指向ではないと説得しようとする。 」 と言われているように、定義がちゃんと定まったものではないとは思います。 >本当は誰もが認めるバイブル的な教本があるとよいのですがねぇ・・・。 たとえばBertrand MeyerさんのOOSC(Object-Oriented Software Construction)は かなり多くの人がバイブルと認めると思いますが(少なくとも静的型OO支持者であれば)、 それでも「あの本の継承の使い方は…」という留保をつける人が多いんじゃないかと 思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1113] 昨晩は
投稿者:(ぱ)こと管理人
2008/06/20 08:29:06

昨晩はちょっと早めに帰宅して、   ↓ 掲示板を確認し、ゴミ投稿を消して、   ↓ どうお返事しようかなあ、と考えながらベッドにごろんと   ↓ 気付いたら朝 ←いまここ というわけで、今しばらくお待ちくださいませ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1111] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:こくぼ
2008/06/19 19:26:57

オブジェクト指向のごちゃごちゃが気になったら、とりあえずこのページを見ておくと良いと思います。 http://d.hatena.ne.jp/sumim/20040525/p1
[この投稿を含むスレッドを表示] [この投稿を削除]
[1110] Re:なぜわからなくなってしまうのか?の本質(笑)
投稿者:774RR
2008/06/19 16:56:11

新人君 (大学では情報技術をやってなかった君) を見ていると やはり[マルチプルインスタンス]にてつまづいているようだ。 http://kmaebashi.com/programmer/object/othello.html 同じ種類のモノが、複数個!という概念が理解できた後でないと 同じ性質だけど、違う種類! (基底クラス→派生クラス) の理解は危うい。 と思うのであった。 マルチプルインスタンスが理解できても static という罠が待ち構えている。 Java の Double クラスの public static Double valueOf(String s) が ああ、そういうことねーと納得できるかどうか こりゃいったいなにがいいたいんぢゃろと困るか その辺にわかるわからないの境目がありそうな気がする俺ちゃんであった
[この投稿を含むスレッドを表示] [この投稿を削除]
[1109] なぜわからなくなってしまうのか?の本質(笑)
投稿者:Glory
2008/06/19 15:17:39

管理人さん&読者の皆さん、こんにちは。 この前、会社の新人研修でオブジェクト指向(Java)を学びました。 例題は「車」・・・このサイトの予想通り。ご多分に漏れずなかなか理解できずにいます。 いろいろなオブジェクト指向関連のサイトや本を読みあさって勉強していると、筆者それぞれに 思い入れがあって、解説の仕方や考え方が異なることに気付きます。「実は簡単」とか「これだけ 覚えればOK」という内容をよく目にしますが、私のような初心者にとっては、それでさえ 理解できなかったりします。そのうえ更に「よくある○○という説明は間違い、誤解をうむ、 オブジェクト指向ではない」などと説明されると、卓袱台を引っくり返されたような感覚すら。 結局どれが”正”なんだ?と。お互いに自分の説明こそが正しいという立場で主張するわけですから (当たり前ですが)、初心者は余計に混乱し、根気がないと挫折します。 オブジェクト指向に対する根本的なモノの考え方は同じなのかもしれませんが、投稿・掲示板でも 意見が分かれるように、統一見解がないことこそが”なぜわからなくなってしまうのか?”の一番の 原因なのかもしれません。研修の講師の方も仰っていました。「わからないときは先輩に 訊いた方がよい、ただしその相手を間違えるとヘンな設計になる(笑)」。なんとなく分かるような 気がします。どうもベテランのJava開発者=オブジェクト指向を理解している人ではないようです。 本当は誰もが認めるバイブル的な教本があるとよいのですがねぇ・・・。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1108] Re:とあるGのつくプロジェクト
投稿者:こくぼ
2008/06/18 02:14:42

>まあ、仕事のプロジェクトについてここであんまり書くわけにもいきませんから >このへんにしときます。 ですよね。 失礼しましたm(_ _)m
[この投稿を含むスレッドを表示] [この投稿を削除]
[1107] Re:とあるGのつくプロジェクト
投稿者:(ぱ)こと管理人」
2008/06/16 02:45:13

>自分も何の因果か、巡り巡って今はGのつくプロジェクトにどっぶり漬かっています。 >#お客さんとコネのあるベンダーなので面倒がないというか、大変というか…^^; >#(前会社で働いてたときよりも待遇も給料も良いので全然良いんですけどね) あの会社にGのつくプロジェクトはいくつかありますが、あのGであれば、 お会いする機会は今後もあるかもしれません。 まあ、仕事のプロジェクトについてここであんまり書くわけにもいきませんから このへんにしときます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1106] Re:とあるGのつくプロジェクト
投稿者:こくぼ
2008/06/15 16:27:00

>ええと、それならおそらく私です。 やっぱりそうでしたか。お会いできるチャンスを逃してしまって残念です^^; >ただ、現在私は1階にコーヒー屋があるビルの向かいのビルにはいません。 ># 会社自体変わったような変わってないような。 そうなんですか…! >超巨大企業の子会社の、Gのつくプロジェクトの人たちも現在はコーヒー屋がある >ビルではないビルに移っているはずです(全員ではないはずですが)。 今年末くらいに駅近くの新しくできるビルに移るって話は聞いてますが、今はまだ大部分はそこのビルにあると思います。 >月日は過ぎ人は去り状況は刻々と変わっているようです。諸行無常といいますか。 自分も何の因果か、巡り巡って今はGのつくプロジェクトにどっぶり漬かっています。 #お客さんとコネのあるベンダーなので面倒がないというか、大変というか…^^; #(前会社で働いてたときよりも待遇も給料も良いので全然良いんですけどね)
[この投稿を含むスレッドを表示] [この投稿を削除]
[1105] Re:とあるGのつくプロジェクト
投稿者:(ぱ)こと管理人」
2008/06/15 01:18:40

こんにちは。 >自分は名古屋の伏見にある某企業で働いてるのですが、2年ほど前(2006年の3月末) >にとある会社(超巨大企業の子会社)の名簿みたいなやつに前橋さんのお名前を見かけ >ました。 ええと、それならおそらく私です。 >おそらく前橋さんの会社からすぐ近くの1階にコーヒー屋があるビルなのですが、 ただ、現在私は1階にコーヒー屋があるビルの向かいのビルにはいません。 # 会社自体変わったような変わってないような。 超巨大企業の子会社の、Gのつくプロジェクトの人たちも現在はコーヒー屋がある ビルではないビルに移っているはずです(全員ではないはずですが)。 月日は過ぎ人は去り状況は刻々と変わっているようです。諸行無常といいますか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1104] とあるGのつくプロジェクト
投稿者:こくぼ
2008/06/13 18:56:48

はじめまして、こんにちは。 ポインタ本を6年くらい前(?)に読んでから、前橋さんのファンです。 自分は名古屋の伏見にある某企業で働いてるのですが、2年ほど前(2006年の3月末)にとある会社(超巨大企業の子会社)の名簿みたいなやつに前橋さんのお名前を見かけました。 (ちょうど自分が3月末までその会社に派遣されてまして) おそらく前橋さんの会社からすぐ近くの1階にコーヒー屋があるビルなのですが、あのとき見た名前が本当に前橋さんなのか今でも気になっています。 迷惑でなければ、教えてくださいm(_ _)m
[この投稿を含むスレッドを表示] [この投稿を削除]
[1103] Re:本について
投稿者:(ぱ)こと管理人」
2008/05/12 01:24:58

はじめまして。おほめいただきありがとうございます。 >よくわからない宣言は避けて、使わないようにしていたのですが >それが理解できると途端に使えるものが増えて、世界が広がったような気がしました 本にも書いたとおり、あまり複雑な宣言を使うのはおすすめできませんが、読むときには読めないと困りますし、わからないからとvoid*に逃げるのもよろしくないですから、宣言の読み方はわかっているほうがよいですよね。 お役に立てたようで何よりです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1102] 本について
投稿者:sironote
2008/05/11 04:00:43

C言語ポインタ完全制覇の本を読ませていただきました 細部まで説明してくれるこういう本は本当にありがたかったです よくわからない宣言は避けて、使わないようにしていたのですが それが理解できると途端に使えるものが増えて、世界が広がったような気がしました 良い本を出してくれて感謝致します
[この投稿を含むスレッドを表示] [この投稿を削除]
[1101] Re:まだまだ現役ですね!
投稿者:(ぱ)こと管理人
2008/04/03 03:00:44

はじめまして。書き込みありがとうございます。 >で、今回は、面白いページがありましたので、ご紹介致します。(既に知っていらっしゃるかもしれませんが・・・) >http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255-2,00.htm?p=3&mode=all#block_comment 某筋から聞いて知っていました。4/1にかこつけてこんなのを書いちゃったくらいで (^^; http://d.hatena.ne.jp/kmaebashi/20080401 >しかし、簡単なポインタが分からない人は、表舞台(雑誌とか、本とか)から絶滅したと思っていましたが、まだまだ現役なんですね :-p C自体、うちの会社では使っている部署はどんどん減っているのですが、まだCの記事に需要があるようですね(この記事の出来はさておき)。 「C言語 ポインタ完全制覇」は今度第11刷が出ます(奥付は5月11日)。皆様のおかげです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1100] まだまだ現役ですね!
投稿者:なかなか
2008/04/02 11:52:14

前橋さんのファンです。一度は書き込んでみたいと思っておりました。(^^;) で、今回は、面白いページがありましたので、ご紹介致します。(既に知っていらっしゃるかもしれませんが・・・) http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255-2,00.htm?p=3&mode=all#block_comment 最初は単純ミスかとも思いましたが、直せば直すほど馬脚を現していく有様を見ていると、これは「真性」だと思います。 しかし、簡単なポインタが分からない人は、表舞台(雑誌とか、本とか)から絶滅したと思っていましたが、まだまだ現役なんですね :-p
[この投稿を含むスレッドを表示] [この投稿を削除]
[1099] Re:オブジェクト指向でないのは
投稿者:(ぱ)こと管理人
2008/03/20 22:11:43

>JAVAを使っていてわざわざ1クラスのなかに全プログラムを記述するような >ことをせず、クラスに分割していけば自動的にオブジェクト指向になっていく >のではないでしょうか。 Javaで1クラスの中に全プログラムを記述するようなことをする人はめったに いないと思いますが、Cで、関数を複数の.cファイルに分類して書いていった ところで、「オブジェクト指向になっている」とは言わないでしょう。普通は。 そういうことを下記ページに書きました。 http://kmaebashi.com/programmer/object/othello.html、 | しかし、現状では、カプセル化は実現できていても、オブジェクト指向に | はなっていません。なぜならここにはオブジェクトがいないからです。 >そこで、JAVAのプログラマーであるのに、オブジェクト指向でない >プログラミングの例を示して解説していただければうれしいです。 >ただし初心者や技術不足が原因のしょうもない例ではなくお願いします。 いまどきJavaといえばWebアプリケーションの開発に使うことが多いと思いますが、 たとえばStrutsとJDBCを使うとして、UIの階層はStrutsが提供するクラスを 継承したりして作るかもしれませんが、そこから呼び出されるビジネスロジックの 階層を「staticメソッドの集合体」にするケースは結構あると思いますよ。 それでもJDBCが提供するinterfaceを使っているからオブジェクト指向だ、とか、 UI層ではActionを継承して作っているからオブジェクト指向だ、と主張する のであれば別に止めませんが。 いわゆる業務アプリケーションの開発において、継承やらインタフェースやらを 多用したクラス階層を自分で設計してプログラムを書いていく場面は実はかなり 少ないです。 以前この掲示板ではこんな議論がありました。 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&thread=693 この中で紹介されているhappieさんの意見に、私は大筋で賛成です。 http://happiese.exblog.jp/3127241/
[この投稿を含むスレッドを表示] [この投稿を削除]
[1098] オブジェクト指向でないのは
投稿者:はら
2008/03/19 16:23:20

オブジェクト指向について分かりやすい説明ありがとうございました。CとJAVAの違いで説明されているところで感じたのですが、もともとJAVAでプログラミングしていれば自然にオブジェクト指向になるのではないでしょうか。JAVAを使っていてわざわざ1クラスのなかに全プログラムを記述するようなことをせず、クラスに分割していけば自動的にオブジェクト指向になっていくのではないでしょうか。私の疑問は、JAVAのプログラマーでありながら、オブジェクト指向でないプログラミングをするということの方が難しいのではないかということです。 そこで、JAVAのプログラマーであるのに、オブジェクト指向でないプログラミングの例を示して解説していただければうれしいです。ただし初心者や技術不足が原因のしょうもない例ではなくお願いします。しょうもない例というのは、Newのタイミングを間違えるとかそういう例です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1097] Re:「体当たり学習」について
投稿者:(ぱ)こと管理人
2008/02/25 01:41:53

>結果として、このプログラムは一見正常に動きますが、 >再入力の場合に限り字数チェックが行なわれない、という奇妙な仕様になっています。 ご指摘ありがとうございます。コーディングの方針とかスタイルとか そういう話ではなく、再入力のときBOOK_NAME_LEN等より長い文字列を 入力すると領域破壊を起こしますから、これは致命的ですね。 こういうバグが入った経緯はさすがに思い出せませんが、正誤表に追加しておきました。 えー、他にもまだあるようでしたら(と書くのも怖いのですが、間違いは間違いとして 正誤表に載せておきたいと思いますので)
[この投稿を含むスレッドを表示] [この投稿を削除]
[1096] Re:「体当たり学習」について
投稿者:yuya
2008/02/21 18:14:31

ご確認ありがとうございました。 > (まだあるようでしたらぜひお願いします)。 というお言葉に甘えて、連投ヒンシュク覚悟で……。 【7】 蔵書管理プログラム配列版(p243~のList5-12)において、 「再入力機能」のコード(reinput系統の関数)に納得しかねる点があります。 input_string() と input_number() とは、文字列と数値の違いこそあれ、 ともに「新規入力処理」として並立した存在です。 両者の冒頭には共通の一行入力処理(+α)が fgets() を使って書かれており、 これらはのちに input_line() として切り出されることになります。 そして、この2者に再入力機能(つまり改行だけが入力された場合の処理)を付け加えたものが それぞれ reinput_string() と reinput_number() であるはずですよね。 しかし、再入力に際して input_line() 相当の処理を書くべきところには、ともに input_string(buf, 1024, stdin); と書かれています。これは不合理ではないでしょうか? 配列版での文字列入力は字数制限を伴うため、 新規入力では input_data() が input_string() に上限を渡してチェックさせています。 一方、再入力では reinput_data() がいったん reinput_string() を呼び出し、 その中で上限を1024にして input_string() を呼び出しており、不可解です。 そもそも reinput_string() 自体が上限を引数にとらないので、 reinput_data() から渡せなくなっていますね。 結果として、このプログラムは一見正常に動きますが、 再入力の場合に限り字数チェックが行なわれない、という奇妙な仕様になっています。 全くの憶測ですが、以下のような経緯は考えられないでしょうか? | 配列版を執筆している段階では、まだ再入力機能は無かった。 | 動的メモリ確保版に入り、再入力機能を持たせた。 | この機能を配列版でも使えるように、List5-12(p243~)にさかのぼって、 | reinput_string() 、reinput_number() 、および reinput_data() を付け加えた。 | このとき、配列版特有の字数制限への対応を行なわなかった。 | また、reinput_string() 、reinput_number() では input_line() を呼び出す必要があるが、 | 配列版ではこの関数をまだ切り出していなかったので、関数名だけ reinput_string() に置き換えた。 見当はずれだったら赤っ恥ですが(^^;)
[この投稿を含むスレッドを表示] [この投稿を削除]
[1095] Re:「体当たり学習」について
投稿者:(ぱ)こと管理人
2008/02/19 01:51:20

お返事が大変遅くなりまして申し訳ありません。 >【6】 >3-3の detab.c についてなのですが、p141に (中略) >do{ > putchar(' '); > char_count++; >} while(char_count % TABSTOP != 0); > >で済ませてしまうと思います。 う。これは確かにこれで動きますし、こちらの方がシンプルですね。 「体当たり学習」のサンプルソースがなぜああなっているかについてですが、単純に思いつかなかったのかもしれません。ひょっとすると「出力すべきスペースの数を算出する」→「その数のスペースを出力する」と段階を追って考えたほうがわかりやすいのでは、と思った、という可能性はありますが… いずれにせよすでに記憶の彼方です。すみません。 なお、限りなく手抜きな対応ですみませんが、ここでのやり取りを、下記補足ページに転記させていただきました。 http://kmaebashi.com/taiatari/hosoku.html いろいろとご指摘いただきありがとうございました(まだあるようでしたらぜひお願いします)。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1094] 管理者により削除されました
2008/02/19 01:33:56

この2008/02/18 19:16:57の投稿は、 意味不明の投稿だったので削除しました。
[この投稿を含むスレッドを表示]
[1093] Re:「体当たり学習」について
投稿者:yuya
2008/02/16 18:21:13

丁寧にお返事いただき、ありがとうございます。 【2】 > 私は、習慣的にマクロで値を定義するときは括弧で囲んでいます。 > 演算子等を含むと括弧が必要だったりしますから常に入れているというだけで、 > この場合は実用的な意味はあまりないですが。 了解しました。ただ、括弧のない箇所もたくさんあったので(p111など)、 統一性の観点から指摘させていただきました。 【4】 > たしかに対象読者を考えると厳しい気がします。 私自身、初心者に毛が生えた程度なわけですが、 率直に言って、この部分を見たとき、頭がこんがらかっちゃったんですよね。 「何をやっているか」は分かったものの、 「これで万事うまくいく」という確信がすぐには持てませんでした。 なんでスッと頭に入らなかったのか考えてみると、 (ア) ファイルを開く→書き込む→閉じるという順番でしかモノが考えられない(私が) (イ) 「初め」の処理だけ特別扱いされている の2点が原因になっているように思います。 (ア)な初心者としては、下のような手順が素朴に思い浮かびます。 ------------------------------------------------------------------ while(){ 書きかけの出力ファイルがなければ、新しいファイルを開く 文字を書き込む 出力ファイルが一杯になったら、ファイルを閉じる } 最後の出力ファイルが中途半端なサイズで終わっていたら、それを閉じる ------------------------------------------------------------------ つまり、 FILE *out_fp = NULL; while((ch = getc(in_fp)) != EOF){ if(out_fp == NULL){ out_fp = fopen(......); ...... } putc(ch, out_fp); total_size++; if(total_size % OUT_FILE_SIZE == 0){ fclose(out_fp); out_fp = NULL; } } if(out_fp != NULL){ /* ここでは入力ファイルが空の場合だけでなく、 出力ファイルのキリのいいところで終わったときも NULLになる */ fclose(out_fp); } てな構成にすれば、(イ)も自然に解消されるのではないでしょうか。 ……と思って上のソースを見直すと、whileループの末尾と(次の回の)先頭で、 ほとんど同じ条件判断を行っていて非効率ですね(^^;) ほかにも私の気づいていない問題点があるかもしれません。 【5】 > 動くか動かないかという点では動きますし、出力用のファイルポインタと > 読み込み用のファイルポインタを比べると、読み込み用の方がfclose()しなくても > 害が少ないわけですが(書きかけで異常終了すると変なファイルができる可能性が > 高いですが、読み込みならまず大丈夫)行儀としては閉じた方がよいかと思います。 > # ただ、このレベルなら、やっぱり実用上「どっちでもいい」と言ってしまいそうです。 > # 私の場合。 こちらもよく理解できました。ありがとうございます。 風邪をひかれているのに申し訳ないのですが、もう一点、よろしいでしょうか。 【6】 3-3の detab.c についてなのですが、p141に > タブストップが8の時、タブは、「その行の出力文字の総数が8の倍数になるまで」空白を出力します。 とあり、まさにタブの動作はこれで言い尽くされていると思います。 私の場合、単純にこれをそっくりそのままコードに翻訳することを考えてしまうわけですが、 そうすると例えば do{ putchar(' '); char_count++; } while(char_count % TABSTOP != 0); で済ませてしまうと思います。 これも素人ゆえの感想かもしれませんが、「出力すべきスペースの数を算出する」という方法は、 なんだか必要以上に事を複雑にしているように映ってしまうのですが、いかがでしょうか。 どうも勝手なことばかり長々と書き散らしてすみません。
[この投稿を含むスレッドを表示] [この投稿を削除]