「オブジェクト指向言語」を含む日記 RSS

はてなキーワード: オブジェクト指向言語とは

2011-04-01

悪癖のあるPHPerからみた他言語

JAVA
J2EEやらJ2SEやら色々あって良く分からない。
オブジェクト指向言語ということだけは知っている。
クラスしかりの設計や、型の変換/比較が面倒くさいので続ける気が起きない。


●Perl
ちょっと書き方間違っただけですぐに「Internal Server Error」になるので飽きる。
perl案件があるんだけど…と聞かれると「いやー作れるんですけど、しばらく触ってないから」とか言って逃げる。


●Ruby
使ってるやつの大半はナルシスト。「はぁ、Rubyコードふつくしい…」とか言ってるのを見ると虫酸が走る。
言語作者もPHPをすぐdisるので嫌い。案件少ないくせに調子乗ってるグループに属する。


●C言語
LSIC試食版で遊んでみるも、黒いコンソール画面に文字が出るだけなので飽きる。
ガリガリ書ける人は天才に見える。


●Javascript
変数名の頭に$をつけてよくエラー起こしてしま言語。
「OFFにしてるブラウザも多いっすよ?」を武器に戦うもAJAXブームに押され仕方なく書いてる。


●Python
PHPより歴史が古いのに、なぜか新参者という扱いになっている。

2011-02-09

http://anond.hatelabo.jp/20110209221517

よく知らんけど、単に関数が1級オブジェクトかどうかの違いってことじゃないの?

要するに関数型言語なのかそうじゃないのかの違い。

なんで全部関数型にならなかったのかはもっとわからないけど、やっぱ組織立ってでかいシステム作るには手続き型のオブジェクト指向言語の方が何かとやりやすかったんじゃないかなあ。

2010-08-30

http://anond.hatelabo.jp/20100830002051

こちらはいちいち実例を挙げてるのに対し、お前はイメージでしか語ってないから全然話が進まないんだよ

お前も実例出して言え

たとえばこれなら、オブジェクト指向言語オブジェクト指向プログラミングして偽である、有名なプロジェクト名を挙げながら発言しろってこと

発言の仕方自体も指摘しなきゃ駄目とは、はぁ。

2010-08-29

http://anond.hatelabo.jp/20100829151700

使える、と主張してたヤツはたくさんいるが、プロジェクトバージョンが2か3ぐらいになると大抵撤回する。

オブジェクト指向言語オブジェクト指向プログラミングしたところで偽にしかならんのは大量のプロジェクト証明しとるよ

有名なところじゃlinuxカーネル2.4とかか?

2010-01-16

大阪大学基礎工学部情報科学科について

大学教育について話題になっているようですので、私が卒業した、大阪大学基礎工学部情報科学科について書いてみたいと思います。

大阪大学基礎工学部情報科学科は、昭和45年に最初に国立大学に設立された情報工学関連学科のうちの一つで、コンピュータサイエンスの分野では日本で最も古い歴史を持っている学科、ということになります。

情報科学科の特徴は、そのプログラミング実習の充実ぶりです。入学すると、まずPascalというプログラミング言語構造プログラミング勉強することになります。次にアセンブリ言語であるCASL勉強し、Pascalアセンブリ言語を応用してC言語勉強します。またその後、スクリプト言語であるPerl関数型言語MLオブジェクト指向言語としてJava学習します。

また、言語だけではなく、コンピュータサイエンスの基本であるアルゴリズムデータ構造についても幅広く学ぶことができます。

全ての実習は課題が出され、実際にコードを書かなければいけません。例えばC言語の授業の最終的な課題は、「shのようなシェルプログラムを作成すること」でした。最終的には、「Pascal風の言語CASLに変換するコンパイラを作成する」という課題に取り組むことになります。

大阪大学は全体的に単位の取得が厳しいことで知られていますが、情報科学科も例外ではありません。もしプログラミングをあまりしたことがないのであれば、遅くまで実習室にこもることになると思います。だけど、それは情報工学世界で生きていくためには必要な知識なのです。

実習で勉強する言語は、Javaを除くとあまり現在使われている主流の言語とは言えないのですが、様々な言語を学ぶのは「プログラミング言語はそれぞれに違いがあり、それぞれに適した用途がある」ことを理解することに繋がります。また大学卒業してから、新しい言語を学ぶ必要が出てきたとき、それに対応する能力を磨くことができます。

