Practical object-oriented software engineering tutorial