"Oi, amigo. Hoje vou falar sobre um programa típico em Java. A grande novidade é que todo programa escrito em Java consiste em classes e objetos."

"Eu já sei o que são classes. O que são objetos?"

"Vamos começar com uma analogia. Suponha que você queira construir um pequeno navio. Você trabalha em um projeto e depois envia o projeto para uma fábrica, onde um navio será montado de acordo com seu projeto. Ou uma dúzia de navios, ou tantos navios como você quiser. Meu ponto é que dezenas de naves idênticas podem ser feitas com base em um projeto.

"É exatamente assim que funciona com Java."

" Os programadores Java são como engenheiros de design, exceto que, em vez de criar plantas, eles escrevem classes. As peças de navios são feitas com base em plantas, enquanto os objetos são criados com base em classes. "

"Primeiro, escrevemos classes (fazemos plantas). Então, quando o programa é executado, a máquina Java cria objetos com base nessas classes. É exatamente como os navios são construídos a partir de um projeto. Um projeto - muitos navios. Os navios são diferentes . Eles têm nomes diferentes e carregam cargas diferentes. Mas ainda são semelhantes. Todos têm um design idêntico e são capazes de realizar tarefas semelhantes."

"OK, entendi sua analogia com o navio. Você poderia me dar mais alguns para me ajudar a ter certeza de que entendi o que você está dizendo?"

"Tome, por exemplo, as abelhas..."

"Não, esqueça isso. Tive uma experiência ruim com abelhas. Vamos pegar formigas."

"Uma colônia de formigas é um bom exemplo de como os objetos interagem. Qualquer colônia de formigas consiste em três classes: a rainha, soldados e formigas operárias. O número de formigas em cada classe varia. Normalmente, uma colônia tem apenas uma rainha, dezenas de soldados , e centenas de trabalhadores. Três classes, centenas de objetos. As formigas seguem regras estritas quando interagem com formigas de sua própria classe e com formigas que pertencem a outras classes."

"Este é o exemplo perfeito. Um programa típico funciona exatamente assim. Há um objeto principal que cria objetos em todas as classes. Os objetos interagem entre si e com o mundo externo. O comportamento dos objetos é conectado (programado) internamente ."

"Eu não entendo muito bem. Quero dizer, eu não entendo nada."

"Essas duas explicações são dois lados da mesma moeda. A verdade está em algum lugar no meio. O primeiro exemplo (sobre projetos e navios) nos mostra a conexão entre uma classe e seus objetos. É uma analogia poderosa. A analogia da colônia de formigas demonstra a relacionamento entre objetos, que são descritos por classes e existem apenas enquanto um programa está em execução”.

"Você quer dizer que precisamos escrever classes para todos os objetos usados ​​em um programa e depois descrever suas interações?"

"Sim, mas é mais fácil do que parece. Em Java, enquanto um programa está em execução, todas as entidades são objetos. Escrever um programa equivale a descrever as várias maneiras pelas quais os objetos podem interagir. Os objetos simplesmente chamam os métodos uns dos outros e passam os dados necessários para eles."

"É um pouco confuso, mas acho que quase entendi."

"Como sabemos quais métodos chamar e quais dados passar?"

"Cada classe possui uma declaração, que indica o uso pretendido. Da mesma forma, todo método possui uma declaração que indica o que ele pode fazer e quais dados precisamos passar para ele. Para usar uma classe, você precisa ter um entendimento geral do que ele faz. Você precisa saber exatamente o que cada método faz, mas não exatamente como ele faz . É como uma varinha de condão."

"Huh! Parece bom."

"Aqui. Dê uma olhada no código de uma classe que copia arquivos:"

Copie c:\data.txt para 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();
    }
}

"Não posso dizer que entendi tudo, mas acho que peguei a essência disso."

"Ótimo. Até a próxima, então."

"Eu quase esqueci. Aqui está sua tarefa de Diego."