`
cfeers
  • 浏览: 135450 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

抽象类 Abstract class

    博客分类:
  • java
 
阅读更多
抽象类表示抽象概念,抽象概念是指在人脑中存在、实际并无此物的一种抽象存在。比如,你去超市买了一台微波炉,在此行动中,微波炉对你来说,是具体存在的,而“电器”则是抽象的。有人说,“微波炉”也很抽象啊,比如它是由很多零部件组成的,它的称呼也是由人们经过定义出来的。是的,任何一个人类使用的词语都可以看做是抽象的。树、水、花、虫都是抽象的概念。但是,在某一具体的场景中,具体和抽象是可以区分的。去超市买微波炉,在这个行为中,微波炉是具体的,电器则是抽象的。

在软件开发领域,我们称某种场景是问题域。去超市买微波炉,就是一种问题域。问题域中存在着各种各样的实体。比如在一个采购系统中有订单、发货单、发票,它们都是确实存在的实物,我们称它们是具体的;而票据不是具体的,是仅仅存在于我们头脑中的,我们称它是抽象的。抽象的概念被设计成为抽象类Abstract class. Abstract之所以不能被实例化,是因为它在问题域中不是真正存在的。比如在采购系统的问题域中,存在的只是订单、发货单、发票。

是不是有必要把订单、发货单、发票抽象出一个票据概念,要看具体问题。抽象可以隔离变化,这样可使此变化不影响彼模块,不会造成牵一发而动全身的窘境。如果有一块业务需要统一处理票据,且要处理的票据种类很可能将来会增加或减少(变化),则有必要抽象出票据的概念,并把它与各种票据实体绑定,即,各票据实体都继承自它。而票据处理业务模块只需要和抽象接口通信。将来新的票据类型出现不会影响到票据处理模块。

离开问题域去抽象是坏习惯,它只会导致垃圾类的产生。在采购系统中,如果票据这种抽象概念根本就跟问题域无关,则武断生成的票据抽象类就是垃圾类。

离开问题域甚至无法进行抽象,比如你无法断定“一杯水”是抽象的还是具体的,但在具体的场景中,“请给我一杯水”则是清楚具体的。无法区分抽象和具体就无法去进行抽象。

软件开发中,如果能在问题域中确认未来不会有任何变化,则摒弃抽象这种多余之举。

软件需求中唯一不变的就是它一直在变。
分享到:
评论

相关推荐

    Java中抽象类和接口的区别与作用详解

    结论:abstract class和Interface是JAVA语言中的两种定义抽象类的方式。Interface将abstract的概念作了更进一步的发挥。你可以想像Interface是“纯粹”的 abstract class,只可以包含抽象方法,也包括一些常量的定义...

    详细解析Java中抽象类和接口的区别

    抽象类和接口的区别 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持...

    Java中抽象类和接口的区别

    在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...

    浅谈C# 抽象类与开闭原则

    (1)使用关键字abstract修饰的类,称为抽象类. (2)抽象类只是用到一个类所具有的行为,不能单独通过创建对象来使用.使用new是错误的.可以通过派生类来实现其函数成员的具体逻辑。 (3)抽象类中可以有抽象方法,...

    深入理解abstract class和interface

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性...

    UML术语、定义,word文档

    1 抽象类 abstract class 相对语:具体类(concrete class) 2 抽象 abstraction 强调事物的一定特征而忽视无关的其他特征的结果。所定义的抽象与观察者的视角有关。 3 动作 action 行为规约的基础单元,用以...

    abstract class

    abstract class 抽象类--不具体的类 1) 抽象方法,只有行为的概念,没有具体的行为实现。 2) 包含抽象方法的类,就一定是抽象类。 使用: abstract 关键字修饰,包含抽象方法。 如:平面图形一定可以计算面积。 ...

    abstract_class:Ruby 中的抽象类

    任何初始化或分配抽象类实例的尝试都会引发AbstractClass::Error 。 ActiveRecord :: Base . new #=> AbstractClass::Error - abstract class ActiveRecord::Base can't be instantiated ActiveRec

    抽象类和接口的区别

    抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 抽象类不一定必须含有抽象方法。比如: 复制代码 public abstract class Dog { //普通方法 void ...

    1.5:接口和抽象类的区别.pdf

    1. 小结 1.abstract class 在c#语言中表示的是一种继承关系,一个类只能使用一...6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 7.接口中的方法默认都是 public,abstract 类型的。

    深入解析C#中的abstract抽象类

    通过在类定义前面放置关键字 abstract,可以将类声明为抽象类。例如: public abstract class A { // Class members here. } 抽象类不能实例化。抽象类的用途是提供一个可供多个派生类共享的通用基类定义。例如,...

    JAVA中抽象类和接口的区别

    在Java语言中,abstract class 和interface 是支持抽象类定义的两种机制区别

    JAVA中抽象类与接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性...

    Java_abstract_example.rar_abstract class_抽象

    java抽象类例子,适合初学者学习java的抽象类

    Java抽象类.pdf

    Java中抽象类是指用abstract关键字修饰的类,它不能被实例化,只能被继承。抽象类通常用于定义一些公共的方法和属性,但是这些方法没有具体的实现。子类必须重写抽象类中的所有抽象方法才能被实例化。 抽象类是Java...

    swift-abstract-class:Swift的编译时抽象类验证

    import AbstractClassFoundationclass MyAbstractClass : AbstractClass { var anAbstractProperty: PropertyType { abstractMethod () } func anAbstractMethod ( _ arg1 : Arg, arg2 : Arg) -> MyReturnType { ...

    Java中抽象类和接口的区别.zip_java interf

    在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...

    抽象类的小练习abstractExercise

    小的抽象类的java程序,很清晰的显示了abstract class的使用方法。

    C++中抽象类和接口的区别介绍

    抽象类(abstract class)和接口(interface)的概念是面向对象设计中常用的概念, 也是比较容易混淆的概念. 在这里, 我提出一种区分它们的思路

Global site tag (gtag.js) - Google Analytics