面向对象分析与设计

模式和原则 [原]

懵懂的女人 提交于 2020-01-13 00:29:48
模式和原则 设计模式介绍 模式:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。 这是关于模式最经典的定义,作者是建筑大师 Christopher Alexander 。如果是第一次看到这句话,多数人会觉得有些抽象难懂。其实“模式”两个字只是一个代号,就像我叫 Justin ,如果我改叫 Tom 也没什么问题,只是我更喜欢 Justin 这个名字,所以从 Christopher 开始,有了“模式”这个词,人们也都把关于“重复发生的问题的描述和解决办法”统称为模式。 “模式”这个词是不局限于软件开发行业的,它几乎无处不在,它其实就是一种经验的积累,就象大多数人的教育经历都是从小学到初中再到高中再到大学,这也是一种模式,是中国的教育模式;现在越来越火的出国热,也是另一种模式,海外留学模式。因为 GOF 的《设计模式:可复用面向对象软件的基础》一书描述的 23 种经典设计模式,奠定了模式在软件行业的地位,从此人们提到“设计模式”就是默指“面向对象设计模式”,但是如前文所述,模式绝对不局限于软件行业,即使在软件行业,也不局限于 GOF 描述的 23 种设计模式,例如最著名的 Martin Flower 的《企业架构模式》,还有我们常用的 MVC 、 IOC 等。 [ 说到这里,有必要声明一下的是,在该系列文章中,凡提到模式,都是指软件行业的基于 GOF 的

程序设计语言发展回顾与展望

夙愿已清 提交于 2020-01-12 19:25:20
文章转载自:计算机世界网,原文链接地址:http://www2.ccw.com.cn/1995/13/138106.shtml 编者按:程序设计语言是与现代计算机共同诞生、共同发展的,至今已有40余年的历史,早已形 成了规模庞大的家族。进入80年代以后,随着计算机的日益普及和性能的不断改进,程序设 计语言也相应得到了迅猛发展。 《程序设计语言发展回顾与展望》一文对程序设计语言的发展历程进行了回顾,并对一 些著名语言的背景、特点、长处与不足,及其对程序设计语言发展的贡献作出了评述。 《面向对象方法、语言与支撑环境的特征与缺陷》一文对面向对象方法、语言与支撑 环境的优缺点进行了详细的评述,并对其发展方向做出了展望。 《实时程序语言的过去、现在和将来》一文中,阐述了计算机实时应用中对程序设计语 言的特殊要求,介绍了一些具有代表性的实时语言的设计和使用,并指出了实时程序设计语 言的发展方向。 《三种Windows Basic的介绍》一文中,介绍了用于Windows环境下的Basic语言的发展 情况。对Windows下的CA-Realizer 2.0、GFA Basic 4.1O和Visual Basic 3.0进行了介绍 和比较。 本期技术纵横:《奔腾(Pentium)芯片的瑕疵》。文中对Pentium芯片在做双精除法时出 现错误的发现过程做了详细介绍,并分析了这种瑕疵产生的原因

第2章 理解面向对象

落花浮王杯 提交于 2020-01-12 04:28:34
理解面向对象 本章要点: 面向对象编程方法 1.结构化程序设计 2.面向对象程序设计 UML(统一建模语言)介绍 面向对象设计方式由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个部分组成。其中OOA和OOD已经采用UML(统一建模语言)来描述。因此本章主要分为两部分,首先介绍OOP(面向对象编程)面向对象编程,接着介绍UML(统一建模语言)的面向对象编程分析思想。 本章要点: 面向对象编程方法 软件开发领域有两种主流的开发方法:结构化开发方法和面向对象开发方法。 1.结构化程序设计 1) 结构化程序设计简介 ​ 结构化程序设计里最小的程序单元是函数,每个函数都负责完成一个功能,用以接收一些输入数据,函数对这些输入数据进行处理,处理结束后输出一些数据。整个软件系统是由一个个函数组成,程序首先调用主函数,主函数再依次调用其他函数,普通函数之间也可以依次调用,这样就完成了软件系统的功能。下图是结构化软件的结构示意图。 从上图中可以看出,结构化程序设计采用自上而下的设计方式,在这个过程中需要考虑每个模块应该分解成哪些子模块,每个子模块又可以分解成哪些更小的模块,依次下去….,直到模块细化成一个函数为止。 结构化编程的缺点: 设计不够直观 适应性差,可扩展性不强 2) 结构化程序的三种基本结构 程序设计的三种基本结构包括: 顺序结构:源代码排列顺序依次执行

面向对象编程三种特性

