CとJAVAを比較した場合Cの良いとこと悪いとこ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0412410
NGNG0413デフォルトの名無しさん
NGNGさらに、「言語レベルで用意されている」という受け答えがすでに意味不明。
この人本当にJavaが何かさっぱりわかっていないよ。
0414デフォルトの名無しさん
NGNGそうぢゃなくて、「こういう条件が揃った場合には、このクラスを
呼び出す」っていうことが必要な時によく使うけどね漏れは。
0415デフォルトの名無しさん
NGNGプログラムを止めたくない場合の例では、
サーバー用のクライアントを立ててローカルから送ってあげるって
とこですかね。
>JavaBeansじゃなくて、java.beansパッケージのクラス群のことだったのね
いえ違いますよ。
JavaBeansを使った開発環境作成のためです。
>でもこのリンクが言ってることがリフレクションのすべてだ、なんて
>まさか思ってないですよね?
古すぎるせいか、開発動機が書かれてるホームページはありません。
私はAPIリファレンスから知識を得ていますので、それ以外のことはわかりません。
>共通メソッドを呼び出す
こっちがレイトバインディング云々ですよ。
もちろん静的ですよ。
つうか、最初に明示した条件に反してるでしょう。アフォですか?
論破されたからって「こいつ」呼ばわりですか?
0417410
NGNG文字列を実行する、しかも呼ばれた側呼び出し元の環境を参照できる、ってことでいいんですよね?
>>413
おれもそうおもう。
なんでサーバーの話をしているのやら。
0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNG>古すぎるせいか、開発動機が書かれてるホームページはありません。
>私はAPIリファレンスから知識を得ていますので、それ以外のことはわかりません。
じゃあぜひシステム開発を経験して、リフレクションの便利さ・必要さを
身をもって体感してください。
私もリフレクションが好きでたまらないというわけでは全然ないんだけど、
使わざるを得ない場面に遭遇するから使っているだけです。
JavaでOOPやってるとかならず出てくるですよ、コイツは。
0421デフォルトの名無しさん
NGNGポリモーフィズムの説明はうんざりなんですが、
同じ事をC++でやる事を考えてみてください。
といってもC++知らないでしょうけど・・・。
ちなみにJavaではI/Oの機能はライブラリレベルで用意されていると
表現します。
PERLではI/Oの機能は言語レベルでサポートされています、
と表現します。
0422デフォルトの名無しさん
NGNG>ポリモーフィズムの説明はうんざりなんですが、
>同じ事をC++でやる事を考えてみてください。
>といってもC++知らないでしょうけど・・・。
漏れはいちおうC++のプログラマーなんだが・・。
うんざりせずにC++での実例をもとに語ってみてください。
0423デフォルトの名無しさん
NGNGどこがやねん。
0424デフォルトの名無しさん
NGNGどういう場合で使うのでしょうか?
是非教えてください。
私は一度も使ったことありませんので。
>なんでサーバーの話をしているのやら。
>>動いてるサーバーのビジネスロジックの追加・交換なんか
というわけです。
0425デフォルトの名無しさん
NGNGあの言語でファイルフォーマット解析しろって言われた時は
吐きけがしたよ。
0426デフォルトの名無しさん
NGNG構造体にがぽっとはめられないかね、がぽっと
0427デフォルトの名無しさん
NGNG上で出したけど、いくつかのデザインパターンではリフレクションを
前提としている場合があります。そして、それを適用した方が
後々のメンテ性が良いことが多いんです。
例えば、実行時のあるオブジェクトの状態によって呼び出すメソッドを
変えたい場合にはリフレクションしかありません。
まあゴリゴリと長いコードを書くのであれば別ですが、OOPだけに
そんなことはしませんよね?
0428デフォルトの名無しさん
NGNGライブラリレベルもそう。
言語仕様で定義されているとか、標準ライブラリに含まれているとか、そういう言い方してほしい。
0429デフォルトの名無しさん
NGNGC++でポリモーフィズムするには
親クラスのメソッドにvirtualをつけて
子クラスでオーバーライドするだけですが・・・
あとは親クラスの型を指すポインタ変数に子クラスを入れて
普通にメソッド呼び出しするだけで
動的バインドが行われます。
JAVAではvirtualをつけなくても全部virtualになってます。
わかっていただけたでしょうか?
あなたのリフレクションを使う動的バインドは
別物でしたか?
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNGつーかC++とJavaの違いをまったく知らないねこの人。
0432422じゃないけど
NGNGポリモルフィズムとは言うけど。
リフレクションを使うのは、言語が動的バインドをサポートしていないから、別の手段でそれと同じ事をする、っていう気がするんだが…
0433デフォルトの名無しさん
NGNGC++で同じ事するときはどうするの?
でさ、デザパタの本ってリフレクションAPIが作られる前からあったけど
どうやってたんだろ??
ところでファイルフォーマットの解析って、
俺はバイナリーエディター使うんだけどさ、
コンパイラでどうやってやるの?
0434デフォルトの名無しさん
NGNGそれはウソ。
リフレクションを使わざるを得ないのは、実行時まで「クラス」「メソッド」を解決できない時だけ。
単に条件分岐で起動するメソッド変えるだけとかなら、デザパタに解決方法がいくつかある。
Class.forName()でクラスロードしてJITコンパイルして実行、つうのは
オーバーヘッドでかすぎなので、なるべくしないほうがいいよ。実行時にいちいち遅くなる
よりは、初期化時だけ遅いほうがナンボかましでしょ?
0435デフォルトの名無しさん
NGNGゴメン、もうちょっとわかりやすく書いて
意味が良くわからないっす。
0436デフォルトの名無しさん
NGNG別にウソではないだろう。引数を持つコンストラクタを持つクラスのインスタンスを
動的に生成したい場合はどーする。リフレクションでやるしかないだろ。
>Class.forName()でクラスロードしてJITコンパイルして実行、つうのは
>オーバーヘッドでかすぎなので、なるべくしないほうがいいよ。実行時にいちいち遅くなる
>よりは、初期化時だけ遅いほうがナンボかましでしょ?
ま、よーするにコードの見易さを取るか、速さを取るかだわな。
0437デフォルトの名無しさん
NGNG引数つきのコンストラクタの起動方法って、結構みんな知らないのね。
Constracterクラスのドキュメント見て味噌。
0438デフォルトの名無しさん
NGNG>俺はバイナリーエディター使うんだけどさ、
話がかみ合わないわけだこりゃ。
0439デフォルトの名無しさん
NGNGつまりはnewを使うことを動的にオブジェクトを生成すると
一般的には言うんだが、
どういう意味で使っているのか教えてくれないかな?
0440デフォルトの名無しさん
NGNGそれもやっぱりウソ。ある特定のインスタンスのフィールドをダイナミックに
初期化したい場合にはリフレクションを使う。
それから、単体テストをする場合になんかも使う。setAccessible(true)でフィールドの
中身を取り出す。
0441デフォルトの名無しさん
NGNGすまん。何言ってるのかワカラン。
動的に生成するって、何をさしていってるの?
JVMが目的のクラスを解決できていれば、単にそのコンストラクタで
newするだけだよね?
0442デフォルトの名無しさん
NGNGそれもリフレクションの一種じゃない?
0443デフォルトの名無しさん
NGNGと書き込んでみるテスト。
0444デフォルトの名無しさん
NGNGそういう隠蔽を破壊するようなことをなんでする必要があるの?
単体テストならわかるけど。
0445432
NGNG強い型付けの言語で、あるクラスの変数を宣言して、そのサブクラスのオブジェクトを代入する、っていうのは、
動的バインドとはいわないだろう、っていうことだ。
って、なんか、解かりやすくなった自身無いなぁ…
0446デフォルトの名無しさん
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
NGNG■ このスレッドは過去ログ倉庫に格納されています