日本大学で、ここまで実戦的なコンピュータに関する教育を行っている場所はあまりないのではないか、と思います。コンピュータがどのように動いているのか、内部原理までしっかり教えてくれます。卒業生の進路は、研究者というよりは、エンジニアとして開発の現場で働くことが多いようです。

大阪大学入試問題は、東大京大と違って特殊な問題はそれほど出ません。努力でなんとかなるレベルだと思います。

情報工学は新しい分野なので、大学院研究するために必要な知識は他の分野ほど多くありません。このため情報工学科では、3年生の夏に大学院試験を受けて合格すれば、学部を卒業しなくても4年目から大学院に進むことができます。この仕組みを活用すれば、5年で大学院卒業できます。実際、学部生の1/4くらいはこの仕組みを活用しています。

もちろん、ここに書いたのは情報科学科の全てではありません。ネットにも他に情報がありますし、もし興味があったら、大学オープンキャンパスに行ってみるのもよいと思います。

コンピュータ世界は変化が激しくて、エンジニアとして生きていくのはとても大変ですが、それでもいい、プログラマとして将来何かを作りたいんだという人であれば、ここはそのための力を与えてくれるはずです。進学先として検討してもらえたら幸いです。

2009-09-30

プログラミング勉強するならJavaScript

オブジェクト指向言語としてどうとか、実行速度がどうとか、実行環境依存しないかどうかとか、

そういったことは置いておくとして、初心者がこれからプログラミングを始めて、単なるプログラミングのお勉強にとどまらず、

何か他人とは違うことをしたいという場合には、迷わずオススメしたい言語がある。それはなんだろうか?

ってもう答えは出ている。JavaScriptタイトル見れば分かるじゃんww

なぜJavaScriptが偉大かというと、他の誰もJavaScriptをまともに出来る人なんていないからwwwww

はてな社員のあの人とかあの人みたいなのは別にして、普通にIT業界とか見ていたら分かるんだけれども、

なかなかJavaScriptがまともに出来る人というのが見あたらない。というか、いないんじゃねとツッコミたくなる。

だから、JavaScriptキッチリね、キッチリが大事ではあるけれども、キッチリ勉強したらば、それはもう他人と大きな差がつくこと間違いない。

これだけAjaxとか言われているわけだから、もう重要言語であることには間違いないけれども、キッチリできる人がいないので、

キッチリ出来れば、一部の企業からは重宝される。もちろん、一通りの言語は出来ないといけないに決まっているだろう馬鹿、と

言いたくなるような人もいるかもしれないが、とりあえず、JavaScriptマスターしますたと言うだけでかなり魅力的な人材

とにかく常識的に考えて、JavaScriptくらい、重要でありながら優れた人材がいない言語は無いし、これは勉強するしか無いわけJK

よくJavaScripterが「JavaScript第5版」について話すのを聞いていると、全部把握していないような人が山のようにいるわけJK

だからもう基本のところできっちり把握していなくて、こんなもの調べれば分かるんだから覚えなくて良いと開きなおっちゃってる有り様だから、

これはもうどうしようもないと言わざるをえない。みんなJavaScript真剣にやっていない。それだけでなく、真剣にやっているとおぼしき

人までもが、ぜんぜん理解が足りていなかったりするからもうどうしようもない。こういう状況だからこそ、まじめにJavaScript

やればきっと良い結果がでるのではないかなということを言っているのでおじゃる。繰り返すように、JavaScript重要言語であるし、

いまはそんな人少なくなっていると思うが、言語としておもしろみのないものでは決してない。JavaScriptやるだけで、オブジェクト指向

いろんなことのさわりだけでもつかめてしまう。というか、俺はデザインパターンまで勉強できてしまった。というと、自慢に聞こえてしまうが、

そうではなくて友人連中もみな勉強した。とにかく、簡単なのだから、できてしまうのである。JavaScriptは確かにブラウザごとの差など

ややこしい部分があったりするが、べつにそんなことは大したことはなくて、実際に、覚える量は大したものではないと思う。

情報がまとまっていないから覚えるのが大変であるかのように錯覚しているだけで、リファレンスをみんなで構築し、仲間うちで利用

