2010-11-30 7 views
6

Objective-Cは、SmalltalkスタイルのメッセージングをCプログラミング言語に追加するオブジェクト指向プログラミング言語です。私はSmalltalkを学ぶことと同じようにLispを学ぶのと同じようにうまくいくかもしれないと理解していますが、Smalltalk固有の概念がObjective-Cをより完全に理解するのに役立つかどうかを知りたいです。ストーリー"。もしそうなら、具体的には何ですか?Objective-Cプログラミング:Cおよび/またはSmalltalkヘルプを学習しますか?

Cプログラミングを既に知っていると仮定して、Smalltalkから何を学ぶことができますか?明らかにObjective-Cには、C言語ではない(つまり、メッセージング、インタフェース、プロトコル、動的な型定義、委譲、リフレクション、それはオブジェクト指向の)概念はたくさんありますが、Smalltalkから派生しています。

編集:私はObjecting-Cでプログラミングする場合、Smalltalkを学ぶよりも、Cを学ぶことが自分の時間をよく使うことであるという点で、Cプログラミング言語を追加しました。

+0

私はSmalltalkを知らないので、Objective-C開発者がどれくらい助けてくれないかを保証する回答は得られません。つまり、2つの異なる言語を同時に学習しようとするよりも、オブジェクト指向プログラミングのコンセプトに慣れ親しむことがより助かります。** –

+1

前にCを学習していないObj-C ... Obj-Cの一部であるため。 – Vovanium

答えて

6

Smalltalkは非常にコンパクトな言語であり、最も純粋なオブジェクト指向言語の1つです。 Objective-Cは、SmalltalkとCの間の実用的な妥協点であり、非常に大きな違いがあります。たとえば、Smalltalkではすべてがオブジェクトであり、単純な数値でもあり、オブジェクトの操作はすべてメッセージ送信によるものです。メッセージは、名前に関係なく同じ順序で評価されます。だから次

8 + 9/23 + 16 * 8 

は必ず左から右の順に評価されるため、オペレータ「+」、「/」と言語は数に渡されだけのメッセージであることには特別な意味を持っていません「*」オブジェクト。

Objective-CはSmalltalkスタイルのオブジェクトをCに追加しますが、Cのプリミティブ型と組み込み演算子を保持するCの厳密なスーパーセットです。したがって、Objective-Cでは、演算の通常の数学的順序が上記の式に適用されます - 除算と乗算が最初に行われ、その後の加算が行われます。

学習CはObjective-Cを完全に理解するために不可欠です。 Objective-CはCの厳密なスーパーセットであり、明示的に同じシンタックスとセマンティクスを明示的に使用します。それは、物事にどのような操作を適用するかを知らずに、物のポインタを保持するCの能力によって、オブジェクトの概念をCに移植する。次に、C構文を拡張して、オブジェクトにメッセージをポストし、オブジェクトが受け取る可能性のあるメッセージを宣言して実装する手段を提供します。

Objective-Cランタイムの一般的な設計は、特にCocoaと組み合わせると、セレクタの概念、クラスのインスタンス、階層およびシステムのためのファクトリとしてのメタクラスの使用など、Smalltalkから直接得られますモデリング・ビュー・コントローラ(Smalltalkのオリジナル、現在はほぼ普及していますが)の分割と、標準のコレクションとオブジェクトで定義された多くのメッセージです。

スモールトークは、フロー制御のシステムも大きく異なり、「ブロック」と似ているが微妙に異なるアイデアを持っています(ただし、ほとんどの新しい実装では2つが並んでいます)。 Appleは実際にObjective-Cオブジェクトの新しいメソッドの多くで利用されているCレベルの拡張としてブロックを実装しています。

ゴールドバーグスモールトーク80の本は非常によく書かれており、読みやすいと言われています。言語はとても単純で、2〜3章ですべての言語を学ぶことができます。ほとんどの複雑さは、実行時に利用できるオブジェクトに呑み込まれ、明らかにそのものは転送されません。あなたにとってのメリットは、オブジェクトとランタイムに関するイデオロギー的なものが、印刷物の特徴とは非常に異なることに終わります。逆に、Cはフロー制御や算術演算のようなものを言語機能にしています。これは実際に何が起こっているかを知る前に、より多くの構文と読み込みを意味します。

結論として、Smalltalk-80本(紫色の本)は読んだり価値がありますが、必ずしも完全に関連するわけではありません。どのような場合でも学習Cは必須です。 K & Rへの私の言及は比較のためのものです。

+0

コンセンサスは:Cは重大である;スモールトークは興味深いが不必要である。 –

+2

