Klase, i uopšte OO pristup uopšte nisu
neophodni. Ljudi su programirali decenijama pre nego što je OO zaživelo u praksi. I danas postoje veliki i složeni sistemi koji se razvijaju korišćenjem proceduralnog programiranja - primer su većina popularnih operativnih sistema, kao što je Windows i sve verzije i klonovi Unix-a. Međutim, činjenica je da je lakše projektovati, razviti, a posebno održavati sisteme koji su razvijani korišćenjem OO tehnika, pa se u praksi to itekako koristi.
E, što se tiče vektora i uopšte STL-a, tu dolazimo do jednog još modernijeg koncepta koji se zove generičko programiranje. Tu je suština razviti algoritme i kontejnere koji će na isti način raditi sa različitim tipovima promenljivih. Da bih to ilustrovao, daću primer generičke funkcije max u c++u:
template <class T>
const T& max(const T& lhs, const T& rhs)
{
return lhs > rhs ? lhs : rhs;
}
Ovu funkciju možeš da koristiš sa bilo kojim tipom koji radi sa operatorom >. Ovako nešto je nemoguće izvesti u "čistim" OO jezicima kao što su Java ili C#.