Sheaf is an important subject in mathematics and there are many ways to approach the subject, for example:
 from open sets of a topological space.
 from a generalisation of the concept of a fibre bundle.
Presheaf
A 'presheaf' category is a special case of a functor category (see page here). It is a contravarient functor from a category 'C' to Set.
Since it is contravarient it is usually written:
C^{op}→Set
or
Set^{Cop}
There is more about presheaves on the page here.
Example  Fibre Bundle as Endo Function
Presheaf Example  Single Element SetA very simple example would be where C^{op} is a single element set (terminal object in set). Hom( C^{op}, Set) therefore contains set of single arrows, one for every element of the set. 

Presheaf Example  GraphHere C^{op} is a category with two objects E (for edge) and V (for vertex) also two arrows s (for source) and t (for target). This allows us to build a structure on top of set where the diagram on the right commutes. We can therefore build up complex graphs from individual vertices and edges. 

Presheaf Example  Relational DatabaseHere C^{op} is a database schema. This imposes a structure on the sets which are the database tables. This implements a category of simplical databases. 
Sheaf
We can think of a sheaf as building a more complicated structure from simpler components. These simpler components come from the presheaf.
To investigate this take the graph example from above. We can take individual edges and glue them together to form a more complidated shape.
An individual edge is defined by its source and target verticies. So this diagram must commute.  
Multiple edges can be glued together. Here the source of one edge is connected to the target of another edge. Note, although the definitions in C^{op} are the same the squares don't all commute unless we keep them separate. 
Generalisation of a Fibre BundleThis is discussed from a topological point of view: For example, where there is a family of types indexed by elements of another type.


The type families in fibre bundles are disjoint. One way to extend that concept is to allow an overlapping type family. 
Sheaf  Tracking Locally Defined Data
A sheaf is a tool for systematically tracking locally defined data attached to the open sets of a topological space.
Sheaves, with mappings which preserve this open set structure, form a category. This open set structure can be extended to groups, abelian groups, or commutative rings. To make it more general and apply it to more general categories we use the concept of presheaf which uses 'restriction morphisms'. More about presheaf on page here. 