Using object-oriented programming (OOP) techniques and philosophies, a collection of C++ tools for the rapid development of finite element applications has been created. The object-oriented finite element analysis (OOFEA) toolkit provides both the geometrical and mathematical management tools necessary for this task in the form of useful class hierarchies. In particular, the OOFEA toolkit features methods for evaluating arbitrary weak forms provided by the user in order to solve particular problems of interest. A description of the underlying concepts, philosophies and techniques used to develop the toolkit are included. A strong effort has been made to concentrate on its possibly beneficial usage in the computational fluid dynamics area. In order to demonstrate the toolkit capabilities of managing complex projects, a simulator for laminar and turbulent natural convective flows in enclosures has been developed and a numerical study of some of these flows has been conducted. Using a primitive variable approach, the Galerkin FEM is used to obtain the weak form of the coupled unsteady Navier-Stokes and energy equations for incompressible, viscous, Newtonian fluids in two and three dimensions. By including a k - k turbulence model in the governing equations, the analysis of both laminar and turbulent convective flows in enclosures is possible. With the help of a semi-implicit time stepping scheme, combined with a projection scheme, the resulting systems of equations are solved iteratively using the preconditioned conjugate gradient (PCG) algorithm. Time accurate two-dimensional simulations have been performed for a differentially heated square cavity in the laminar and turbulent regimes, for air with a Prandtl number of 0.71, and values of the Rayleigh number ranging between 10 3 and 10 10 . Consistency tests show that the simulator correctly implements the k - k turbulence model, and the numerical results compare well with results reported in the literature. The resulting simulator demonstrates the flexibility of the object-oriented implementation when the short implementation period involved in its development is considered together with its compactness.