软件抽象概念 抽象概念 - 电脑|办公 - 电脑办公-杀毒安全-网络-V3学习网
微商网
 
 
导航:首页 |电脑|办公|正文

软件抽象概念 抽象概念

时间:2021-04-15 09:33:35
请问抽象的定义是什么? 理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,
作者:

软件抽象概念

请问抽象的定义是什么?

理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。

并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。

正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域,抽象类主要用来进行类型隐藏。

我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。

这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。

模块可以操作一个抽象体。

由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。

熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。

从语法定义层面看abstract class和interface 在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。

使用abstract class的方式定义Demo抽象类的方式如下: abstract class Demo { abstract void method1(); abstract void method2(); … } 使用interface的方式定义Demo抽象类的方式如下: interface Demo { void method1(); void method2(); … } 在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。

从某种意义上说,interface是一种特殊形式的abstract class。

从编程的角度来看,abstract class和interface都可以用来实现"design by contract"的思想。

但是在具体的使用上面还是有一些区别的。

首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。

但是,一个类却可以实现多个interface。

也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。

其次,在abstract class的定义中,我们可以赋予方法的默认行为。

但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的麻烦。

在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。

因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。

但是如果界面是通过abstract class来实现的,那么可能就只需要修改定义在abstract class中的默认行为就可以了。

同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了"one rule,one place"原则,造成代码重复,同样不利于以后的维护。

因此,在abstract class和interface间进行选择时要非常的小心。

从设计理念层面看abstract class和interface 上面主要从语法定义和编程的角度论述了abstract class和interface的区别,这些层面的区别是比较低层次的、非本质的。

本小节将从另一个层面:abstract class和interface所反映出的设计理念,来分析一下二者的区别。

作者认为,从这个层面进行分析才能理解二者概念的本质所在。

前面已经提到过,abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的(参考文献〔3〕中有关于"is a"关系的大篇幅深入的论述,有兴趣的读者可以参考)。

对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。

为了使论述便于理解,下面将通过一个简单的实例进行说明。

考虑这样一个例子,假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型,定义方式分别如下所示: 使用abstract...

“抽象”是什么意思啊???

抽象是认识复杂现象过程中使用的思维工具,形象地抽取出来或孤立地进行考虑的行动或过程。

抽象就是我们对某类事物共性的描述。

具体来说,而只注意其他特性的行动或过程(如头脑只思考树本身的形状或只考虑树叶的颜色,不受它们的大小和形状的限制),即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。

软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化。

在进行软件设计时,抽象与逐步求精、模块化密切相关,帮助我们定义软件结构中模块的实体,抽象是指:1、将复杂物体的一个或几个特性抽出去、将几个有区别的物体的共同性质或特性。

2, 抽象不能脱离具体而独自存在。

我们所看到的大自然景象就是大自然的实物在我们脑海中的抽象抽象是哲学的根本特点

接口和抽象类

就会发现问题领域存在着圆、三角形 这样一些具体概念,不过在interface中一般不定义数据成员),因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意。

其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理;关系,即父类和派生类在概念本质上应该是相同的。

对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已,通过从这个抽象体派生,也可扩展此模块的行为功能; … } 使用interface的方式定义Demo抽象类的方式如下,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。

二、从语法定义层面看abstract class和interface 在语法层面,我们可以赋予方法的默认行为,形状这个概念在问题领域是不存在的,它就是一个抽象概念。

正是因为抽象的概念在问题 领域没有对应的具体概念,abstract class和interface都可以用来实现"design by contract"的思想。

但是在具体的使用上面还是有一些区别的,必须使用委托,但是这会 增加一些复杂性。

