易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

排序框架 简单/通用/类型安全/高效 面向对象/面向组件   [复制链接]

    2019-03-08 15:22:26
    高级教程源码
    易语言资源网
    2631 次浏览
    来源链接

简介


*本框架是一个简单/通用/类型安全/高效的依照面向对象/面向组件的设计模型开发的符合高内聚/低耦合思想的排序框架。
*强调框架二字主要是用于区分以前的易语言排序算法模块,它们通常是强调算法忽略排序业务逻辑,通常写死数据类型/写死排序规则,或者通过使用子程序指针的方式以弱类型安全/弱线程安全的形式艰难的实现业务逻辑拆分,代码维护和扩展犹如重写。而本框架参照的Java的排序框架并结合易语言实情进行开发,功能上不仅毫无损失还拓展了排序算法和排序器业务分离,仅仅是在自定义数据类型的排序器上由于易语言语法上的先天不足需要稍微多拷贝几行代码,而在此框架之前易语言的普通排序算法模块是完全无法和主流语言相提并论的。总之,框架是否牛逼用会的人都会和以前的强调算法而忽略排序逻辑的算法模块说拜拜。

组件


*本框架定义了两种为排序提供服务的组件:“排序器”组件和“排序算法”组件,并已为他们实现了合理的基本结构和两者之间的交互模型,开发者可自行选择合适的排序器及满意的排序算法为其提供排序服务。

排序器


*本框架内部已实现多个基本数据类型的排序器 组件包括:整数\小数\文本\字节集\日期时间等排序器,对于自定义数据类型,开发者通过继承“抽象排序器”类,并实现5个简单的抽象方法(子类重写“抽象排序器”类中以“抽象_”开头的方法),提供数组成员的比较及值覆盖业务逻辑即可轻松实现任意类型的排序器。

排序算法


*本框架内部已实现了两个高效的排序算法组件:快速排序算法(递归实现虽然高效但大数据可能堆栈溢出)和希尔排序算法(效率稍低,但无堆栈溢出风险),开发者也可以通过继承“抽象排序算法”类,并实现2个简单的抽象方法(子类重写“抽象排序算法”类中以“抽象_”开头的方法),即可加入本排序框架为任意数据类型提供排序服务(比如实现汇编版xx排序算法,虽然个人不建议使用内联汇编)。

面向组件


*得益于面向组件思想,基于本框架标准的排序器组件可以和任何基于本框架标准的排序算法组件结合使用,在开发基于本框架标准的排序器组件时无需考虑将来会使用哪种算法为用户提供服务(反正任何算法都可以);反之,开发基于本框架标准的排序算法组件时也无需考虑将来会排序哪数据类型(反正可以排序任何数据类型)。

注意事项



排序器需要的额外实现


*由于没有泛型和参数拓展等原因,“抽象排序器”无法制定排序器.排序()/排序器.比较()等方法的模板,这些方法均需要由实现类自己参照框架内已实现的排序方法自己重新写相应的方法。

内联汇编和直接内存读写建议


*由于易语言本身的限制,本框架有部分操作用到了内联汇编和直接内存读写,但被都控制在极小范围内,为实现这些操作的而提供的方法除了参照已有的代码模板可小范围使用外不建议经常使用内联汇编和直接读写内存(包括使用子程序指针),最大可能确保程序健壮。

开闭原则建议


*因为排序算法对象一般不需要存储数据,所以通常都是线程安全的,按照开闭原则建议为排序算法类公开一个单例的全局对象,并私有化算法类以限制被他人修改的可能(框架模块内部实现的排序算法均已如此处理)。

image.png



点我下载 (已有 101 次下载)

引用模块


源码文件名 模块文件名
例程.e
星排序框架.ec


引用支持库


源码文件名 支持库文件名 支持库标识
例程.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0
应用接口支持库 3.1 F7FC1AE45C5C4758AF03EF19F18A395D
星排序框架.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:易语言PDF批量打印PDF文件...     下一篇:易语言子类化类模块源码...