① 抽象到底是什么意思我怎么总是弄不明白谁能具体的解释一下举个例子,请不要到百度百科那去复制的。
共同特征是指那些能把一类事物与他类事物区分开来的特征,这些具有区分作用的特征又称本质特征。因此抽取事物的共同特征就是抽取事物的本质特征,舍弃非本质的特征。所以抽象的过程也是一个裁剪的过程,将不同的、非本质性的特征全部裁剪掉了。 所谓的共同特征,是相对的,是指从某一个刻面看是共同的。比如,对于汽车和大米,从买卖的角度看都是商品,都有价格,这是他们的共同的特征,而从其他方面来比较是,他们则是不同的。所以在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。
编辑本段主要目的
抽象化主要是为了使复杂度降低,以得到论域中较简单的概念,好让人们能够控制其过程或以综观的角度来了解许多特定的事态。
编辑本段思考过程
在哲学里,“抽象化”是一种将观念抽离原本客体的思想过程。 抽象化使用了简单的手法,其将具体的细节保留成含糊、暧昧或无定义的样子;因此对于抽象事物的有效沟通需要在沟通的发受者之间有着某种直觉或共同的经验。 由具体事物中所抽离出的抽象事物之描述会有点含糊不清,此种含糊或暧昧即为抽象化的特征之一。因此,如报纸之简单的事物有可能可以被分成六个等级,例如道格拉斯·理查·郝夫斯台特在《哥德尔、埃舍尔、巴赫》(1979年)这本书中由抽象至具体排出之对含糊的描述: (1)一个出版品 (2)一份报纸 (3)《旧金山纪事报》 (4)5月18日的《旧金山纪事报》 (5)我的5月18日的《旧金山纪事报》 (6)我首次捡起时的我的5月18日的《旧金山纪事报》(而现在则不是我的了,因为我在几天后丢进火炉里烧了) 抽象化可以因此以不失其一般性的方式包含着每个细节的层级。而或许一个侦探或一位哲学家/科学家/工程师可以以此来学习某些事实,以对细节渐进加深的方式,来解决一场犯罪或一件拼图。
编辑本段指称对象
抽象化有时会有些含糊不清的指称对象;例如,“快乐”(当做为一个抽象化)可以指涉成能使人快乐的人事物。相同地,“建筑”不只指涉着安全、功能性建筑的设定,也指涉着创作和创新的元素,其目的是为了解决建造、空间利用及试图引起建造者、拥有者、观看者和使用者的情绪反应等问题。
具现化
不存在于任一特定地点和时间的事物通常会被认为是抽象的。相对地,此类抽象事物的例子或元素则可能会存在于许多不同的地点及时间内。此类的抽象事会被称做是“多重具现”的。 但不必然需要将“抽象”的观念定义成能具现的观念,也不必然需要将“抽象化”定义成具现化的相反作用。这样做会令“猫”和“电话”这些概念因不随外观而变而为抽象的观念,而一个特定的猫或一个特定的电话则会是“猫”或“电话”等概念的一个例子。
物质性
一个物理物件(一个概念或一个字的可能指称对象)被认为是“具体”的(非抽象的),若它是一个会出现在特定的地点和时间的“特定个体”的话。 抽象的事物有时可以被定义成不存在于现实或只存在于感官经验上的事物,如红色。但该定义会有如何决定哪些事是真实的(即哪些事是存在于现实中的)之困难性。例如,很难去决定如“神”、“三号”和“女神”等概念是真实的,还是抽象的,亦或是两者都有。 解决此类困难的一种方法是将其述语不论事物是一真实的、抽象的、具体的或一特定性质(如“好”)等都将其做为一个一般性的词汇。有关事物性质的问题故而会是个有关其述语的命题,其中的命题则仍然需要由研究者来判断真伪。在上面的“图2”中,如连接着方格和椭圆间箭头的图像间之关系可以标示着述语。不同抽象化的等级可以以多层的箭头依序地连在一起来标记。
编辑本段哲学里的抽象
抽象是哲学的根本特点, 抽象不能脱离具体而独自存在。 我们所看到的大自然景象就是大自然的实物在我们脑海中的抽象。抽象就是我们对某类事物共性的描述。 具体来说,抽象是指: 1、将复杂物体的一个或几个特性抽出去,而只注意其他特性的行动或过程(如头脑只思考树本身的形状或只考虑树叶的颜色,不受它们的大小和形状的限制)。 2、将几个有区别的物体的共同性质或特性,形象地抽取出来或孤立地进行考虑的行动或过程。 抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。 软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化。在进行软件设计时,抽象与逐步求精、模块化密切相关,帮助我们定义软件结构中模块的实体,由抽象到具体地分析和构造出软件的层次结构,提高软件的可理解性。
编辑本段艺术里的抽象
大多数在艺术中一般会将“抽象”当做是抽象画的同义词。但它可以是指任何由现实世界中精炼出的物件或图像,或者是完全无关的其他概念。在最现实的意义之下,抽象画并不是真的是抽象的。 艺术家罗伯特·斯塔克写道:“距离放弃了形式的风景画且改去发觉不具表现主题地将颜料自由地涂在画纸上之更直接的表现方式,已经过了有十年的时间了,我也发展出了一个新的词汇;明和暗、暖和冷、making marks、brush-strokes like heart-rhythms。每一天都是一次独自的作画能力之测试。每一张画作都会被不断地被更改、被重制、被擦掉或被重画,只要它还留在这个工作室里……”
编辑本段抽象艺术
抽象艺术是与具象艺术相对的名称,也可称为非具象艺术。它的特征是缺乏描绘,用情绪的方法去表现概念和作画,而这种方法基本上就是属于表现主义的,最早见于康定斯基的作品。它是由各种反传统的艺术影响融合而来,特别是由野兽派、立体派演变而来。 “抽象”艺术在毕加索看来并不存在,他认为只不过有人强调风格,有人强调生活罢了。在米歇尔·塞弗尔看来,抽象艺术是:“我把一切不带任何提醒,不带任何对于现实的回忆——不管这一现实是否是画家的出发点——的艺术都叫作抽象艺术。 实际上野兽派和立体派促进了形与色的独立发展。是康定斯基进一步发现了它的奥妙,他在1910年画了第一幅断然抽象的水彩画,是一幅无具象愿望的、充满活力的重叠色点。康定斯基的创造性发明是从音乐中获得美学启迪,尔后捷克人库普卡直接从音乐中获取灵感进行抽象艺术创作。人称他是音乐主义画家鼻祖,后来他们共同组成抽象派。
编辑本段心理学里的抽象
荣格对抽象化的定义将思考过程扩展至包含四个互斥互补的心理功能:知觉、直觉、感情和思维。它们一起形成一个异化着抽象化过程的总体架构。当抽象化作用在相对立的功能之一时,其会排除到其他功能及如情绪等不相关事物在同一时间内的影响。抽象化需要对心里面功能的结构分歧做选择性的运用。抽象化的相对为具体化。
编辑本段程序设计的抽象
抽象(Abstraction)是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。它可以忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
编辑本段科学中的抽象
概述
“抽象”这个词拉丁文为abstractio,它的原意是排除、抽出。在自然语言中,很多人把凡是不能被人们的感官所直接把握的东西,也就是通常所说的“看不见,摸不着”的东西,叫做“抽象”;有的则把“抽象”作为孤立、片面、思想内容贫乏空洞的同义词。这些是“抽象”的引伸和转义。 在科学研究中,我们把科学抽象理解为单纯提取某一特性加以认识的思维活动,科学抽象的直接起点是经验事实,抽象的过程大体是这样的:从解答问题出发,通过对各种经验事实的比较,分析,排除那些无关紧要的因素,提取研究对象的重要特性 (普遍规律与因果关系)加以认识,从而为解答问题提供某种科学定律或一般原理。 在科学研究中,科学抽象的具体程序是千差万别的,决没有千篇一律的模式,但是一切科学抽象过程都具有以下的环节。我们把它概括为:分离—提纯—简略。 第一,所谓分离,就是暂时不考虑我们所要研究的对象与其他各个对象之间各式各样的总体联系。这是科学抽象的第—个环节。因为任何一种科学研究,都首先需要确定自己所特有的研究对象,而任何一种研究对象就其现实原型而言,它总是处于与其他的事物千丝万缕的联系之中,是复杂整体中的一部分。但是任何一项具体的科学研究课题都不可能对现象之间各种各样的关系都加以考察,所以必须进行分离,而分离就是一种抽象。比如说,要研究落体运动这一种物理现象,揭示其规律,就首先必须撇开其他现象,如化学现象、生物现象以及其他形式的物理现象等等,而把落体运动这一种特定的物理现象从现象总体中抽取出来。 把研究对象分离出来;它的实质就是从学科的研究领域出发,从探索某一种规律性出发,撇开研究对象同客观现实的整体联系,这是进入抽象过程的第一步。 第二,所谓提纯,就是在思想中排除那些模糊基本过程、掩盖普遍规律的干扰因素,从而使我们能在纯粹的状态下对研究对象进行考察。大家知道,实际存在的具体现象总是复杂的,有多方面的因素错综交织在一起,综合地起着作用。如果不进行合理的纯化,就难以揭示事物的基本性质和运动规律。马克思说:“物理学家是在自然过程表现得最确实、最少受干扰的地方考察自然过程的,或者,如有可能,是在保证过程以其纯粹形态进行的条件下从事实验的。”(《马克思思格斯选集》第2卷,第206页)这里,马克思所说的是借助于某种物质手段将自然过程加以纯化。由于物质技术条件的局限性,有时不采用物质手段去排除那些干扰因素,这就需要借助于思想抽象做到这一点。伽利略本人对落体运动的研究就是如此。 大家知道,在地球大气层的自然状态下,自由落体运动规律的表现受着空气阻力因素的干扰。人们直观到的现象是重物比轻物先落地。正是由于这一点,使人们长期以来认识不清落体运动的规律。古希腊伟大学者亚里士多德作出了重物体比轻物体坠落较快的错误结论。要排除空气阻力因素的干扰,也就是要创造一个真空环境,考察真空中的自由落体是遵循什么样的规律运动的。在伽利略时代,人们还无法用物质手段创设真空环境来从事落体实验。伽利略就依靠思维的抽象力,在思想上撇开空气阻力的因素)设想在纯粹形态下的落体运动,从而得出了自由落体定律,推翻了亚里士多德的错误结论。 在纯粹状态下对物体的性质及其规律进行考察,这是抽象过程的关键性的一个环节。 第三,所谓简略,就是对纯态研究的结果所必须进行的一种处理,或者说是对研究结果的一种表述方式。它是抽象过程的最后一个环节。在科学研究过程中,对复杂问题作纯态的考察,这本身就是一种简化。另外,对于考察结果的表达也有一个简略的问题。不论是对于考察结果的定性表述还是定量表述,都只能简略地反映客观现实,也就是说,它必然要撇开那些非本质的因素,这样才能把握事物的基本性质和它的规律。所以,简略也是一种抽象,是抽象过程的一个必要环节。比如说,伽利略所发现的自由落体定律就可以简略地用一个公式来表示: S=1/2gt2 这里,“S”表示物体在真空中的坠落距离;“t”表示坠落的时间,“g”表示重力加速度常数,它等于981厘米/秒2。伽利略的落体定律刻划的是真空中的自由落体的运动规律,但是,一般所说的落体运动是由地球大气层的自然状态下进行的,因此要把握自然状态下的落体运动的规律表现,不能不考虑到空气阻力因素的影响,所以,相对于实际情况来说,伽利略的落体定律是—种抽象的简略的认识。任一种科学抽象莫不如此。 综上所述,分离、提纯、简略是抽象过程的基本环节,也可以说是抽象的方式与方法。 抽象作为一种科学方法,在古代、近代和现代被人们广泛应用。诚然,严格意义的经验科学在古代尚未形成,那时人们关于自然界的知识包溶在浑然一体的自然哲学之中,并且带有朴素、直观的特点,但是,这决不意味着当时的自然哲学家们是不应用抽象方法的。例如,古希腊米利都的留基伯和阿不地拉的德谟克利特,他们相信宇宙间万物都是原子组成的,而原子是不可分的物质。宇宙间有无数的原子,并在一个无限的虚空中永远运动着。它们既不能创造出来,又不能毁灭掉。应当肯定,留基伯和德谟克利特关于原子的认识,在二千多年前,确是了不起的抽象成果。 在近代,科学抽象法得到更自觉的应用,并对这种方法作出理论上的考察。英国的弗兰西斯·培根是近代实验科学的始祖。他所论述的归纳法其中就包含着科学抽象的方法。培根在《新工具》一书中说: “我们必须不用火而用人心,来把自然完全分解开,分离开,因为人心亦就是火底一种。在发现形式方面讲,真正归纳法底第一步是应该先排除了一些性质,因为有一些性质,往往不存在于所与性质存在的例证内,或存在于所与性质不存在的例证内;有时所与性质虽减, 它们却增,所与性质虽增,它们却减。因此,在适当地排斥了,拒绝了那些性质以后,一切轻浮的意见便烟消云散,所余的只有肯定,坚固,真实,分明的形式。”(《新工具》,商务印书馆,1936年版,第185页) 培根所说的“人心”,就是人的思维能力,在他看来,我们必须用人的思维能力“把自然完全分解开,分离开开”,排除那些不相干的性质,从而揭示现象的因果性和规律性。培根以探索热现象为例,应用排除法,在排除了所有不相干的性质以后,发现“热是某种性质底一个特殊情况,那种性质就是所谓运动”。((新工具》,商务印书馆,1936年版,第l86-190页) 培根所说的排除法,归纳法中巳包含着抽象的方法。但是,科学抽象法并不局限于培根讲的排除法、归纳法。 随着科学的发展,抽象方法的应用也越来越深入,科学抽象的层次则越来越高。如果说与直观、常识相一致的抽象为初级的科学抽象,那么与直观、常识相背离的抽象可以称之为高层次的科学抽象。日本物理学家汤川秀树根据对物理学史的考察,指出了物理学的抽象化发展这一规律性。 “如果我们考察物理学史,我们都知道在近三、四百年内曾发生过两次大革命。第一次革命当然是由伽利略发起的和由牛顿完成的十七世纪革命。第二次革命则在将近十九世纪末发端于这样一些伟大的事件——X射线、放射性和电子的发现。这第二次革命有两次高潮:一次是在二十世纪初导致了普朗克和波尔的量子理论以及爱因斯坦的相对论,第二次是发生在本世纪二十年代量子力学建立之时。……”;结果就是导致了物理学的理论概念背离直觉(直观)和常识。换言之,在从二十世纪初开始的物理学发展过程中,一种抽象化的倾向已经变得引人注目了。当抽象的数学概念是逻辑一致的,而且它们的结论符合于实验时,即使它们与我们的直观世界图象相矛盾,物理学家们也不得不接受它们。”(汤川秀树《科学思维中的直觉和抽象》,译文载《哲学译丛》1982年第2期第17—18页) 在科学发现过程中,抽象方法起着什么样的作用,对于这个问题,历史上存在过两种对立的意见,一种意见认为科学发现靠的就是抽象法,科学发现的过程就是从经验事实中抽出最初的基本概念,然后一层一层地往上抽象,构成金字塔形的科学体系。这是古典归纳主义者的观点。如弗兰西斯·培根就持这种观点。他说:“寻求和发现真理的道路只有两条,也只能有两条。……感觉与特殊事物把公理引伸出来,然后不断地逐渐上升,最后达到最普遍的公理。这是真正的道路”。(《十六——十八世纪西欧各国哲学》,商务印书馆,1962年版;第10页) 与此相反,另一种意见认为抽象法并非科学发现的方法。如爱因斯坦就持这种观点。他在论述科学体系的层次问题时指出,“抽象法或者归纳法理论的信徒也许会把我们的各个层次叫做‘抽象的程度’,但是我不认为这是合理的,因为它掩盖了概念对于感觉经验的逻辑独立性”。(《爱因斯坦文集》,第1卷,商务印书馆,1977年版,第34页)在爱因斯坦看来,与经验层次最接近的理论命题不是从经验层次抽象得来,而是从更高层次的理论命题中推导出来的;最高层次的理论命题则是思维自由创造的产物。 科学活动的事实告诉我们,科学发现的过程是多种方法综合运用的过程。因此不能把抽象法的作用和其他方法的作用,包括直觉的作用在内,互相对立起来。抽象法离开其他各种方法,是不可能孤立地作出科学发现的。 古典归纳主义者认为依靠抽象法就能从经验事实中找出事物的规律性,形成科学理论,这种观点是不符合科学发现过程的实际情况的。那么,是不是说抽象法在科学发现过程中是毫无用处的呢?完全抹煞抽象法的作用,也是不妥当的。 抽象法在科学发现中是一种不可少的方法。人们之所以需要应用抽象法,其客观的依据就在于自然界现象的复杂性和事物规律的隐蔽性。假如说自然界的现象十分单纯,事物的规律是一目了然的,那倒是不必要应用抽象法,不仅抽象法成为不必要,就是整个科学也是多余的了。但是,实际情祝并非如此。科学的任务就在于透过错综复杂的现象,排除假象的迷雾,揭开大自然的奥秘,科学地解释各种事实。为此就需要撇开和排除那些偶然的因素,把普遍的联系抽取出来。这就是抽象的过程。不管是什么样的规律,什么样的因果联系,人们要发现它们,总是需要应用抽象法的。抽象法也同其他的各种科学思维的方法一样,对于科 学发现来说,起着一种助发现的作用。
抽象的类型和合理性原则
抽象的类型和合理性原则 在科学研究中,抽象的具体形式是多种多样的。如果以抽象的内容是事物所表现的特征还是普遍性的定律作为标准加以区分,那么,抽象大致可分为表征性抽象和原理性抽象两大类。
表征性抽象
所谓表征性抽象是以可观察的事物现象为直接起点的一种初始抽象,它是对物体所表现出来的特征的抽象。例如,物体的“形状”、“重量”、“颜色”、“温度”、“波长”等等,这些关于物体的物理性质的抽象,所概括的就是物体的一些表面特征。这种抽象就属于表征性的抽象。 表征性抽象同生动直观是有区别的。生动直观所把握的是事物的个性,是特定的“这一个”,如“部分浸入水中的那支筷子,看起来是弯的”,这里的筷子就是特定的“这一个”,“看起来是弯的”是那支筷子的表面特征。而表征性抽象却不然,它概括的虽是事物的某些表面特征,但是却属于一种抽象概括的认识,因为它撇开了事物的个性,它所把握的是事物的共性。比如古代人认为,“两足直立”是人的一种特性,对这种特性的队识已经是一种抽象,因为它所反映的不是这一个人或那一个人的个性,而是作为所有人的一种共性。但是,“两足直立”对于人来说,毕竟是一种表面的特征。所以,“两足直立”作为一种抽象,可以说是一种典型的表征性抽象。 表征性抽象同生动直观又是有联系的。因为表征性抽象所反映的是事物的表面特征;所以,一般来说,表征性抽象总是直接来自一种可观察的现象,是同经验事实比较接近的一种抽象。比如说“波长”,虽然我们凭感官无法直接把握它,但是,借助于特定的仪器,就可以把握到波长的某种表征图象。所以,“波长”也是一种具有可感性的表征性抽象。又如,“磁力线”的抽象也是如此。大家知道,磁力线本身是“看不见、摸不着’的,但是,如果我们把铁屑放在磁场的范围内,铁屑的分布就会呈现出磁力线的表征图象,所以,在这个意义上说“磁力线”也是来自一种可观察的表征性抽象。
原理性抽象
所谓原理性抽象,是在表征性抽象基础上形成的一种深层抽象,它所把握的是事物的因果性和规律性的联系。这种抽象的成果就是定律、原理。例如,杠杆原理、落体定律、牛顿的运动定律和万有引力定律,光的反射和折射定律、化学元素周期律、生物体遗传因子的分离定律、能的转化和守恒定律、爱因斯坦的相对性运动原理等等,都属于这种原理性抽象。 当我们考察原理性抽象的特点时,如下两点是值得注意的: 第一,原理性抽象不同于表征性抽象,它所抽取的不是事物的外露的表面特征,而是事物内在的规律性联系。比如说,“静止”、“运动”、“直线”,“等距”等等,可以说是表征性抽象,它们表征着物体的一种状态,而“每个物体继续保持其静止或沿一直线作等速运动的状态,除非有力加于其上迫使它改变这种状态”([美]H·S.塞耶编《牛顿自然哲学着作选》,上海人民出版社,1974年版第28页),就可以说是一种原理性抽象,它抽取的是物体运动的一种规律性。正因为原理性抽象抽取的不是外露的表面特钲,所以它同表征性抽象相比,更远离了经验事实,但又是更探刻的认识,它认识到自然界的内部秘密。 第二,在科学发展的常规时期,原理性抽象的实现是以已有的理论作为指导,抽象的结果——定律、原理,与已有的理论之间的关系是相容的关系,或者说不推翻已有理论的框架,而在科学发展的革命时期,反常的原理性抽象的实现,不仅不依赖于原有理论的指导,而且与原有理论相违背。因此,反常的原理性抽象的实现必须突破已有理论的框架范围。比如说,经典力学作为一种背景知识,对于预测宏观低速运动的物体的运动状态,把握其运动规律,曾经是十分有效的。但是,一旦进入了微观领域,面临的是高速运动的微观物体,如果仍以经典力学为指导,并且在它的理论框架基础上进行抽象活动,那就不仅不能有效地揭示诸如光、电现象这种高速运动的微观客体的运动规律,而且反而会阻碍对这方面规律性的发现,所以,必须突破旧有理论的束缚,才能实现反常的原理性抽象,爱因斯坦建立相对论是极有说服力的一个例子。如果不突破牛顿力学的绝对时空观,那么就不可能建立相对论。
编辑本段科学抽象应当注意原则
上面我们一般地考察了科学抽象的类型问题,那么,怎样才能合理地、有效地进行科学抽象呢?科学抽象应当注意以下的原则:
科学抽象的东西必须是具有普遍性的东西
个别的、表面的东西是偶然的东西,要进行抽象,当然不能完全脱离这些个别的、表面的、偶然的东西,但是抽象的目的并不是去抽取那些个别的、偶然的东西,抽象的目的是在于从个别的经验事实中抽出普遍性的东西,只有这样才有意义,才能进一步去认识事物的规律性。当然,普遍性不一定是规律性,但是不普遍的东西不可能是规律性的东西。所以,什么东西需要抽象,什么东西不需要抽象,从定性的观点来看,应当抽象出普遍性的东西。比如从对空气的观察和实验的一系列事实中,抽象地认识存在于体积、温度以及压力之间的普遍关系,并进行定量的描述,这样也就发现了气体定律。
高层抽象必须能演绎出低层抽象
自然界事物及其规律是多层次的系统,与此相应,科学抽象也是一个多层次的系统。在科学抽象的不同层次中,有低层的抽象,也有高层的抽象。在科学发现中,相对于解释性的理论原理来说,描述性的经验定律可以说是低层抽象,而解释性的理论原理就可以说是高层抽象。 必须指出,我们把科学抽象区分为低层抽象和高层抽象,是相对而言的。理论抽象本身也是多层次的。比如说,牛顿的运动定律和万有引力定律相对于开普勒的行星运动三大定律来说,是高层抽象,因为我们通过牛顿三大运动定律和万有引力定律的结合,就能从理论上推导出开普勒由观测总结得到的行星运动三大定律。 如果高层抽象不能演绎出低层抽象,那就表明这种抽象并未真正发现了更普遍的定律和原理。一切普遍性较高的定律和原理,都能演绎出普遍性较低的定律和原理。一切低层的定律和原理都是高层的定律和原理的特例。如果一个研究者从事更高层的抽象,其结果无法演绎出低层抽象,那就意味着他所作的高层抽象是无效的,不合理的,应予纠正。
总结
抽象思维法是指在感性认识基础上运用概念、判断、推理等方式透过现象,抽取研究对象本质的理性思维法。具体地说,科学抽象就是人们在实践的基础上,对于丰富的感性材料通过“去粗取精、去伪存真、由此及彼、由表及里”的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律。 科学抽象是由三个阶段和两次飞跃构成的辩证思维过程。第一个阶段是感性的具体,即通过感官把事物的信息在大脑中形成表象。第二阶段是从感性到抽象的规定,也是第一次飞跃。这个阶段是将事物的表象进行分解、加工、分析和研究,最终形成反映事物不同侧面的各种本质属性。第三阶段是从抽象的规定上升到思维的具体,这是科学抽象的第二次飞跃。它是将事物的各种抽象规定在思维中加以综合、完整地重现出来,形成对事物内在本质的综合性的认识。
② 从软件开发过程来理解抽象与精化
在软件开发过程中,抽象与精化对应分析类产生过程和设计类产生过程。抽象的过程就是提炼存在于事物之中有别于其他事物的本质的东西,精化是在更细粒度上的抽象,抽象让我们抓住问题域,从整体上把握问题域,精化则让我们对问题域分而治之,从细节上把握问题域。
③ 计算机系统的硬件抽象、软件抽象和分层封装思想是什么
抽象是计算机科学中最为重要的概念之一。比如我们为一组函数规定一个简单的应用程序接口(API)就是一个很好的编程习惯,程序员无需了解它内部的工作便可以使用这些代码。不同的编程语言提供不同形式和等级的抽象支持,例如Java类的声明和C语言的函数原型。
如下图,在处理器里,指令集架构提供了对实际处理器硬件的抽象。使用这个抽象,机器代码表现得几号箱运行在一个依稀执行一条指令的处理器上。底层的已经远比抽象描述的要复杂惊喜,它并行的执行多条指令,但又总是与那个简单有序的模型保持一致。只要执行的模型一样,不同的处理器实现也能执行同样的机器代码,而有提供不同的开销和性能。
文件:对I/O设备的抽象
虚拟内存:对程序存储器的抽象
进程:对一个正在运行的程序的抽象
虚拟机:对整个计算机的抽象,包括操作系统,处理器和程序
④ 软件开发中用例图怎么抽象成表
从UML设计角度来说,用例图是描述用户与系统如何交互的,更多是从功能层面考虑,个人觉得无法直接抽象成表。如果有类图(方法和数据、与其他类关系),其中数据和关系倒是可以做为表的属性。
业务熟悉了,可以自己创建E-R图,数据库设计相关教程应该都有讲这个,然后根据E-R关系图来创建数据库表。基本上就是确定都有哪些对象,对象都有哪些属性,这些对象之间有什么关系。对象就是你的表,其字段就是属性,其中你需要确定主键(可以没有,但是建议有),关系也是表,其字段就是两个关系对象的主键标识ID。
⑤ 操作系统如何对计算机硬件部分的处理机,内存,设备进行抽象
进行抽象?还是进行管理?如果是进行抽象。就请您赐教。如果是管理的话。
对于CUP(中央处理器)也就是处理机。CUP是计算机系统中最重要的硬件资源,也就是相当于人的大脑。---(重要性。计算机的一切处理运算都是在CPU中完成的,只有得到计算机的处理数据,用户的任务才能得到处理。)---(CPU的功能,这点很容易知道。因为在计算机硬件系统中。我们知道CPU是由运算器和控制器组成。运算器就是对数据进行逻辑运算等等。那么这里说道的数据从什么地方来。分两部分。内存和自身的寄存器。经行处理之后,把处理过的数据保存在内存和自身的寄存器上。)处理器的占有和利用率之间关系到计算机和用户任务的处理效率。---(这点应该是清楚的。就不再多说了。)继续。每台电脑就只有1个CUP。当多个用户使用同一个计算机的时候,那么操作系统就要分配把处理机交给那个用户先使用。还有就是这个用户的使用时间---(关于这点。我以前不知道怎么一台计算机还可以多人使用。不是就我一个人么。。其实我觉得。肯定有这样的情况的。比如说在QQ上共享资源。可能不恰当。意思是一样的)
那么一个大型的操作系统肯定提供的很丰富的调度资源。由操作系统的管理有设置。那么调度的策略有:分时调度。优先调度。排队调度。---(这些调度都顾名思义,就不需要在讲什么了)。这个就是操作系统对CPU的管理。小结下。其实就讲了。关于CPU怎么怎么重要。然后功能是什么。那么CPU的占有和它的利用率就会影响计算机和用户任务的处理效率。那么之后又讲了。怎么来配分以及它的调度策略。如果你想了解某种调度策略怎么来调度的话。就去查点资料就OK了。。
存储管理也就是内存管理。我们先来看下它管理是管理的什么。1:对于内外存交换信息的管理。2:配合硬件做地址转换和存储保护的工作。3:进行存储空间的分配和回收。---如果不知道怎么来内外存信息管理。配合硬件做地址转换和存储保护工作。以及存储空间的分配和回收。先记下来再说。。说道这里会遇到几个问题。我们知道多个用户程序共用一个计算机系统的时候,往往就会公用计算的内存储器。如果把各个用户程序和数据隔离互不干扰。又能共享一些数据。那么就对这个存储空间经行保护和分配。那么存储管理的功能有 1:内存的分配---就是当多个进程同时进入到内存当中,如何来分配内存空间。哪些空间是已经分配的。哪些空间是为分配的。那么按照如何的算法和分配策略使得这个空间充分运用。那么这就是内存分配需要做的事情了。。但是怎么去做。查阅有关资料 - -.....2:地址的转换和重定位--用户在程序中使用的是逻辑地址。那么CUP执行程序的时候是按照物理地址来经行访问的。那么这个存储管理的软件配合硬件把逻辑地址转换成物理地址。3:存储保护--每个程序都在自己所属的内存区中操作。那么必须要保证他们不能相互的干扰。以及破坏。因此。一般由硬件提供保护功能。软件配合实现。
4:内存共享---其实就和QQ群中共享资源都是一样的。了解它是什么就可以了。5:存储的扩展--那么就是把内存的空间扩大。那么用到的技术就是虚拟存储技术。知道这个就可以了
设备管理,设备管理就是计算机中除CUP内存以外的所有输入和输出管理。功能--1:缓冲管理,由于CPU和i/o设备的速度很大。为了缓和这一矛盾。通常在设备管理中建立I/O缓冲区,对缓冲区的有效管理是设备管理的一向重要任务。2:设备分配,根据用户程序提出的I/O请求和系统中设备的使用情况。按照一定的策略。将所有设备分配给申请者。3:设备处理程序,对于未设置通道的计算机系统其基本任务通常是实现CPU和设备控制器之间的通信。4:设备的独立性和虚拟设备。设备的独立性,是指。用户在编写程序的时候,无需了解系统具体配置了哪些设备。只需要为所需的设备起个逻辑名就可以了。。。。。。。如果还有什么不理解的。。就咪我哈。。
⑥ 操作系统如何对计算机硬件部分的处理机,内存,设备进行抽象
对于CUP也就是处理机。CUP是计算机系统中最重要的硬件资源,也就是相当于人的大脑。处理器的占有和利用率之间关
系到计算机和用户任务的处理效率。每台电脑就只有1个CUP。当多个用户使用同一个计算机的时候,那么操作系统就要
分配把处理机交给那个用户先使用。还有就是这个用户的使用时间
那么一个大型的操作系统肯定提供的很丰富的调度资源。由操作系统的管理有设置。那么调度的策略有:分时调度。优
先调度。排队调度。这个就是操作系统对CPU的管理。
存储管理也就是内存管理。1:对于内外存交换信息的管理。2:配合硬件做地址转换和存储保护的工作。3:进行
存储空间的分配和回收。存储管理的功能有 1:内存的分配2:地址的转换和重定位3:存储保护
4:内存共享5:存储的扩展
设备管理,设备管理就是计算机中除CUP内存以外的所有输入和输出管理。功能--1:缓冲管理,由于CPU和i/o设备
的速度很大。为了缓和这一矛盾。通常在设备管理中建立I/O缓冲区,对缓冲区的有效管理是设备管理的一向重要任务
。2:设备分配,根据用户程序提出的I/O请求和系统中设备的使用情况。按照一定的策略。将所有设备分配给申请者。
3:设备处理程序,对于未设置通道的计算机系统其基本任务通常是实现CPU和设备控制器之间的通信。4:设备的独立
⑦ 如何进行软件架构设计
软件架构设计的目的
对于外包业务类型的项目,软件架构设计的目的与产品类型的项目有所不同,在这里主要讨论外包类型项目的软件架构设计目的。
1、为大规模开发提供基础和规范,并提供可重用的资产,软件系统的大规模开发,必须要有一定的基础和遵循一定的规范,这既是软件工程本身的要求,也是客户的要求。架构设计的过程中可以将一些公共部分抽象提取出来,形成公共类和工具类,以达到重用的目的。
2、一定程度上缩短项目的周期,利用软件架构提供的框架或重用组件,缩短项目开发的周期。
3、降低开发和维护的成本,大量的重用和抽象,可以提取出一些开发人员不用关心的公共部分,这样便可以使开发人员仅仅关注于业务逻辑的实现,从而减少了很多工作量,提高了开发效率。
4、提高产品的质量,好的软件架构设计是产品质量的保证,特别是对于客户常常提出的非功能性需求的满足。
软件架构设计的原则
软件架构设计必须遵循以下原则:
1、满足功能性需求和非功能需求。这是一个软件系统最基本的要求,也是架构设计时应该遵循的最基本的原则。
2、实用性原则,就像每一个软件系统交付给用户使用时必须实用,能解决用户的问题一样,架构设计也必须实用,否则就会“高来高去”或“过度设计”。
3、满足复用的要求,最大程度的提高开发人员的工作效率。
软件架构设计的几种视图
我们常常在讨论架构设计该做些什么的时候,或是在架构设计评审的会议上,会提出各种各样的问题,例如开发人员该如何记录Log,事务如何控制?怎样才能提高我们的开发人员的工作效率,即在单位时间内更有品质的完成更多的功能?怎样满足客户的非功能性需求?怎样让生产环境的平台管理人员更好的维护系统?
上面这些问题,实际上是软件系统的不同的干系人站在不同的角度上提出的问题,要回答上面这些问题,我们就得从不同的视角来看待软件架构设计这项工作。
1、逻辑架构视角,从系统用户的角度考虑问题,设计出来的软件架构能够满足业务逻辑的需求,能够处理现在越来越复杂的业务逻辑需求。
2、开发架构视角,从系统开发人员的角度来考虑问题,设计的架构要易于理解,易于开发,易于单元测试,最好做到让开发人员可以用最少的代码行数完成功能的开发。
3、运行架构视角,从系统运行时的质量需求考虑问题,特别关注于系统的非功能需求,客户常常都会要求我们系统的功能画面的最长响应时间不超过4秒,能满足2000个用户同时在线使用,基于角色的系统资源的安全控制等。
4、物理架构视角,关注系统安装和部署在什么样的环境上,例如现在最流行的企业应用服务解决方案IBM Http Server + WebSphere Application Server + DB2,WebLogic + Oracle等。
5、数据架构视角,如今我们开发的各类系统,如MIS,ERP,SAP,基本上都是对各类数据的操作,把一堆不太好懂的数据展现成用户容易看懂的数据,自动处理各类数据的运算等,所以数据的持久化是十分重要的一件事情。
1、分析需求和理解业务模型(或领域建模),并选定关键Use case。
软件的需求,可以分为从用户视角和开发人员视角来看,从用户的角度看,又可以分为功能性和非功能性需求,我们必须从不同的视角和级别去全面的认识需求并分析需求,理解业务模型。实践表明,常常被我们忽视的非功能性需求常常会导致整个项目失败。
理解业务需求最好的方式莫过于进行领域建模,领域建模与需求分析往往是交替穿叉进行的,领域建模主要有以下三个方面的作用:
◆探索复杂问题,弄清领域知识。Martin Fowler曾经说过,他采用面向对象方法最大的好处就是它有助于解决更为复杂的问题。领域建模本身作为辅助思维的工具,帮助我们将注意力始终保持在最为重要的业务概念及其关系上,使我们能够不断深入地,系统的对需求进行分析和认识。领域建模往往是一个从模糊到清晰,从零散到系统的过程。
◆决定功能范围,影响可扩展性。任何模型都是对现实世界某种程序的抽象,这种抽象就会忽略某一些东西,例如忽略对象的属性和对象间的关系,而这些忽略往往都是带有一定的目的性的,这种忽略就决定了功能的范围。模型揭示了各种功能背后的结构,如果说定义功能相当于“拍照片”的话,那么领域建模就相当于“做透视”,更加关注问题领域的内在结构,相当于对问题领域进行了一定的抽象,良好的领域模型不仅能很好的支持现有的功能,而且还可以在一定程度上支持未来可能出现的新需求,体现良好的可扩展性。
◆提供交流基础,促进有效沟通。领域建模通常会使用UML图作为呈现的方式,这样为我们的沟通提供了方便。当然,有时候文字在描述某些特定领域的问题时可能更适合,可以灵活运用。
在我们公司的实际软件开发流程中,往往领域建模缺少这一环节,这可能是在以后的工作中需要进一步提高之处。
虽然我们总是期望架构设计师能全面掌握需求,但由于时间和精力的限制,摆在我们面前的现实就是架构设计师没有时间对所有需求进行深入分析,所以我们的策略就是“把好钢用在刀刃上”,即把大部分时间和精力花在对决定架构最重要的关键需求上。在选择关键需求时要注意:高优先级的需求往往是从用户的角度来看的,可能并不是真正的关键需求。在《RUP实践者指南》一书中向我们讲述了如何确定关键功能需求?A.作为应用程序的核心或实现了系统的主要接口的功能,B.必须被实现的功能,即如果这些功能不被实现,则开发出来的软件就失去了价值,C.覆盖了系统架构的一些方面,但没有被其他重要的Use case覆盖到的功能。
2、分别从各个视角来考虑软件架构的方方面面。
软件的架构设计必须考虑到各方面,根据前期工作确立的领域模型,关键需求,系统约束等进行设计,必须从系统用户,开发人员,系统管理员,部署管理员,数据管理员等人员的角度去分析并解决问题。比如说,如果我们的运行架构采用Cluster方式时,就必须小心Cache和Session等的使用;如果我们的业务逻辑要求我们要操作多个数据库时,就要考虑采用支持二阶段事务提交的方式。
只有将这些方方面面的问题都考虑到了,这样的架构设计才是完整的。至于每一个视图中,我们应该设计到什么细节这一问题,实际上与整个项目的过程定义有关。例如,如果我们有专门安排数据库概要设计的活动,那我们在架构设计的过程中就可以只需要关注更高层次的数据库特性及数据库之间的关系,而每一张表的数据字典可以在后续的相关活动中进行设计,但如果没有这样的活动,那我们就要细化到每一张表的每一个栏位,以及表之间的关系。
3、解决技术面的重点问题和难题
在软件架构设计的过程中,我们往往会需要攻克一些技术面的重点问题和难题,这完全是一项极其需要扎实的理论知识和丰富的实践经验支撑的工作。例如,我们如何提高整个系统的性能?如何能很好的导出极其复杂的“中国式报表”(一般比西方国家产出的报表要复杂很多,而且很多开源的BI类的框架并不能完全解决问题)?
当遇到确实是很困难的问题,可以去网络一下或Google一下,也可以去请教公司的资深技术人员或专家,或者召开小范围的技术专题讨论会议,采用脑力激荡的方法试着找找答案,这样才能提高工作的效率。
4、召开架构设计评审会议进行同行评审。
架构设计评审是极其重要的一环,我曾将其形容为“七种武器”中的离别钩,就是因为在会议上,同行们可能会提很多问题或意见,而且很多意见很尖锐,所以一定要虚心接受,并做好记录,正所谓“良药苦口利于病,忠言逆耳利于行”。
在评审会议之前,我们要完成很多准备工作,最好是能准备一份简明扼要的电子简报,把最重要的问题列出来,这样在进行评审会议时,就不会漫无目的,在会议前就将这些资料发给与会人员,请他们抽空先了解一下,在会议进行时,要学会控制会议的进度,提高会议的效率。
5、针对关键Use case在设计的架构上实现功能来验证架构。
对于架构设计的验证也是一项十分重要的工作,其验证技术有很多种,在我们公司通常会采用Sample的形式,即XP中所说的迭代0,RUP中所说的切片。这样做的好处是既可以从实际的产品角度出发来有效的验证架构是否满足要求,又可以比抛弃型原型验证技术节省成本。
这个Sample绝不是我们在解决架构设计中的问题时拿来做实验的一些代码的拼凑,而是完整的实现某一关键Use case的符合架构设计和一系列规范的可交付的代码及相关文档。同时,这个Sample可以作为你在给大家讲解或培训架构时的教材,也可以作为开发人员使用此架构进行开发的蓝本,甚至是只需要复制粘贴,加上简单的修改即可。
6、交付给客户Review。
这一环节,在很多公司可能并不存在,因为他们的软件架构并不一定需要客户Review,但像我们这种做服务的公司,最重要的就是客尊,落实到软件架构设计这一活动,就是让客户理解并接受你的架构设计方案,同时,客户也会起到帮你验证架构的作用。通常,我们的架构得到客户的认可后,便可进入大规模的开发。
在交付给客户Review时,通常可能会以会议的形式进行Review,所以我们可以参照评审会议时好的做法来召开会议,在这里就不再冗述。
软件架构设计的常见误区及解决办法
1、架构设计的常常会“高来高去”。所谓高来高去,实际上就是我们的架构设计仅停留在模型阶段,但也绝不是产生第一支样例程式。
2、架构设计时常常会在某些方面过度设计(Over engineering)。为了一些根本不会发生的变化而进行一系列复杂的设计,这样的设计就叫过度设计,往往会带来资源的浪费并且会增加开发的工作量或难度。虽然我们必须考虑到系统的扩展性,可维护性等,但切忌过度设计。有时候或许你并不能判断出哪些设计是过度设计,此时你可以请教你的PM,让他站在整个项目的高度来帮你决策一下。
3、架构(Architecture)不是框架(Framework),也不是简单的将几种框架或技术的组合,框架本身也是有架构的。框架一般是针对于某一方面或领域的重用性和可扩展性非常好的半成品,我们可以用一句较为经典的话来总结:框架是软件,架构不是软件,框架是一种特殊的软件。我们在工作中通过将许多方面的可重用的工具类,公共类,基础类等抽象出来,即可形成一些可重用的框架。
4、架构设计绝不是新技术展示平台,合适的技术才是对于项目有利的技术,必须考虑到开发人员的能力和维护人员的能力。作为一名架构设计师应该更多的考虑如何平衡业务需求,织织运作(主要指团队中的协作)和技术三者的关系,而不仅仅是去关注那些技术细节。
5、架构设计的成功与否决定着系统品质的好坏,因为架构设计不好而导致交付的系统Bug过多,无法满足客户非功能性需求等问题,从而导致项目取消的案例时有发生。架构设计不是架构设计师一个人的事情,也不是几天就能完成的一项工作,必须是架构设计师付出大量辛勤劳动后的成果,其成败往往与组织、主管、项目经理的支持有着密切的关系。
关于架构设计的一点通用技巧
1、分层(Layer)规则。这里的层是指逻辑上的层次(Layer),并非指物理上的层次(Tier)。目前的绝大多数的企业级应用系统中都分为三层,即表现层,领域层和数据层。在对各层次进行划分时,主要可以从以下几个方面来考虑:A、每一层是一个相对独立的部分,可以作为一个整体,无需对其它层了解;B、将层次间的依赖性降到最低,即降低耦合;C、可以从某种程度上替换掉某一层,而对其它层不会产生过多的影响;D,层次并不能封闭所有的东西,假如用户界面上增加了一个栏位,那么领域层就要增加一个数据域,数据层就要增加一个相应的字段。同时,过多的分层可能会对性能造成一定的影响。
2、包(package)之间不要产生循环依赖。通常包的划分会先按不同的逻辑层来划分,在层的包下面再按功能来划分。避免包间的循环依赖是一个比较通用的规则,这样的规则一定有其存在的价值和道理,之所以这样主要是出于以下原因:A、循环依赖会使分层失去意义;B、循环依赖会带来许多潜在的风险,如可能会产生嵌套事务(nested transaction,JavaEE标准中并不支持这种事务)的现象,我就曾遇到过这样的问题,在一个项目中,事务放在业务逻辑层统一控制,但由于开发人员忽视了架构中这样的原则,在持久层调用了展现层的公用类,形成了回圈的现象,导致了嵌套事务的发生。
3、设计模式的应用。在很多人的观念里,提供设计模式就等同于GOF的设计模式,其实设计模式是个广泛的概念,比如需求模式、领域模式、反模式等都属于设计模式。模式其实是一门工具,是人们对于过去解决某一类问题的经验总结,所以我们可以在设计活动中应用各种设计模式,但是在应用这些模式之前一定要先分析清楚问题,否则就可能出现“牛头不对马嘴”的现象。
成功的项目总有相似之处,失败的项目却各有各的失败之处。好的软件架构设计必定是成功项目的相似之处,我们有什么理由不把软件架构设计做好了?
⑧ 如何实现抽象类
抽象类是含有纯虚函数的类。
纯虚函数是指被标明为不具体实现的虚拟成员函数。它用于这样的情况:定义一个基类时,会遇到无法定义基类中虚函数的具体实现,其实现依赖于不同的派生类。
定义纯虚函数的一般格式为:virtual 返回类型 函数名(参数表)=0;
含有纯虚函数的基类是不能用来定义对象的。纯虚函数没有实现部分,不能产生对象。定义纯虚函数时,不能定义虚函数的实现部分。即使是函数体为空也不可以,函数体为空就可以执行,只是什么也不做就返回。而纯虚函数不能调用。
在派生类中必须有重新定义的纯虚函数的函数体,这样的派生类才能用来定义对象
抽象类的纯虚函数表达了一种“规约”和“协议”的含义,只有接口的约定,没有实现的约束,这样就使接口与实现完成解耦,便于软件统一接口的同时保持实现的灵活性,这也正是组件编程的基本思想。
⑨ 什么是抽象
抽象
抽象是哲学的根本特点, 抽象不能脱离具体而独自存在。
我们所看到的大自然景象就是大自然的实物在我们脑海中的抽象。抽象就是我们对某类事物共性的描述。
具体来说,抽象是指:
1、将复杂物体的一个或几个特性抽出去,而只注意其他特性的行动或过程(如头脑只思考树本身的形状或只考虑树叶的颜色,不受它们的大小和形状的限制)。
2、将几个有区别的物体的共同性质或特性,形象地抽取出来或孤立地进行考虑的行动或过程。
抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。
软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化。在进行软件设计时,抽象与逐步求精、模块化密切相关,帮助我们定义软件结构中模块的实体,由抽象到具体地分析和构造出软件的层次结构,提高软件的可理解性。
⑩ 面向对象软件开发如何实现抽象
假如你的基类不需要实例化,是根据你的子类去生成的对象,就要用抽象去解决