cs546 OOP