CとJAVAを比較した場合Cの良いとこと悪いとこ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNGうーむ、言い方が悪かった。
条件によって生成するサブクラスが違う場合(ただし同じインターフェースを
実装しているか、同じ抽象クラスを継承していることが前提)に、getConstructor()
とかやるじゃない。
0447デフォルトの名無しさん
NGNGアサーションだよ。アサーション用のメソッドが無い場合は
そうやってクラス内の値を取り出すしかない。
0448親切な人
NGNGネットサーフィン中に、凄い人気掲示板、発見!!!
「はにちゃんねる」↓
http://www.isn.ne.jp/~honey/hc/
ネット内では、現在、この掲示板の話題で、持ちきりです。
0449デフォルトの名無しさん
NGNGあーわかりました。そういう時は、なるべくFactoryMethodとかで
やったほうがいいよ。(かのヒロミチュ先生もご推薦(藁))
0450デフォルトの名無しさん
NGNGJavaの場合、その変数(C++だと派生クラスポインタ)に対して
メソッド呼び出しをした時必ず動的バインドが行われる。
過去レスを読んでみると良い。
0451デフォルトの名無しさん
NGNGそう、だからFactoryMethodとかAbstractFactoryとかその辺のことを言ってるんだよ。
0452デフォルトの名無しさん
NGNG誰?
0453デフォルトの名無しさん
NGNG>そういう時は、なるべくFactoryMethodとかでやったほうがいいよ。
という意味がいまだにわかっていないじゃん(w
と書いてみるテスト
0454デフォルトの名無しさん
NGNG本当に、そのあたりを記述するのにリフレクション使う必要が
あるのかな???C++/Java両刀の人間には不思議なんだけど。
使ってもできるけど、避けたほうがいいんじゃない?という話
ですが、どないでしょ?
0455デフォルトの名無しさん
NGNG高木先生はすげーって。
0456デフォルトの名無しさん
NGNGもうほっといてあげなって。
これだけ説明してもわかってないし、
ヒープとスタックの区別もついて無さそうだよ。
0457デフォルトの名無しさん
NGNGきっとOOもわかってない。
あー、哀れ・・・
0458445>450
NGNG0459デフォルトの名無しさん
NGNG0460スレと全然関係無いけど
NGNG第三者装って揚げ足取るのが得意技。
0461デフォルトの名無しさん
NGNGClassクラスのfactoryメソッド使うだろ?
まさにそれがリフレクションの機能使ってるやんけ。
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNG>使ってもできるけど、避けたほうがいいんじゃない?という話
>ですが、どないでしょ?
というのは何故??
0464デフォルトの名無しさん
NGNGけど、美しくないよね。
0465この人大丈夫か?
NGNGなんででしょ?普通にnewで対象クラスのコンストラクタ起動するだけでいいじゃない。
仮にそれでないとFactoryMethodが実現できないなら、C++の時どうするの?
0466デフォルトの名無しさん
NGNG君らの書くプログラムはファイルreadすると
勝手にフォーマットがわかるですか?
ずいぶん便利ですね。
0467デフォルトの名無しさん
NGNG「解析」をそんなに責めなくても…
0468デフォルトの名無しさん
NGNGgetConstructorメソッドちゅうのを使うことはリフレクションの機能を使っているということです。
ちなみにこの場合は対象クラスをnew演算子でインスタンス化しません。
0469デフォルトの名無しさん
NGNGあ、そうそう、Constructorクラスていうのがあるからね。
Java2のAPIガイドみてみ。
0470この人大丈夫か?
NGNGswitch分岐よりClass.forName().newInstance();
とかで一行で済ますほうが「ソースが美しい」って話ね。
ここから先は宗教戦争ですので、結論はでませんな。
インスタンス生成メソッドでさえswitchを嫌うことで失う実行時
コストととの相談というあたりを落としどころにしませう。でない
と終わらんよ。
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNGnewする対象のクラスが動的に変わる場合はハードコーディングしないでしょ?
クラス名をひっぱってきて、Constructorオブジェクトを取得してからインスタンスを
取得する。まあ一度やってみてください。やらんとわからんと思う。
0473デフォルトの名無しさん
NGNG0474この人大丈夫か?
NGNG以外と多いんだね。知らんかった。気をつけよう。
0475デフォルトの名無しさん
NGNGアンタも大丈夫??
0476デフォルトの名無しさん
NGNGそうそう、そのへんから宗教戦争になるんだよ、たぶん…
0477デフォルトの名無しさん
NGNGコレクションとリフレクションを同じ感覚で捕らえられる感覚が
おれにはさっぱりわからん。まったく別物じゃん。説明してくれ。
0478デフォルトの名無しさん
NGNGそりゃアンタ、アフォですよ。
0479この人大丈夫か?
NGNGあーそうか。サブクラスを実行時まで解決できないパターンでの
ファクトリの話ね。了解です。
はうー、どんなシステムでそんなもんが必要になるのでせうか。
後学の為に教えてチョ。
0480デフォルトの名無しさん
NGNG3個ぐらいだったら分岐しちゃうような…
0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG結構いろんなところで遭遇するよ。
例えばA/B/Cというシステムにメッセージを送りたくて、出口が一つしかない場合とか。
メッセージのあて先決定メソッドなんかはabstructにしておくんだよ。
0483デフォルトの名無しさん
NGNG3個程度しか増えないことがわかっているならそれでも良いんじゃない?
んで、将来も変わらないことがわかっているんならわざわざリフレクション
使うまでもないかもね。
0484デフォルトの名無しさん
NGNGそんなリフレクションAPIの末端使ってて、リフレクションとか言ってるんだもんな。
解析と判別も笑えたけど。
おめーのバグだろ・・・スレに登録済みですか?(笑)
>Class.forName().newInstance();とかで一行で
一行じゃかけないよ。
横に長くて(笑)
それは冗談にしろ、2つのメソッドは両方引数がくっついてくるわけで
そこら辺もとか考えると、
switchの方が、メンテするとき明らかに楽だと思うけど。
で、リフレクションおじさんは結局のところ
変なデザパタの本をそのまんま丸暗記してたって事なのかな?
さすがにスタックとヒープの違いはわかってると思うけど・・・
そう願いたいよ。
0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNG20個分岐するswitchって言うけどさ
20個クラスつくったり、ファクトリーメソッド呼び出す側とか
いろいろ考えてみると別にどうってことないと思うけど。
0488デフォルトの名無しさん
NGNG>というか、リフレクションって呼ぶとかなり誤解招くな・・・
>そんなリフレクションAPIの末端使ってて、リフレクションとか言ってるんだもんな。
えらそーなことをのたまうオメーが説明してみー。
0489デフォルトの名無しさん
NGNGバカかお前は?
クラスが増えるたびにいちいちソース直してコンパイルかけんのかよ??
そーゆーのはプロパティファイルに外だしするんだよヴォケが。
0490デフォルトの名無しさん
NGNGというかリフレクションクラス全部挙げたりしたんですが・・・
今日は70メッセージくらい書いたと思うけど。
今日も厨房が一人減って満足だ。
では、おやすみ。
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNGそれは説明したことにはならんと思うぞ。
0493デフォルトの名無しさん
NGNG20個の分岐が、あっちこっちに散らばるようなら、ポリモルフィズムつかえっていう時に出てくるなぁ。
でも、20個のcaseのswitchが1つあって、そこで作るオブジェクトを切りかえるような使い方なら、
おれはまよわずそれを使うな。
リフレクション(?)なんぞ使わずに。
0494デフォルトの名無しさん
NGNGついでにJavaで仕事をしたこともないらしい・・
0495デフォルトの名無しさん
NGNG0496493
NGNG0497デフォルトの名無しさん
NGNGというかですね、あるシステムの汎用フレームワーク的な部分を構築する
場合は、スーパークラスやインターフェースのかたまりを作って
それをベースにいろんなシステムを開発していくわけです。
そのフレームワークからユーザーパッケージのクラスを、ソースに
ベタ書きで呼び出すわけにはいかんだろ、というワケです。
0498デフォルトの名無しさん
NGNG名スレだな。
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNG出来るメソッド書くとき java.lang.reflect にお世話に
なりました。
0501デフォルトの名無しさん
NGNGストリングクラスのオブジェクト渡すのと、
派生クラスのオブジェクト渡すのと何が違うの?
それってファクトリーメソッドの話とは違うよね?
0502デフォルトの名無しさん
NGNGC#はうざいので消えてください。
0503デフォルトの名無しさん
NGNGなんか話がズレてるぞ。
汎用なんだから、ある特定のユーザーパッケージもしくはクラスを
importしたりベタ書きしたら、ぜんぜん汎用じゃなくなるじゃんか。
0504デフォルトの名無しさん
NGNG0505503
NGNGハードコードすると、汎用パッケージとして意味をなさなくなってしまう
という意味です。
0506503
NGNG0507デフォルトの名無しさん
NGNGだから、外部から派生クラスを受け取ればいいでしょ?
0508デフォルトの名無しさん
NGNGファクトリーメソッドの話はもう終わったのかな。
0509デフォルトの名無しさん
NGNGスマソ。意味がわからん。
「外部から派生クラスを受け取る」ってどういう意味?
0510ジーンズもケイタイも503が好き
NGNG汎用パッケージとユーザーパッケージが同時に存在してるなら、どういうことになるんだろうね。
0511510
NGNG0512デフォルトの名無しさん
NGNGずっと続いてます。
0513デフォルトの名無しさん
NGNGつまり Class.forName() で得られるような
クラスオブジェクトを渡すって事では?
0514デフォルトの名無しさん
NGNGつまりは、ユーザーパッケージの事。
0515513
NGNG0516デフォルトの名無しさん
NGNG汎用パッケージは、いろんなところに横展開が可能だ。
A社で使ったり、B社で使ったり・・。業界が同じなら流用しやすいだろ。
だけど中身の業務は違うから、そういう部分はユーザーパッケージのクラス
で実装するんだよ。汎用パッケージが提供するのは主にインターフェース
もしくは抽象クラスの部分。
0517デフォルトの名無しさん
NGNGだから、ユーザーパッケージのクラス名は外だしにするってことだ。
switch文を使ったら、クラス名をハードコーディングせんといかんだろが。
0518デフォルトの名無しさん
NGNGちょっと待て、switchはファクトリーメソッドの話。
ユーザーパッケージの中でnewされたオブジェクト(抽象クラスを継承した物
またはインターフェースをインプリメントしたもの)を受け取る関数を
汎用パッケージに持たせるのが普通では?
つまり、何らかの入力に対して何らかの出力をしたければ、
(例えばの話として)汎用パッケージでは、
constructor(InputStream is,OutputStream os)
というのを用意して、
ユーザーパッケージでは、相応のInputStreamとOutputStreamの派生クラスを
newして
コンストラクタに渡してあげればよい。
0519デフォルトの名無しさん
NGNG俺の構想とはアンタとちょっとずれているとは思うのだが・・
汎用パッケージからAというインターフェースを実装したクラスを
使いたい場合、ユーザーパッケージにはAを実装したクラスを作るよね。
だけど汎用パッケージ側はユーザークラスを知らないわけだ。
だけどインターフェース名で呼び出せば良いから、条件によって
クラス名だけフレームワーク側にあたえてやって、ユーザークラスの
インスタンスを取得すればよい。
こんな風に。
A a = Factory.getA(クラス名);
どうでしょうかね?
0520519
NGNG場合も、インスタンスの取得の仕方が違うだけで考え方は同じだよ。
0521デフォルトの名無しさん
NGNGと理解してるんだけど良いのかな。JavaBeanってプラグインだと決め付けてるけど。
0522デフォルトの名無しさん
NGNGリフレクションの応用範囲は広い。いろんな場面で活用されるということだ。
0523デフォルトの名無しさん
NGNGそれはリフレクションの一部の機能ね。
>>519
言いたい事はわかるけど、それだと
ユーザーが作ったAの派生クラスを外部で利用するには、
キャストをしなきゃならない事は理解できるかな?
Aがインターフェースである場合はそんする部分も大きいよ。
0524デフォルトの名無しさん
NGNG使わないこと。
まあ、ファクトリーメソッドとしては問題ないけどね。
0525デフォルトの名無しさん
NGNGそのユーザーが作ったAの派生クラスは、汎用パッケージがあることが
前提なんだから、他では使い道が無いよね?
万が一、外部で(外部とはどういう意味かよくわからんが)使いたい場合は
そのクラスをそのまま使えばいいんじゃないの?
例えばそのユーザークラスに独自のメソッドが実装されていた場合
(つまりスーパークラスにはないメソッドが定義されている)に
そのメソッドを使いたい場合は、Aというインターフェースで受けては
いけないよね。もしくはダウンキャストしなけりゃならない。
Java2における、Vectorクラスなんかそうだよな。Listで受けるときは
Listに定義されてるメソッドしか使えないけど、汎用的に使えるよね。
0526デフォルトの名無しさん
NGNGどういう場合か簡潔に説明してください。
0527デフォルトの名無しさん
NGNG後付けの部品を組み込む時以外の既知のクラス情報を参照するのに意味あるの?
クラス設計の不手際をコーディング時に辻褄あわせて再設計の工数とトレードオフ
するためには使えるけど、それって裏技の類だよね。
・・・設計に自信があっても障害検知時に利用するというのには大いに意味があるか。
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG0530デフォルトの名無しさん
NGNG嘆かわしい世の中だ。
0531デフォルトの名無しさん
NGNG逆です。
フレームワークをユーザーが使うの。
>もしくはダウンキャストしなけりゃならない。
既に書いたけど、
汎用フレームワークの外側でnewされてれば、ダウンキャストは起こらない。
リフレクション使うと、コンパイル時の型チェックもできないしさ。
>どういう場合か簡潔に説明してください。
ファクトリーメソッドで必ずオブジェクトを作るって事は、
複数のインターフェースをインプリメントできない。
つまりはインターフェースの意味が無い。
constructor(A a,B b)
というのがあったとき、
A,BをインプリメントしたクラスCがあると、
constructor(c,c)でOK。
これでいい?
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNGきょうび Cだけしかできないなんてヴァカがいたらみてみたいものだ(w
0534デフォルトの名無しさん
NGNGJavaをわけもわからず無理やり使って、勝手に惨めな思いしている
Cプログラマなら、掃いて捨てるほどいるなあ。
0535デフォルトの名無しさん
NGNG年末に使われてないJava使いを集めて捨てました。
すっきりきれいになりました。GCって便利ですね。
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNG>>JAVAで全てできると思っている奴は見ていてマヌケだ。
そんな人いないと思いますけど…
ひょっとして、過去の536ご自身ですか?
0539デフォルトの名無しさん
NGNG>JAVAと表記するやつは間違いなくマヌケさん(稿
おまえは些細なことにこだわって自滅するタイプ
0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNG0543あたまの容量が少ないひとっているんだね
NGNGきみってヴァカそう、僕のまわりには決していないタイプ(w
0544デフォルトの名無しさん
NGNG>>ヲタとは知識をひけらかして人を見下す人の事を言ったのが語源ですだ。
それって 542ご自身がヲタだという告白とみなしますが、
よろしいですか?
0545デフォルトの名無しさん
NGNG>>>539
> きみってヴァカそう、僕のまわりには決していないタイプ(w
おまえ、いつも一人ぼっち。周りにだれもいないタイプ(ヒ
■ このスレッドは過去ログ倉庫に格納されています