As VHDL is for hardware description, it would make a terrible programming language, the same way C makes a terrible hardware description language. How would you convert all those parrallel processes into sequential functions?
If you dont declare the pins of your component, then they will be out of scope, and the mapper will not be able to match your component to an entity. You can compile any component you want, as you may want a black box (eg. your module is a compiled netlist rather than some other VHDL, you wouldnt bring it in until later in the compilation). So you need a component declaration that matches your entity, or it wont map. Even better, do direct instantiation, and you dont need a component at all, as it looks directly at the entity when the code is elaborated. This can save you many minutes of wasted compile time if a component could not be mapped to an entity (like I said, components are not mapped in the first pass of the code.)
Direct instantiation:
some_inst : entity my_lib.my_entity
generic map ( ...)
port map (...);