• ベストアンサー

Cに慣れてしまった人、どのようにJAVAを克服しましたか?

JAVAについて質問です。 私はC言語をこの1年間勉強してきました。 そしてC言語のコーディングの仕方に慣れきってしまったせいか、どうしてもJAVAのオブジェクト指向 というものが理解できません。 コーディングも上手くいきません。 クラスやメソッドやインスタンスがどうとかコンストラクタが・・・などの横文字が全然意味が分かりません。 C言語で言うとどれがどこに当たるのか!? とかいう風に置き換えて考えようとしても上手く行きません。 こういう、横文字が理解できて、オブジェクト指向の考え方に慣れる為にはどのようにしたらいいでしょうか? また、C言語からプログラミングに入って、後からJAVAを勉強する場合、どのような点に気をつければ良いでしょうか? また、JAVAの克服法を教えてください。

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

  • ベストアンサー
  • macotosan
  • ベストアンサー率23% (59/247)
回答No.6

 30代の男です。 私も悩みました。最初はオブジェクト指向の目指すところはわかってもそれを実現するのにかなりてこずりました。  Javaをいきなり学んでも聞き覚えのない言葉やプログラムの方法でかなり混乱させられてしまいます。  最初に心がけたのはCだとこうだ…という考え方をすてることでした。そして、Javaの言語仕様を覚えつつ、別で オブジェクト指向の本を読むことから始めたのです。 そうして、オブジェクト指向のやろうとしていること、 どのようにして実現さればいいのかなどなど。  そうすると、今度はデザインパターンと言う考え方に突き当たりました。その本を読んで実現のさせ方が理解できた感じです。  私は結城 浩さんの書かれた本が参考になりました。 今手元にないので何というか忘れましたけど… とにかく、Javaでも従来のコーディングはできます。 ですから、Javaとオブジェクト指向とを平行に学ばれた方がいいと思います。

usui323
質問者

お礼

なるほど、やはりCに置き換えて考える方法はやめたほうがいいですか。 決定的にCと違うということもあるのでCのほうだとわかるからといって置き換えないほうがいいみたいですね。 今度から全くの別物としてJAVAを考えていきたいと思います。 デザインパターンという言葉も聞いたことがあります。 今、企業実習中なのですが、実習先で始めて知りました。 学校では聞いた事のない言葉でしたが・・・。 それを勉強したら理解が深まるのであれば私もそういう本を読んでみようかと思います。 回答ありがとうございました。

その他の回答 (6)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.7

>どうしてもJAVAのオブジェクト指向 というものが理解できません Javaは「プログラミング言語」。オブジェクト指向は「考え方」。 両者は別物。 ひとまず、「オブジェクト指向」のことは置いておいて、 まず「Java言語」を習得すべし。 >クラスやメソッドやインスタンスがどうとかコンストラクタが・・・などの横文字が全然意味が分かりません (1)第一に、「用語」の意味をしっかり捉える。  これ最も重要。  ちゃんとした入門書を机の上に置いておいて、いつでも参照できるようにしておこう。 ここをあいまいにしておくと、学習は先に進まなくなる。 (2)次に、入門書に従って、「クラスの定義」「インスタンス作成」…などと順次、学習を進める。(Javaプログラミングの基礎) -------------------------------------  とにかく、なにはともあれ「入門書を使っての学習」につきる。  入門書を使っての学習だけでは「オブジェクト指向」(というやり方)が身につくわけではないが、オブジェクト指向への「素養」(基礎基盤)は身に付いているはずだ。  初めのうちはこの「素養」だけで十分だ。 >オブジェクト指向の考え方に慣れる為にはどのようにしたらいいでしょうか? ひとまずは、上記「素養」を積極的に使ってソースコードを書くことに専念しよう。(理念はとりあえず後回し、ということ) ------------- ちなみに… >各モジュールがオブジェクトかなとか思いますが そう考えていいと思う。けれど、Cのモジュールだと、同種のモジュールを複数作成できない。(オブジェクトは同種のものを「好きなだけ」作成できる。とても便利!)

usui323
質問者

お礼

回答ありがとうございました。 そうですね、JAVAとオブジェクト指向とは別物ですね。 JAVAを勉強していて勘違いに気づきました。

  • uninin
  • ベストアンサー率20% (26/129)
回答No.5

まあ、質問者の方は慣れればそのうちなんとかなるような。その上でオブジェクト指向に対する好き嫌いって出てくると思います。 しかし、jun-1氏の仰るところの「コーディングスタイル」って言語がjavaかCかという問題と関係無いんじゃないかなあ。文法的にはjavaってとてもCに近いですよね。C++よりも近いんじゃないかと思うくらい。

usui323
質問者

お礼

回答ありがとうございました。 まだまだ勉強が十分とはいえないので、これからもっとがんばって理解していきたいと思います。 そうですよね、制御文とかはCと同じですね。 でもCの考え方でコーディングしてるとJAVAなのにCみたいになってしまって 先生にダメだしを食らってしまいます。(^_^;) 文法じゃなくて設計なんでしょうね~。

  • potedora
  • ベストアンサー率47% (66/140)
回答No.4