左心房为你撑大大i 提交于 2020-01-11 05:57:18
文章目录 面向过程 面向过程特点 面向对象 面向对象特点 对象和类 定义类 类创建对象 封装特性 封装的特性 继承特性 多继承 新式类与经典类 私有属性与私有方法 私有属性和私有方法: 多态 多态特点 C语言属于面向过程的语言,而C++、JAVA、python都属于面向对象的语言。 面向过程 面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向过程最重要的是模块化的思想方法。例如前面博客所写的 学生信息管理系统的主函数 。 面向过程特点 模块化 流程化 优点 : 性能比面向对象高, 因为类调用时需要实例化,开销比较大,比较消耗资源; 单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 缺点 : 没有面向对象易维护、易复用、易扩展 面向对象 面向对象是按人们认识客观世界的系统思维方式,把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 (一个类具有的共同行为) 面向对象特点 封装 继承 多态 优点 :易维护、易复用、易扩展。 由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 缺点 : 性能比面向过程低。 对象和类

面向对象与正则表达式的学习(自动更正,和代数运算)

删除回忆录丶 提交于 2020-01-11 03:49:41
今天我来介绍一下最近在学习的一些内容: 面向对象与正则表达式 。 对于我来说,前者相对于好理解并且比较好学习并掌握,但后者可能由于它的繁杂的表达式和浩如烟海的标识符令我有些难以掌握,但我依然有信心把它学习好了! 先来介绍一下我们的面向对象!! 先是有几个专有名词的理解: 面对对象编程(OOP:object oriented programming) : 是一种程序设计范型,同时也是一种程序开发的方法,实现OOP的程序希望能够在程序中包含各种独立而又相互调用的对象,没一个对象又都应该能够接受数据、数据处理并将数据传达给其他对象,因此每一个对象都可以被看做一个小型的机器,而整个程序块系统就是由这些小的机器相互协助、组合构建起来的。 面对对象分析(OOA:objecet ariented analysis): 即根据抽象关键的问题域来分解系统 面对对象设计(OOD:object oriented design) :是一种提供符号设计系统的面向对象的实现过程,他用非常接近时机领域属于的方法吧系统构造成现实世界的对象。 类(class) :告诉Python创建新类型的东西 对象(object) :两个意思,即最基本的东西,或者某样东西的实例 实例(instance) :这是让Python创建一个类时得到的东西 我们的python再玩法上其实有很多,当然想要编辑更多强大的代码实现更多的功能

UML类图几种关系的总结

