semi object oriented