Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何表示传感器和执行器,两者都可以是数字和模拟的?_Oop_Design Patterns_Uml_Class Diagram - Fatal编程技术网

Oop 如何表示传感器和执行器,两者都可以是数字和模拟的?

Oop 如何表示传感器和执行器,两者都可以是数字和模拟的?,oop,design-patterns,uml,class-diagram,Oop,Design Patterns,Uml,Class Diagram,我在做这个项目,和硬件相连,特别是传感器和执行器。传感器和执行器都可以是数字和模拟的。所有四种类型的示例: 数字传感器:返回几种可能的状态之一(即“存在”/“不存在”/“无法发现”) 模拟传感器:返回范围内的任何值,但结果根据刻度间隔进行四舍五入(即温度传感器返回0到60摄氏度之间的任何值,精度为一位数,例如18.5摄氏度) 数字执行器:可以获得几种可能的状态之一(即打开车窗的电机,可以将车窗设置为“打开”/“半打开”/“关闭”) 模拟执行器:可以从范围中获取任何值,并且该值也可以根据刻度间隔

我在做这个项目,和硬件相连,特别是传感器和执行器。传感器和执行器都可以是数字和模拟的。所有四种类型的示例:

  • 数字传感器:返回几种可能的状态之一(即“存在”/“不存在”/“无法发现”)
  • 模拟传感器:返回范围内的任何值,但结果根据刻度间隔进行四舍五入(即温度传感器返回0到60摄氏度之间的任何值,精度为一位数,例如18.5摄氏度)
  • 数字执行器:可以获得几种可能的状态之一(即打开车窗的电机,可以将车窗设置为“打开”/“半打开”/“关闭”)
  • 模拟执行器:可以从范围中获取任何值,并且该值也可以根据刻度间隔进行四舍五入(即,风扇每秒旋转次数可以从0到10,例如9.5)
问题是,我如何在不违反OOP原则的情况下表示这些类,至少使设计清晰且符合逻辑

我的解决方案之一就在图片上:

但我认为这个解决方案是“丑陋的”

下一个解决方案是:

这种解决方案也很糟糕,因为冗余的属性和不统一的方法名称

你有什么建议?也许存在解决我问题的设计模式?
谢谢你的帮助

我将通过使用两种不同的操作返回模拟值或数字值来解决这个问题。原因很简单,你不会真的把它们混在一起。如果您读取温度,您将
readAnalog()
获取值,对于开关,您将调用
readBinary()
。通过这种方式,您可以实现从二进制读取浮点将引发异常


另外,我不会在
设备中混用这个。执行器和传感器非常不同,它们可能继承的唯一东西是塑料外壳(甚至看起来很奇怪)

我终于找到了解决办法。 在我的具体案例中,传感器和执行器类只是关于当前值和套接字端口号的数据的抽象。所以我决定摆脱这种差异,为传感器和执行器制作一个类。离散和连续设备都有自己的类别

设计就是妥协(没有完美的解决方案)。我首先来看一个需要使用这些元素的应用程序。您需要添加新的实现类型,还是元素集是固定的?敏捷方法将使其保持简单(不要在应用程序中添加超出您需要的内容)。让您的设计在应用程序运行时显现出来。