拜拜、爱过 提交于 2020-01-09 08:47:07
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化( Generalization ) 【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。 【箭头指向】:带三角箭头的实线,箭头指向父类     2. 实现( Realization ) 【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现. 【箭头指向】:带三角箭头的虚线,箭头指向接口      3. 关联( Association) 【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。 【代码体现】:成员变量 【箭头及指向】:带普通箭头的实心线,指向被拥有者      上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。 下图为自身关联:     4. 聚合( Aggregation

软件工程试题(作业)

…衆ロ難τιáo~ 提交于 2020-01-07 08:12:05
如何评测软件工程知识技能水平? 我的CSDN: https://blog.csdn.net/P71720/article/details/103742773 (一),选择题(5*2) (1) 需求分析中开发人员要从用户那里了解( A )。     A.软件做什么  B.用户使用界面  C.输入的信息  D.软件的规模 (2) 软件开发的瀑布模型,一般都将开发过程划分为:分析、设计、编码和测试等阶段,一般认为可能占用人员最多的阶段是( C )。 A.分析阶段 B.设计阶段 C.编码阶段 D.测试阶段 答案解析:在结构化的软件开发中,一般情况下,可能需要占用的人数最多的阶段是在软件编程的阶段,但从工作量上来说,在软件的需求分析、定义及软件的测试和维护阶段需要的工作量更多,用软件开发计划中的40-20-40原则,即可说明这一点,在软件需求分析和定义阶段,虽然工作量比软件编程多,但因为软件的需求分析和定义对开发人员的素质要求比较高,所以占用的人员并不需要太多;同时由于软件维护的周期比较长,所以其耗的工作量比软件编程多,但一般来说它占用的人员并不比软件编程阶段占用的人员多,所以答案为C。 (3) 当一个模块直接使用另一个模块的内部数据,这种模块之间的耦合为( D ) 。 A、数据耦合    B、公共耦合 C、标记耦合    D、内容耦合 (4) UML是软件开发中的一个重要工具

如何评测软件工程知识技能水平

♀尐吖头ヾ 提交于 2020-01-06 20:14:24
根据本课程的学习以及自身的知识和经验,您认为一个软件工程师的软件工程知识技能水平高低主要体现在哪些方面,请您简要总结一下:   1.具有优秀的学习能力,IT技术更新很快,软件工程师应具备的技能里很重要的一点就是学习能力。只有具备了学习能力,才能很快适应市场与业务的需要,有时候工作的需求不是你在学校就已经学过的,只能靠着之前积累的经验与快速学习熟悉新的知识,升华自己的能力,为以后成为架构师后者其他职位打下基础。   2.具有扎实的计算机专业知识,吃透高等数学、离散数学、算法等课程。(1)基础编程语言,编程语言是软件工程师必备的技能,不同方向的开发需要使用到不同的编程语言通常来说,软件工程师往往需要掌握多门编程语言。(2)算法。算法是软件工程师的重点知识技能,算法的掌握情况往往能够决定软件工程师的成长高度。(3)数据库。信息是以数据为中心的,因此与数据库的交互在所有软件中都是必不可少的,了解数据库操作和编程是软件工程师需要具备的基本素质之一。目前常用的数据库软件有Oracle数据库和SQL Server等。   3.具有对这个行业的热爱,才有能坚持与继续学习的动力。   4.具有良好的交流与沟通能力,现在的软件开发永远不是一个人的游戏,需要与团队成员协调沟通,分配好工作的任务与进度,才能够开发出高质量的软件。 一、选择题 1、软件工程的出现主要是由于( ) A.程序设计方法学的影响  

如何评测软件工程知识技能水平

坚强是说给别人听的谎言 提交于 2020-01-06 01:45:37
根据本课程的学习以及自身的知识和经验,您认为一个软件工程师的软件工程知识技能水平高低主要体现在哪些方面,请您简要总结一下:   1.具有优秀的学习能力,IT技术更新很快,软件工程师应具备的技能里很重要的一点就是学习能力。只有具备了学习能力,才能很快适应市场与业务的需要,有时候工作的需求不是你在学校就已经学过的,只能靠着之前积累的经验与快速学习熟悉新的知识,升华自己的能力,为以后成为架构师后者其他职位打下基础。   2.具有扎实的计算机专业知识,吃透高等数学、离散数学、算法等课程。(1)基础编程语言,编程语言是软件工程师必备的技能,不同方向的开发需要使用到不同的编程语言通常来说,软件工程师往往需要掌握多门编程语言。(2)算法。算法是软件工程师的重点知识技能,算法的掌握情况往往能够决定软件工程师的成长高度。(3)数据库。信息是以数据为中心的,因此与数据库的交互在所有软件中都是必不可少的,了解数据库操作和编程是软件工程师需要具备的基本素质之一。目前常用的数据库软件有Oracle数据库和SQL Server等。   3.具有对这个行业的热爱,才有能坚持与继续学习的动力。   4.具有良好的交流与沟通能力,现在的软件开发永远不是一个人的游戏,需要与团队成员协调沟通,分配好工作的任务与进度,才能够开发出高质量的软件。 一、选择题 1、软件工程的出现主要是由于( ) A.程序设计方法学的影响  

软件工程试题(作业)

对着背影说爱祢 提交于 2020-01-05 13:55:12
如何评测软件工程知识技能水平? 我的CSDN: https://blog.csdn.net/P71720/article/details/103742773 (一),选择题(5*2) (1) 需求分析中开发人员要从用户那里了解( A )。     A.软件做什么  B.用户使用界面  C.输入的信息  D.软件的规模 (2) 软件开发的瀑布模型,一般都将开发过程划分为:分析、设计、编码和测试等阶段,一般认为可能占用人员最多的阶段是( C )。 A.分析阶段 B.设计阶段 C.编码阶段 D.测试阶段 答案解析:在结构化的软件开发中,一般情况下,可能需要占用的人数最多的阶段是在软件编程的阶段,但从工作量上来说,在软件的需求分析、定义及软件的测试和维护阶段需要的工作量更多,用软件开发计划中的40-20-40原则,即可说明这一点,在软件需求分析和定义阶段,虽然工作量比软件编程多,但因为软件的需求分析和定义对开发人员的素质要求比较高,所以占用的人员并不需要太多;同时由于软件维护的周期比较长,所以其耗的工作量比软件编程多,但一般来说它占用的人员并不比软件编程阶段占用的人员多,所以答案为C。 (3) 当一个模块直接使用另一个模块的内部数据,这种模块之间的耦合为( D ) 。 A、数据耦合    B、公共耦合 C、标记耦合    D、内容耦合 (4) UML是软件开发中的一个重要工具