"হ্যালো, অ্যামিগো! আজ আমরা আরেকটি আকর্ষণীয় বিষয় সম্পর্কে জানব। বিশেষ করে, সংরক্ষণ এবং লোড করা (পুনঃনির্মাণ) অবজেক্ট । ধরুন আমাদের একটি ক্যাট ক্লাস আছে:"

কোড
class Cat
{
 public String name;
 public int age;
 public int weight;
}

এবং ধরা যাক আমরা একটি ফাইল থেকে সংরক্ষণ এবং লোড করার জন্য একটি সুবিধাজনক প্রক্রিয়া যুক্ত করতে চাই।

আমরা এটি এভাবে করতে পারি:

কোড
class Cat {
    public String name;
    public int age;
    public int weight;

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.println(weight);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
        weight = Integer.parseInt(reader.readLine());
    }
}

"বাহ! এটা খুবই সহজ! আমরা শুধু প্রতিটি আর্গুমেন্টের মান লিখি, প্রতিটি লাইনে একটি করে। যখন আমরা ফাইল লোড করি, তখন আমরা সেগুলিকে একই ক্রমে পড়ি। এটি নিখুঁত সমাধান।"

"ধন্যবাদ, অ্যামিগো। এখন আপনি ক্লাসের এই গ্রুপের জন্য সংরক্ষণ এবং লোড পদ্ধতি লিখতে পারেন:"

কোড
class Cat
{
 public String name;
 public int age;
 public int weight;
}
class Dog
{
 public String name;
 public int age;
}
class Human
{
 public Cat cat;
 public Dog dog;
}

আপনার কাছে একটি মানব বস্তু আছে, যেখানে একটি কুকুর এবং একটি বিড়াল থাকতে পারে।

"আমার একটি সমাধান আছে:"

কোড
class Cat {
    public String name;
    public int age;
    public int weight;

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.println(weight);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
        weight = Integer.parseInt(reader.readLine());
    }
}
কোড
class Dog {
    public String name;
    public int age;

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
    }
}
কোড
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        cat.save(writer);
        dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {
        cat.load(reader);
        dog.load(reader);
    }
}

"এটা খুব ভালো সমাধান। কিন্তু মানুষের যদি কুকুর থাকে কিন্তু বিড়াল না থাকে তাহলে কি হবে?"

নাল চেক কোথায়?

"আমি এখন এটি ঠিক করব:"

কোড
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        if (cat != null)
            cat.save(writer);
        if (dog != null)
            dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {
        cat = new Cat();
        cat.load(reader);
        dog = new Dog();
        dog.load(reader);
    }
}

"এটি এখনও পুরোপুরি সঠিক নয়। আপনার দুটি ত্রুটি রয়েছে:"

1) একজন ব্যক্তির একটি বিড়াল বা কুকুর নাও থাকতে পারে, কিন্তু লোড পদ্ধতি বলা হলে তারা তৈরি হবে

2) যদি আমরা শুধুমাত্র একটি কুকুর সংরক্ষণ করি, এটি লোড করার সময় তার ডেটা বিড়াল দ্বারা পড়বে।

"আচ্ছা, আমি কি করব?"

"আমরা ভেরিয়েবল লেখা এড়িয়ে যেতে পারি না, অন্যথায় পড়ার সময় আমাদের সমস্যা হবে । আপনাকে নিশ্চিত করতে হবে যে সেভ অপারেশনের সময় যে ভেরিয়েবলগুলি নাল থাকে সেগুলি লোড অপারেশনের সময় নাল সেট করা হয়। এখানে আমার সংস্করণ:"

কোড
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        String isCatPresent = cat != null ? "yes" : "no";
        writer.println(isCatPresent);
        writer.flush();

        if (cat != null)
            cat.save(writer);

        String isDogPresent = dog != null ? "yes" : "no";
        writer.println(isDogPresent);
        writer.flush();

        if (dog != null)
            dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {

        String isCatPresent = reader.readLine();
        if (isCatPresent.equals("yes")) {
            cat = new Cat();
            cat.load(reader);
        }

        String isDogPresent = reader.readLine();
        if (isDogPresent.equals("yes")) {
            dog = new Dog();
            dog.load(reader);
        }
    }
}

"হ্যাঁ, আমি এই সমাধান পছন্দ করি।"

"হ্যাঁ, চমৎকার।"