それは絶対に間違っています。良いObjective Cを書くには良いSmalltalkと少しのCが必要です –

+2

Objective-Cを書くにはObjective-Cを学ぶだけです。私たちが言っているのは、2つの前駆体のことだけです。必要な唯一のものはCです。あなたがCを書くことができる良いObjective-Cを書くことができれば、必ずしもSmalltalkを書くことはできません。 – Tommy

0

私は最高の背景を目的学ぶことだと思います - Cは、あなたがCを知っている場合、あなたは簡単にオブジェクト指向プログラミングに精通し、客観的に記述しますC.である - 個人的にC.

、私は「ドンスモールトークを学ぶのはいい考えです。

+1

いいえ、オブジェクト指向プログラミングの学習は容易ではありません。コンパイルをオブジェクト指向にすることと同じではありません –

+1

プログラミングスタイルを変更して原則を理解するだけです。たぶん、Cでhuuugeの経験を持っている人のために、それは本当に難しいですが、それは大したことではありませんでした – Knodel

+0

...私は過去10年間C#、JavaとDelphiで見たコードを見て私はこれらの言語のプログラミングの約20のプロジェクションがオブジェクト指向のプログラミングを学んだことを正確に言いたいと思います:*適用* it –

2

免責条項:スモールトークは分かりません。

Obt-CのスキルがSmalltalkを学ぶことによって利益を得ることができると確信していますが、私の意見では、Cを学ぶのに時間がはるかに良いでしょう。Obj-CをCに掘り下げる前に学んだ人として、スモールトークは簡単に取り出せるので、Cから取ったコンセプトははるかに難しい。

0

メソッドを呼び出す代わりにオブジェクトにメッセージを渡すことに慣れることは、SmallTalkのバックグラウンドがなければ非常に簡単です。しかし、SmallTalkはC(SuperColliderの変形を除く)のようには見えず、コードブロックや他のクレイジーなものをファーストクラスのオブジェクトとして扱っています。 in SuperCollider {i < 5}.while({ // do stuff })この動作はObjective-Cには及ばず、おそらく私のようにあなたを混乱させるでしょう。

+1

Objective Cのブロック(そして非常に醜いもの) –

3

は、私はちょうど例は をこの

[SomeObjectのメッセージ]を参照して

SomeObjectのメッセージを参照してくださいクネーデルに反対しなければなりません。

Objective-Cは同じ「位置決め」を使用していますが、それはSmalltalkからのものです。 Smalltalkの学習は、常に時間の投資です。そして、この分野の意味は100%smalltalkです。それは、ある種のメッセージをObjectまたはClassに送信します。それはそれ自身MetaClassを持っています。

はい、Objective-Cの使い方を知っているが、OOに慣れていることはCによって教えられていません。CとSmalltalkがObjective-Cの使用を簡単に知っています。しかし、Objective-Cは単にクラスライブラリからの「力」という言葉だけではありません。だからそれに時間を費やすことは確かに良い時間を費やすことです。

はい、Objective-Cを最大限に活用するために、CとSmalltalkを知っている方がよいでしょう。

2

はい、Objective-CのObjective部分はSmalltalkと非常によく似ています。 Smalltalkを最初に学ぶなら、Objective-Cの概念のほうが簡単になり、メッセージを送る構文はショックにはなりません。しかし、私はSmalltalkがObjective-Cよりも習得が容易であるとは思っていません。あなたがCをすでに知っていれば確かにそうではないので、Objective-Cをすぐに学ぶかもしれません。

スモールトークは、IMOという素晴らしい言語であり、自分自身のために学ぶ価値があると言っています。

5

Smalltalkから実際のオブジェクト指向プログラミングを学ぶことができます。 Java、C#、Delphiのようなハイブリッドはうまくやっていないようです。 10年のハイブリッドの後、私のコーディングスタイルは数ヶ月のSmalltalk後に大幅に改善されました。

iPhoneの開発者は、ライブラリの設計やその構文よりも使われているコンセプトにもっと興味があるでしょう。 cはそこに助けになることはありません(あなたはいくつかの基本を理解する必要があります)。 Objective Cでのプログラミングは、Smalltalkでのプログラミングともっと似ています。 Smalltalk IDEはObjective Cのものよりはるかに優れており、オブジェクト指向のコードがどのように機能するか、そして構築する方法をよりよく理解するのに役立ちます。スモールトーク(IDE)で他のオブジェクト指向言語よりもコードをきれいに整えておくほうがはるかに簡単です。少なくともjavaや.netと比較して、ココアライブラリは非常にうまく設計されています。それらは、例えば、よりも幾分良好な形状であるように見える。 Squeak Smalltalkのもの。

関連する問題