@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

オブジェクト指向教育に適した言語

投票結果総投票数:184
Java 72 39.13%
C# 30 16.30%
C++ 12 6.52%
VB.NET 9 4.89%
PHP 1 0.54%
Perl 1 0.54%
Delphi 15 8.15%
SmallTalk 25 13.59%
そのた 19 10.33%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-06-30 14:47
どもでふ。がるです。

引用:

たーぞうさんの書き込み (2004-06-30 09:09) より:
ブラックボックス化されたオブジェクト指向言語の内幕を探るのと、オブジェクト指向自体の理解とはあまり関係ないのではないかと思うのですが。


んと。もとの設問が「オブジェクト指向の学習」だったので。多分ほとんど
の方が「オブジェクト指向という概念を1から学ぶ」ことを前提に
記述されるだろうなぁと思ったので、あえて「概念は分かったけどじゃぁ
実装ってどうなの?」っていう、もう一つ先のことを考えて発言してます。

で、これはまぁ手前味噌な発言なのですが。
対面で教えたりして、概念だけを教えると、意外と「実装が出来ない」
ことが多いように思うんですね。
あと「えらく汚い(異様に重い)実装」とか。
なので、概念を把握した後、コンピュータの一番根っこのレベルで
「なにが行われているか」を把握する場合、という条件で、C言語を
あえて推しました :-)

ちなみに、概念の把握にはRuby好きですが(やぱしインタプリタはお手軽)、
その辺の教育をやってる友人はJavaを推してましたねぇ。
余談ですが。
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2004-06-30 17:55
引用:

がるがるさんの書き込み (2004-06-30 14:47) より:
どもでふ。がるです。

引用:

たーぞうさんの書き込み (2004-06-30 09:09) より:
ブラックボックス化されたオブジェクト指向言語の内幕を探るのと、オブジェクト指向自体の理解とはあまり関係ないのではないかと思うのですが。


んと。もとの設問が「オブジェクト指向の学習」だったので。多分ほとんど
の方が「オブジェクト指向という概念を1から学ぶ」ことを前提に
記述されるだろうなぁと思ったので、あえて「概念は分かったけどじゃぁ
実装ってどうなの?」っていう、もう一つ先のことを考えて発言してます。

で、これはまぁ手前味噌な発言なのですが。
対面で教えたりして、概念だけを教えると、意外と「実装が出来ない」
ことが多いように思うんですね。
あと「えらく汚い(異様に重い)実装」とか。


はい、ここまではよく理解できました。

引用:

がるがるさんの書き込み (2004-06-30 14:47) より:
なので、概念を把握した後、コンピュータの一番根っこのレベルで
「なにが行われているか」を把握する場合、という条件で、C言語を
あえて推しました


オブジェクト指向言語はオブジェクト指向の概念を把握するためのものではなく、オブジェクト指向によるモデルを実装するためのものだと思うのですが。

・・・と。「オブジェクト指向プログラミングの概念の把握」ですかひょっとして。

うむむ・・・

[ メッセージ編集済み 編集者: たーぞう 編集日時 2004-06-30 17:56 ]
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-06-30 18:49
どもでふ。がるです。
んと。
引用:

オブジェクト指向言語はオブジェクト指向の概念を把握するためのものではなく、オブジェクト指向によるモデルを実装するためのものだと思うのですが。


