プログラミングの基本原理が説明されているすばらしい記事の翻訳を公開したいと思います。 いくつかの言葉-実際にこれがすべてであり、誰がそれを必要としているのか? 私の答えは、過去数ヶ月間、私自身、志望のプログラマーである私が、他の分野の子どもたちを積極的に教育しようとしているということです。 この困難な作業では、コードが退屈で退屈であるという事実についての固定観念を打破するために、主に興味深い資料を探してインターネットを利用しなければなりません。 残念なことに、そのような資料はそれほど多くありません。 Habrを定期的に読んでいる初心者は非常に多くいると思いますが、この記事は非常に興味深く有用です。
したがって、オリジナルはSong Zhengによるものです。
プログラミングの基本
パート1.簡単なコード例。
プログラミングは非常に難しいと思うかもしれません。 しかし、これはそうではありません。 実際、私たちはそれぞれプログラミングスキルを持っています。 期待していなかった?
車を運転していて、目の前に「STOP」サインが表示されていると想像してください。 そして、あなたは何をしますか? 止まります!
私たちの脳の奥深く、ニューロンの神経叢に、次のコマンドがプログラムされています(Rubyの場合):
if self.saw(stopSign) self.stopCar() end
「自己」という言葉の意味を理解しやすくするために、「I」に安全に置き換えることができます。意味は変わりません。 一般に、ほとんどのプログラミング言語は、その構文について次のスタイルに従います。
.()
この例を解析する
この例の名詞はオブジェクトと呼ばれます。 オブジェクトはさまざまな便利なことを実行できます。
この例の動詞は、メソッドまたは関数と呼ばれます。 このメソッドには数行のコードが含まれており、このコードは呼び出すたびに実行されます。
たとえば、頭の中のどこかで、マシンを停止するメソッドは次のようになります。
def stopCar() self.stepOnBrakes() self.lookLeft() self.lookRight() end
カッコ内の「アイテム」はパラメータと呼ばれます。 これは、メソッドに渡したいデータの一種です。
今、あなたが教師であり、前例のない寛大さの行動を示し、すべての生徒に甘いものを贈ることを決めたと想像してください(元の「素晴らしい教師」で、私たちの緯度には適用されません)。 Ferreroを各生徒に配布します。
あなたがコンピューターだったら、次のようなことが頭の中で実行されます。
for e in students self.giveChocolateTo( e ) end
このコードでは、「e」の代わりに、キャンディを贈る各生徒が順番に置き換えられます。
あなたはどう思いますか、どのようにスポーツをするかをコードで説明できますか? たとえば、次のように:
while ( self.amStillAlive() ) self.keepRunning() end
プログラミングのロジックの90%が「if」ステートメントによって処理されることに注意してください-タスクの進行と「for」および「while」ループを制御します。
先に進む前に、実行可能なコードを数行表示して、その結果を確認したいと思います。
x = 0 while (x > -1) x = x+1 end
例を見てみましょう。
まず、変数xに0に等しい値を保存し、その間にxが -1より大きい間、変数xの値を1増やします。
この例で予想される結果は、変数の値を1ずつ増分する無限ループです。 これにより、コンピューターのプロセッサーが熱くなり始め、温かい空気の流れで体が温まります。 冬の寒い日の暖房パッドとして理想的=)
ループと条件文を知っていると、すぐにプログラミングを開始できます。 それらを正しく操作することを学ぶ価値があります。 必要なときにいつでもオブジェクトを作成できるはずです。
パート2.基本。
あなたが世界の創造の6日目にGdであると想像してください。 皆さんは5日間一生懸命働きましたが、今では1日で何百万人もの人々を作成する必要があります。 これを実装する方法は? たぶんあなたはただ座って人々を一人ずつ作るべきですか? いいえ、必要なのは、人がどのように見えるかを記述するレイアウトだけです。そして、一日の終わりまでにこのレイアウトからできるだけ多くの人を作成できます。
実際、この「レイアウト」はプログラミングの基本概念の1つであり、クラスと呼ばれます。 「クラス」という言葉に不快感を覚えるたびに、「レイアウト」に置き換えてください。これにより、認識が容易になります。
あなたがゲーム開発者であり、このゲームで多くの異なるキャラクターを作成したいと考えてみましょう。 最初に、クラスから作成されたオブジェクトに表示するプロパティを持つクラスを作成する必要があります。
class Character def initialize(nameVariable, intelligenceVariable) @name = nameVariable @intelligence = intelligenceVariable end end
'initialize'メソッドは、新しいオブジェクトが作成されるたびに実行され、基本クラスで説明したプロパティを提供します。 このメソッドでは、キャラクターの名前「nameVariable」と知性のレベル「intelligenceVariable」を設定します(プレフィックス「@」は、キャラクターのプロパティのプレフィックス「self」です)。 キャラクターが作成されると、そのプロパティが作成されます。 「A」と「B」という2つの文字を作成してみましょう。
a = Character.new( "aperson", 10 ) b = Character.new( "bperson", 10 )
キャラクターAには、2つの「aperson」と「10」の値を設定します。これらはこのキャラクターのプロパティになります(オブジェクトが作成されるたびに、「initialize」メソッドが実行されるため)。
その結果、2つのキャラクターがあり、そのうちの1つは「aperson」と「bperson」と呼ばれ、知能レベルは10です。
クラスを記述するだけでキャラクターがどれほど簡単に作成できるかご存知ですか? Character.new(...)を呼び出すだけで、オブジェクトを作成できます。 たとえば、次のように:
x = 0; while( x < 5,000,000,000 ){ Character.new( "Adam", x ) Character.new( "Eve", x ) x = x+1; }
これにより、50億人のアダムスとイブが生み出され、知性の重要性が徐々に高まりました。 このようなもの:
ここで、各キャラクターが有名なジャージーショーのテレビ番組を見ることができると想像してみましょう。 なぜなら この機能はすべてのキャラクターに適用されるため、レイアウトクラスで指摘する価値があります。
class Character def initialize(nameVariable, intelligenceVariable) ... end def watchJerseyShore() @intelligence = @intelligence - 2 end end
これ以降、キャラクターが「watchJerseyShore」メソッドを使用するたびに、彼の知性のレベルは低下します。 たとえば、次のように:
a.watchJerseyShore() a.watchJerseyShore()
キャラクターAはショーをそれぞれ2回観戦し、知能レベルは6に低下しました。
おそらくこれは明らかではありませんが、キャラクターの知性の価値を何らかの形で変更する唯一の方法は、watchJerseyShore()メソッドを呼び出すことです。 この硬直性は、キャラクターが値を変更するのを防ぎます。この場合、キャラクターの知性レベルです。 インテリジェンスのレベルを誤って変更することはできません。意図的にwatchJerseyShore()メソッドを呼び出すことによってのみ変更できます。 この重要な概念はEncapsulationと呼ばれ、オブジェクトのプロパティへのアクセスを制限するという考え方です。 たとえば、ある日、飲みすぎた後、メソッドa.intelligence = 100000を実行しようとすると、エラーが発生します。
さらに、「name」、「intelligence」などのプロパティを持ち、「Jersey Show」ショーを視聴する「Teenager」クラスを作成する場合、作成したすべてのコードを盲目的にコピーする必要があります文字クラスを説明しますか? いや! 必要なのは、基本クラスからプロパティを継承することだけです。 TeenクラスをCharacterクラスで展開すると、CharacterのすべてのプロパティがTeenクラスに継承されます。
class Teenager < Character end
次に、Teenagerオブジェクトを簡単に作成できます。
teeny = Teenager.new( "teeny", 10)
Teenyは、「Teeny」という名前と10のインテリジェンスレベルを持つティーンエイジャークラスのオブジェクトです。Teenyのインテリジェンスレベルを下げるには、ジャージーショーを見るだけです。
teeny.watchJerseyShore()
この能力は重要な概念であり、 継承と呼ばれます。
ティーンエイジャーは他の人と同じようには成長しなかったので、ジャージーショーを観る彼の方法の価値を変えることにしました。 このメソッドは次のように変更できます。
class Teenager < Character def watchJerseyShore() @intelligence = @intelligence + 2 end end
それ以来、ティーンエイジャーがジャージーのショーを見るたびに、彼の知性のレベルは上がります! Teenagerクラスは、すべてのメソッドとプロパティを基本クラスから継承できるだけでなく、それらを再定義することもできます。 基本クラスから継承するメソッドの再定義におけるこの柔軟性は、 多態性と呼ばれる重要な概念です。
すべて一緒に-カプセル化、継承、および多態性は、オブジェクト指向プログラミング言語の基礎を形成します。 これらの3つの原則を理解すれば、Ruby、Java、Objective C、C#、Python、その他多くの言語を理解することは難しくありません。
終了
この素晴らしい記事の一部を自由に翻訳してみました。 私は大衆への思考の流れを改善するという点で努力すべきことがたくさんあると確信しているので、厳密に判断すると、すべてが考慮され、修正されます。
この素晴らしい記事が初心者にとってOOPの3つの基礎を理解するのに役立つことを心から願っております。