するようにしたら、とても効率よく学習できることをここに助言しておく。とそんなことはどうでもよくて、とにかく量としては多くないと。

要するに、JavaScriptは多くなくて簡単だし重要だし強力だしお勉強になるしお仕事になるので勉強したらよい。

それなのにいまだにマトモに勉強していないような人が多いのはどういう了見なのだろうか?これは真剣に知りたい。

トップの人がマトモに勉強していないと、その中で本を書いたりした人がクソな本を出して、それの悪影響を受けるということになる。

これではなかなかマトモな勉強しようにも出来ないという感じになるのではないか。いや実際には、大半の本はクソだと分かるから、

最初から相手にしない感じで良いと思うし、それよりはネットからの情報をもとに先ほども触れたようにリファレンスを社内で構築する。

それで良いのであるから、本など大した問題ではないのだが、それをやっている人がいかに少ないかという現状を嘆いているということである。

つまり、トップの人がマトモに勉強していないと、本もろくな本がないということになるから、けっきょくなかなかスゴイJavaScripterが現れない

という事態がずっと続いているのではないかという気がする。それに拍車をかけているのは、古い作法をいまだに固持しているプログラマ

おおくて、新しいJavaScriptの知識や作法を学ぶための方法が個人の学習意欲と学習工夫にゆだねられているという点にあると思う。

おもうに、ネットなんか便利だけれども、受け身になってしまいやすいから、能動的に情報をどうこうしようという気力のある人が少ないような

感じがしている。だから、なかなかマトモに常に新しいことに取り組むような人が現れなくて、たまにそういう人が現れただけで注目される

という滑稽なことになっている。別にそんなの凄くないよというような人がもてはやされたり、すごくないJavaScript記事がもてはやされたり。

2009-07-16

http://anond.hatelabo.jp/20090716063623

CじゃなくてC++なのはオブジェクト指向だから。C++やればどっちにしろCも勉強することになるし。

RubyPythonオブジェクト指向言語ではあるけど、オブジェクト指向的な書き方をバリバリやることはあまりないでしょ。

2009-07-08

本当にnewっていらない子

なんかPerlのblessっぽい。

