[#36] - Refactored Shader into an abstract class.