
The oral final will consist of a one-on-one, 25-30 minute discussion which will assess your knowledge of object-oriented programming. The exam will take place in a meeting room in the southeast area of ITEC, near room A122 on the Wausau campus. Dress professionally (business casual or better), arrive 5 minutes before your scheduled appointment, and wait in ITEC. If you are in one of the regional campuses, your attendance in Wausau is optional, but preferred. Contact me with alternate arrangements if needed.
Select a time slot for your individual final using this Doodle poll. Sign up early for the best selection of a time slot, as it is "first-come, first serve".
Solve the following scenarios using class diagrams and/or code as specified. Either submit your solutions in Blackboard or bring them with you to the final. Diagrams and code can be in any form, including hand-written; psuedo-code can be used.
The below class diagram shows an overly rich inheritance hierarchy for cars and trucks with different types of engines. The existing design clearly violates the single responsibility principle, as the Vehicle class has several unrelated methods. In addition, you are given a requirement to add a 6-cylinder truck, which will violate the don't repeat yourself design principle.
Create a class diagram of an alternative design where no engine code or other vehicle functionality is duplicated. Various solutions to this problem exist; yours should use composition over inheritance. Note that favoring composition over inheritance does not imply that you need to eliminate inheritance altogether.
A class has a public list. Make the list private, but allow other classes the following fuctionality:
Write pseudo-code to represent the methods required to provide that functionality.
Given the following class diagram and code, provide a refactored design, without using inheritance, which allows enumeration of all possessions in a single loop.

Create a class diagram and write pseudo-code of the refactored loop.
A checking account class is used in a WPF application. The following code sets the money balance of a checking account if the value is not less than 0. Otherwise, it notifies the user via a message box that the balance cannot be less than 0.
You are given a requirement that the checking account class be used in a web application, which wouldn't be able to use a message box. Refactor the code to allow the class to be used by two different user interfaces in a way that still validates the money balance.
Be prepared to answer the following questions, of which I will choose several to discuss with you:
You may use any means of researching/preparing for this exam, including discussing it with your classmates. Study groups are welcome and supported! You can bring one sheet of notes with you to the final, but since the final is intended to measure your understanding of concepts rather than memorization, you may find that notes are not needed. If you do bring notes, please submit them here at least 24 hours in advance of your final. Keep in mind that you will not have time to thoroughly read from them during the final, so be sure they are concise and easy to reference quickly. While not required, submitting well-researched notes can both aid you in understanding the material and me in better assessing your knowledge level.