作者认为,从这个层面进行分析才能理解二者概念的本质所在: abstract class Demo { abstract void method1(); abstract void method2()。

但是如果界面是通过abstract class来实现的、非本质的。

本文将从另一个层面:abstract class和interface所反映出的设计理念,来分析一下二者的区别,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域。

我们可以构造出一个固定的一组行 为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式,抽象类主要用来进行类型隐藏。

但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,违反了"one rule,那么什么是抽象类,使用抽象类能为我们带来什么好处呢。

比如。

其次、从设计理念层面看abstract class和interface 上面主要从语法定义和编程的角度论述了abstract class和interface的区别,这些层面的区别是比较低层次的。

从编程的角度来看。

熟悉OCP的读 者一定知道? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,有时会造成很大的麻烦。

在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的 麻烦。

因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时 间(对于派生类很多的情况,如果不能在抽象类中定义默认行为,因此它可以是不允许修改的;同时,那么可能就只需要修改定义在abstract class中的默认行为就可以了。

因此,在abstract class和interface间进行选择时要非常的小心。

三。

abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,造成代码重复,同样不利于以后的维护,在abstract class的定义中,抽象类是其中的关键所在,试图给开发者提供一个在二者之间进行选择的依据。

一。

同样;is a&quot,但是本质上相同的具体概念的抽象。

本文将对它们之间的区别进行一番剖析,就会导致同样的方法实现出现在该抽象类 的每一个派生类中。

由于模块依赖于一个固定的抽象体。

首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。

但是,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的 不能被修改的数据成员(也就是必须是static final的。

使用abstract class的方式定义Demo抽象类的方式如下,尤为如此),父类和派生类之间必须存在&quot、设计中得出的抽象概念,是对一系列看上去不同。

前面已经提到过,abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,所有的成员方法都是abstract的。

从某种意义上说,interface是一种特殊 形式的abstract class: interface Demo { void method1(); void method2(); … } 在abstract class方式中,Demo可以有自己的数据成员,假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型,定义方式分别如下所示: 使用abstract class方式定义Door: abstract class Door { abstract void open(); abstract void close(); } 使用interface方式定义Door: interface Door { void open(); void close(); } 其他具体的Door类型可以extends使用abstract class方式定义的Door或者implements使用interface方式定义的Door。

看起来好像使用abstract class和interface没有大的区别。

如果现在要求Door还要具有报警的功能。

我们该如何设计针对该例子的类结构呢(在 本例中,主要是为了展示abstract class和interface反映在设计理念上的区别,其他方面无关的问题都做了简化或者忽略)下面将罗列出可能的解决方案,并...

如何搞定抽象概念

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象。

比如:我们要描述“水果”,它就是一个抽象,它有质量、体积等一些共性(水果有质量),但又缺乏特性(苹果、橘子都是水果,它们有自己的特性),我们拿不出唯一一种能代表水果的东西(因为苹果、橘子都不能代表水果),可用抽象类来描述它,所以抽象类是不能够实例化的。

当我们用某个类来具体描述“苹果”时,这个类就可以继承描述“水果”的抽象类,我们都知道“苹果”是一种“水果”。

在面向对象领域,抽象类主要用来进行类型隐藏。

我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。

这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为这个抽象类的所有派生类。

接口和抽象类中的所有抽象方法不能有具体实现,而应在它们的子类中实现所有的抽象方法(要有函数体,哪怕{ }里是空的),java的设计者可能为抽象方法的灵活性考虑,每个子类可根据自己的需要来实现抽象方法。

抽象类(abstract class)的定义方式如下: public abstract class AbstractClass //里面至少有一个抽象方法 { public int t; //普通数据成员 public abstract void method1(); //抽象方法,抽象类的子类在类中必须实现抽象类中的抽象方法 public abstract void method2(); public void method3(); //非抽象方法 public int method4(); publi int method4 (){ …… //抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现 } public void method3(){ …… //抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现 } } 接口(interface)的定义方式如下: public interface Interface { static final int i; //接口中不能有普通数据成员,只能够有静态的不能被修改的数据成员,static表示全局,final表示不可修改,可以不用static final 修饰,会隐式的声明为static和final public void method1(); //接口中的方法一定是抽象方法,所以不用abstract修饰 public void method2(); //接口中不能赋予方法的默认行为,即不能有方法的具体实现 } 简言之抽象类是一种功能不全的类,接口只是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。

从某种意义上说,接口是一种特殊形式的抽象类,在java语言中抽象类表示的是一种继承关系,一个类只能继承继承一个抽象类,而一个类却可以实现多个接口。

在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。

进一步理解,关于java引入抽象类、接口的目的,向高手请教得到的答复如下:1、从类的层次结构上看,抽象类是在层次的顶端,但在实际的设计当中,一般来说抽象类应当是后面才会出现。

为什么?实际上抽象类的获取有点像数学中的提取公因式:ax+bx,x就是抽象类,如果你没有前面的式子,你怎么知道x是不是公因式呢?在这点上,也符合人们认识世界的过程,先具体后抽象。

因此在设计过程中如果你得到大量的具体概念并从当中找到其共性时,这个共性的集合就是抽象类应当是没错的。

2、interface从表面上看,和抽象类很相似,但用法完全不同。

它的基本功能就是把一些毫不相关的类(概念)集合在一起形成一个新的、可集中操作的“新类”。

我给学生的一个典型例子就是“司机”。

谁可以当司机?谁都可以,只要领取了驾照。

所以我不管你是学生,白领、蓝领还是老板,只要有驾照就是司机。

interface DriverLicence { Licence getLicence(); } class StudentDriver extends Student implements DriverLicence { } class WhtieCollarEmployeeDriver extends WhtieCollarEmployee implements DriverLicence { } class BlueCollarEmployeeDriver extends BlueCollarEmployee implements DriverLicence { } class BossDriver extends Boss implements Driver { } 当我定义了“汽车”类后,我就可以指定“司机”了。

class Car { setDriver(DriverLicence driver); } 这时候,Car的对象并不关心这个司机到底是干什么的,他们的唯一共同点是领取了驾照(都实现了DriverLicence接口)。

这个,应当是接口最强大的地方也是抽象类无法比拟的。

总结:抽象类是提取具体类的公因式,而接口是为了将一些不相关的类“杂凑”成一个共同的群体。

通常我们平时养成良好的习惯就是多用接口,毕竟java是单继承,不像C++,但是在需要使用抽象类的时候一定还是要用的(有点类似goto的用法),呵呵。

JAVA中的接口和抽象类

"抽象"是什么意思?

形象地抽取出来或孤立地进行考虑的行动或过程, 抽象不能脱离具体而独自存在。

我们所看到的大自然景象就是大自然的实物在我们脑海中的抽象抽象抽象是哲学的根本特点、将几个有区别的物体的共同性质或特性,而只注意其他特性的行动或过程(如头脑只思考树本身的形状或只考虑树叶的颜色,不受它们的大小和形状的限制)。

2。

抽象是认识复杂现象过程中使用的思维工具。

抽象就是我们对某类事物共性的描述。

具体来说,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。

软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化,抽象是指:1、将复杂物体的一个或几个特性抽出去。

在进行软件设计时,抽象与逐步求精、模块化密切相关,帮助我们定义软件结构中模块的实体...

接口和抽象类的区别是什么?

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

abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。

其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。

本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。

理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。

并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。

正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域,抽象类主要用来进行类型隐藏。

我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。

这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。

模块可以操作一个抽象体。

由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。

熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。

从语法定义层面看abstract class和interface 在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。

使用abstract class的方式定义Demo抽象类的方式如下: abstract class Demo { abstract void method1(); abstract void method2(); … } 使用interface的方式定义Demo抽象类的方式如下: interface Demo { void method1(); void method2(); … } 在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。

从某种意义上说,interface是一种特殊形式的abstract class。

从编程的角度来看,abstract class和interface都可以用来实现"design by contract"的思想。

但是在具体的使用上面还是有一些区别的。

首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。

但是,一个类却可以实现多个interface。

也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。

其次,在abstract class的定义中,我们可以赋予方法的默认行为。

但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的麻烦。

在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。

因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。

但是如果界面是通过abstract class来实现的,那么可能就只需要修改定义在abstract class中的默认行为就可以了。

同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了"one rule,one place"原则,造成代码重复,同样不利于以后的维护。

因此,在abstract class和interface间进行选择时要非常的小心。

从设计理念层面看abstract class和interface 上面主要从语法定义和编程的角度论述了abstract class和interface的区别,这些层面的区别是比较低层次的、非本质的。

本小节将从另一个层面:abstract class和interface所反映出的设计理念,来分析一下二者的区别。

作者认为,从这个层面进行分析才能理解二者概念的本质所在。

前面已经提到过,abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is a"关系,即父类...

网络的概念?

70年代后。

第二代网络以通信子网为中心,局域网由于投资少,方便灵活而得到了广泛的应用和迅猛的发展,与广域网相比有共性,如分层的体系结构,提供资源共享,组成了资源子网。

两个主机间通信时对传送信息内容的理解,将协议按功能分成了若干层次。

(3)网络软件。

早期的计算机系统是高度集中的,所有的设备安装在单独的大房间中,后来出现了批处理和分时系统,分时系统所连接的多个终端必须紧接着主计算机。

50年代中后期,许多系统都将地理上分散的多个终端通过通信线路连接到一台中心计算机上,这样就出观了第一代计算机网络,又有不同的特性。

第一代计算机网络是以单个计算机为中心的远程联机系统:一台计算机的外部设备包括CRT控制器和键盘:将多个具有独立工作能力的计算机系统通过通信设备和线路由功能完善的网络软件实现资源共享和数据通信的系统。

从定义中看出涉及到三个方面的问题,该模型分为七个层次。

通信子网互联的主机负责运行程序。

典型应用是由一台计算机和全美范围内2000多个终端组成的飞机定票系统。

终端,无GPU内存。

随着远程终端的增多,在主机前增加了前端机FEP当时,人们把计算机网络定义为“以传输信息为目的而连接起来,实现远程信息处理或近一步达到资源共享的系统”。

这个时期,网络概念为“以能够相互共享资源为目的互联起来的具有独立功能的计算机之集合体”,其具体实现是通过特定的硬件和软件来完成的。

70年代至80年代中第二代网络得到迅猛的发展,构成了通信子网,但这样的通信系统己具备了通信的雏形,体系结构是个抽象的概念。

第三代计算机网络是具有统一的网络体系结构并遵循国际标准的开放式和标准化的网络。

IS0在1984年颁布了0SI/RM,发展为以Internet为代表的互联网。

第二代计算机网络是以多个主机通过通信线路互联起来,为用户提供服务,兴起于60年代后期,典型代表是美国国防部高级研究计划局协助开发的ARPAnet。

主机之间不是直接用线路相连,而是接口报文处理机IMP转接后互联的。

IMP和它们之间互联的通信线路一起负责主机间的通信任务。

计算机网络,由于大规模集成电路出现,信息表示形式以及各种情况下的应答信号都必须遵守一个共同的约定,称为协议: (1)至少两台计算机互联。

(2)通信设备与线路介质。

在ARPA网中,整个网络就像一个对用户透明的大的计算机系统,如何分层,以及各层中具体采用的协议的总和,称为网络体系结构,如局域网为节省费用而不采用存储转发的方式,而是由单个的广播信道来连结网上计算机,形成了计算机网络的基本概念,也称为0SI七层模型,公认为新一代计算机网络体系结构的基础。

为普及局域网奠定了基础。

第四代计算机网络从80年代末开始,局域网技术发展成熟,出现光纤及高速网络技术,多媒体,智能网络计算机网络的概念 对“计算机网络”这个概念的理解和定义,随着计算机网络本身的发展,人们提出了各种不同的观点 展开

大家还关注
    
阅读排行
推荐阅读