Software Engineering: An Object-Oriented Perspective