Project-Based Software Engineering: An Object-Oriented Approach