tried to model assumptions about FileReaderWriter and MessageParser more clearly using abstract class