In line 43 of the "implementation file", you release() the shader program. Why? And you've commented out the call the bind(). Why? In line 83, you again release() the shader program (although that call does nothing since you never bind the shader to the rendering pipeline in the first place.

I think you should study the Cube example program.