OOPオブジェクト指向プログラミングの説明で、犬や猫を使った例というものがよくある。
以下のようなものだが、これを見ても実際コードを組む上で何が嬉しいのか見えてこない。
class Animal { function __init__(name) { _name = name } function say() { } } class Dog extends Animal { function say() { print _name + ":bow" } } class Cat extends Animal { function say() { print _name + ":meow" } } function main() { animal = new Dog("siro"); doSay(animal); // bowと3回鳴く animal = new Cat("siro"); doSay(animal); // meowと3回鳴く } function doSay(animal) { animal.say(); animal.say(); animal.say(); }
だがこれをCsv出力クラス、Tsv出力クラスに変えてやると現実的なプログラムでOOPがどのように役立つのかが、少しは掴めるのではないだろうか。
class DataPrinter { function __init__(datas) { _datas = datas; currentLine=0; } function printLine() { } } class CsvDataPrinter extends DataPrinter { function printLine() { print _datas[currentLine++].join(",") } } class TsvDataPrinter extends DataPrinter { function printLine() { print _datas[currentLine++].join("\t") } } function main() { datas = [["data1-1", "data1-2", "data1-3"], ["data2-1", "data2-2", "data2-3"], ["data3-1", "data3-2", "data3-3"]]; printer = new CsvDataPrinter(datas); doPrint(printer); // カンマ区切りでデータが3行出力される printer = new TsvDataPrinter(datas); doPrint(printer); // タブ区切りでデータが3行出力される } function doPrint(printer) { printer.printLine(); printer.printLine(); printer.printLine(); }