"Kumusta, Amigo! Ngayon ay matututuhan natin ang tungkol sa isa pang kawili-wiling paksa. Sa partikular, ang pag-save at pag-load (reconstructing) mga bagay . Ipagpalagay na mayroon tayong klase ng Cat:"
class Cat
{
public String name;
public int age;
public int weight;
}
At sabihin nating gusto naming magdagdag ng isang maginhawang mekanismo para sa pag-save at pag-load mula sa isang file.
Magagawa natin ito ng ganito:
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());
}
}
"Wow! Napakadali! Sinusulat lang namin ang mga halaga ng bawat argumento, isa sa bawat linya. Kapag ni-load namin ang file, binabasa namin ang mga ito sa parehong pagkakasunud-sunod. Ito ang perpektong solusyon."
"Salamat, Amigo. Maaari mo na ngayong isulat ang mga paraan ng pag-save at pag-load para sa grupong ito ng mga klase:"
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;
}
Mayroon kang bagay na Tao, na maaaring magkaroon ng isang aso at isang pusa.
"May solusyon ako:"
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);
}
}
"Napakagandang solusyon iyan. Ngunit ano ang mangyayari kung ang isang tao ay may aso ngunit walang pusa?"
Nasaan ang mga null check?
"Aayusin ko na:"
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);
}
}
"Hindi pa rin ito tama. Mayroon kang dalawang pagkakamali:"
1) Maaaring walang pusa o aso ang isang tao, ngunit malilikha pa rin sila kapag tinawag ang paraan ng pag-load
2) Kung aso lang ang i-save natin, ang data nito ay mababasa ng pusa kapag na-load ito.
"Well, ano ang dapat kong gawin?"
"Hindi namin maaaring laktawan ang pagsusulat ng mga variable, kung hindi, magkakaroon kami ng mga problema habang binabasa . Kailangan mong tiyakin na ang mga variable na null sa panahon ng pag-save ng operasyon ay nakatakda sa null sa panahon ng pag-load ng operasyon. Narito ang aking bersyon:"
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);
}
}
}
"Oo, gusto ko ang solusyon na ito."
"Oo, ang ganda."
GO TO FULL VERSION