GNU/Linux >> Linux の 問題 >  >> Linux

方法:プログラミング入門-最初のプログラム

ハウツーシリーズ

これは、プログラミング入門

の5部構成のシリーズの第2部です。

  1. プログラミング入門:はじめに
  2. プログラミング入門:最初のプログラム
  3. プログラミング入門:変数、型、およびデータの操作
  4. プログラミング入門:フロー制御
  5. プログラミング入門:オブジェクト指向プログラミング

あなたは戻ってきました!

またお会いできて光栄です。Atlantic.NETでこのシリーズの最初の記事を完成させ、最初のプログラムを作成して実行し、作成したものが人間が読めるコードからマシンにどのように変化するかを学び、深く祝福したことを願っています。指示。

心配しないでください。まだその記事を読んでいない場合は、今すぐ読むことができます。ここであなたが戻ってくるのを待ちます。

シリーズのこのパートでは、その最初のプログラムをさらに詳しく調べ、プログラミングとソフトウェア開発のより多くの概念を理解することに焦点を当てます。具体的には、入力と出力を見て、オブジェクト指向と呼ばれる概念を紹介します。 、そして抽象化を使用して複雑なコードを隠す方法と理由を探ります 。

ビジネスに取り掛かりましょう。

「HelloWorld!」を掘り下げる

前回の記事では、非常に基本的な「HelloWorld!」を作成しました。自分で作成した2行のコードで構成されるプログラム。追加のコード行がありましたが、Visual Studioによって生成されました。これらは、作成するプログラムの種類と使用する言語に固有のものであるため、今のところこれ以上時間をかけないでください。

ただし、追加した2行は、特に出力と入力に焦点を当てているため、それらをさらに詳しく調べてみましょう。

Console.WriteLine("Hello World!");
Console.ReadLine();

Console.を無視します (「コンソールドット」を読んでください)今のところ、行の一部ですが、行を書き込んでから行を読み取るようにマシンに指示があることがわかります。現在構築しているようなコンソールプログラムまたはアプリケーションでは、これらはユーザーと対話するための2つの主要な方法です。 Console.WriteLineを使用してコンソール画面に何かを出力します Console.Readlineを使用してユーザーから入力を取得します 。結果は下の図1のようになります。

図1:コンソール出力

このコンソールアプリケーションは、私たちが構築できる多くの種類のアプリケーションの1つにすぎません。アプリケーションの種類が異なれば、入力と出力へのアプローチも異なります。たとえば、単純なWebページを作成している場合、ユーザーと対話できるコンソールはありません。 Webページは、静的なテキストとおそらくいくつかの写真です。プログラムがそれを生成する場合もありますが、コンソールアプリケーションでインタラクティブ機能を構築するのと同じように、それでもあまりインタラクティブではありません。

注:Webの初期には、CGI(Common Gateway Interface)と呼ばれる方法があり、このようなコンソールアプリケーションをWebページに直接配置し、URLを介して対話することができました。

Webページコードの例

Webページには、インタラクティブな動作のまったく異なる方法があります。たとえば、次のWebページコードを見てください。これが完全に異質なものであるかどうかを心配する必要はありません。

<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>

このWebページは、「Helloworld!」という見出しをユーザーに表示するだけです。以下のように、他にはあまりありません。

図2:HelloWorldのWebページ

このWebページ、または他のWebページでさえ、それ自体では多くのことを実行できません。インタラクティブ機能を作成するために、ブラウザはJavaScriptなどの言語を介してコマンド命令を解釈し、Webページのレイアウト、コンテンツ、構造の操作など、さまざまな方法でWebページを操作できます。

たとえば、下の図3では、HTMLページでJavaScriptを使用して、ユーザーに通知ボックスを表示しています。 VisualStudioを使用してHTMLページとJavaScriptも編集していることに注意してください。

図3:HelloWorldページのJavaScriptアラート

Webページがユーザーから情報を取得できる1つの方法は、Webページフォームを使用することです。これらは通常の紙のフォームのようには見えないかもしれませんが、それがWebの美しさです。退屈で巧妙である必要はありません。見事で魅力的な外観にすることができます(ただし、見事で魅力的な外観を実現するために必要な構成は、ここでは範囲を超えています)。

