"Hola, amigo. Hoy te contaré sobre un programa típico de Java. La gran noticia es que todo programa escrito en Java consta de clases y objetos".

"Ya sé qué son las clases. ¿Qué son los objetos?"

"Comencemos con una analogía. Supongamos que desea construir un barco pequeño. Trabaja en un diseño y luego envía el plano a una fábrica, donde se ensamblará un barco de acuerdo con su diseño. O una docena de barcos, o tantos barcos como quieras. Mi punto es que se pueden hacer docenas de naves idénticas basadas en un plano".

"Así es exactamente como funciona con Java".

" Los programadores de Java son como ingenieros de diseño, excepto que en lugar de crear planos, escriben clases. Las piezas de los barcos se fabrican en base a planos, mientras que los objetos se crean en base a clases. "

"Primero, escribimos clases (hacemos planos). Luego, cuando se ejecuta el programa, la máquina Java crea objetos basados ​​en estas clases. Es exactamente como se construyen barcos a partir de un plano. Un plano: muchos barcos. Los barcos son diferentes . Tienen nombres diferentes y transportan carga diferente. Pero siguen siendo similares. Todos tienen un diseño idéntico y pueden realizar tareas similares".

"Está bien, entiendo la analogía de tu barco. ¿Podrías darme un par más para ayudarme a asegurarme de que entiendo lo que estás diciendo?"

"Tomemos, por ejemplo, las abejas..."

"No, borra eso. Tuve una mala experiencia con las abejas. Tomemos las hormigas".

"Una colonia de hormigas es un buen ejemplo de cómo interactúan los objetos. Cualquier colonia de hormigas consta de tres clases: la reina, los soldados y las hormigas obreras. El número de hormigas en cada clase varía. Por lo general, una colonia solo tiene una reina, docenas de soldados , y cientos de trabajadores. Tres clases, cientos de objetos. Las hormigas siguen reglas estrictas cuando interactúan con hormigas de su propia clase y hormigas que pertenecen a otras clases".

"Este es el ejemplo perfecto. Un programa típico funciona exactamente así. Hay un objeto principal que crea objetos en todas las clases. Los objetos interactúan entre sí y con el mundo exterior. El comportamiento de los objetos está cableado (programado) internamente ."

"No lo entiendo del todo. Quiero decir, no lo entiendo en absoluto".

"Estas dos explicaciones son dos caras de la misma moneda. La verdad está en algún punto intermedio. El primer ejemplo (sobre planos y barcos) nos muestra la conexión entre una clase y sus objetos. Es una poderosa analogía. La analogía de la colonia de hormigas demuestra la relación entre objetos, que se describen por clases y existen solo mientras se ejecuta un programa".

"¿Quieres decir que necesitamos escribir clases para todos los objetos usados ​​en un programa y luego describir sus interacciones?"

"Sí, pero es más fácil de lo que parece. En Java, mientras se ejecuta un programa, todas las entidades son objetos. Escribir un programa equivale a describir las diversas formas en que los objetos pueden interactuar. Los objetos simplemente llaman a los métodos de los demás y pasan los datos requeridos a ellos".

"Es un poco confuso, pero creo que casi lo entiendo".

"¿Cómo sabemos qué métodos llamar y qué datos pasar?"

"Cada clase tiene una declaración, que indica su uso previsto. De manera similar, cada método tiene una declaración que indica lo que puede hacer y qué datos debemos pasarle. Para usar una clase, debe tener una comprensión general de lo que lo hace. Necesitas saber exactamente lo que hace cada método, pero no exactamente cómo lo hace . Es como una varita mágica".

"¡Eh! Suena bien".

"Aquí. Eche un vistazo al código de una clase que copia archivos:"

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

"No puedo decir que lo entiendo todo, pero creo que entendí la esencia".

"Genial. Hasta la próxima entonces".

"Casi lo olvido. Aquí está tu tarea de Diego".