通用排序框架类型安全,高效面向对象组件

易语言 2020-05-29 17:30:10

强调框架二字主要是用于区分以前的易语言排序算法模块,它们通常是强调算法忽略排序业务逻辑,通常写死数据类型/写死排序规则,或者通过使用子程序指针的方式以弱类型安全/弱线程安全的形式艰难的实现业务逻辑拆分,代码维护和扩展犹如重写。而本框架参照的Java的排序框架并结合易语言实情进行开发,功能上不仅毫无损失还拓展了排序算法和排序器业务分离,仅仅是在自定义数据类型的排序器上由于易语言语法上的先天不足需要稍微多拷贝几行代码,而在此框架之前易语言的普通排序算法模块是完全无法和主流语言相提并论的。总之,框架是否牛逼用会的人都会和以前的强调算法而忽略排序逻辑的算法模块说拜拜。
本框架定义了两种为排序提供服务的组件:“排序器”组件和“排序算法”组件,并已为他们实现了合理的基本结构和两者之间的交互模型,开发者可自行选择合适的排序器及满意的排序算法为其提供排序服务。
排序器
* 本框架内部已实现多个基本数据类型的排序器 组件包括:整数\小数\文本\字节集\日期时间等排序器,对于自定义数据类型,开发者通过继承“抽象排序器”类,并实现5个简单的抽象方法(子类重写“抽象排序器”类中以“抽象_”开头的方法),提供数组成员的比较及值覆盖业务逻辑即可轻松实现任意类型的排序器。
排序算法
* 本框架内部已实现了两个高效的排序算法组件:快速排序算法(递归实现虽然高效但大数据可能堆栈溢出)和希尔排序算法(效率稍低,但无堆栈溢出风险),开发者也可以通过继承“抽象排序算法”类,并实现2个简单的抽象方法(子类重写“抽象排序算法”类中以“抽象_”开头的方法),即可加入本排序框架为任意数据类型提供排序服务(比如实现汇编版xx排序算法,虽然个人不建议使用内联汇编)。
面向组件
* 得益于面向组件思想,基于本框架标准的排序器组件可以和任何基于本框架标准的排序算法组件结合使用,在开发基于本框架标准的排序器组件时无需考虑将来会使用哪种算法为用户提供服务(反正任何算法都可以);反之,开发基于本框架标准的排序算法组件时也无需考虑将来会排序哪数据类型(反正可以排序任何数据类型)。
注意事项
排序器需要的额外实现
* 由于没有泛型和参数拓展等原因,“抽象排序器”无法制定排序器.排序()/排序器.比较()等方法的模板,这些方法均需要由实现类自己参照框架内已实现的排序方法自己重新写相应的方法。
内联汇编和直接内存读写建议
* 由于易语言本身的限制,本框架有部分操作用到了内联汇编和直接内存读写,但被都控制在极小范围内,为实现这些操作的而提供的方法除了参照已有的代码模板可小范围使用外不建议经常使用内联汇编和直接读写内存(包括使用子程序指针),最大可能确保程序健壮。
开闭原则建议
* 因为排序算法对象一般不需要存储数据,所以通常都是线程安全的,按照开闭原则建议为排序算法类公开一个单例的全局对象,并私有化算法类以限制被他人修改的可能(框架模块内部实现的排序算法均已如此处理)。