`

类层次优于标签类

 
阅读更多

有时候,可能会遇到带有两个甚至更多风格的实例的类,并包含表示实例风格的标签(tag)域。
Demo:

 

[java] view plain copy
 
  1. // Tagged class - vastly inferior to a class hierarchy!  
  2. class Figure {  
  3.     enum Shape { RECTANGLE, CIRCLE };  
  4.   
  5.     // Tag field - the shape of this figure  
  6.     final Shape shape;  
  7.   
  8.     // These fields are used only if shape is RECTANGLE  
  9.     double length;  
  10.     double width;  
  11.   
  12.     // This field is used only if shape is CIRCLE  
  13.     double radius;  
  14.   
  15.     // Constructor for circle  
  16.     Figure(double radius) {  
  17.         shape = Shape.CIRCLE;  
  18.         this.radius = radius;  
  19.     }  
  20.   
  21.     // Constructor for rectangle  
  22.     Figure(double length, double width) {  
  23.         shape = Shape.RECTANGLE;  
  24.         this.length = length;  
  25.         this.width = width;  
  26.     }  
  27.   
  28.     double area() {  
  29.         switch(shape) {  
  30.           case RECTANGLE:  
  31.             return length * width;  
  32.           case CIRCLE:  
  33.             return Math.PI * (radius * radius);  
  34.           default:  
  35.             throw new AssertionError();  
  36.         }  
  37.     }  
  38. }  

这些标签类(tagged class)有着许多优点,但是破坏了可读性。
标签类过于冗长、容易出错,并且效率低下。

表示多种风格对象的数据类型:子类型化(subtyping)。标签类正是类层次的一种简单的仿效。
Demo:

[java] view plain copy
 
  1. // Class hierarchy replacement for a tagged class  
  2. abstract class Figure {  
  3.     abstract double area();  
  4. }  
  5. class Circle extends Figure {  
  6.     final double radius;  
  7.   
  8.     Circle(double radius) { this.radius = radius; }  
  9.   
  10.     double area() { return Math.PI * (radius * radius); }  
  11. }  
  12. class Rectangle extends Figure {  
  13.     final double length;  
  14.     final double width;  
  15.   
  16.     Rectangle(double length, double width) {  
  17.         this.length = length;  
  18.         this.width  = width;  
  19.     }  
  20.     double area() { return length * width; }  
  21. }  
  22. class Square extends Rectangle {  
  23.     Square(double side) {  
  24.         super(side, side);  
  25.     }  
  26. }  


标签类很少有适用的时候。当你想要编写一个包含显示标签域类时,应该考虑一下,这个标签是否可以被取消,这个类是否可以用类层次来代替。当你遇到一个包含标签与的现有类时,就要考虑将它重构到一个层次结构中去。

分享到:
评论

相关推荐

    本科毕业论文—医学信息工程学院-医学信息工程专业-层次多标签短文本分类模型的研究.pdf

    实验结果显示,提出的以LP-RF为基础模型的middle-out层次多标签模型在F1值、汉明损失和平均精度上均优于传统的自顶向下(top-down)和自底向上(bottom-up)模型。这表明在层次较深、叶子节点较多、标签稀疏的情况下,...

    论文研究-最大熵模型在邮件分类中的应用.pdf

    邮件分类是指在给定的分类...充分利用邮件各字段信息,取得的总体分类效果最好,但对合法邮件,利用邮件头及邮件标题却取得了最好结果,并在层次分类中验证了这点,层次分类效果要优于平面分类。最后进行了总结和展望。

    层次解码器是所有你需要的文本分类_Hierarchy Decoder is All You Need To Text Class

    之前的深度学习方法在解决HTC时,可以分为两类:一类侧重于局部信息,另一类则试图全面理解层次结构。然而,单一模型难以同时优化这两个方面。HiDEC的出现,旨在克服这一局限,提供一种更为有效的解决方案。

    标签共现的标签聚类算法研究

    通过与其他流行的聚类算法进行比较,例如层次聚类和DBSCAN等,实验结果表明所提算法在提高聚类性能方面优于其他算法,并且算法的可行性和有效性也得到了验证。 文章中还提到了其他一些关键词,比如标签云和标签的...

    基于多层次特征提取的胶囊网络文本分类研究.docx

    文本分类的应用场景非常广泛,涵盖自动标签、情感分析、垃圾邮件过滤、垃圾评论过滤等任何需要自动归档文本的场合。近年来,深度学习利用词向量的分布式表示构建模型的输入,主流的深度学习模型,如卷积神经网络和...

    深入探讨 - 其实你并不懂产品标签机制.docx

    标签的结构化特性使得它们可以有效地存储、组织、管理和搜索,这正是标签优于传统分类的原因之一。 其次,标签的搜索和定位能力是其另一大优势。因为标签是结构化的,它们可以在数据库中轻松地被索引和查找,从而...

    基于Caffe深度学习框架的标签缺陷检测应用研究.pdf

    通过CNN,模型可以从输入图像中提取多层次的特征,从而实现对标签缺陷的有效识别。 总的来说,该研究为标签缺陷检测提供了一种基于Caffe深度学习框架的新方法,这种方法通过Dropout优化了特征提取,提升了检测精度...

    基于DBN模型的遥感图像分类_吕启1

    深度学习是一种模仿人脑层次结构的机器学习方法,它能够逐步从低层特征到高层抽象特征进行学习,通过逐层提取和优化特征,实现对复杂数据的高效处理。近年来,深度学习在图像识别、语音识别等领域取得了显著成果。 ...

    中证科技类指数超越市场整体表现 助力科技产业发展-2020.3-18页.pdf

    标题和描述的知识点: 标题“中证科技类指数超越市场整体表现 助力科技...指数型产品为投资者提供了一种投资科技股的便捷方式,并且中证指数公司发布的科技类指数为资本市场提供了一个全面、多层次的科技股投资视角。

    (CCF C类+EI+web of sicence核心集合收录)Rule-Based HierarchicalRank An U

    《基于规则的层次排名:一种无监督的中文半结构化文本可见标签提取方法》 随着互联网和信息技术的飞速发展,半结构化的中文文本数据大量涌现,为文本挖掘和知识发现带来了新的挑战与机遇。其中,如何从文档中自动...

    融合标签和内容信息的矩阵分解推荐方法.docx

    1. 提出一种结合标签信息、内容信息和用户评分的矩阵分解算法,利用神经网络模型获取物品的深层次特征,降低预测误差。 2. 将内容和标签的异构信息融合,以更全面的特征向量表示物品,克服数据稀疏性和冷启动问题对...

    各种聚类算法介绍及对比教学内容.docx

    Chameleon则是一种动态建模的层次聚类算法,其性能被认为优于BIRCH,但计算复杂度较高。 2. 凝聚型层次聚类流程: - 它从每个对象作为一个单独的簇开始,通过合并距离最近的类逐渐构建层级结构,直至所有对象都在...

    模内标签印刷工艺.pdf

    而单张纸印刷加工则更为灵活,适合小批量生产,印刷效果较好,尤其是丝印和平版胶印,能展现出丰富的层次和实地效果。 胶印作为模内标签的一种常见印刷工艺,其特点是精细网点印刷质量出色,但色彩饱和度和线条印刷...

    使用不完整的层次标记预测蛋白质功能

    在对公共PPIdatasets(包含MIPS功能目录和基因本体论标签)进行的预测中,PILL被证实优于其他相关技术,并且能够有效地补充缺失的标签以及预测完全未标记蛋白质的功能。 该研究强调了在蛋白质功能预测中考虑不完整...

    Fine-Grained Entity Typing in Hyperbolic Space(实体粒度更细)1

    然而,大型类型库给传统的多标签分类方法带来了挑战。这种方法通常无法充分利用不同类型之间的关联信息,特别是在类型数量急剧增加时。为了解决这一问题,本文研究了如何在超空间中利用嵌入技术捕捉实体提及与其目标...

    基于深度度量学习的小样本商品图像分类研究.pdf

    最后,“度量学习”是指学习一个距离函数或相似性函数,让具有相同标签的样本彼此间的距离更小,标签不同的样本间的距离更大。度量学习在很多应用中都有重要作用,比如人脸识别、零样本学习和度量学习等。 文章中还...

    weka学习报告91

    在yeast数据集上,BR算法(使用J48和NaiveBayes作为基分类器)的性能比较中,可以看到不同的基分类器对多标签预测的影响,比如J48在某些评估指标上优于NaiveBayes。这些实验结果有助于评估和选择适合特定任务的多...

    使用双层协同聚类的众包标签聚合

    两个层次的聚类过程可以相互提供多次标签修正环节中的指导信息。 为了验证提出的双层协同聚类方法的性能,作者在12个真实世界的众包数据集上进行了实验。实验结果表明,该方法的准确性优于现有的先进方法。此外,这...

    西北工业大学人工神经网络考试报告.docx

    【标签】:互联网,深度学习,图像分类,卷积神经网络,AlexNet **正文** 人工神经网络(ANN)是受生物神经元结构启发的计算模型,用于模拟人脑的学习过程。近年来,随着深度学习的兴起,ANN在各个领域,尤其是...

Global site tag (gtag.js) - Google Analytics