在最近的python的数据分析实践中,笔者看到一句话,颇受启发!
如果你使用了大量的全局变量,那么你可能需要面对对象。
在实践中,回起以前做过的项目,以前写的东西确实存在很大的问题,发现有些项目代码写的很复杂臃肿。以前拿到需求,马上就开干,项目结构不清晰,这里需要就写一下,没有经过统一的规划。在存在大量的初始命令时,笔者以前一般通过两个方法来实现。
1、建立全局变量,在不同的子程序中调用这个全局变量;
2、通过建立带有常量赋值的子程序,在主程序中通过调用这个子程序。
笔者以LabVIEW来示例。在存在很多底层函数时,以前笔者使用LabVIEW库来按照类别、功能等打包函数,然后在主程序中调用各个库中的方法,比如将操作串口的方法、操作仪表的方法、telnet方法、显示主、子面板等等。但是在库里面的函数没有存在很好的逻辑关系,特别是函数里面的常量问题再次修改的话可以设计到的子vi就比较多。
那么就可以使用面向对象来实现。每个LabVIEW类包括一个数据簇(属性)和用于读写该簇的方法。下面是笔者针对以操作不同地址的三台发电机的问题,改为使用类lvclass来改写。类库和项目库(.lvlib)相似,不同的是,类库定义了新的数据类型。
私有属性alternator_class.ctl,保存命令的格式
方法init cmd.vi,初始化写入命令
方法write cmd and read data.vi,发送命令并读取返回数据

那么多台发电机就可以调用这个类来实现相同的功能,不同的命令在方法init cmd.vi中来实现和修改。LabVIEW类的数据是私有的,对于不是该类成员的VI来说是隐藏的。如需访问类的私有数据,必须创建方法,即创建该类的成员VI,通过成员VI中的函数对私有数据执行操作。封装就是将数据和方法合并到一个类中,类中数据仅可由类的成员VI访问。LabVIEW面对对象的编程实现数据封装,有助于实现模块化代码,可局部修改代码,而对代码其他部分没有影响。
类中的数据是私有的,但成员VI却可以按不同的程度公开。
1、公共-任何VI都可将该成员VI作为子VI调用。
2、库内-只有同类中的VI、类的友元或类的友元库中的VI可以调用库内成员VI。
3、保护-仅该成员VI所在的类及其子类中的VI可以调用该成员VI。
4、私有-仅该成员VI所在类中的VI可以调用该成员VI。
5、未指定-仅当选中一个文件夹时,显示该选项。文件夹的访问范围未指定时,其访问范围默认为公共。
关于面向对象与面向过程编程的区别,下面这一张图可以很好的说明。

通过“继承”可在现有类的基础上创建新类。若创建一个新的LabVIEW类并将它设置为继承另一个类的数据及成员VI,这个新类将可使用它所继承的类中“公共”及“保护”型的成员VI,子类可覆盖或扩展这些成员VI。LabVIEW接口可以被视作是不带有私有数据控件的类,但这种微小的差异使得接口在软件架构中可以实现与类完全不同的目的。具体而言即接口可支持多重继承形式。
网友评论