すごくまじめな方なんですね。 JAVAはオブジェクト指向言語ですが、Cのような手続き型の言語としても記述できます。 世間でJAVAができるといっている8割の人が実はこのタイプの人だと思います。 私はC言語を10年近くやってJAVAに入りましたがあまり違和感はありませんでした。 なぜならC言語の問題点の一つの答えとしてオブジェクト指向があったからです。 C言語を1年勉強したとありますが、おそらくC言語で難易度が高いとされているポインタや構造体などを勉強されたのではないでしょうか? ただ、C言語の本来最大の特徴は関数で表現されるモジュール化です。そしてモジュール化がなぜ必要かといえば開発者の理想である部品化です。 ポインタや構造体は結局これらを助ける道具にしか過ぎません。 ただ、残念なことにC言語の関数は数が増えると管理自体がたいへんだし、部品化したつもりがあまり拡張性がないものになったしまったりでその本来の目的が達成できないことがわかったきました。 そこで注目されたのがオブジェクト指向です。C言語で関数を管理できない原因は、何のための関数かという主語がないからです。この主語にあたるある「もの」=オブジェクトの振る舞いを記述する関数(=メソッド)を集めてみようという発想は、完璧ではありませんがC言語の限界に対する一つの解答だったのです。 ですから、用語にこだわる前にまずなぜオブジェクト指向かをおさえれば自然とこまかいことは理解できると思います。

usui323
質問者

お礼

回答ありがとうございました。 そうですね、Cみたいに書けますね。 よく先生に「オブジェクト指向になってないよ。これじゃぁCと同じだから意味ないね」 とよく言われます・・・(^_^;) 制御文とかそういう記述はCと一緒だからとかそういう問題ではなくて設計段階ですでにオブジェクト指向になっていないようですね。 分かっていないから確かに当然といえば当然なのですが・・・(^_^;) C言語はポインタはもちろん、構造体もやりましたし、各モジュールに分けることもやりました。 その各モジュールがオブジェクトかなとか思いますが。 とりあえずCに置き換えて考えるのはやめてオブジェクト指向はこういうものなんだというのを真っ白な状態からまたやっていきたいと思います。

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.3

この問題に関しては、私も本当に申し訳なく思っております。(←何でだよ)。 ひとことで言えば、 C言語などでは「あれをやりなさい。これをやりなさい」 というプログラミングでしたが、 オブジェクト指向では「おまかせします」「おう! まかしとけ!」 というプログラミングです。(こんなこと言ってもわからないだろうな…) 私はオブジェクト指向のことを「おまかせ手法」と呼んでいます。 この場合、まかせられる側が「オブジェクト」や「クラス」です。 プログラミング関係の雑誌で時々、 オブジェクト指向についての解説が載っています。 オブジェクト指向について書いてある本も多数あるので、 それらを立ち読みしていくと、 だんだんわかってくるのではないかと思います。 それから、これは難度が高いかもしれませんが、 GUIプログラムを作ってみてください。 C言語に代表される構造化プログラミングは、 コマンドラインペースのプログラムに向いています。 対してオブジェクト指向はGUIプログラムに向いています。 Javaを使ってGUIプログラムをつくると、 「メッセージを渡す」「動作をまかせる」という オブジェクト指向プログラムの動作が実感できると思います。

usui323
質問者

お礼

回答ありがとうございました。 なんとなく言っていることは理解できます(笑) カプセル化みたいな意味ですよね? 呼び出すオブジェクトの中身の処理を知らなくても どういう値が戻ってくるかさえ知っていれば良いみたいな・・・。確か(^_^;) 全然違うかも(汗) そうですね、GUIに向いているようですね。JAVAは。 一応、教科書のサンプルにGUIのがあるので触ってみているのですが、 難しく感じます。 コマンドラインベースのJAVAのほうはまだ理解できていたのですが・・・。 もっと勉強してみたいと思います。

  • jun-1
  • ベストアンサー率29% (18/61)
回答No.2

私は逆にjava => Cを勉強したので、何から何まで不便でした。 例えばAPIドキュメント(javadoc)に相当するものがなかったり、 オブジェクトの概念自体がないことやメソド=>関数や、 コーディングスタイル  func ()  {   ・・・  } が許せませんでした。 (javaでは  method() {  ・・・  } と記述してました。) 現在ポインタのあたりを勉強しているのですが、それに 比べたらオブジェクト指向は慣れれば(なんでもそうですが) かんたんですよ。 とりあえず多態性(ポリモーフィズム)が理解できれば なんとかなるんじゃないでしょうか?

usui323
質問者

お礼

回答ありがとうございました。 なるほど。JAVAから入ったんですね。 私も、JAVAからやったほうが良かったのかなと思います。 学校に入学した時点で最初がCだったのでしかたないのですが・・・。 制御文などはほぼCと一緒なので、学校側の狙いとしてはCで覚えてJAVAに移行したかったんでしょうね~。 只今、企業実習中なのですが、現場のSEさんもJAVAのほうが簡単だとおっしゃっていました。 まだ慣れてない部分が多いので、もっとやってみようかと思います。

回答No.1

C言語をごぞんじであれば、C++のオブジェクト指向を勉強されてはいかがですか? 私はC++の知識があったので、何も問題なくJAVAを理解できました。

usui323
質問者

お礼

回答ありがとうございました。 そうですか、C++ですか。 確かオブジェクト指向のC版でしたね。 C++はやったことがないので、どんなものかちょっと調べてみようかと思います。

関連するQ&A