フォームは、外観に関係なく、ブラウザがどこかに送信できる特定の情報をユーザーから取得できます。たとえば、Webページからの入力を読み取ることができるプログラムがある場合、ブラウザにフォームのコンテンツをそのプログラムに送信させることができます。

イベント駆動型プログラミング

もう1つのアプローチは、フォームデータをJavaScriptと組み合わせて使用​​し、Webページ自体にユーザーからのデータを処理させることです。たとえば、JavaScriptで常にHello Worldを表示するのではなく、ユーザーの入力をフォームに簡単に表示させることができます。

図4:動的JavaScriptアラート

ここでのコードについてはあまり気にしないでください。ただし、プログラムのフローが通常最初から最後まで1行ずつ行われるコンソールアプリケーションとは異なり、このWebページではevent-と呼ばれるものを使用していることに注意してください。駆動型プログラミング 、発生するイベントにコードを応答させることによって。上記の例では、イベントonblur 注意が入力ボックスから離れると発生し、そのイベントに反応してアラートを表示するコードを記述できます。

とにかく、ここでは、プラットフォーム、言語、フレームワークの境界を越える特定のパターンをすぐに認識できます。プログラムは、ユーザーに情報を提示することから始まり、その後、ユーザーは何らかの方法でプログラムに指示を送信します。コンソールアプリケーションでは、この交換はConsole.WriteLineなどのコマンドを介して行われます。 およびConsole.ReadLine 。 Webでは、この交換はHTMLページを表示し、ユーザーにフォームへの入力を求めることで行われます。

プログラマーとして、プログラマーとして行うことは、すべての言語、プラットフォーム、およびツールで非常に類似していることをすぐに学びます。構文は言語によって異なる場合があり、プログラムフローの観点からの考え方も異なる場合がありますが、その背後にあるのは、コマンドを実行するコンピューターが同じであるということです。操作に使用する言語に関係なく、同じロジックが適用されます。

気づいたら、マトリックスができあがります。 コードを超えてマシンとその背後にあるロジックを確認し、言語、プラットフォーム、ツールを使用して、好きな方法でマシンにコマンドを送信する方法を突然完全に理解する瞬間。

ただし、その前に、学ぶべきことがたくさんあります。他にもお見せしたいことがいくつかあるので、少しプログラムに戻りましょう。

クラス、オブジェクト、メソッド–ああ、私の!

2行の「コンソールドット」の部分から始めます。

Console.WriteLine("Hello World!");

Console partは、System名前空間の一部として含まれている静的クラスへの参照です。

ああ、待って…それはまだ意味がありません。最初にクラスとオブジェクトについて少し話す必要があります。おそらくクラスについてたくさん話す必要があります およびオブジェクト 、しかし今のところ、オブジェクト指向がプログラミング言語全体に普及しているため、オブジェクト指向とは何かという基本的な理解に焦点を当てましょう。

オブジェクト指向は、実際のオブジェクトのプログラムによる表現を作成し、それらのオブジェクトを本物であるかのように操作する必要があるというプログラミングのアイデアです。この定義はそれほど正確ではありませんが、今のところ十分に役立ちます。

主に、プロパティと呼ばれる2つのコンポーネントタイプを介してオブジェクトとのこの相互作用を実現します。 およびメソッド 。良いニュース?すでにそのうちの1つであるメソッドを使用しています。ここのプログラムでは、WriteLine およびReadLine コマンドはメソッドです。この記事では実際には取り上げないプロパティはオブジェクトとは何かを説明しますが、メソッドはオブジェクトができることを説明します。

オブジェクト指向のメソッドは、オブジェクトにアタッチされるか、場合によってはクラスにアタッチされます。このシリーズの後半でメソッドについてさらに詳しく学習しますが、今のところ、メソッドはオブジェクトが実行できるアクションと考えてください。

さらに、クラスとオブジェクトの違いは、ケーキのレシピとケーキの違いと考えることができます。レシピはクラスであり、ケーキはオブジェクトです。レシピがケーキの作り方を定義するのと同じように、クラスはオブジェクトの作り方を定義します。

