A File consists of a name (String) and size (int).
A List of Files is one of
an MtLoF - an empty list of files
a ConsLoF consisting of a fst (a File) and rst (a List of Files)
// to represent one file in a computer system
class File {
String name;
int size;
File(String name, int size) {
this.name = name;
this.size = size;
}
}
/* Interactions:
Examples of the use of the constructor for the class File
File f1 = new File("MyTrip", 1000);
File f2 = new File("hmwk1", 200);
File f3 = new File("hmwk3", 350);
/*
+------+
| ALoF |<-------------+
+------+ |
+------+ |
/ \ |
--- |
| |
---------------- |
| | |
+-------+ +----------+ |
| MtLoF | | ConsLoF | |
+-------+ +----------+ | +-------------+
+-------+ | File fst |----+--->| File |
| ALoF rst |----+ +-------------+
+----------+ | String name |
| int size |
+-------------+
*/
// to represent a list of files
abstract class ALoF {
}
// to represent an empty list of files
class MtLoF extends ALoF {
MtLoF() {
}
}
// to represent a constructed list of files
class ConsLoF extends ALoF {
File fst;
ALoF rst;
ConsLoF(File fst, ALoF rst) {
this.fst = fst;
this.rst = rst;
}
}
/* Interactions:
Examples of the use of the constructors for the subclasses of ALoF
MtLoF mtlof = new MtLoF();
ConsLoF lof1 = new ConsLoF(f1, mtlof);
ConsLoF lof2 = new ConsLoF(f2, lof1);
ConsLoF lof3 = new ConsLoF(f3, lof2);
Examples of the use of the selectors for the subclasses of ALoF
lof1.fst -- expected: f1
lof1.rst -- expected: mtlof
lof2.fst -- expected: f2
lof2.rst -- expected: lof1
lof3.fst -- expected: f3
lof3.rst -- expected: lof2
*/