This is a copy of the code from the presentation but it differs in that as each principle is applied unit tests have been written to test the code.
##Necessary differences
To be able to unit test the code has necessitated that the when applying Single Responsibility Principle (SRP) that you need to also implement Interface Segregation Principle (ISP) and Dependency Inversion Principle (DIP) straight away.
I have tried to keep the use of the other principles to a minimum so that the code still keeps as close to the spirit of the presentation as possible.