我们创办了一家新公司,所有的员工都是新员工(NewEmployee),每个新员工都有薪水(s
我们创办了一家新公司,所有的员工都是新员工(NewEmployee),每个新员工都有薪水(salary)、病假时间(sickTime)和医疗计划(medicalPlan)。并且有一些适用于新员工的方法,分别为计算税收 taxes()、计算福利 benefits()。请绘制出NewEmployee类的类图。
6个月之后,我们的创业公司进展顺利。我们决定每位被公司雇佣了 6个月的员工都应当被看做是老员工,并且有额外的福利。这些福利包括牙科医疗计划(dentalPlan)、休假(vacation)和公司提供的轿车(car)。纳税函数和福利函数与新员工相同,只不过福利函数多了一些代码来处理牙科医疗计划、休假和公司提供的轿车。
请通过类图构建老员工 (FullEmployee)类,并合理安排老员工与新员工之间的关系
NewEmployee类图:
```
+----------------+
| NewEmployee |
+----------------+
| - salary |
| - sickTime |
| - medicalPlan |
+----------------+
| taxes() |
| benefits() |
+----------------+
```
FullEmployee类图:
```
+------------------------+
| FullEmployee |
+------------------------+
| - salary |
| - sickTime |
| - medicalPlan |
| - dentalPlan |
| - vacation |
| - car |
+------------------------+
| taxes() |
| benefits() |
+------------------------+
^
|
+------------------------+
| Is-A |
| (Inheritance) |
+------------------------+
|
v
+------------------------+
| NewEmployee |
+------------------------+
```
在类图中,FullEmployee继承NewEmployee,表示FullEmployee是NewEmployee的子类,即FullEmployee拥有NewEmployee的所有属性和方法。此外,FullEmployee还有独有的属性dentalPlan、vacation和car,以及override父类的benefits()函数实现。因此,FullEmployee与NewEmployee之间体现了一种Is-A的关系,即FullEmployee是一种特殊的NewEmployee。
为了解决新员工需要花费大量时间来适应公司的问题,我们可以为他们提供一些培训和指导。因此,我们可以为NewEmployee类添加一个方法training(),用于提供培训和指导,让新员工更快地适应公司。同时,我们不需要在FullEmployee中再次添加training()方法,因为已经可以继承自NewEmployee。
修改后的NewEmployee类图如下:
```
+----------------+
| NewEmployee |
+----------------+
| - salary |
| - sickTime |
| - medicalPlan |
+----------------+
| taxes() |
| benefits() |
| training() |
+----------------+
```
FullEmployee类图依然保持不变:
```
+------------------------+
| FullEmployee |
+------------------------+
| - salary |
| - sickTime |
| - medicalPlan |
| - dentalPlan |
| - vacation |
| - car |
+------------------------+
| taxes() |
| benefits() |
+------------------------+
^
|
+------------------------+
| Is-A |
| (Inheritance) |
+------------------------+
|
v
+------------------------+
| NewEmployee |
+------------------------+
```
在类图中,我们可以看到NewEmployee类中新增了training()方法。当一个新员工需要适应公司时,可以通过调用training()方法来获得帮助和指导,从而更快地适应公司。同时,FullEmployee类仍然Is-A NewEmployee类的子类,继承了NewEmployee类中的所有属性和方法,包括training()方法。这种设计可以使我们更好地管理和培养新员工,同时也不会影响老员工的工作。