OOPS implementation

本文关键字:implementation OOPS | 更新日期: 2024-10-22 01:07:07

我有CarsmartEngineturboEngine类。smartEngineturboEngine类都有start()方法。你将如何实施它,以便在未来需要时可以增强它。还被要求编写完整的代码和有关代码的问题。

OOPS implementation

我将创建IEngine接口:

interface IEngine
{
    void Start();
}

并且这两个类都必须从该接口继承,然后才能为这两个类别实现Start方法:

public class SmartEngine : IEngine
{
      ...
      public void Start() { Console.WriteLine("SmartEngine"); } 
      ...
}
public class TurboEngine : IEngine 
{
      ...
      public void Start() { Console.WriteLine("TurboEngine"); } 
      ...
}

顺便说一句,我不知道你是如何实现Car类的,但根据一辆车能搭载多少发动机,有两种选择。如果它可以只携带其中一个,那么您只需要一个IEngine类型的属性。但是,如果它可以携带多个,那么您需要在Car类中声明这两个:

 public IEngine engine;  // Car has an Engine

 public SmartEngine smartEngine;  
 public TurboEngine turboEngine; 


顺便说一句,遵循命名约定是很重要的。对于类名和方法名,请始终使用PascalCassing

您可以创建接口IEngine,该接口可以在Car类中使用(或在其他地方,引擎实现的细节没有意义)。

您还可以创建抽象BaseEngine类(当然,它实现了IEngine)。这个基类封装了通用引擎逻辑并消除了代码重复。许多不同的引擎(如SmartEngineTurboEngine)可以使用BaseEngine作为基类共享相同的功能如果某个引擎有完全不同的行为,那么只需使用iterface并实现全新的引擎类

/// <summary>
/// Represents car engine.
/// </summary>
public interface IEngine
{
    void Start();
}
/// <summary>
/// Implement base behavior for different engine implementations.
/// For example: Model property can be common for all your engines.
/// </summary>
public abstract class BaseEngine : IEngine
{
    protected BaseEngine(string model)
    {
        if (model == null)
            throw new ArgumentNullException();
        Model = model;
    }        
    public abstract void Start();
    public string Model { get; private set; }
}
/// <summary>
/// Implement smart engine.
/// </summary>
public class SmartEngine : BaseEngine
{
    public SmartEngine(string model) : base(model) { }
    public override void Start()
    {
        Console.WriteLine("SmartEngine {0} started.", Model);
    }
}
/// <summary>
/// Implement turbo engine.
/// </summary>
public class TurboEngine : BaseEngine
{
    public TurboEngine(string model) : base(model) { }
    public override void Start()
    {
        Console.WriteLine("TurboEngine {0} started.", Model);
    }
}