精华内容
下载资源
问答
  • 关于抽象

    千次阅读 2013-04-21 10:13:49
    计算机世界中的一切“信息”都是投影。可能是真实世界的投影,比如仓储系统中的“货物”与实际仓库中的货物;也可能是其它投影的投影,比如所谓的“元数据”、“元元数据”。...抽象提供了一种认知方法,可以提取不

    计算机世界中的一切“信息”都是投影。可能是真实世界的投影,比如仓储系统中的“货物”与实际仓库中的货物;也可能是其它投影的投影,比如所谓的“元数据”、“元元数据”。

    从某种角度上,抽象即映射。通常是多对少的映射,比如白马、黑马和黄马对马的映射。数学上,函数即集合到集合的映射,这样说来,抽象也是一种函数。

    通常每一个事物都有无数的属性,但这些属性却并不是事物本身。抽象提供了一种认知方法,可以提取不同事物的共同属性,从而将其当作“同一种事物”——更准确的说,应该是“具备相同属性的事物”。抽象即简化,所以抽象的极端必然回到一切事物的基本属性,可能有无数种,也可能只有一个。

    展开全文
  • 主要介绍了php中关于抽象(abstract)类和抽象方法的问题分析,有需要的朋友可以参考一下
  • 关于抽象函数的Riemann积分性质的探讨,蔡亮,,本文从数值函数Riemann积分的角度出发,研究了抽象函数Riemann积分的性质方面的问题。与同类研究相比,本文旨在突出研讨抽象函数Riemann
  • 关于抽象和具体

    千次阅读 2011-08-15 16:30:06
    关于抽象和具体 什么是抽象呢?首先不必澄清什么是抽象,而从什么算抽象说起,稳定的、高层的就代表了抽象。就像一个公司,最好保证了高层的稳定,才能保证全局的发展。在进行系统设计时,稳定的抽象接口和高层逻辑...
     
    

    关于抽象和具体

    什么是抽象呢?首先不必澄清什么是抽象,而从什么算抽象说起,稳定的、高层的就代表了抽象。就像一个公司,最好保证了高层的稳定,才能保证全局的发展。在进行系统设计时,稳定的抽象接口和高层逻辑,也代表了整个系统的稳定与柔性。兵熊熊一窝,将良良一窝,软件的构建也正如打仗,良好的设计都是自上而下的。而对具体的编程实践而言,接口和抽象类则代表了语言层次的抽象。

    追溯概念的分析,一一过招,首先来看依赖于具体,如图3-3所示。

    因此,为了分离这种紧耦合,最好的办法就是隔离,引入中间层来分离变化,同时确保中间层本身的稳定性,因此抽象的中间层是最佳的选择(如图3-4所示)。

      

    以例而理,从最常见的服务端逻辑举例,如下所示:

    public interface IUserService

    {

    }

     

    public class UserService : IUserService

    {

    }

    如果依赖于具体:

    public class UserManager

    {

      private UserService service = null;

    }

    或者依赖于抽象:

    public class UserManager

    {

      private IUserService service = null;

    }

    二者的区别仅在于引入了接口IUserService,从而使得UserManager对于UserService的依赖由强减弱。然而对于依赖的方式并非仅此一种,设计模式中的智慧正是通过各种编程技巧进行依赖关系的解耦,值得关注和学习,后文将对设计模式进行概要性的讨论。

    对WCF熟悉的读者一定不难看出这种实现方式如此类似于WCF的推荐模式,也是契约编程的基本思想。关于WCF及SOA的相关内容,我们在后文进行了相关的讨论。

    总结一番,什么是抽象,什么是具体?在作者看来,抽象就是系统中对变化封装的战略逻辑,体现了系统的必然性和稳定性,能够被具体层次复用和覆写;而具体则包含了与具体实现相关的逻辑,体现了系统的动态性和变动性。因此,抽象是稳定的,而具体是变动的。

    Bob大叔在《Agile Principles, Patterns, and Practices》一书中直言,程序中所有的依赖关系都应终止于抽象类或者接口,就是对面向抽象编程一针见血的回应,其原因归根到底源自于对抽象和具体的认知和分解:关联应该终止于抽象,而不是具体,保证了系统依赖关系的稳定。具体类发生的修改,不会影响其他模块或者关系。那么如何做到这种理想的依赖于抽象的设计呢?

      层次清晰化

    将复杂的问题简单化,是人类思维的普世智慧,也自然而然是实现软件设计的基本思路。将复杂的业务需求通过建模过程的抽象化提炼,去粗取精,去伪存真,凡此种种。而抽象的过程,其目标之一就是形成对于复杂问题简单化的处理过程,只有形成层次简单的逻辑才能将复杂需求中的关系梳理清晰,而依赖的本质正如上文所言,不就是处理关系吗?

    所以,清晰的层次划分,进而形成的模块化,是实现系统抽象的必经之路。

      分散集中化

    由需求而设计的过程,就是一个分散集中化的过程,把需求相关的业务通过开发流程的需求分析过程进行整理,逐步形成需求规格说明、概要设计和详细设计等基本流程。分散集中化,是一个梳理需求到形成设计的过程,因此对于把握系统中的抽象和具体而言,是一个重要的分析过程和手段。现代软件工程已经对此形成了科学的标准化流程处理逻辑,例如可以借助UML更加清晰地设计流程、分析设计要素,进行标准化沟通和交流。

      具体抽象化

    将具体问题抽象化,是本节关注的要点,而处理的方法是什么呢?答案就在设计模式。设计模式是前辈智慧的总结和实践,所以熟悉和学习设计模式,是学习和实践设计问题的必经之路。然而,没有哪个问题是由设计模式全权解决,也没有哪个模式能够适应所有的问题,因此要努力的是尽量积累更多的模式来应对多变的需求。作为软件设计话题中最重量级的话题,关注模式和实践模式是成长的记录。

      封装变化点

    总的来说,抽象和变化就像一对孪生兄弟,将具体的变化点隔离出来以抽象的方式进行封装,在变化的地方寻找抽象是面对抽象最理想的方式。所以,如何去寻找变化是设计要解决的首要问题,例如工厂模式的目标是封装对象创建的变化,桥接模式关注对象间的依赖关系变化等。23个经典的设计模式,从某种角度来看,正是对不同变化点的封装角度提出的不同解决方案。

    这一设计原则还被称为SoC(Separation of Concerns)原则,定义了对于实现理想的高耦合、低内聚目标的统一规则。

    3.设计的哲学

    之所以花如此篇幅来讲述一个看似简单的问题,其实最终理想是回归到软件设计目标这个命题上。如果悉心钻研就可发现,设计的最后就是对关系的处理,正如同生活的意义在于对社会的适应一样。因此,回归到设计的目标上就自然可知,完美的设计过程就是对关系的处理过程,也就是对依赖的梳理过程,并最终形成一种合理的耦合结果。

    所以,面向对象并不神秘,以生活的现实眼光来看更是如此。把面向对象深度浓缩起来,可以概括为:

      目标:重用、扩展、兼容。

      核心:低耦合、高内聚。

      手段:封装变化。

      思想:面向接口编程、面向抽象编程、面向服务编程。

    其实,就是这么简单。在这种意义上来说,面向对象思想是现代软件架构设计的基础。下面以三层架构的设计为例,来进一步感受这种依赖哲学在具体软件系统中的应用。关于依赖的抽象和对变化隔离的基本思路,其实也是实现典型三层架构或者多层架构的重要基础。只有使各个层次之间依赖于较稳定的接口,才能使得各个层次之间的变化被隔离在本层之内,不会造成对其他层次的影响,这完全符合开放封闭原则追求的优良设计理念。将这种思路表达为设计,可以表示为如图3-5所示的形式。

     

    由图3-5可知,IDataProvider作为隔离业务层和数据层的抽象,IService作为隔离业务层和表现层的抽象,保证了各个层次的相对稳定和封装。而体现在此的设计逻辑,就正是对于抽象和耦合基本目标概念的体现,例如作为重用的单元,抽象隔离保证了对外发布接口的单一和稳定,所以达到了最高限度的重用;通过引入中间的稳定接口,达到了不同层次的有效隔离,层与层之间体现为轻度耦合,业务层只持有IDataProvider就可以获取数据层的所有服务,而表现层也同样如此;最后,这种方式显然也直接实践了面向接口编程,面向抽象编程的经典理念。

    同样的道理,对于架构设计的很多概念,放大可以扩展为面向服务设计所借鉴,放小这正是反复降调的依赖倒置原则在类设计中的基本思想。因此,牢记一位软件大牛的说法:软件设计的任何问题,都可以通过引入中间逻辑得到解决。而这个中间逻辑,很多时候被封装为抽象,是最为合理和智慧的解决方案。

    让我们再次高颂《老子》的小国寡民论,来回味关于依赖哲学中,如何实现更好的和谐统一以及如何遵守科学的软件管理思想:邻国相望,鸡犬之声相闻,民至老死,不相往来。

     

    本文节选自《你必须知道的.NET(第2版)》一书

    图书详细信息:http://blog.csdn.net/broadview2006/article/details/6673353

     

    展开全文
  • 关于抽象方法的描述: 抽象类必须在抽象类中抽象类不能有方法的实现抽象方法不能使用private修饰符如果抽象类的子类是一个普通的类,那么必须实现(重写)父类中所有的抽象方法抽象方法是用abstract修饰public ...

    抽象类


    关于抽象方法的描述:

    1. 抽象类必须在抽象类中
    2. 抽象类不能有方法的实现
    3. 抽象方法不能使用private修饰符
    4. 如果抽象类的子类是一个普通的类,那么必须实现(重写)父类中所有的抽象方法
    5. 抽象方法是用abstract修饰public abstract void Practice();
    6. 抽象方法使用override

    关于抽象类的说明:

    1. 抽象类中可以有字段丶属性丶方法(普通方法,虚方法,抽象方法)
    2. 抽象类不可以直接实例化对像,但是可以通过父类应用指向子类对象的方法(Animal ani=new Dog();)
    3. 抽象方法必须存在于抽象类中,但是抽象类中可以没有抽象方法(就像鱼和水的关系:鱼(抽象方法)必须在水(抽象类)里面才能存活,但是水(抽象类)里是可以没有鱼(抽象方法)的
    关于继承抽象类的说明:

    1. 普通类继承抽象类的时候,必须实现抽象类中的所有抽象方法!
    2. 抽象类继承于抽象类的时候,可以选择实现父类中的抽象方法,也可以不实现

    静态类


    关于静态类的说明:
    1. 什么是静态类? 使用static关键字修饰的类被叫做静态类
    static class MyMath
    {
    //int length; //不能包含非静态类成员
    static int id = 10;
    //void fun(){}//不能包含非静态类成员
    static int Abs()
    {
    return a > 0 ? a : -a ;
    }
    }
    2. 静态类不能实例化对象
    3. 静态类内部的成员必须是静态成员,或者是const修饰的常量(常量在定义的同时必须赋值,因为常量在运行期间不能改变)
    注意:静态类中没有默认的构造函数,只有静态构造函数

    展开全文
  • 上篇博客具体的说明了抽象类,以及为什么使用抽象类,现在就说一下关于抽象类的几个注意点: 1、抽象方法不能包含在非抽象类中。如果抽象父类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象的。换句话说...


    上篇博客具体的说明了抽象类,以及为什么使用抽象类,现在就说一下关于抽象类的几个注意点:
    1、抽象方法不能包含在非抽象类中。如果抽象父类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象的。换句话说,在抽象类扩展的非抽象类中,必须实现所有的抽象方法。还要注意到,抽象类是非静的。

    2、抽象类是不能使用new关键字来初始化的。但是,任然可以定义它的构造方法,这个构造方法在它的子类的构造方法中调用。例如Object是具体的,GeometricObject类的构造方法在Circle和Rectange类中调用。

    3、包含抽象对象的类必须是抽象的。但是,可以定义一个不包含抽象方法的抽象类。在这种情况下,不能使用new操作符创建该类的实例。这种类是用来定义新子类的基类的。

    4、即使子类的父类是具体的,这个子类也可以是抽象的。例如,Object是具体的,GeometricObject可以是抽象的。

    5、子类可以覆盖父类的方法,并且把它定义为abstract。这是很少见
    的,但是它在当父类的方法实现在子类中不合法是很有用的。在这种情况下,子类必须定义为abstract.

    6、不能使用new操作符来从抽象类创建一个实例,但是抽象类可以作为一种数据类型。因此,下面的语句是创建一个元素是GeometricObject类型的数组,这个语句是正确的。

    GeometricObject[] objects = new GeometricObject[10];


    然后可以创建一个GeometricObject的实例,并将它引用赋值给数组,如下所示:

    objects[0] = new Circle;
    展开全文
  • 关于抽象类和接口的两篇不错文章关于抽象类和接口的两篇不错文章
  • 问个java关于抽象类基础的问题?抽象类不是不能实例化吗?怎么还能通过上转型创建抽象类对象? flower是抽象类,Rose继承与flower 但为什么下面这样写是合法的,不是抽象类不能被实例化对象吗? Flower ...
  • 这个压缩包是关于.Net中关于抽象工厂的一个例子,各位.Net的朋友要好好看看哦。
  • 抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类...
  • C# 关于抽象

    2014-03-21 15:05:43
    抽象分为抽象类,抽象方法 (1)抽象类 类声明前加一个abstract关键字,表示此类是抽象类,抽象类不能被实例化。示例:public abstract class A{}; (2) 抽象方法 仅仅只有abstract class才能够abstract method。...
  • 关于抽象类的描述

    千次阅读 2018-07-11 14:44:59
    1、在抽象类中,初始化变量后不可再在抽象类中进行赋值或者是操作该变量,要想操作此变量则在其子类中进行操作2、在抽象类中,可以声明一个抽象方法也可以声明一个普通方法。但声明抽象方法时不可在本类中对其实现...
  • 抽象类存在的意义是被子类继承,否则抽象类将毫无意义,抽象类体现的是模板思想,模板是通用的东西抽象类中已经是具体的实现(抽象类中可以有成员变量和实现方法),而模板中不能决定的东西定义成抽象方法,让使 用...
  • 关于抽象类无法实例化,但是可以使用"new"来实例的疑问. 背景:昨天下午回答一个实习生问的问题,大致的经过是这样的: 他问的:“为什么抽象类无法实例化,但是可以new出来一个实例,官方这么说是什么意思?而且去了各类...
  • [多选]下列关于抽象类说法错误的是 A 有抽象方法一定有抽象类 B 抽象类必须由抽象方法 C 抽象类没有构造方法 D 抽象类可以new直接实例化 个人参考答案: BCD知识点基础知识用法扩展抽象类与接口区别
  • 抽象类的出现,只要是为了规范子类的方法的命名,抽象类不能创建对象,是因为抽象类中含有抽象方法,所以抽象类是不完整的,假若抽象类可以创建对象的话,创建出来的对象要调用抽象类的方法,而抽象方法无调调用,就...
  • 关于抽象数据类型--有理数,实现有理数的加减乘除运算
  • 关于抽象行数

    2014-07-02 11:27:52
    关于抽象类, abstract     抽象类可提供多个派生类可共享的基类的公共定义,但抽象类却不能实例化。   抽象方法没有实现,所以方法定义后 无函数体 紧跟分号。 抽象类的派生类 必 须实现 所 有的抽象...
  • 本文讨论了Hilbert 空间上抽象控制系统的能稳定性,首先推广了Trigg-ini、Zabczyk 及Pritchard 关于控制系统在分解意义下能稳性的结果,接着从“能控制性与能稳性”的角度,推广了现有用算子Reccati 方程所描述的系统能...
  • 以模糊语义为背景,在标号集具有一定结构的一族全序完备格的乘积上引入了抽象语义及其连续性概念,证明了具有这种连续性的抽象语义是紧致的,由此可以推出取值于[0 ,1]的Lukasiewicz语义是紧致的
  • JAVA关于抽象类的面试题

    千次阅读 2018-09-25 00:12:22
    1、概述 (1)只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有“{}”。使用 abstract 修饰符来表示抽象方法和抽象类。 (2)abstract修饰符表示所修饰的类没有...
  • 关于抽象的一些收集

    2015-09-18 11:08:15
    什么是抽象? 什么是抽象等级高? 什么是具象? 大家天天说抽象,甚至还在比较抽象的等级高级,但是我实在不知道大家脑子里的“抽象”一词到底是什么意思? 首先,很关键的一点是:现在你站在哪里? 最关键的...
  • 1. 抽象类和抽象方法的总结 (1)抽象类中可以包含抽象方法和非抽象方法。 (2)一旦某个类包含了抽象方法,则该类必须使用abstract说明为抽象类,即抽象方法必须存在与抽象类中,不能出现在普通类中。 (3)抽象...
  • 抽象类不是不能实例化吗?为什么 ```python public abstract class Person { public abstract void sd(); } public class Test01 { public static void main(String[] args) { Person a=new Person()...
  • 定义抽象类animal ,从中派生3个具体类:Dog,Cat,Duck,每个子类覆盖父类的抽象方法。每种动物发出的声音为一串字符串。
  • 关于抽象类与接口

    2013-11-20 17:40:39
    如果单从具体代码来看,对这两个概念很容易模糊,甚至觉得接口就是多余的,因为单从具体功能来看,除多重继承外(C#,Java中),抽象类似乎完全能取代接口。但是,难道接口的存在是为了实现多重继承?当然不是。我...
  • 在2015年8月20日的Meetup中提出的有关抽象d3图表的代码 取chart_default.js并将其抽象到barchart构造器la abstract_bar.js中: 初始化svg 秤 获取数据 解析数据 轴数 吧台 chart_abstract_1是使用abstract_bar.js...
  • 1. 许多程序员认为,在抽象类中不能包含具体方法,建议尽量将通用的域和方法(不管是否抽象的)放在超类(不管是否是抽象类)中。 问: 什么是通用的域或者方法。 2.抽象方法充当占位的角色,他们的具体实现在子类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 396,041
精华内容 158,416
关键字:

关于抽象