レシピを持っていることはやや役に立たないが、それから何かを作ることは決してない。一方、ケーキはレシピなしでは存在できません。そのため、レシピやケーキなどのクラスとオブジェクトは一斉に存在します。

このアナロジーがもう少し複雑になるのは、静的クラスと呼ばれるものに関してです。 。これらのクラス、つまりレシピは、実際のものとして存在するため、静的です。実際、それらからオブジェクトを作成することさえできません。それらはレシピとしてのみ存在し、静的メソッドのみを持っています。さらに複雑なことに、通常のクラスに静的メソッドを設定できます。まだ混乱していますか?ダグラス・アダムズを思い出してください:

慌てる必要はありません!


私たちのケーキの例えでは、レシピの静的な方法は、ケーキ自体とは関係がないが、必ずしもレシピとは関係がないものである可能性があります。たとえば、レシピにPointMeToTheKitchenという静的メソッドをアタッチできます。 それは-あなたが推測できると確信しています-あなたに台所への道順を教えてくれます。ケーキはどのキッチンでも焼くことができ、レシピは特定のキッチンでケーキに変わることに依存していません。

公平を期すために、Bakingという静的クラスがある場合は、より良い、さらに複雑な状況になります。 これは、一連の静的メソッドを使用したベイク処理に関連するすべての必要な処理を処理し、PointMeToTheKitchen 方法はおそらくそこにより適しているでしょう。実際、現在のプログラムでも同じように使用できます。

繰り返しになりますが、
*レシピを使用してケーキを作成するのと同じように、クラスを使用してオブジェクトを作成します。
*オブジェクトには、それぞれ何ができるか、何であるかを定義するメソッドとプロパティがあります。
*クラスは、任意のオブジェクトの外部に存在する静的メソッドを持つことができます。
*静的クラスは、すべての外部に存在し、独自に存在します。それらを使用してオブジェクトを作成することはできません。

シリーズの終わりに向けて、オブジェクト指向にはるかに多くの時間を費やします。今のところ、それを繰り返すと、Console 2行の一部は静的クラスです。これは、どのオブジェクトからも独立して存在するクラスであり、静的メソッドも含まれていることがわかります。

詳細を削除する

もう一度私たちの行を見てください:

Console.WriteLine("Hello World!");
Console.ReadLine();

Console 静的クラスです。その主な目的は、Bakingのようにコンソールを処理するために必要なものにアクセスできるようにすることです。 クラスは、ベーキングツールへのアクセスを提供するために使用されます。

C#や同様の多くの言語でドットを記述する場合、次の括弧またはプロパティで示されるメソッドを呼び出します。事実上、「コンソールクラス、WriteLineを実行させてください。 方法をお願いします」。

注:一部の言語では、これに異なる表記を使用する場合があります。たとえば、C ++では、->を使用できます。 特定のコンテキストではドットの代わりに、Perl5は->を使用します 一貫して。


舞台裏では、Console 次に、クラスは、提供されたパラメーター(リテラルテキスト文字列「HelloWorld!」)を使用して、現在のコンソールウィンドウを呼び出し、秘密のブードゥーを実行し、そのコンソールウィンドウに送信したテキスト(文字通り「HelloWorld!」)を出力させます。 」。

次の行では、同じ静的クラスConsoleを呼び出します。 繰り返しますが、今回はReadLineを呼び出すように依頼します 方法。その見返りとして、プログラムは、Enterを押すまで待機するようにコンソールに指示します。 プログラムを進める前にキーを押してください。この場合、この入力によりプログラムが完了し、終了します。

コンソールがどのように機能するかについての複雑な詳細に入ることができますが、現時点では実際には関係ありません。 C#を学ぶためにここにいる以上に、コンソールプログラミングを学ぶためにここにいるわけではないことを忘れないでください。プログラミングの概念を学んでいます。そのため、私はそれを「秘密のブードゥー」と呼んでいますが、確かにそうではありませんが、この文脈では、魔法のように十分に進んでいるからです。

ただし、知っておくべきことは、舞台裏では、これら2つの単純なコマンドが実際には膨大な数のタスクを実行するということです。たとえば、WriteLineに渡すパラメータを解釈するだけです。 この方法では、コンピュータは特定のメモリ位置を文字列に割り当て、それらの文字をその文字列にロードし、現在のプログラムの実行をその特定のメモリ位置に向ける必要があります。