の「はず」なのですが。現実にどうかと聞かれると、見ていて結構
疑問ですね(苦笑

よくあるのが、動物とかをクラスに例えて
コード:
class 動物 {
  method 鳴く();
}

class 猫 継承 動物 {
  method 鳴く() { return "にゃん"; }
}

class 犬 継承 動物 {
  method 鳴く() { return "わん"; }
}


を見せると、
・分からない
・クラスと継承の概念は分かるがプログラム実装として想定しにくい
・クラスと継承の概念は分かりプログラム実装として想定できる
ってタイプがいるですね。
んで、2番目って結構多いです。
ここの実装を理解させるためにアプローチが2種類あるみたいで。
・根本的に知らないから叩き込む(ずぶの初心者に多い)
・メモリの概念とかと結びつかない(熟練のC技術者に多い)
ってのがありまして。
前者の場合、OOP系の言語で教えたほうが早いのですが、後者の場合
「裏ではね」ってのをきちんと教えたほうが理解が早いです。

もう一つ「汚いプログラム」ってのは、もうちょっと致命的で。
OOP系の言語のみをやっている人に多いのですが「そのメソッドが
実際にはどれくらいのマシンコストを払ってると思う?」って言う概念
が全然ないらしくて、ものごっついコードを吐いてくれたりします。
そういう「初級から中級(上級?)に上る階段」としての、ブラックボックス
の理解ってのは結構重要だと思ってます。
# ブラックボックスとして扱うことは大切ですが、ブラックボックス
# のままでは応用問題などで非常に困ることが多いので。

引用:

「オブジェクト指向プログラミングの概念の把握」ですかひょっとして。


概念の把握、というよりは「ブラックボックスの中の把握」ですね。
実装の把握、と言ってもいいかもしれない。

技術の根っことか基礎知識とか、いわゆる「泥臭い」部分の把握って、
ある一定以上のスキルアップには不可欠だと思っているので。
# そーゆー意味では、GUI作るときは「Xlibの把握」からはいりたい人(笑

そんなバックボーンからの発言でした。
顔爺
ベテラン
会議室デビュー日: 2003/10/03
投稿数: 52
投稿日時: 2004-06-30 22:44
亀レスです。

引用:

そしてちょっと聞きたいことがあります。
>顔爺さま、Jittaさま
なぜRubyなのでしょうか?



Java でもいいと思うのですが、教育ならスクリプト言語の方がいいと思いますし、
Java に比べて変な癖が少ないと思いますので。

<例>
Java の変数にはプリミティブ型と参照型がある。
メソッドに引数を渡すとき、
1.プリミティブ型の場合、値のコピーを渡す。
2.参照型の場合、参照の値を渡す(リモート経由を除く)。
</例>
あつしfx
大ベテラン
会議室デビュー日: 2002/04/08
投稿数: 104
お住まい・勤務地: XPできるところ
投稿日時: 2004-06-30 23:35
Squeak(その他)に入れました。
要するにsmalltalkなんですけど、現在の環境にあわせたやつですので。
オブジェクト指向の考え方というか感覚をつかむなら最適だと思うのです。
まきば
会議室デビュー日: 2004/06/17
投稿数: 7
投稿日時: 2004-07-01 00:05
Rubyが良いです。
わたしはこれでオブジェクト指向とはなんたるかを学びました。
それまで「理解していたつもり」になっていたことがハッキリと分かりました。
いまでもプログラムで困ったときは「Rubyだったらどう組むか?」
として考えるようにしています。開発者様、メンテナの皆様に感謝します。
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2004-07-01 13:03
引用:

がるがるさんの書き込み (2004-06-30 18:49) より:
よくあるのが、動物とかをクラスに例えて
コード:
class 動物 {
  method 鳴く();
}

class 猫 継承 動物 {
  method 鳴く() { return "にゃん"; }
}

class 犬 継承 動物 {
  method 鳴く() { return "わん"; }
}


を見せると、
・分からない
・クラスと継承の概念は分かるがプログラム実装として想定しにくい
・クラスと継承の概念は分かりプログラム実装として想定できる
ってタイプがいるですね。
んで、2番目って結構多いです。
ここの実装を理解させるためにアプローチが2種類あるみたいで。
・根本的に知らないから叩き込む(ずぶの初心者に多い)
・メモリの概念とかと結びつかない(熟練のC技術者に多い)
ってのがありまして。
前者の場合、OOP系の言語で教えたほうが早いのですが、後者の場合
「裏ではね」ってのをきちんと教えたほうが理解が早いです。


つまり、C言語をオブジェクト指向の教育に用いるのは、熟練のC技術者等がメモリの概念と結びつけることができなくて理解できずにいる場合、ということですね?

引用:

がるがるさんの書き込み (2004-06-30 18:49) より:
もう一つ「汚いプログラム」ってのは、もうちょっと致命的で。
OOP系の言語のみをやっている人に多いのですが「そのメソッドが
実際にはどれくらいのマシンコストを払ってると思う?」って言う概念
が全然ないらしくて、ものごっついコードを吐いてくれたりします。
そういう「初級から中級(上級?)に上る階段」としての、ブラックボックス
の理解ってのは結構重要だと思ってます。
# ブラックボックスとして扱うことは大切ですが、ブラックボックス
# のままでは応用問題などで非常に困ることが多いので。

引用:

「オブジェクト指向プログラミングの概念の把握」ですかひょっとして。


概念の把握、というよりは「ブラックボックスの中の把握」ですね。
実装の把握、と言ってもいいかもしれない。

技術の根っことか基礎知識とか、いわゆる「泥臭い」部分の把握って、
ある一定以上のスキルアップには不可欠だと思っているので。
# そーゆー意味では、GUI作るときは「Xlibの把握」からはいりたい人(笑

そんなバックボーンからの発言でした。



なるほど。
しかしながら、「オブジェクト指向」と言った時点で既に、パフォーマンス面は多少犠牲にしてでも他の面でのメリットの方を求めているわけですよね。

処理速度が第一とするなら、オブジェクト指向なんかやめてしまって、C言語やアセンブリ言語でコーディングした方がよい。(まぁこれらの言語にしたってコードによってはとんでもなく遅いものにもなり得ますが)

上級プログラマに求められるスキルは、高速なコードを書けることだけではないし、またそれが多くのスキルの中の1番目でもないのではありませんか。

まぁ理解させるための補助として用いる程度ならいいと思いますが、C言語だけでなにがなんでもオブジェクト指向の教育を行ってしまおうというのなら私は反対です。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-07-01 13:29
どもでふ。がるです。
引用:

つまり、C言語をオブジェクト指向の教育に用いるのは、熟練のC技術者等がメモリの概念と結びつけることができなくて理解できずにいる場合、ということですね?


はい。推す一つの理由としてはその辺ですね。
実際、結構苦労するので(苦笑

引用:

がるがるさんの書き込み (2004-06-30 18:49) より:
しかしながら、「オブジェクト指向」と言った時点で既に、パフォーマンス面は多少犠牲にしてでも他の面でのメリットの方を求めているわけですよね。


この辺は是とも否とも取れる発言ですね。
「パフォーマンス第一」というのが鉄則として持ち出された場合、設計
など可能な部分についてはオブジェクト指向を可能な限り持ち込みます
が、実装上でクラスを使って、というのはまずやらないと思います。
このあたりはご指摘の通りで。

ただ、「オブジェクト指向プログラミングの範疇でよりパフォーマンス
の高い」組み方、というのはこれはこれで存在します。
なので、OOPを使っているメリットをつぶさずに生かしている範疇内で、
より「高いパフォーマンスを出せる組み方」と「低いパフォーマンスに
なる組み方」があるのですが。
ブラックボックスの中身が全然把握できてないと、この辺の天秤感覚が
生まれないみたいです。
でも、中級以上であれば、やはりこの辺の把握とか考察とかってのも
大切だと思うわけでして。
このあたりが「オブジェクト指向プログラミングのブラックボックスを
把握する必要性」を感じるところですね。
これが、推す理由の第二になります。

引用:

処理速度が第一とするなら、オブジェクト指向なんかやめてしまって、C言語やアセンブリ言語でコーディングした方がよい。(まぁこれらの言語にしたってコードによってはとんでもなく遅いものにもなり得ますが)


Cやニーモニックの方が、組み方による早い遅いの差分は大きいかも(笑
パフォーマンス1000倍Upとか、怖い話も耳にしますからねぇ。
まぁ実際、速度を求められるときは、やはり私もCですね。ゲーム屋さん
に言わせると「贅沢なり」とか言われるのですが(笑

引用:

上級プログラマに求められるスキルは、高速なコードを書けることだけではないし、またそれが多くのスキルの中の1番目でもないのではありませんか。


ですね。ただ、高速なコードを書けること「も」また必要なスキルの
一つではあると思います。

引用:

まぁ理解させるための補助として用いる程度ならいいと思いますが、C言語だけでなにがなんでもオブジェクト指向の教育を行ってしまおうというのなら私は反対です。


補助というか、「ある側面から」理解させるために、という程度に
考えてます。つまり「いくつもある手段の一つ」ですね。
っちゅか「C言語だけでなにがなんでもオブジェクト指向の教育」は、
多分無理です(笑
…かなり遠回りすれば可能かもしれませんが…自信ないなぁ。
まぁ、C言語でメモリの概念とか構造体とかポインタ周りとかメンテナンス
のしんどさとか構造化プログラミングとかを把握していただくとずいぶん
楽に教えられそうですが。
かなり回り道になりますけどね(笑

他の言語ではやりにくい、C言語ならではのメリットはやはり「メモリ周り」
だと思いますねぇ。C言語が高級言語になりきれていない分、その辺を
きちんと扱うことで、メモリへの配慮感覚が養えますから :-P

教育って色々な角度から色々な意味合いで存在すると思うです。
なので、多分「誰も書かないだろうなぁ」って角度からちょろっと
書いた、という程度にとらえていただけるとうれしいです ^^

スキルアップ/キャリアアップ(JOB@IT)