「こんにちは、アミーゴ。今日は典型的な Java プログラムについてお話します。大きなニュースは、Java で書かれたすべてのプログラムはクラスとオブジェクトで構成されているということです。」

「クラスが何であるかはすでに知っています。オブジェクトとは何ですか?」

「たとえ話から始めましょう。小さな船を建造したいとします。設計に取り組み、その青写真を工場に送り、そこであなたの設計に従って船が組み立てられます。あるいは十数隻、あるいは同じ数の船が組み立てられます」私が言いたいのは、1 つの設計図に基づいて同じ船を何十隻も作ることができるということです。」

「それがまさに Java での動作方法です。」

Java プログラマーは設計エンジニアに似ていますが、設計図を作成する代わりにクラスを作成する点が異なります。 船の部品は設計図に基づいて作成され、オブジェクトはクラスに基づいて作成されます。

「まず、クラスを作成します (設計図を作成します)。その後、プログラムが実行されると、Java マシンがこれらのクラスに基づいてオブジェクトを作成します。これは、船が設計図から建造される方法とまったく同じです。1 つの設計図 – 多くの船。船は異なります。それらは名前が異なり、運ぶ貨物も異なります。しかし、それでも似ています。それらはすべて同じ設計を持ち、同様のタスクを実行できます。」

「わかりました。船のたとえはわかりました。あなたの言っていることが確実に理解できるよう、もう少し教えていただけますか?」

「たとえばミツバチを例にとってみましょう...」

「いいえ、そんなことは気にしないでください。私は蜂に嫌な思いをしたことがあります。アリを連れて行きましょう。」

「アリのコロニーは、物体がどのように相互作用するかを示す良い例です。アリのコロニーは、女王アリ、兵アリ、働きアリの 3 つのクラスで構成されます。各クラスのアリの数は異なります。通常、コロニ​​ーには女王アリが 1 匹だけ、兵士が数十匹います、数百の働きアリ。3 つのクラス、数百のオブジェクト。アリは厳格な規則に従って、自分のクラスのアリや他のクラスに属するアリと交流します。」

「これは完璧な例です。典型的なプログラムはまさにそのように動作します。すべてのクラスにオブジェクトを作成するメイン オブジェクトがあります。オブジェクトは相互に、また外部世界と対話します。オブジェクトの動作は内部的に組み込まれています (プログラムされています)。 。」

「よく分かりません。というか、全く分かりません。」

「これら 2 つの説明は同じコインの裏表です。真実はその中間にあります。最初の例 (設計図と船に関する) は、クラスとそのオブジェクトの関係を示しています。これは強力なアナロジーです。アリのコロニーのアナロジーは、オブジェクト間の関係。これらはクラスによって記述され、プログラムの実行中にのみ存在します。」

「プログラムで使用されるすべてのオブジェクトのクラスを作成し、それらの相互作用を記述する必要があるということですか?」

「はい、でも、思っているよりも簡単です。Java では、プログラムの実行中、すべてのエンティティはオブジェクトです。プログラムを書くということは、オブジェクトが対話できるさまざまな方法を記述することになります。オブジェクトは、単に互いのメソッドを呼び出し、必要なデータを渡すだけです。彼らへ。"

「少し曖昧ですが、ほぼ理解できたと思います。」

「どのメソッドを呼び出し、どのデータを渡すかをどうやって知ることができるでしょうか?」

「各クラスには、その使用目的を示す宣言があります。同様に、すべてのメソッドには、何ができるか、どのデータを渡す必要があるかを示す宣言があります。クラスを使用するには、何を行うのかについて一般的に理解する必要があります。 「そうです。各メソッドが何をするのかを正確に知る必要がありますが、それがどのように機能するかを正確に知る必要はありません。それは魔法の杖のようなものです。」

「へー!いい感じですね」

「ここで、ファイルをコピーするクラスのコードを見てください。」

c:\data.txt を c:\result.txt にコピーします
package com.codegym.lesson2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy
{
    public static void main(String[] args) throws IOException
    {
        FileInputStream fileInputStream = new FileInputStream("c:\data.txt");
        FileOutputStream fileOutputStream = new FileOutputStream("c:\result.txt");

        while (fileInputStream.available() > 0)
        {
            int data = fileInputStream.read();
            fileOutputStream.write(data);
        }

        fileInputStream.close();
        fileOutputStream.close();
    }
}

「すべてを理解したとは言えませんが、本質は理解できたと思います。」

「よかったです。それではまた次回。」

「忘れるところだった。ディエゴからの任務だ」