Starting point
Either of these contributions:
- http://101companies.org/wiki/Contribution:javaStatic
- http://101companies.org/wiki/Contribution:javaInheritance
- http://101companies.org/wiki/Contribution:javaComposition
You are well advised to simply download the entire repo 101simplejava:
https://github.com/101companies/101simplejava/archive/master.zip
You are also advised to follow this simple guide, as discussed in lecture and lab:
https://github.com/101companies/101simplejava/blob/master/README.md
Task
Revise your chosen contribution to meet the following requirements:
- Departments and employees (i.e., "subunits") have a getter for the parent, i.e., for the enclosing company or department.
- setSalary of Employee rejects a salary that is greater than the manager's salary of its parent department, if any.
Hints
Clearly you need to make sure that the "parent" is automatically set as companies are constructed. You may need to refactor the overall object model so that you can manage the parent as such. You could use some design patterns to streamline your solution. Here are some patterns that come to mind: "Observer", "Factory Method", or "Abstract Factory". Regardless, of whether and which design patterns are used, your design needs to be reasonably clear in addition to just passing tests. Make good use of static typing.
Testing
Your test cases need to exercise these behaviors:
- An employee is constructed and added to a specific department. As a result, the parent is just that department.
- A department is removed from the subunits of a department. As a result, the parent becomes undefined.
- setSalary indeed accepts valid values and rejects invalid values, in the view of the 2nd requirement above.