Perl 类层次结构设计与实践指南
1. 类层次结构问题引入
在编程中,像火腿奶酪煎蛋卷类这样的情况值得特别关注,因为它需要从猪肉、乳制品和家禽类继承特性,这就涉及到多重继承的问题。在运行时,程序要创建合适的对象并发送“自我烹饪”的消息,而该消息的语义取决于对象的类型,比如对一片吐司和炒鸡蛋来说含义就不同。
从整个过程来看,分析阶段明确了主要需求是烹饪任何类型的早餐食物,设计阶段则发现了一些衍生需求,比如需要支持多重继承的面向对象语言,同时为避免鸡蛋在煎培根时变凉,还需要并发处理。
2. 基于哈希实现类的问题
通过祝福哈希(blessed hashes)实现类时,当这些类作为继承层次结构的基础时,问题会更加明显。
- 缺乏封装 :基类属性在派生类方法中可能被直接访问,导致两个类紧密耦合。例如,所谓的“受保护访问”(即派生类对基类封装有某种豁免)看似是个好主意,但长期实践表明,这种做法和完全的“公共访问”一样,对类层次结构的可维护性有害。
- 属性命名冲突 :在基于哈希的对象中,属性位于单个命名空间(哈希的键),派生类需要与基类以及其他派生类争夺特定属性的所有权。
- 构造和析构方法问题 :在 Perl 类层次结构中,无论底层实现类型如何,构造函数和析构函数方法没有特权地位,且构造函数通常会混合对象的创建和初始化。这使得子类(尤其是从多个基类继承的子类)容易错误构造、不完全初始化或仅部分清理派生对象。
3. 继承问题及解决方法
Perl 的面向对象机制中,每个类将其继承层次
超级会员免费看
订阅专栏 解锁全文
1070

被折叠的 条评论
为什么被折叠?



