Transcript Slides - Canisius College Computer Science
Computer Science 313 – Advanced Programming Topics
LECTURE 32: IMPLEMENTING THE COMPOSITE PATTERN
Writing a
Java-based file manager Starts at drive, but drill-down into directories Considers only directories & files (for now) Named required for all directory entries Print out the names of directories & files Print out files sizes as we traverse directories Allow user to create & delete files Remain true to our basic nature
Writing a
Java-based file manager Starts at drive, but drill-down into directories Considers only directories & files (for now) Named required for all directory entries Print out the names of directories & files Print out files sizes as we traverse directories Allow user to create & delete files Remain true to our basic nature
Composite Pattern Classes
Create abstract superclass
for the pattern
This class normally used by client code Common methods & fields defined in superclass Should also declare any abstract methods needed Other classes subclass
of abstract superclass
Decorator-like parallel hierarchies not required Subinterfaces not required & almost never used Could create hierarchies as needed But consider composition vs. inheritence
Composite Code Inside
public abstract class OSEntry { public String name; public abstract String toString(); public void createFile(String fileName) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } } public void createDir(String dirName) throws UnsupportedOperationException { throw new UnsupportedOperationException(); }
Directories Contain…?
Currently,
each directory has lots of files Will need a field to store these references Could use an array or some type of
List
Question is: what type should
List
hold?
List
could
simply store references to
File
Unable to hold new types of entries we create Class is forever closed to any type of extension Containers must refer to abstract superclass
Woot! Pimped-Out Recursion!
public class Directory extends OSEntry { public List
Container Code
public class Directory extends OSEntry { public List
File Methods…
Files should not be able to create
files & dirs
Methods declared previously , so that is good Even better, already throw documented exception Useful trick when option may/may not be possible Should be careful about too many exceptions
Should be able to
get size of a file Most classes should not provide this method Instead, we will not declare this in the superclass Clients must have a
File
before calling method
File Code
public class File extends OSEntry { public java.util.File fileInOS; public String toString() { return getName(); } } public long getSize() { return fileInOS.getLength(); }
Client Code
OSEntry entry; System.out.println(entry.toString()); if (entry instanceof File) { System.out.println(“Size is :” + ((File)entry).getSize()); } else { System.out.println(“No size, bozo!”); }
For Next Class
Lab available on the web Lab will be due 2 weeks from Friday No class this Friday Some percentage of class with me in Hartford, CT Use time wisely – work on lab, study for the test #2 Test #2 in class on Monday Can include any and all material since last test Patterns & optimizations fair game to ask about Open-note, open-book, open-template, but closed slide