首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于课堂设计的面试问题

关于课堂设计的面试问题
EN

Stack Overflow用户
提问于 2011-03-28 17:46:38
回答 5查看 5.8K关注 0票数 6

最近我参加了一个面试。这个问题被问到了。

这就是这个场景。

我们有两种类型的员工。正式员工和合同制员工。正式员工的工资将在月底按固定基础发放。合同制员工将根据他们的工作小时数按周支付工资。

经理将被指派给这些员工进行监督。经理可以有正式员工和合同制员工。

此应用程序将计算这些员工的工资单。

他们要求我提出针对这种情况的类设计。

面试官希望我给他什么样的回答?在这个方向上的指针将受到高度赞赏。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-28 17:53:30

以下可能是其中一种设计

设计1。

代码语言:javascript
复制
public class Employee
{
   public bool isContractEmployee
      { get; set;}

   public abstract float CalCulatePayroll();   
}


public class FullTimeEmp : Employee
{
   public override float CalCulatePayroll()
   {
   }
}

public class ContractEmp : Employee
{
  public int NoofHR
      {get; set;}

  public override float CalCulatePayroll()
   {
       sal = nohr*money;
   }
}

设计2。

代码语言:javascript
复制
public class employee
{
  public bool isContractEmployee
  { get; set;}

  public int NoofHR
  {get; set;}


  public  float CalCulatePayroll()
  {
    if(this.isContractEmployee)
    {
      //calculate sal on based hr
    }
    else
    {
      //calculate regurlare sal
    }
  }
}
票数 2
EN

Stack Overflow用户

发布于 2011-03-28 18:01:42

他们正在测试你是否理解一些好的面向对象设计的基本原则。具体地说,他们似乎在寻找:

  1. 了解多态(通过在抽象基级使用每个员工的功能)
  2. 了解专门化(通过扩展Employee基类的功能以产生不同的行为)
票数 6
EN

Stack Overflow用户

发布于 2011-03-28 18:11:30

这是一个考验你的问题,如果你理解了关注点的分离(计算员工的工资不是员工本身的责任),看看你是否理解抽象性和多态性:(目前)有两种不同的方法来计算工资。您可以实现某种策略设计模式来执行计算,以便在单独的类中指定算法的每个实现。这有助于维护性和可扩展性(如果需要另一种算法)。

代码语言:javascript
复制
public class Employee
{
    public bool IsContractEmployee
    {
       get;
       set;
    }
}

public class WageCalculator
{

    private abstract class WageCalculAlgorithm
    { 
        public virtual decimal Calculate( Employee emp )
        {
             // regular calc goes here
        }
    }

    private class ContractorCalculator : WageCalculAgorithm
    {
        public override decimal Calculate( Employee emp )
        {
            // contractor calc goes here
        }
    }

    public static decimal CalculateWageFor( Employee emp )
    {
       if( emp.IsContractEmployee )
            return new ContractorCalculator().Calculate(emp);
       else
            return new WageCalculAlgorithm().Calculate(emp);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5457236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档