"Bună, Amigo. Astăzi vă voi vorbi despre un program tipic Java. Vestea cea mare este că fiecare program scris în Java este format din clase și obiecte."

"Știu deja ce sunt clasele. Ce sunt obiectele?"

„Să începem cu o analogie. Să presupunem că vrei să construiești o navă mică. Lucrezi la un proiect și apoi trimiți planul la o fabrică, unde o navă va fi asamblată conform designului tău. Sau o duzină de nave, sau tot atâtea nave. după cum doriți. Ideea mea este că zeci de nave identice pot fi realizate pe baza unui singur plan."

„Exact așa funcționează cu Java.”

Programatorii Java sunt ca inginerii de proiectare, cu excepția faptului că, în loc să creeze planuri, ei scriu clase. Părțile navelor sunt realizate pe baza planurilor, în timp ce obiectele sunt create pe baza claselor.

„În primul rând, scriem clase (facem planuri). Apoi, când programul este rulat, mașina Java creează obiecte pe baza acestor clase. Este exact ca și cum sunt construite navele dintr-un plan. Un plan – multe nave. Navele sunt diferite. . Au nume diferite și transportă încărcături diferite. Dar sunt totuși similare. Toate au un design identic și sunt capabile să îndeplinească sarcini similare."

— Bine, înțeleg analogia cu nava ta. Ați putea să-mi mai dați câteva pentru a mă ajuta să fiu sigur că înțeleg ce spui?

„Să luăm, de exemplu, albinele...”

"Nu, zgârie asta. Am avut o experiență proastă cu albinele. Să luăm furnicile."

„O colonie de furnici este un bun exemplu al modului în care obiectele interacționează. Orice colonie de furnici este formată din trei clase: regina, soldații și furnicile lucrătoare. Numărul de furnici din fiecare clasă variază. De obicei, o colonie are doar o regină, zeci de soldați. , și sute de muncitori. Trei clase, sute de obiecte. Furnicile urmează reguli stricte în timp ce interacționează cu furnicile din propria lor clasă și cu furnicile care aparțin altor clase."

„Acesta este exemplul perfect. Un program tipic funcționează exact așa. Există un obiect principal care creează obiecte în toate clasele. Obiectele interacționează între ele și cu lumea exterioară. Comportamentul obiectelor este cablat (programat) intern. ."

"Nu prea înțeleg. Adică, nu înțeleg deloc."

„Aceste două explicații sunt două fețe ale aceleiași monede. Adevărul este undeva la mijloc. Primul exemplu (despre planuri și nave) ne arată legătura dintre o clasă și obiectele sale. Este o analogie puternică. Analogia cu coloniile de furnici demonstrează relația dintre obiecte, care sunt descrise de clase și există numai în timp ce un program rulează."

„Vrei să spui că trebuie să scriem clase pentru toate obiectele utilizate într-un program și apoi să le descriem interacțiunile?”

„Da, dar este mai ușor decât pare. În Java, în timp ce un program rulează, toate entitățile sunt obiecte. Scrierea unui program înseamnă descrierea diferitelor moduri în care obiectele pot interacționa. Obiectele pur și simplu își cheamă metodele și transmit datele necesare. lor."

„Este puțin neclar, dar cred că aproape că înțeleg”.

„De unde știm ce metode să apelăm și ce date să transmitem?”

„Fiecare clasă are o declarație, care indică utilizarea intenționată. În mod similar, fiecare metodă are o declarație care indică ce poate face și ce date trebuie să îi transmitem. Pentru a utiliza o clasă, trebuie să aveți o înțelegere generală a ceea ce O face. Trebuie să știi exact ce face fiecare metodă, dar nu exact cum o face . Este ca o baghetă magică."

"Huh! Sună frumos."

„Aici. Aruncă o privire la codul unei clase care copiază fișiere:”

Copiați c:\data.txt în 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();
    }
}

„Nu pot spune că am înțeles totul, dar cred că am înțeles esența.”

— Minunat. Atunci ne vedem data viitoare.

— Aproape că am uitat. Iată sarcina ta de la Diego.