精华内容
下载资源
问答
  • CMMI认证分为几个等级,分别是什么?
    千次阅读
    2021-04-15 10:24:50

    CMMI全称是Capability Maturity Model Integration,是能力成熟度集成模型,是由美国国防部与卡内基-梅隆大学和美国国防工业协会共同开发和研制的。

    CMMI分为5个等级:

    CMMI-1(初始级):其实就是0级,代表软件过程是无序的,对过程几乎没有定义。

    CMMI-2(可管理级):建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。

    CMMI-3(已定义级):已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。

    CMMI-4(量化管理级):分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。

    CMMI-5(优化管理级):过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
    美国国防部为从众多研发企业中选取靠谱的,委托SEI研发出了一套供研发企业学习和改善自我能力的模型,就是CMM,经过多年的发展,现在是大家熟知的CMMI,分开发、采购、服务3个版本。

    SEI研发CMM,雇佣世界顶级质量管理专家,观察了世界上所有大型研发企业研发必须进行的活动,记录精简化形成了CMM模型,相应有SCAMPI(过程改进标准的CMMI评估方法Standard CMMI®  AppraisalMethod for Process Improvement)评估方法。

    CMMI使用。知名的组织比如:NASA、波音、DOD都是CMMI的忠实粉丝。如今CMMI已经在全球101个国家中流行,使用CMMI的组织已超过10,000家。
    企业实施CMMI实施的是咨询公司给的模板。实施CMMI每个企业情况不一样,实施的方法也不一样,如果把咨询公司给的模板当作CMMI,已注定了实施不下去。记得:实施CMMI是实施CMMI过程域中包含的最佳实践,达到过程域的目标。企业不同,实施方法方式不同,可简单可复杂,关键是适合自己。

    更多相关内容
  • 语音识别是完成语音到文字的转换。自然语言理解是完成文字到语义的转换。语音合成是用语音方式输出用户想要的信息...而语音识别系统的输入是语音,其复杂度要大得多,特别是口语 很多的不确定性。人与人交流时,往...
     语音识别是完成语音到文字的转换。自然语言理解是完成文字到语义的转换。语音合成是用语音方式输出用户想要的信息,用语音实现人与计算机之间的交互,主要包括语音识别、自然语言理解和语音合成。
           相对于机器翻译,语音识别是更加困难的问题。机器翻译系统的输入通常是印刷文本,计算 机能清楚地区分单词和单词串。而语音识别系统的输入是语音,其复杂度要大得多,特别是口语 有很多的不确定性。人与人交流时,往往是根据上下文提供的信息猜测对方所说的是哪一个单 词,还可以根据对方使用的音调、面部表情和手势等来得到很多信息。特别是说话者会经常更正所说过的话,而且会使用不同的词来重复某些信息。显然,要使计算机像人一样识别语音是很困难的。
            语音识别过程包括从一段连续声波中采样,将每个采样值量化,得到声波的压缩数字化表 示。采样值位于重叠的帧中,对于每一帧,抽取出一个描述频谱内容的特征向量。然后,根据语音信号的特征识别语音所代表的单词,语音识别过程主要分为五步,如下:
            1.语音信号采集
              语音信号采集是语音信号处理的前提。语音通常通过话筒输入计算机。话筒将声波转换为 电压信号,然后通过A/D装置(如声卡)进行采样,从而将连续的电压信号转换为计算机能够处理的数字信号。
             目前多媒体计算机已经非常普及,声卡、音箱、话筒等已是个人计算机的基本设备。其中声 卡是计算机对语音信进行加工的重要部件,它具有对信号滤波、放大、A/D和D/A转换等功 能。而且,现代操作系统都附带录音软件,通过它可以驱动声卡采集语音信号并保存为语音文件。
              对于现场环境不好,或者空间受到限制,特别是对于许多专用设备,目前广泛采用基于单片机、DSP芯片的语音信号采集与处理系统。
            2.语音信号预处理
            语音信号号在采集后首先要进行滤波、A/D变换,预加重(Preemphasis)和端点检测等预处理, 然后才能进入识别、合成、增强等实际应用。
           滤波的目的有两个:一是抑制输入信号中频率超出//2的所有分量(/:为采样频率),以防止 混叠干扰;二是抑制50 Hz的电源工频干扰。因此,滤波器应该是一个带通滤波器。
           A/D变换是将语音模拟信号转换为数字信号。A/D变换中要对信号进行量化,量化后的信 号值与原信号值之间的差值为量化误差,又称为量化噪声。
           预加重处理的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带 中,能用同样的信噪比求频谱,便于频谱分析。
           端点检测是从包含语音的一段信号中确定出语音的起点和终点。有效的端点检测不仅能减 少处理时间,而且能排除无声段的噪声干扰。目前主要有两类方法:时域特征方法和频域特征方 法。时域特征方法是利用语音音量和过零率进行端点检测,计算量小,但对气音会造成误判,不 同的音量计算也会造成检测结果不同。频域特征方法是用声音的频谱的变异和熵的检测进行语 音检测,计算量较大。
            3.语音信号的特征参数提取
            人说话的频率在10 kHz以下。根据香农采样定理,为了使语音信号的采样数据中包含所需单词的信息,计算机的采样频率应是需要记录的语音信号中包含的最高语音频率的两倍以上。 一般将信号分割成若干块,信号的每个块称为帧,为了保证可能落在帧边缘的重要信息不会丢 失,应该使帧有重叠。例如,当使用20 kH*的采样麵率时,标准的一帧为10 ms,包含200个采样值。
            话筒等语音输入设备可以采集到声波波形,如囫10.4所示。虽然这些声音的波形包含了所 需单词的信息,但用肉眼观察这些波形却得不到多少信息因此,需要从采样数据中抽取那些能 够帮助辨别单词的特征信息。在语音识别中,常用线性预测编码 技术抽取语音特征。
            线性预测编码的基本思想是:语音信号采样点之间存在相关性,可用过去的若干采样点的线 性组合预测当前和将来的采样点值。线性預测系数埽以通过使预测信号和实际信号之间的均方误差最小来唯一确定。
            语音线性预测系数作为语音信号的一种特征参数,已经广泛应用于语音处理各个领域。
            4.向置量化
              向量量化(Vector Quantization,VQ)技术是20世纪W年代后期发展起来的一种数据压缩和 编码技术。经过向量量化的特征向量也可以作为后面隐马尔可夫模型中的输入观察符号。
              在标量量化中整个动态范围被分成若干个小区间,每个小区间有一个代表值,对于一个输入 的标量信号,量化时落入小区间的值就用这个代表值>[戈替。因为这时的信号量是一维的标量,所 以称为标量量化。
              向量量化的概念是用线性空间的观点[,把标量改为一维的向量,对向量进行量化。和标量量化一样,向量量化是把向量空间分成若干个小区域,每个小区域寻找一个代表向量,量化时落入 小区域的向量就用这个代表向量代替。
              向量量化的基本原理是将若干个标量数据组成一个向量(或者是从一帧语音数据中提取的 特征向量)在多维空间给予整体量化,从而可以在信息量损失较小的情况下压缩数据量。
              语音识别
             当提取声音特征集合以后,就可以识别这些特征所代表的单词。本节重点关注单个单词的 识别。识别系统的输入是从语音信号中提取出的特征参数,如LPC预测编码参数,当然,单词对 应于字母序列。语音识别所采用的方法一般有模板匹配法、随机模型法和概率语法分析法三种。 这三种方法都是建立在最大似然决策贝叶斯(Bayes)判决的基础上的。
            (1)模板(template)匹配法
                  在训练阶段,用户将词汇表中的每一个词依次说一遍,并且将其特征向量作为模板存入模板 库。在识别阶段,将输入语音的特征向量序列,依次与模板库中的每个模板进行相似度比较,将 相似度最高者作为识别结果输出。
             (2)随机模型法
                 随机模型法是目前语音识别研究的主流。其突出的代表是隐马尔可夫模型。语音信号在足 够短的时间段上的信号特征近似于稳定,而总的过程可看成是依次相对稳定的某一特性过渡到 另一特性。隐马尔可夫模型则用概率统计的方法来描述这样一种时变的过程。
             (3)概率语法分析法
                 这种方法是用于大长度范围的连续语音识别。语音学家通过研究不同的语音语谱图及其变 化发现,虽然不同的人说同一些语音时,相应的语谱及其变化有种种差异,但是总有一些共同的 特点足以使他们区别于其他语音,也即语音学家提出的“区别性特征”。另一方面,人类的语言 要受词法、语法、语义等约束,人在识别语音的过程中充分应用了这些约束以及对话环境的有关 信息。于是,将语音识别专家提出的“区别性特征”与来自构词、句法、语义等语用约束相互结 合,就可以构成一个“自底向上”或“自顶向下”的交互作用的知识系统,不同层次的知识可以用 若干规则来描述。
             除了上面的三种语音识别方法外,还有许多其他的语音识别方法。例如,基于人工神经网络 的语音识别方法,是目前的一个研究热点。目前用于语音识别研究的神经网络有BP神经网络、 Kohcmen特征映射神经网络等,特别是深度学习用于语音识别取得了长足的进步。

             通过语音实现人与计算机实现沟通交流,主要包括语音合成、自然语言处理,语音识别是模式识别一个应用领域,为大家脑补几篇,科谱好文,如下:

    1. 什么是自然语言处理,主要存在哪些难点?
    2. 自然语言理解过程主要有哪些层次,各层次的功能是怎么样?
    3. 模式识别具体是怎么定义的,主要研究方向是什么?

         聚焦多智时代,引领智能变革,多智时代为人工智能科谱呐喊!

    展开全文
  • 面向对象思想总结

    万次阅读 多人点赞 2018-07-23 17:31:53
    面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一问题时,你分析这问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这问题里面哪些类和对象,这是...

     

    一、面向过程的思想和面向对象的思想

    面向对象和面向过程的思想有着本质上的区别作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。

          面向对象有一个非常重要的设计思维:合适的方法应该出现在合适的类里面。

    二、简单理解面向对象

    就是在程序里面首先分解出来的应该是注意不再是一步一步的过程了,而是首先考虑在这个问题域里面或者程序里面应该具有有哪些对象,所以从现在开始考虑任何问题脑子里不要再想着我实现这件事我第一步应该干什么,第二步应该干什么,如果这样想,那就是面向过程的思维了。面向对象的思维是,当我碰到这个问题域的时候,碰到这个程序的时候,我首先应该把这个问题里有哪些对象,对象与对象之间有什么关系抽象出来。

    三、面向对象的设计思想

    面向对象的基本思想是,从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式。

    面向对象更加强调运用人类在日常生活的逻辑思维中经常采用的思想方法与原则,如抽象、分类,继承、聚合、多态等。             人在思考的时候,首先眼睛里看到的是一个一个的对象。

    四、对象和类的概念

     对象是用于计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性

         类是用于描述同一类的对象的一个抽象的概念,类中定义了这一类对象所具有的静态属性和动态属性

        类可以看成一类对象的模板,对象可以看成该类的一个具体实例

          eg.什么叫瓶子?

         瓶子的定义:具有某些类特征的东西就是瓶子,比分说什么样的形状,比方说有个口,能倒水,能装水,一般有个盖等等。给瓶子下定义的过程,其实就是把瓶子里的某些东西抽象出来了,所以瓶子在这里是叫做一类事物的一个抽象,在你脑子里有瓶子的概念,可瓶子的概念在你脑子里到底是什么呢?瓶子的概念在你脑子里叫做一类事物的一个抽象。怎么抽象的呢?你往往抽象的是这两个方面:第一个方面我们叫它静态的属性,瓶子应该具有哪些特征,比分说瓶子应有个口,这是它的具有的一个静态属性,瓶子一般有一个盖,这也是它的具有一个静态属性,除此之外,你还可能给它总结动态的属性,什么动态的属性呢?比放说瓶子能倒水,这是它的动态属性。瓶子这个概念在你脑子里如果你细细的思维的话,其实你给它做了两方面的总结,一方面是静态的,一方面是动态的。反映到JAVA的类上,一个就是成员变量(静态属性),一个就是方法(动态属性)方法是可以执行的,可以动的。成员变量是某一个类的静态属性。所以你脑子里瓶子的概念实际上是一类事物的一个抽象,这种东西我们叫它类,椅子是类,桌子是类,学生是类。什么是对象呢?这一类事物的具体的某个实例就叫做对象。所以一类事物的具体的某一个东西,符合这类事物具体的特征的某个东西就叫做对象瓶子是一个类,某个瓶子就是瓶子这个类里面的一个对象。

    五、如何抽象出一个类?

    有两个方面,一方面是它的静态属性,另一方面是它的动态属性。反映到JAVA里面的类怎么包装它呢?一方面成员变量,另一方面是方法。

      eg.职员这个类该怎么抽象出来?也是从两个方面,一方面是它的静态属性,另一方面它的动态属性

    职员有哪些属性呢?有姓名,年龄,目前工资数额等属性,他有哪些方法呢?让这个职员来显示姓名,显示年龄,修改姓名,领取工资。当然显示姓名,显示年龄,修改姓名,领取工资这些也可以让别人来做,但面向对象的设计思维是最合适的方法应该出现在最合适的类里面显示姓名,显示年龄,修改姓名,领取工资由谁来做更合适呢,那就是职员自己最合适。所以这些方法应该出现在职员这个类里面。

    对于类来说,它有一些属性或者称为成员变量,以后说属性或者成员变量指的是同一回事。具体的对象他有没有相关的一些属性或者叫成员变量呢?有,每一个人都有一份,只不过是取值不同而已。如从职员这个类实例化出来的两个职员:职员A和职员B,他们都有姓名,年龄,目前工资数额这些属性,但他们的名字,年龄,领取的工资数额都不一样。这样就能把职员A和职员B区分开来了,正是因为他们的属性值不一样,所以这个对象才能和另外的对象区分开来,所以通过属性是可以区分两个对象的。猫是一个类,这只猫是一个对象,这只猫和另外一只猫该怎么区分开来呢?那就得看你的猫这个类是怎么定义的了,猫有猫毛,毛有颜色。OK,这只猫是黑猫,另一只猫是白猫,这样通过猫毛的颜色区分开来了。如果只定义一个,如捉老鼠,白猫也能捉,黑猫也能捉,这样就没办法区分出黑猫和白猫了,所以根据方法是没办法区分两个对象的。所以每个对象都有自己的属性,属性值和另外一个对象一般是不一样的

    一定要区分类和对象,什么叫做类?什么叫做对象?类是一类事物的一个抽象,具有共同特征的一类事物的一个抽象。对象是这个类具体的某一个实例,所以以后说实例(instance)或者说对象(object)指的是同一回事。

    六、类(对象)之间的关系

    一.关联关系(最弱的一种关系)

    类和类之间是有关系的,如学生和老师这两个类,老师可以教学生,学生可以向老师学习。这就是他们之间的关系。关系和关系之间是不同的,你和你老婆的关系和你和你其他女朋友的关系是不能混为一谈的。关系最弱的一种关系叫关联关系。关联关系反应到代码上往往是一个类的方法里面的参数是另一个类的具体的某一个对象,比如教授教研究生,教哪个研究生,教是教授这个类里面的一个方法,某个研究生是研究生这个类里面的一个具体的对象。关联关系是最弱的一种关系,咱们两个类之间有关系,或者两个对象之间有关系,但关系不是很紧密。

    二.继承关系(比较强的一种关系)

    继承关系封装了这样一种逻辑:“XX是一种XX”,只要这东西能说通了,就可以考虑用继承关系来封装它如:游泳运动员从运动员继承,游泳运动员是一种运动员,这能说得通,所以游泳运动员就是从运动员继承过来的,游泳运动员和运动员就是一种继承关系。学生是一个人,学生从人继承,老师是一个人,老师也从人继承,学生是一种老师,这说不通,所以学生和老师就不存在继承关系。所以将来做设计的时候要分清继承关系很简单,你只要说通这么一句话:“XX是一种XX”。OK,那他们之间就是继承关系。篮球运动员是一种球类运动员,这说得通,所以篮球运动员从球类运动员继承,这样继承很有可能会产生一棵继承树,运动员派生出来,派生出来的意思是游泳运动员这个类、球类运动员这个类、射击运动员类从它继承,相当于运动员派生出来了这些个不同的运动员,包括游泳的,球类的,射击的。球类的再派生足球的,篮球的,排球的。这就是一棵继承树,不过这棵树是比较理想化的情况,只有一个根节点。但实际当中,我们真实世界当中的继承关系不一定只从一个类继承,一个类可能从多个类继承过来,比如说:金丝猴从动物这个类继承,这很正常,但我还有另外一个专门的类:“应该受到保护的东西”,这也是一个类,金丝猴应该受到保护,所以金丝猴是一种应该受到保护的东西。所以金丝猴从“应该受到保护的东西”这个类继承过来。所以在现实情况当中,一个类完完全全有可能从多个不同的类继承,C++正是因为想封装这种继承关系,所以C++存在多重继承。

    三.聚合关系(整体和部分)(比较强的一种关系)

    什么是聚合?聚合就是一个整体与部分的关系我们说“XX是XX的一部分”,只要说得通,那么他们之间的关系就是聚合关系队长是球队的一部分,队员是球队的一部分。所以队长和球队是聚合关系,队员和球队也是聚合关系。脑袋是人的以部分,身体和胳膊也是人的一部分,因此脑袋,身体和胳膊与人都是聚合关系。聚合关系分得再细一点的话就可以分成聚集关系和组合关系比如球队、队长,队员,这三者是聚集关系,假如这个队长既是足球的队长,同时也是篮球的队长,一个人分属两个不同的球队,这是可以的,球队与队长之间没有我离不了你,你离不了我这种情况,所以如果分得更细的话,这种就叫做聚集关系。还有一种情况叫组合,组合说的是咱们俩密不可分,我是你必不可少的一部分。一个人的脑袋不可能既属于你又属于别人,身体也一样,不可能既属于你又属于别人。所以你的身体,脑袋和你是密不可分的,这是一种更加严格的聚合关系,专门给它取了个名字叫组合。

    四.实现关系

    作为父类来说,我觉得我应该具有这样一个方法,但我不知道怎么去实现,谁去实现,我的子类去实现,这就是实现关系。和实现关系息息相关的还有一种关系叫多态。

    五.多态

    六、Java与面向对象

    对象和类是分不开的,必须首先定义类才能有对象。首先定义方法才能调用。对象是JAVA里面的核心,做任何东西你首先都得给我造出一个对象才能做。静态属性简称属性,也叫成员变量,以后说属性或者说成员变量它们指的都是同一回事。

      整个类可以看作是静态的属性还有方法他们之间的一个综合。怎么抽象出一个类的概念,还是那句话,你必须抽象出两个方面来,第一方面是看他们的静态属性,他们有哪些成员变量,第二方面是看他们的有哪些方法。

      写JAVA程序时,我们一上来写的就是public class(声明一个类),在这个class里面我们写的是成员变量和方法。

    每一个JAVA里面的class(类)都对应了我们现实生活中某一类事物的一个抽象比如说要在JAVA里面封装一只狗,具体怎么封装,如何写代码,代码如下:

    package cn.javastudy.summary;
    /**
     * 一类事物封装到JAVA里面首先得写class,定义这个类,类名是什么可以自己取。
     * 这里把类名叫做Dog
     */
    public class Dog {
        /**
         * 接下来就是写这个狗这个类的属性或者叫成员变量,
         * 比如说狗这个类的毛的颜色,怎么定义这个属性呢,
         * 首先得定义毛的一个类型,如使用int来定义毛的颜色类型
         */
        int furcolor; //定义属性:毛的颜色
        float height; //定义属性:狗的高度
        float weight; //定义属性:狗的体重
        
        /**
         * 狗的颜色,高度,体重这些属性定义完了,接下来要定义的就是方法了。
         * 如写一个CatchMouse()方法,捉老鼠的方法。
         * CatchMouse这个方法里面有一个对象类型的参数,捉哪一只老鼠,这个对象参数是属于Mouse这个类的
         * @param m
         */
        void CatchMouse(Mouse m){
                //在方法体内写捉老鼠这个过程,怎么捉,跑着捉,走着捉
                System.out.println("我捉到老鼠了,汪汪!,老鼠要尖叫了!");
                /**
                 * 老鼠尖叫一声,表示被狗咬到了,咬到了能不叫吗,很自然而然地想到,
                 * 尖叫(scream())这个方法是属于Mouse这个类里面的某一个方法。
                 * 老鼠自己调用它,让它自己尖叫。这就是面向对象的思维。
                 */
                m.scream();
        }
        
        public static void main(String[] args) {
            Dog  d = new Dog();//首先用new关键字创建一只狗
            Mouse m=new Mouse();//造出一只老鼠。
            d.CatchMouse(m);//然后用这只狗去抓老鼠,让狗调用CatchMouse()方法去捉某只老鼠。
        }
    }

     

    package cn.javastudy.summary;
    /**
     * 封装的老鼠类
     */
    public class Mouse {
        /**
         * 老鼠自己有一个发出尖叫的方法
         * 当被狗咬到时就会发出尖叫
         */
        public void scream() {
            System.out.println("我被狗咬到了,好痛啊!");
        }
    
    }

    从这个意义上来讲,JAVA里面的每定义一个类实际上就相当于一种新的数据类型。就跟int ,float, String等一样,不过是一种新定义的类型而已。

    八、为什么使用面向对象编程?

    面向对象编程:一组对象互相配合通过沟通完成特定功能

      做软件苦苦追求的一种境界是可重用性(reusable),可扩展性。如果是面向过程,一般情况是属性和方法它们是分开的,他们不是聚合的关系,不是合在一起的,这样要复用起来比较麻烦,复用的层次只是局限于方法这个层次上,而面向对象则不同,它是把属性和方法综合在一个里面。综合在一起复用的时候是整个对象进行复用。所以面向对象和面向过程相比,前者更加容易让我们达到可重用性。

     

     

     

     

    展开全文
  • 面向对象方法,OO方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性... 面向对象开发的几个核心思想 1、问题领域、对象、属性、状态、行为、方法、实现 问题领域:  指软件系统所模拟的真实世界中的系统...

      面向对象方法,OO方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性等独特之处,这些优异特性为研制大型软件、提高软件可靠性、可重用性、可扩充性和可维护性提供了有效的手段和途径。Java主要特征:封装性,继承性,多态性.

    >>>> 面向对象开发的几个核心思想

    1、问题领域、对象、属性、状态、行为、方法、实现

    问题领域:
      指软件系统所模拟的真实世界中的系统,在现实生活中,比较常见的比如,税收、社保、银行、商场等等,都可以使用软件来进行模拟,这些就是软件所针对的问题领域。

    对象:对象是对问题领域中的事物的一种抽象。
    1)所有的东西都是对象,万物皆对象,问题领域中的实体和概念都可以抽象为对象。
    2)世界上没有完全相同的两片叶子,每个对象都是唯一的,对象的唯一性来自于真实世界中的事物的唯一性,即使在系统中java的两个对象,内存地址也未必相同。
    3)每个对象具有属性和行为。
    4)每一个对象都具有状态,状态的意思就是在某一个时间点上,对象的各个属性的取值情况。
    5)对象都属于一个类,每个对象都是某一个类的实例,类是具有相同属性和行为的对象的集合,同一个类的所有的实例都具有相同的属性,表示他们的属性的含义是相同的,但是他们的状态未必是相同的,也就是属性的取值未必是一样的。

    2、类、类型
    类:
     类是一组具有相同属性和行为的对象的抽象。类以及类的关系构成了对象模型的主要内容。
     面向对象变成的主要任务就是定义对象模型中的各个类。
     对象是类的实例,类是对象的模板。

    3、消息、服务
    消息可以理解为参数,服务,就是方法返回的值。

    4、接口
    什么是接口?
      对象,通过接口对提供服务。在现实的世界中,接口是实体,但是在面向对象的范畴中,接口是一个抽象的概念,指的是系统对外提供的服务。系统的接口描述系统能够提供哪些服务,但是不包含服务的实现的细节。对象是最小的子系统,每个对象都是服务提供者,因此每一个对象都具有接口。
      站在使用者的角度上,对象中所有向使用者公开方法的声明构成了对象的接口。使用者调用对象的公开方法来获得服务,使用者在获得服务的时候,不需要关心对象到底是如何实现服务的。
      接口,是实现系统之间松耦合的有力手段。
      计算机系统也是一个充分利用接口来提高系统松耦合的例子,接口还提高了系统的可扩展性。

    在java语言中,接口有两个方面的意思:
      1)接口是指概念性的接口,也就是系统对外提供的所有的服务,在对象中表现的是public类型的方法的声明。
      2)是指interface为关键字定义的实实在在的接口,也成为接口类型,用于明确的描述系统所提供的服务,能够更加清晰的把系统的实现细节与接口分离。

    5、封装、透明
    封装
      封装是指隐藏对象的属性和实现的细节,仅仅对外公开接口,封装能够带来的优点如下:
    1)便于使用者能够正确、方便的理解和使用系统,防止使用者错误修改系统的属性。
    2)有助于建立各个系统之间的松耦合关系,提高系统的独立性,当一个系统的实现发生变化的时候,只要她的接口不发生变化,就不会影响到其他的系统。
    3)提高系统的可重用性,每个系统都是一个相对独立的整体,可以在多种环境中得到重用。
    4)降低了构建大型系统的风险,就类似于搭积木一样,个别的系统不成功,但是代码还是可以被重用的。

    一个设计良好的系统会封装所有的实现细节,把它的接口与实现能够清晰的隔离起来,系统之间只通过接口进行通信。面向对象的编程语言主要通过访问控制机制来进行封装,   这种机制能够控制对象的属性和方法的可访问性。在java语言中提供了如下四种方式的访问级别:
      public(公开)private(私有)protected(同一个包、子类)default(同一个包)
      把尽可能多的东西藏起来,然后对外提供间接的接口,如果封装的程度越高,那么相对的独立性就越高,这样使用起来就会更加的方便。
      把所有的属性封装起来,至少有几个好处:更符合客观世界规律、更灵活的控制属性访问级别、防止用户错误操作、有助于对象封装实现细节。

    6、抽象
    抽象:
      从特定的角度出发,从已经存在的一些事物当中抽取我们所关注的细节,形成一个新的事物的思维过程。抽象是一种从具体到抽象、由复杂到简单的思维方式。
      三种类型的抽象:
    1)从问题领域到软件模型中的对象的抽象
    2)从对象到类的抽象
    3)从子类到父类的抽象

    在java语言中,抽象有两种意思:
    1)抽象,是一种思维过程,包含上面三种方式的抽象
    2)抽象,是一个形容词,可以用来修饰类以及方法,如果一个方法被abstract修饰的话,则说明这个方法没有被具体实现,如果一个类被abstract修饰,则说明这个是抽象类,不能被实例化。

    7、继承、扩展、覆盖
      在父类和子类之间同时存在着继承和扩展的关系。子类继承父类的属性以及方法,同时子类中还可以扩展出新的属性以及方法,并且还可以覆盖父类当中方法的实现方式。
      继承与扩展同时提高了系统的可重用性和可扩展性。公有继承 私有继承 保护继承
      继承与扩展导致了面向对象软件开发领域中的架构类软件系统的发展。

    如何在一些通用的软件架构的基础上进行扩展呢?
      这些通用的软件架构中都提供了一些扩展点,简单的说,这些扩展点就是为了让用户进行继承和扩展的类。这些类已经具备了一些功能,并且能够和软件中的其他的类能够进行紧密的协作,用户只需要创建这些类的子类,然后在这些子类中增加新的功能或者是重新实现某些功能,用户定义的子类能够和系统中原有的类进行和谐融洽的协作。
      比如:J2EE、Servlet、JSP、EJB、Struts、JSF、Spring这些都是一些通用的架构。

    8、组合
       组合 是一种用多个子系统来组装出复杂系统的有效的手段。
      对于一个组合系统,组合系统和他的子系统是聚集关系,子系统之间则是关联关系或者是依赖关系(在UML中的定义)

    面向对象的范畴中,组合具有以下的特点:
     1)在软件的分析和设计的阶段,简化为复杂系统建立对象的模型。在建立对象模型的时候,通常首先识别问题领域的粗粒度对象,然后对该对象进行分解,比较符合人类的思维。
     2)在软件编程的阶段中,假话创建复杂系统的过程,只需要分别创建独立的子系统,然后将其组合起来,就构成了一个复杂的系统。而且允许第三方参与系统的建设,提高了构架复杂系统的效率。
     3)向使用者隐藏系统的复杂度。
     4)提高程序代码的可重用性,一个独立的子系统可以被组合到多个复杂的系统当中。

    9、多态、动态绑定
      多态,是指系统A访问系统B提供的服务的时候,系统B可以通过多种方式来提供服务,而这一切对于系统A是透明的。
      动态绑定,一个接口=new 实现类,这个实现类在运行的时候并不知道,可能是实现类A,也可能是实现类B,java虚拟机的这种运行机制被称为动态绑定。
      抽象机制和动态绑定机制能够提高系统之间的松耦合性。

    需要注意的一点是:抽象机制是开发人员在开发过程当中使用的机制,但是动态绑定机制是在java虚拟机运行的过程中提供的机制。

    >>>> 面向对象设计模式的几个核心思想: 高聚合低耦合

      面向对象,将世界归纳为一句话:万事万物皆对象。
      在没有面向对象之前,软件的可维护性是相当的烂,主要原因有四个:过于僵硬;过于脆弱;复用率低;黏度过高
      在软件设计过程当中无论那种设计思维都把可拓展性、灵活性、可插入性作为软件设计的一个基本的指导思想。

      设计模式的研究当中一个非常重要的概念就是:复用,那么什么是复用呢?软件的复用又有那些好处呢?复用又有那些基本的形式呢?复用和可拓展性、灵活性、可插入性又有那些关联或者关系呢?
      首先,复用就是重复使用的意思。软件复用带来了几个比较明显的好处:1,较高的生产率,2.较高的软件质量,3.恰当的使用复用可以改善软件的系统的可维护性。
      一个可复用的软件可以为将来的软件开发节省开发使用的时间和费用,一个越频繁使用的构件那么以后开发投资就相对越少。如果一个软件的复用路越高,那么发现它存在的缺陷就更快,从而也可以更为彻底的排除这种缺陷,这样很明显有利于系统的维护。更为重要的一点是,复用与系统的可维护行有着直接的关系。
      软件复用包括:代码的复制与粘贴;算法的复用;数据结构的复用,模型复用。

        在面向对象的语言当中数据的抽象化和继承的关系使得概念和定义可以复用;多态性使得实现和应用可以复用。而抽象化和封装可以保证和促进系统的可维护性。面向对象的复用的焦点不是函数不是算法等细节,而是体现在宏观意义上的商业逻辑的抽象的层次上,而这些是提高复用性和保证提高可维护性的关键所在。
        在面向对象的设计当中,抽象的层次应该是相对稳定的部分,也是复用的焦点,抽象模块相对于具体的模块独立,从而具体模块的内部结构的变化就不会影响到抽象层次的结构,因而抽象层次的模型复用就会较为容易。

      在面向对象的领域里边,可维护性复用是以设计原则和设计模式为基础的。
    系统的可拓展性由:开闭原则,里氏代换原则,依赖倒转原则和组合/聚合复用原则所保证。
    系统的灵活性由:  开闭原则、迪米特法则、接口隔离原则所保证
    系统的可插入性由:开闭原则、里氏代换原则,组合/聚合复用原则以及依赖倒转原则所保证。

    >>> 1.开闭原则
      开闭原则的核心我们总结为:对拓展开放,对修改关闭。说的直白点就是:在模块不被修改的的前提下可以被拓展。
     优点:
      通过拓展,可以提供新的行为,以满足新的需求,使其具有一定的灵活性和适应性。
      对已有模块,特别是最为重要的抽象模块不能再被修改,使得变化中的软件有一定的稳定性和延续性。
      在开闭原则当中最为关键的就是:抽象化。从另外一个角度讲就是所谓的“对可变性的封装原则”。这样就意味着有两点:
      1、可变性不应该散落到代码的角落,而应该白封装到对象里。继承不应当被看作是封装变化的方法,而应该被认为是从一般的对象生成特殊对象的方法。
      2、一种可变性,不应当与另一种可变性混合(设计模式的类图和继承结构一般都不会超过两层)。

    >>> 2.里氏代换原则是继承和复用的一个基石。
      里氏代换原则:任何基类可以出现的地方,子类一定可以出现。
      这个是对开闭原则的一个补充。开闭原则的关键是抽象化,里氏代换原则则是对实现抽象化具体步骤的规范化。

    >>> 3.依赖倒转原则
      核心是:依赖于抽象,而不依赖于具体的实现。开闭原则是目标,依赖倒转原则是一种手段。违反了依赖倒转原则就不可能达到开闭原则的要求。

    >>> 4.合成/聚合复用原则
      核心:尽量合成/聚合,而不是使用继承关系达到复用的目的。合成/聚合复用原则和里氏代换原则相辅相成,前者要求设计师首先考虑合成和聚合关系,后者则要求在使用继承关系的时候,必须确定这个关系符合这一条件。

      依赖也叫耦合,耦合分为三种,零耦合(如果两个类没有耦合关系),具体耦合(发生在两个具体的或者说是可以实例化的类之间,经由一个类对另一个具体类的直接引用造成的),抽象耦合(发生在一个具体的类和一个抽象类或者接口之间的,使两个必须发生关系的类之间存在最大的灵活性)。

    抽象不应当依赖与细节,而细节应当依赖于抽象。也就是针对接口编程,而不要针对实现编程。以抽象的方式耦合是依赖倒转原则的关键。里氏代换原则是依赖倒转原则的一个基础。
     
      组合/聚合复用原则
        核心:要尽量使用合成聚合,尽量不要使用继承。
        聚合用来表示“拥有”关系或者整体与部分的关系。而合成是一种表示强的多的“拥有”关系。上以篇博文中有提及这两者的区别。

    >>> 5.迪米特法则
        核心:一个软件的实体应当尽可能的减少和其他实体发生相互作用。
        迪米特法则所谈论的就是对对象之间的信息量、流线以及信息的影响的控制。在软件系统当中,一个模块设计的好不好的最主要也是最重要的标识就是该模块在多大程度上将自己的内部数据和其他有关的细节隐蔽起来。

      在类的划分上应当创建有弱耦合的类;
      在类的设计结构上,每一个类都应当尽量降低成员的访问权限,一个类不应当public自己的属性而应该提供取值和赋值的方法。 
    在类的设计上,只要有可能就应当设置成不变类。
    在对其他类的引用上,一个对象对其他对象的引用应当降到最低。


    >>> 6.接口隔离原则
      核心:客户端应该尽可能小的单独的接口,而不要提供大的总的接口。
      接口隔离原则和广义的迪米特法则都是对一个软件的实体与其他的软件实体的通信的限制。广义的迪米特法要求尽可能的减少通信的宽度和深度,接口隔离原则限制的是通信的宽度。遵循这两个法则会使一个系统软件,在功能拓展的过程当中,不会将修改的压力传递到其他对象。

        以上就是设计模式当中应该注意的几个原则,也是指导设计的一个关键性的原则。在设计软件的时候,应该充分的考虑这几个基本原则,同时也要考虑到软件或者其他工具本身,以及软件经济成本和时间成本等因素的一些制约,所以需要综合来考虑分析,用最合适的方式来开发和维护软件,避免成本虚高,设计过度的情形出现,总之,在允许的条件情况下用最合的的设计模式进行软件开发是最值得推荐的。

    展开全文
  • 【计算机基础知识】三大编程思想

    万次阅读 多人点赞 2019-06-21 16:05:55
    “面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。 特性:模块化 流程化 优点:...
  • 认真推荐几个 AI 方面的公众号

    千次阅读 2019-07-30 08:19:00
    技术开发过程中,及时关注圈内动态,高效获取优质资源,对我们非常重要。认真推荐下面这几个公众号,它们经常发布优质信息(比如互联网前沿、技术干货等),非常大家学习,大佬们都在...
  • mapreduce的基本思想

    千次阅读 2017-07-06 13:45:15
    基于大数据的运算一般来说两种方案:  1、移动数据到运算方。  2、移动运算到数据方。  移动数据到运算方,就是将分布式文件系统的文件读取到本地计算机进行本地运算,但是考虑到磁盘IO、网络IO和本地计算机的...
  • 你知道种编程思想

    千次阅读 2017-03-10 11:49:41
    四大编程思想简述 1)POP--面向过程编程(Process-oriented programming ): 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是系统的数据被加工和处理的过程,在程序设计中主要以函数或者...
  • 算法思想有很多,业界公认的常用算法思想有8种,分别是枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟。当然8种只是一大概的划分,是一“仁者见仁、智者见智”的问题。 1.1 枚举算法思想 知识点讲解...
  • 有效沟通要解决的三基本方面

    万次阅读 2018-02-27 23:20:15
    首先事先声明:这篇博文是听了王树文老师的项目管理微课程后自己整理...所谓沟通,它是为了一设定的目标,把信息、思想和情感在个体或群体间传递达成共同协议的过程。3.要做到有效沟通,需要注意三大基本要素:(1...
  • 数学四大思想方法

    千次阅读 2021-01-17 13:46:43
    数学思想方法数学思想是指人们对数学理论和内容的本质的认识,数学方法是数学思想的具体化形式,实际上两者的本质是相同的,差别只是站在不同的角度看问题。通常混称为“数学思想方法”。数学四大思想:函数与方程、...
  • 【论文】篇论文核心思想概述

    万次阅读 2020-10-05 21:24:12
    1.《Blockchain and Federated Learning for Privacy-Preserved Data Sharing in ...我们还设计了一基于区块链的分布式数据共享体系结构,使区块链能够保证数据的检索,并保证模型的精确训练。本文中的主要贡
  • 能将任意两不同的事物拿来比较吗?从没有意义的情况考虑,分两种情况。第一种情况【不考虑意义:】物体的同种属性可以比较,包含颜色、强度、尺寸、密度、透明度、粗糙度、...例如:将两人进行比较,你能用...
  • 展开全部出处: Toward a Science of Translating 《翻译的科学探索》在Principles of correspondence 那一章定义:翻译时不求文字表面的死板对应,而要在两...奈达是美国人,师从位著名的结构主义语言大师,本身...
  • 展开全部计划的正文主体一般由以下三部分构成62616964757a686964616fe78988e69d8331333366306462:1、文章式,即把计划按照指导思想、目标和任务、措施和步骤等分条列项地编写成文,这种形式较强的说明性和概括...
  • 入栈顺序是1234,出栈序列有哪几

    千次阅读 2021-01-15 03:04:05
    展开全部4元素的全排列共有24种,栈要求符合后进先出,按此衡量排除后即得:1234√,62616964757a686964616fe59b9ee7ad94313334313566351243√,1324√,1342√,1423×,1432√,2134√,2143√,2314√ ,2341√...
  • 目前应用最为广泛的集群计算技术可以分为三大类:高可用性集群技术、高性能计算集群技术和高可扩展性集群技术。下面我们将对这三种集 群技术进行一下简单的介绍。  1、高可用性集群技术 高可用性集群,英文...
  • 你不可不知的数学四大思想方法

    千次阅读 2021-01-17 13:46:48
    名师指导合肥一中 高级教师 杜明成数学在培养和提高考生的思维能力方面有着其他学科不可代替的独特作用,这是因为数学不仅是一种重要的“工具”和“方法”,而且是一种思维模式,这表现为数学思想.高考试题十分重视对...
  • ERP即企业资源计划系统,是指建立在信息技术的基础上,以系统化的管理思想,为企业决策层及员工提供的管理平台。它是一种跨地区、跨部门、甚至跨公司整合实时信息的企业管理系统。
  • 我们在面试中经常会被问到,现在什么东西,你准备怎么测试。拿到一模块,独立接手一项目,我们从哪些地方来分析,整理,从二思维更新清晰,逻辑更严谨的往下接着走。第一篇博客便是我总结的对一项目的...
  • 展开全部出处: Toward a Science of Translating 《翻译的科32313133353236313431303231363533e59b9ee7ad9431333365643662学探索》在Principles of ...奈达是美国人,师从位著名的结构主义语言大师,本身...
  • 比方,中华文明千百年在民众心中形成了一“统一天下”的思想,这种思想会诱发各个混乱时期的诸侯或者军阀,以统一中国为目标,而不会像欧洲一样以分裂中国各自独立、各自称帝为目标。 那么编...
  • 本文试图从抽象层面概括一点编程思想方面的东西。  一 c语言  1、相关概念:实模式、保护模式、调度、中断、调用栈、回调……基本上计算机科学里面的基本概念都会涉及  2、编程思想:结构化编
  • Java中的四核心技术思想

    千次阅读 2018-07-18 10:21:43
    Java中的四核心技术思想 对Java核心概念和思想的掌握助于提升我们对整个Java平台的理解力。这里将介绍四Java中的核心技术思想,包括Java虚拟机、类装载器的体系结构、class文件和API。   Java已经成为一...
  • 这里面向对象开发的几个核心的思想和概念 1、问题领域、对象、属性、状态、行为、方法、实现 问题领域: 指软件系统所模拟的真实世界中的系统,在现实生活中,比较常见的比如,税收、社保、银行、商场...
  • 简述种人脸识别的主要方法

    万次阅读 2019-05-29 08:33:58
    该方法结合了灰度特性和几何因素,在比对时可以允许图像存在弹性形变,在克服表情变化对识别的影响方面收到了较好的效果,同时对于单个人也不再需要多样本进行训练。 (5)线段Hausdorff 距离(LHD) 的人脸识别...
  • 编程思想

    千次阅读 2018-11-07 11:14:13
    什么是编程思想?答案可能很会复杂,但也可以很简单。一句话来讲就是,用计算机来解决人们实际问题的...那么学习计算机该如何入手,也是很多初学者犯难的一问题,特别是对与非计算机专业的人来说更是如此。面对...
  • 商业合作模式有几

    万次阅读 2019-06-18 23:36:00
    一般公司之间合作以下: 一、六种合作模式 1、资源互换:资源互换是一种双方商定在一段时间内彼此相互交换现金的金融交易。 2、利益均分:利益均分是在一定的利益格局和体系下出现的利益体系相对和平共处、相.....
  • Spring框架分为哪七大模块

    万次阅读 多人点赞 2015-04-26 19:02:08
    使用TransactionProxyFactoryBean为Bean产生事务物理时,需要哪几个属性值的设置: ”baseTransactionProxy” class=”org .springframework .transaction .interceptor .TransactionProxyFactoryBean ”> ...
  • 年程序员给所有新老程序员的忠告

    千次阅读 多人点赞 2018-03-29 15:07:13
    https://www.tuicool.com/articles/ZFR3mmv(一)三年前的一项目经验主要讲的是作者帮公司拉了一政府的项目,但是由于经验较少,谈的价格很低,还有很多细节刚开始没有谈到,后面相当于收了很少的钱,給政府干了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 350,697
精华内容 140,278
关键字:

思想分为哪几个方面