JavaScriptのnewって本当にいらない子?(http://d.hatena.ne.jp/jdg/20090706/1246840565)

というよりperlのnewっぽい。なぜか。

classクラス定義してnewでインスタンスを生成する言語を「一般的オブジェクト指向言語」とすると、

つまり、javascriptでnewを(直接)使わず、class(のようなもの)を作ればperlっぽくなる。

そもそもnewって何するの?

オブジェクトを作る。オブジェクトを作るには3つの動作が必要である。

  1. 領域を作る
  2. クラスと結びつける
  3. 初期化する

通常は言語仕様でこれらを行う"new"という命令が用意されている。しかし、必ずしも必要な物ではない。perlでは言語仕様としてはnewが用意されていない。new関数が存在するのはコーディング規約に従っているからに過ぎない。代わりにblessが用意されている。なぜこのようになっているのか。理由はいたって簡単だ。perlオブジェクトの実態はリファレンスだ。初期化を行うコンストラクタはどの道定義せねばならない。だから必要なのはリファレンスパッケージを結びつけるおまじないblessだけだ。コンストラクタで好きなリファレンスを用意し、好きなように初期化してblessすればよい。コンストラクタ名前コーディング規約でnewと決めた。一方javascriptはnewを用意した。{}でオブジェクトは作れるし、どの道コンストラクタは作る必要があるのに。

そもそもblessって何するの?

オブジェクトクラスを結びつける。しかし、javascriptクラスを持たないので必要はない。代わりに必要なのは、継承元との結びつき、プロトタイプチェーンの構築だ。

そもそも継承って何するの?

既存のクラスの性質や振る舞いを流用する。default状態を与える。一般的オブジェクト指向言語ではクラス定義時に継承元となるクラスを指定する。javascriptではクラスの代わりにオブジェクトを指定する。

そもそもクラスって何するの?

クラスとはオブジェクトの性質・振る舞いの定義だ。しかし、ダック・タイピングではオブジェクトの性質や振る舞いはオブジェクトの持つメンバにより決まるため、そのような環境ではオブジェクトに初期値と継承関係を与えるのが主な仕事となる。

そもそもコンストラクタって何するの?

コンストラクタオブジェクト初期化を行う。javascriptではクラスがないため継承コンストラクタによりオブジェクト初期化される。

つまりコンストラクタ継承すれば良いんじゃね?

var object = function(o) {
  var F = function() {};
  F.prototype = o.prototype;
  return new F;
};

JavaScriptのnewって本当にいらない子?(http://d.hatena.ne.jp/jdg/20090706/1246840565)

個人的には

var object = function(o) {
  var F = function() {};
  F.prototype = o;
  return new F;
};

で良いんじゃね?って思う。

更に、コレでは初期化しないから

var object = function(o, n) {
  var F = function() {};
  F.prototype = o;
  f = new F;
  if (n) for (var i in n) f[i] = n[i];
  return f;
};

みたいな。

さらにせっかくだからメソッドにして

var object = function(o, n) {
  var F = function() {};
  F.prototype = o;
  f = new F;
  if (not f.inherit) f.inherit = function(n) {object(this, n)};
  if (n) for (var i in n) f[i] = n[i];
  return f;
};

とか。

しかし、なんでこんなに今の継承機構は使いづらいのか。

2009-03-12

ギークにはなれない

一応プログラマ(というよりはソフトウェア開発者)として仕事してるんだけど、俺はギークにはなれないなとつくづく思う。

ぶっちゃけプログラミングとかコンピュータアーキテクチャネットワークプロトコルみたいなものに興味が無いんだよね。

俺にとってプログラミングは、その背景にある数学モデルマテリアライズあるいはマネタイズするためのツールでしかない。

○○ハックとか、どの言語が有利だとか、凝ったコーディングテクニックだとかデータ構造の細かな工夫なんかには全然興味が無いんだ。

ぶっちゃけそこそこ習得能力はある方じゃないかと思う。コーディング始めてまだ1年経ってないけどオブジェクト指向(C++)でバリバリ書ける。

JavaC#みたいにガベージコレクタがあって抽象度の高いオブジェクト指向言語なら(たぶん)少し慣れればかなり書けるだろう。

でも興味無いんだよね。だからコンピュータ大好き少年のようにどんどん新しいことを覚えて勝手にのめり込んでいくようなことができない。

勉強しなきゃなとは思うから本とか読むけど、あくまで義務感でやってるだけ。

プログラミングそのものには興味が無いから、作るシステム目的がつまらなかったらやる気が無くなる。

それからLINUXとかにも興味が無いので、なかなか使いこなせなくて困ることがある。

ギークにはなれない。どうやって生きていくのがいいかなあと思う。

2009-03-10

http://anond.hatelabo.jp/20090310095053

私はいまではオブジェクト指向言語普通に読み書きできますが、関数とかポインタとか理解してC言語普通に書けるようになるまで1、2年くらい、クラスとかオブジェクトとか理解してオブジェクト指向言語わかるようになったのはさらに2,3年かかった。

ここまでくるのに勉強し続けてきたし、メジャー言語は大体読めるようになった今でも常に勉強し続けてないと知らないことはまだまだある。新しい概念も次々出てくる。

簡単に学べる圧倒的抜け道なんてないよ。みんなわかんないことは勉強して、すこしづつ理解するんだよ。

正直、こんなのプログラミングがある程度好きじゃないとやってられないよ。でも、プログラミングしてて面白みが感じられるなら、勉強して成長していく過程を楽しめるなら、今わからないことも時間はかかるかもしれないけどきっとわかるようになる。

だけど、それらが苦痛でしかないのならあなたはプログラマに向いてないかもしれないよ。設計とか、仕様書書きとか、顧客との折衝とか、ソフトウェア開発周辺にはプログラム書く以外の仕事も色々あるから、そういう方面に逃げるのも手だよ。

2008-12-31

http://anond.hatelabo.jp/20081231190326

そういうのはバッドノウハウとは言わないの?

関数ポインタバッドノウハウとは言わないでしょ。C言語自体がバッドノウハウの結果だと言うなら、当たりだけど:)

手続き関数という抽象まことに一般的な存在で(数学では汎関数というのもある)、それをC言語で直接的に表現したのが関数ポインタ関数的なものを オブジェクト指向言語オブジェクトとして実装するほうがバッドノウハウだと思う。 少なくとも私は JavaのComparableインタフェースよりも C言語の heapsort/mergesort/qsort の関数引数 int (*compar)(const void *, const void *) のほうがシンプルで どちらかといえば本質をよりよく表していると思う。 なぜ関数的なものを表現するのに オブジェクトとかinterfaceとか継承とか「余計な概念」を導入する?それこそバッドノウハウでしょ。 まあでもC言語にはクロージャが無いから、関数的なものも扱いづらいことこの上ないが、Cにクロージャが無いこと自体はバッドノウハウとは言わないでしょー。

逆も然りで、オブジェクトを表現するために 関数を使ってれば そればバッドノウハウだけど、オブジェクト関数ほど一般的な概念ではないと思う(オブジェクトなんか無くても別にいい、かも?)。

あ、もちろん難読化や最適化や動的ロードのために件のようなコードを書くのはバッドノウハウに近いだろう。

http://anond.hatelabo.jp/20081231183502

関数ポインタバッドノウハウどころか、手続き的な抽象を使いたいところで多用しますぜ。超重要。 そして関数型プログラミング言語存在意義みたいなもん。

C++オブジェクト指向言語だと 継承と仮想関数を使うけど、同じようなケースで C言語では関数ポインタを使うんすよ。

先にもかいたけど、ソートの比較関数とか、スレッドの開始とか、コールバックとか。

で、変数ポインタ関数ポインタ曖昧性(?) の件は、 私は重箱の隅をつつき過ぎたが…

要するに、 (例えば) x86機械語に対応するデータを生成して、その先頭アドレス関数ポインタにぶち込んで実行するという手法。

  1. 過去は動的ロードのための手法として使われた
  2. 生成される機械語コードの難読化や、xbyakとかで出来るような最適化もあり (コード上の定数を書き換えたり)
  3. ウィルスで使われてる手法のひとつ。 振る舞いは見た目バグっぽくもある。 ので 実行時に OSCPUアンチウィルスはこの機能に対して保護機能を働かせる場合も
  4. こんなこと普通はしないから コンパイラやツールは そういう変なキャストを見つけると バグとして警告を出す
  5. 人工知能的なプログラミングにも使えるかも?

1. は、もう使われてない。 2. みたいな利点はある。3.4.みたいな例があるために現在では扱いづらいかも? 5. みたいな使い方がしたければ…悪い事は言わない、evalがあるRubyPythonLispSchemeあたりを使っとけ。 って感じっす

# またトラバ先を間違えた。

http://anond.hatelabo.jp/20081230225149

C/C++にいくつか思うこと (ちなみに、プログラマ始めたのはCができた頃でC++よりも私のプログラマ歴の方が長い)

Cはポインタ というか、ポインタを使いこなすことで、チューニングしていく言語だから ポインタ使いたくない=チューニングしたくない

って人は他の高級言語で良いと思う。ただ、動画などの処理をC/C++又はアセンブラ以外で書く人というのは、あまり聞かないので

速度が必要=C/C++って事かと思う。

昔、全くチューニングしていない、CとJavaを比べて同じ速度だからJavaでもOKというレポートを読んだことがあるのだが、あれは酷かった。

Cはチューニングしたときに、もっとも伸びしろが大きく、必要な場合アセンブラと並記できることで、ほぼアセンブラという領域まで

チューニングできるところが魅力。その際、ポインタは無くてはならない。知っておくべき技術

繰り返しになるけどチューニングしない人には意味がない言語と言われればその通り。

また、ポインタだけではなく、レジスタについても知っておくとCでの伸びシロが大きくなる。

そして、少なくともアセンブラレベルでのPUSH,POP,CALLは覚えておいた方がよい。

関数コールをすると、レジスタ類の待避アセンブラレベルでは走り、その上、スタック引数返値を積んでジャンプするという

ものすごく遠大な処理がアセンブラレベルでは走っているが、Cレベルでは1行の関数コールに見える。

という事を理解しておくと、C++でのインライン関数重要性や、再帰関数が実行時にはかなり重い理由が頭の中に浮かんでくる。

最近コンパイラ最適化してくれる場合も多いけどw

こういう言い方をすると、最近はCPUが早いから大丈夫とか言う人が多いが、じゃぁWindows Vistaは売れましたか?と聞きたい。

少なくともチューニングが必要な事もある。必要ないこともある。という事で選択すれば良いと思う。

たかだか、数行のスクリプトチューニング不要ならそりゃ、Perlつかうさ

参考までに書いておくと、個人的感覚ではC++はオブジェクト指向言語ではない。

アセンブラにまで行き着く C言語を大規模開発する時に最低限必要となる抽象化をするための言語

そのために、まともにOOPで設計するとC++では重くなる事が多い。いかに、崩せるかがキモ

またC++使いか?エセC++使いか?の見分け方は

constを正しく使えるか?参照を正しく使えるか? vtableの説明ができるか?

という質問に正しく答えられるか?で見分けると結構見分けがつくと思っている。

2007-09-28

[][]私はこれで perl から乗り換えました

OO, Perl, Ruby

Perl から Ruby への移行メモ

INTRODUCTION OF RUBY

class

404 Blog Not Found:coders.each{|you| you.get(this) if you.langs[0] != 'ruby' } # - 書評 - 初めてのRuby

1章 ようこそ、Rubyのある生活へ

1.1 Rubyの特徴

1.1.1 オブジェクト指向言語

1.1.2 より良いPerl

日本 Ruby 会議 2007 - Log0610-S5

ある研究によれば、生産性はそれぞれのプログラマでそれぞれ違う。

でも、あるプログラマに着目すれば、

そのプログラマ時間あたりに書けるコードの行数は、プログラミング言語によらず決まっている、

たとえば一年に50,000行なのだそうだ。

行数が決まっていたら、

どの言語で一番多くのことを達成できる?

そう、Rubyだよね。

どうしてそんなに Love Ruby ?

例えば C のプログラムより 50 倍遅くなったとして、実行時間はどのくらい変わるだろうか?

もし C のプログラムが 0.01 秒で終わる としたら、

Ruby 版は 0.5 秒。あなたのプログラムは 0.49 秒速くす るために C で書く価値があるのか?

プログラムは開発の時間よりも保守時間のほうがかかるというのはもはや常識だけども、

Ruby で書いてあれば例えば、

C で書いたプロ グラムよりも楽に保守できるはずだ。

そういう点でも Ruby は非常にいい。

だいたい、スピードに対してごちゃごちゃ言うなら C じゃなくアセンブラで書けばいい。

それをなんで C で書いてるのかって言えば、

それはもちろん「コードがわかりやすい」とか、「早く書ける」って のが理由だろう。

そして、Ruby は C よりわかりやすいし速く書ける。

ということは、「C よりも Ruby」というのは非常に自然な選択では ないだろうか?

Perl, Python, Ruby の比較

404 Blog Not Found:「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い

実行速度より実装速度(前編) - Object Station

ポール・グレアム「プログラミング言語が解決するもの」 - らいおんの隠れ家

Rubyが解決: Perlはその場しのぎだし、Lispの文法はおっかない。

2007-06-15

http://anond.hatelabo.jp/20070615171101

じゃ、OOはなんだろう。おおきいおっp

僕もだいすきおきいおっp

話を元に戻そう。OOはオブジェクト指向object-orientedだよ。オブジェクト指向言語を扱った事がないなら、まずはオブジェクト指向について馴れる所からかも知れない。

何はともあれまったりがんばって。つまずいたらキーワードRubyを見ると良いかも。それにしてもオソルベシrubist。

2007-05-03

LL編プログラミング言語ヒエラルキーにおける罵倒

perlRuby
CPANみたいなのはないの?
Rubyperl
それってオブジェクトって言えるの?
perlPHP
もう少しセキュアに書けないの?
PHPperl
単体でDBが扱えないの?
RubyPHP
もう少しわかりやすく書いてくれないかな?
PHPRuby
もう少しパフォーマンス良くならない?
Java → 他LL言語
結局どれも大規模開発には向かないよね。
LISP → 他言語
なんでそんなにごちゃごちゃしてるの?
Smalltalkオブジェクト指向言語
結局劣化コピーじゃないの?

Pythonはよく知らない((いや、他もよく知らないけど))のでパス。最後の方はおまけ。採点お願いします。

ログイン ユーザー登録
ようこそ ゲスト さん