仓颉中的抽象

一、抽象的作用

        加强运行时的多态

二、抽象的具体方法

        1、抽象类

                代码实现

public abstract class Project { //

    //正常定义方法需要有方法体
    public func exec() {
    }
    //定义一个抽象方法,没有方法体,是一个空实现,同时抽象方法必须要被继承
    protected func work(): Unit
}

public class Demo1 <: Project {
    var demoName: String = ""
    //抽象方法和抽象属性设计器都需要重写
    protected override func work(): Unit {
        println("项目子类1")
    }
}

public class Demo2 <: Project {
    var demoName: String = ""
    protected override func work(): Unit {
        println("项目子类2")
    }
}

public func runProject() {
    var a1: Project = Demo1() //此处不可继承父类

    //动态绑定
    a1 = Demo2()
    a1.work()
    a1 = Demo1()
    a1.work()
}

运行结果

 

2、抽象属性设计器

代码实现

public abstract class Project { 

    //正常定义方法需要有方法体
    public func exec() {
    }
    //定义一个抽象属性设计器,有抽象属性设计器的类一定是抽象类
    public mut prop propWork: String
}

public class Demo1 <: Project {
    var demoName: String = ""
    //抽象方法和抽象属性设计器都需要重写
    public mut prop propWork: String {
        get() {
            demoName
        }
        set(newName) {
            //可以直接赋值this.demoName = newName
            //或另增判断条件
            if (newName.startsWith("1")) {
                this.demoName = newName
            } else {
                println("名称不符合条件")
            }
        }
    }
}
main(): Int64 {
    var a1: Project = Demo1()
    a1.propWork = "321" //此时名称不符合条件
    println("名字为:${a1.propWork}")

    return 0
}

 运行结果

 

05-03
<think>好的,我现在需要回答用户关于仓颉输入法、编码和算法的查询。首先,我需要回顾用户提供的引用内容,看看有哪些相关信息可以整合。用户提到了四个引用,其中引用[1]和[2]主要介绍仓颉输入法的历史和Cangjie6的改进,引用[3]涉及Rime输入法中仓颉五代的编码规则,引用[4]则讲述了仓颉的传说及其与现代输入法的联系。 用户的问题明确要求查询仓颉输入法、编码或算法相关的信息。因此,我需要将这些引用中的相关内容结合起来,形成一个结构清晰的回答。首先,应该从仓颉输入法的历史背景开始,引用[2]和[4]提供了这方面的信息,特别是朱邦复先生的发明和设计理念。接下来是编码体系,引用[1]提到了Cangjie6的扩展和优化,而引用[3]详细说明了Rime中仓颉五代的编码规则,比如字词长度的处理公式。关于算法部分,引用[3]中的编码规则和公式可以解释仓颉输入法在实现时的算法逻辑,比如如何拆解汉字结构。 还需要注意用户提到的系统级指令,比如正确使用LaTeX格式,生成相关问题等。在回答中要确保技术术语和公式的准确呈现,例如编码规则中的公式需要用$$...$$格式。同时,要生成相关的问题,可能需要考虑用户可能感兴趣的优化方法、学习资源、与其他输入法的比较等。 需要检查是否有遗漏的信息点。比如,引用[4]提到仓颉输入法在现代的应用,可以强调其高效和专业用户的偏好。此外,Cangjie6作为扩展版本,可能在性能或用户体验上有改进,这也是一个值得展开的点。 最后,确保回答符合用户要求的格式,分点清晰,引用正确,并在末尾添加相关问题。同时,避免使用Markdown格式,保持自然的中文表达。需要验证LaTeX语法是否正确,例如编码规则中的公式是否正确转写为数学表达式,并单独成段。</think>### 仓颉输入法、编码与算法解析 #### 1. **仓颉输入法基础** 仓颉输入法由朱邦复于1978年发明,基于“知字识码,见字打码”的设计理念,通过拆解汉字结构为基本字根(如$口$、$木$)实现快速输入[^2]。例如,“森”字由三个“木”组成,编码为$DDD$。其核心思想与仓颉造字传说一脉相承,即通过观察自然与符号抽象化构建文字体系[^4]。 #### 2. **编码体系与算法逻辑** - **字根映射**:每个字根对应特定按键,如“日”对应$A$,“月”对应$B$,形成基础编码规则。 - **拆字规则**: $$ \text{汉字} \rightarrow \text{字根组合} \rightarrow \text{编码序列} $$ 例如,“明”拆为“日+月”对应$AB$。 - **多字词编码算法**(以Rime输入法为例)[^3]: - 双字词:取首字首尾码+次字首尾码,公式为$AaAzBaBbBz$ - 三字词:取首字首尾+次字首尾+末字尾码,公式为$AaAzBaBzCz$ - 长词(4-10字):首字首码+次字尾码+第三字首码+倒数第二字及末字尾码,公式为$AaBzCaYzZz$ #### 3. **现代优化:Cangjie6** Cangjie6在经典仓颉基础上改进: - **扩展字根库**:支持更多Unicode字符及简体字; - **智能匹配算法**:动态调整候选词排序,提升输入效率[^1]; - **学习曲线优化**:提供可视化字根拆解提示,降低记忆难度[^1]。 #### 4. **应用场景与优势** - **专业领域**:需高速输入的场景(如出版、编程); - **跨平台兼容**:Rime等开源框架支持仓颉编码规则集成[^3]; - **文化价值**:延续汉字结构分析的传统,促进字形认知教育[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值