void main( String[ ] args ) PDApplication 380.0 40.0 void processCommands( PhoneDirectory pd ) «interface» PDUserInterface 40.0 40.0 void loadData( String fileName ) String lookupEntry( String name ) String lookupNumber( String name, String kind ) String addEntry( String line ) String removeEntry( String name ) String addNumber( String line ) String removeNumber( String line ) String changeNumber( String kind, String newInfo ) void save( ) «interface» PhoneDirectory 610.0 10.0 PhoneDirectory theDirectory - void doAddChangeEntry( ) - void doLookupEntry( ) - void doRemoveEntry( ) - void doSave( ) PDGUI 230.0 210.0 DirectoryEntry [ ] theDirectory int size boolean modified String sourceName - int find( String name ) - void add( String name, String number ) - void reallocate( ) ArrayBasedPD 640.0 220.0 String first, last PhoneEntry [ ] phones int size DirectoryEntry( String line ) String getName( ) int getSize( ) String getNumber( String kind ) String getNumber( ) void addNumber( String line ) void removeNumber( String number ) void changeNumber( String oldNumber, String newNumber ) String toString( ) int compareTo( Object right ) - void reallocate( ) DirectoryEntry 590.0 440.0 PhoneDirectory theDirectory Scanner scnr PDConsole( ) - void doAddChangeEntry( ) - void doLookupEntry( ) - void doRemoveEntry( ) - void doSave( ) PDConsole 20.0 210.0 250 250 210 255 The client layer manages input and output. It consists of PDUserInterface and exactly one of PDConsole of PDGUI. 10.0 410.0 The work layer manages the elements of a personal phone directory. It consists of PhoneDirectory, ArrayBasedPD, DirectoryEntry and PhoneEntry. 560.0 910.0 String areaCode, number, kind PhoneEntry( String line ) String getPhone( ) String getKind( ) String toString( ) void changeNumber( String newNumber ) PhoneEntry 640.0 730.0 int compareTo( Object right ) «interface» Comparable 290.0 530.0