次に、CPUはこれらすべてのメモリビットを読み取り、実行中のコンテキストを把握し、オペレーティングシステムを呼び出して(次に、使用している特定のハードウェアを呼び出す必要があります)、信号をオンまたはオフにする必要があります。画面上の各ピクセルをそれぞれのカラー値に変換します。そして、この小さな遠足は、進行中のすべてを完全に正確または完全に表現したものではありません。

Visual Studioにいくつかの文字を書き込んでボタンを押すと、これらすべてのことが起こります。カーテンの後ろのこの覗き見は、抽象化と呼ばれるプログラミングのもう1つの非常に重要な原則を示しています。 。つまり、操作の複雑な詳細を隠し、使いやすい方法で操作したいと考えています。コンテンツをコンソールに出力するために、すべての本質的な詳細をWriteLineというメソッドに隠します。 。

抽象化の2つの主な利点は、記述できるコードが大幅に少なくなることと、同じ結果を達成するために毎回同じコードを繰り返す必要がないことで、より優れたコードも記述できることです。舞台裏では、単純なWriteLineで達成した結果 およびReadLine コードには数百行のコードが必要な場合があります。そのすべてのコードを書かなければならないことは、間違いを犯す可能性を大幅に高めます。

正確に言うと、ここでの例では、詳細を非表示にしているのはMicrosoftの.NETチームです。その見返りとして、アプリケーションをプログラムするための非常に単純化されたインターフェースを提供します。その文の単語を少しシャッフルすれば、アプリケーションプログラミングインターフェイス(API)と呼ぶこともできます。

他のフレームワークにもAPIがあります。たとえば、jQueryは、アニメーション、フォームの検証、コンテンツの操作など、JavaScriptがWebページのコンテンツとどのように相互作用するかについての詳細を抽象化するAPIです。 OpenGLは、グラフィックハードウェアとの相互作用を抽象化するAPIです。

複雑なアクティビティを実行する方法を提供するAPIは文字通り何千もあります。 Atlantic.NETにはクラウドサーバーを管理するためのAPIもあるため、プログラミングに慣れたら、Atlantic.NETアカウントでインスタンスを開始、一覧表示、作成、または終了するプログラムを作成できます。

注:Atlantic.NET APIは、RESTfulインターフェースと呼ばれるものを使用する必要があります。これは、これらの紹介記事の範囲を少し超えています。

最初のプログラムのまとめ

この記事では多くのことを学ぶことができましたが、今度は休憩を取りましょう。入力と出力がどのように機能するかを詳細に説明し、オブジェクト指向プログラミングの概要を説明しました。また、抽象化の重要性と、それがミスを回避し、コードの記述を簡素化するのにどのように役立つかについても学びました。 Webページとコンソールアプリケーションが入力と出力に異なるが類似したアプローチをどのように使用するかを見て、イベント駆動型プログラミングと呼ばれる完全に異なるプログラミングアプローチを少なくともざっと見ました。

次の記事では、変数とデータ型を紹介することでプログラムを拡張し、これらの概念とすでに学んだことを使用して、非常に単純な推測ゲームの構築を開始します。

ハウツーシリーズ

これは、プログラミング入門

の5部構成のシリーズの第2部です。
  1. プログラミング入門:はじめに
  2. プログラミング入門:最初のプログラム
  3. プログラミング入門:変数、型、およびデータの操作
  4. プログラミング入門:フロー制御
  5. プログラミング入門:オブジェクト指向プログラミング


Linux
  1. Cプログラミング言語-はじめに

  2. 最初のポッドをKubernetesクラスターにデプロイする方法

  3. C プログラムを使用してマシンの MAC アドレスを取得する方法は?

  1. Debian –完全なWebページコンテンツをカールさせる方法は?

  2. Pleskログインページにアクセスする方法

  3. Debian 10 で最初の Qt プログラムを作成して実行する方法

  1. Streamhutを使用して端末をWebに共有する方法

  2. CentOS8で最初のJavaプログラムを作成する方法

  3. Debianで最初のAppleSwiftプログラムを書く