"வணக்கம், அமிகோ! இன்று நாம் மற்றொரு சுவாரஸ்யமான தலைப்பைப் பற்றி அறிந்துகொள்வோம். குறிப்பாக, பொருட்களைச் சேமித்தல் மற்றும் ஏற்றுதல் (புனரமைத்தல்) . எங்களிடம் ஒரு பூனை வகுப்பு இருப்பதாக வைத்துக்கொள்வோம்:"

குறியீடு
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);
        }
    }
}

"ஆம், இந்த தீர்வு எனக்குப் பிடித்திருக்கிறது."

"ஆமாம், நன்றாக இருக்கிறது."