"สวัสดี Amigo วันนี้ฉันจะบอกคุณเกี่ยวกับโปรแกรม Java ทั่วไป ข่าวใหญ่คือทุกโปรแกรมที่เขียนด้วย Java ประกอบด้วยคลาสและวัตถุ"

"ฉันรู้แล้วว่าคลาสคืออะไร วัตถุคืออะไร"

"เรามาเริ่มด้วยการเปรียบเทียบกัน สมมติว่าคุณต้องการต่อเรือลำเล็กๆ คุณทำงานออกแบบแล้วส่งพิมพ์เขียวไปที่โรงงาน ซึ่งเรือจะถูกประกอบตามการออกแบบของคุณ หรือเป็นโหลๆ หรือเป็นหลายๆ ลำ ตามที่คุณต้องการ ประเด็นของฉันคือสามารถสร้างเรือที่เหมือนกันได้หลายสิบลำจากพิมพ์เขียวเดียว"

"นั่นคือวิธีการทำงานกับ Java"

" โปรแกรมเมอร์ Java ก็เหมือนกับวิศวกรออกแบบ แทนที่จะสร้างพิมพ์เขียว พวกเขาเขียนคลาส ส่วนเรือถูกสร้างขึ้นตามพิมพ์เขียว ในขณะที่วัตถุถูกสร้างขึ้นตามคลาส "

"อย่างแรก เราเขียนคลาส (สร้างพิมพ์เขียว) จากนั้นเมื่อโปรแกรมทำงาน เครื่อง Java จะสร้างอ็อบเจกต์ตามคลาสเหล่านี้ มันเหมือนกับวิธีการสร้างเรือจากพิมพ์เขียว พิมพ์เขียวเดียว – หลายลำ เรือต่างกัน พวกมันมีชื่อต่างกันและบรรทุกของต่างกันแต่พวกมันก็ยังคล้ายกันพวกมันทั้งหมดมีการออกแบบที่เหมือนกันและสามารถทำงานที่คล้ายกันได้”

"ตกลง ฉันเข้าใจการเปรียบเทียบเรือของคุณ คุณช่วยบอกฉันอีกสองสามข้อเพื่อให้แน่ใจว่าฉันเข้าใจสิ่งที่คุณพูดได้ไหม"

"ยกตัวอย่างเช่นผึ้ง ... "

"ไม่ เกานั่นสิ ฉันมีประสบการณ์แย่ๆ กับผึ้ง มาจับมดกันเถอะ"

"ฝูงมดเป็นตัวอย่างที่ดีของการโต้ตอบของวัตถุ ฝูงมดใดๆ ประกอบด้วยสามประเภท ได้แก่ มดราชินี มดทหาร และมดงาน จำนวนมดในแต่ละคลาสจะแตกต่างกันไป โดยปกติแล้ว ฝูงมดจะมีราชินีเพียงหนึ่งตัวและทหารอีกหลายสิบตัว และคนงานหลายร้อยคน สามคลาส วัตถุนับร้อย มดปฏิบัติตามกฎที่เข้มงวดเมื่อพวกมันมีปฏิสัมพันธ์กับมดในคลาสของตัวเองและมดที่อยู่ในคลาสอื่น"

"นี่คือตัวอย่างที่สมบูรณ์แบบ โปรแกรมทั่วไปทำงานแบบนั้น มีวัตถุหลักที่สร้างวัตถุในทุกคลาส วัตถุมีปฏิสัมพันธ์ระหว่างกันและกับโลกภายนอก พฤติกรรมของวัตถุเป็นแบบเดินสาย (ตั้งโปรแกรม) ภายใน "

“ฉันไม่ค่อยเข้าใจ ฉันหมายความว่า ฉันไม่เข้าใจเลย”

"คำอธิบายทั้งสองนี้เป็นสองด้านของเหรียญเดียวกัน ความจริงอยู่ระหว่างนั้น ตัวอย่างแรก (เกี่ยวกับพิมพ์เขียวและเรือ) แสดงให้เราเห็นถึงความเชื่อมโยงระหว่างคลาสกับวัตถุ มันเป็นการเปรียบเทียบที่ทรงพลัง การเปรียบเทียบฝูงมดแสดงให้เห็นถึง ความสัมพันธ์ระหว่างวัตถุซึ่งอธิบายโดยคลาสและมีอยู่ในขณะที่โปรแกรมกำลังทำงานเท่านั้น"

"คุณหมายความว่าเราต้องเขียนคลาสสำหรับออบเจกต์ทั้งหมดที่ใช้ในโปรแกรม จากนั้นจึงอธิบายการโต้ตอบของออบเจกต์เหล่านั้น"

"ใช่ แต่มันง่ายกว่าที่คิด ใน 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();
    }
}

"ฉันไม่สามารถพูดได้ว่าฉันเข้าใจทั้งหมด แต่ฉันคิดว่าฉันเข้าใจสาระสำคัญของมัน"

"เยี่ยมเลย แล้วเจอกันใหม่"

“ฉันเกือบลืม นี่คืองานของคุณจากดิเอโก”