"Здравей, Амиго. Днес ще ти разкажа за една типична Java програма. Голямата новина е, че всяка програма, написана на Java, се състои от класове и обекти."

„Вече знам Howво представляват класовете. Какво представляват обектите?“

„Нека започнем с една аналогия. Да предположим, че искате да построите малък кораб. Работите върху дизайн и след това изпращате чертежа във фабрика, където ще бъде сглобен кораб според вашия дизайн. Или дузина кораби, or толкова кораби Howто искаш. Искам да кажа, че десетки идентични кораби могат да бъдат напequalsи въз основа на един план.

„Точно така работи с Java.“

Програмистите на Java са като инженерите по дизайн, с изключение на това, че instead of да създават чертежи, те пишат класове. Частите на кораба се правят въз основа на чертежи, докато обектите се създават въз основа на класове.

„Първо, ние пишем класове (правим чертежи). След това, когато програмата се стартира, Java машината създава обекти, базирани на тези класове. Това е точно Howто корабите се изграждат от чертеж. Един план – много кораби. Корабите са различни . Те имат различни имена и носят различен товар. Но все пак си прorчат. Всички имат идентичен дизайн и могат да изпълняват подобни задачи."

„Добре, разбрах вашата аналогия с кораба. Можете ли да ми дадете още няколко, за да съм сигурен, че разбирам Howво казвате?“

„Вземете например пчелите...“

„Не, изтрий това. Имам лош опит с пчелите. Да вземем мравките.“

„Колонията на мравки е добър пример за това How обектите си взаимодействат. Всяка колония на мравки се състои от три класа: кралица, войници и мравки работници. Броят на мравките във всеки клас варира. Обикновено една колония има само една кралица, десетки войници , и стотици работници. Три класа, стотици обекти. Мравките следват стриктни правила, докато си взаимодействат с мравките в собствения си клас и мравките, които принадлежат към други класове."

"Това е идеалният пример. Типичната програма работи точно така. Има основен обект, който създава обекти във всички класове. Обектите взаимодействат помежду си и с външния свят. Поведението на обектите е твърдо свързано (програмирано) вътрешно ."

„Не го разбирам съвсем. Искам да кажа, че изобщо не го разбирам.“

„Тези две обяснения са двете страни на една и съща монета. Истината е някъде по средата. Първият пример (за чертежи и кораби) ни показва връзката между клас и неговите обекти. Това е мощна аналогия. Аналогията с колонията на мравките демонстрира връзка между обекти, които са описани от класове и съществуват само докато програмата работи."

„Искате да кажете, че трябва да напишем класове за всички обекти, използвани в една програма, и след това да опишем техните взаимодействия?“

„Да, но е по-лесно, отколкото звучи. В Java, докато една програма работи, всички обекти са обекти. Писането на програма означава да се опишат различните начини, по които обектите могат да взаимодействат. Обектите просто извикват методите на другия и предават необходимите данни на тях."

„Малко е размито, но мисля, че почти го разбирам.“

„Как да разберем кои методи да извикаме и кои данни да предадем?“

„Всеки клас има декларация, която показва преднаmeaningто му. По същия начин всеки метод има декларация, която показва Howво може да прави и Howви данни трябва да му предадем. За да използвате клас, трябва да имате общо разбиране за това Howво така е. Трябва да знаете точно Howво прави всеки метод, но не и How точно го прави . Това е като магическа пръчица."

"Хъ! Звучи хубаво."

"Тук. Погледнете codeа на клас, който копира файлове:"

Копирайте 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();
    }
}

"Не мога да кажа, че разбирам всичко, но мисля, че разбрах същността."

"Страхотно. Тогава ще се видим следващия път."

„За малко да забравя. Ето ти задачата от Диего.“