面向对象分析与设计

面向对象的程序员应该懂(学习)什么?

会有一股神秘感。 提交于 2020-03-01 13:49:20
首先,这里要把程序员的概念放宽一点,不管是分析的,还是搞设计的或者编码,测试的,都叫做程序员。也就是说,这里以程序员泛指所有软件实现过程中所涉及的所有人员。但是不包括如配置管理员,数据库管理员,测试工程师这样的职位。因为这里讨论的仅仅是软件的构建,与验证、管理等其它周边事务都无关。 第一个要考虑的就是并发编程。比如多线程,它是否真是程序员本应该涉及的领域。程序员是否真的应该费大量精力去研究它,以便然后才能在现实工作中正确地使用它? 这是形式语义学讨论的范围。形式语义学讨论的就是语言元素的语义。其实我觉得它应该讨论得更多一点,比如比语言层次更高一点的如库(Library),平台,操作系统服务,本地服务,协议等的语义。 程序员应该干什么?? 根据不重复发明轮子的原则,所有编程中的共性部分都不应该是程序员的职责。程序员只应该对商业逻辑负责。程序员当然还要负责这些逻辑的运行时实现效果。也就是说,程序员负责的部分包括两个: 1,程序的静态特性; 2,程序的动态特性。 简而言之,程序员应该是最终的产品责任人。这并不意味着程序员会负责整个系统所有的部件质量,也不意味着程序员只负责自己编写的程序部分。程序员对于因需要引入的任何系统构件都拥有责任。但这种责任是一种使用者责任,是区别于开发这些构件的生产者责任的。这就象我买了个手机,手机不是我生产的,但我仍然对它的质量负有责任:使用者责任

第1章 类和对象—面向对象概念

[亡魂溺海] 提交于 2020-02-25 22:12:34
面向对象程序设计( Object-Oriented Programming , OOP )是一种程序设计架构,同时也是一种程序开发的方法。对象指的是类的实例,它将对象作为程序的基本单元,将程序和数据封装其中,以提高代码的重用性、灵活性和扩展性。 1.1 面向对象概念 时间是由什么组成的?现实世界是由一个一个对象组成的,例如看到的东西、听到的事件、想到的事情,这些都是对象,也就是说万事万物皆对象。不同的对象,既相互独立,又相互联系,人们面向的世界是“面向对象”的。 1.1.1 对象抽象成类 对象( Object )抽象为类( Class )的过程,是在系统分析阶段完成的。 1. 分析对象的特征 对象是人们要分析的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件,不同的对象呈现不同的特征 。由于对象反映了现实世界,人们通过面向对象的方法就可以找到合理地解决问题的方法。怎么区分这些对象呢?就是分析与系统相关的特征,包括状态(静态特征)和操作(动态特征)。如图 1-1 所示为对象的部分特征的分析。 状态:用于描述对象的静态特征,表示对象“是什么样子”。对象的状态用一些数据来描述,在程序中称为字段或属性。 操作:用于描述对象的动态特征,表示对象“能做什么”。对象的操作用于改变对象的状态,对象的操作就是对象的行为,在程序称为方法或函数 。 对象实现了状态和操作的结合

Java — 面向对象的编程语言

冷暖自知 提交于 2020-02-16 00:13:35
本篇文章将对 Java 中面向对象的一些概念做出详细讨论。 一、为什么要面向对象? 老是在说面向对象,面向对象中的这个对象到底是什么呢? 1、什么是对象? 对象是人们可以进行研究的一切事物,从最简单的一支铅笔到极其复杂的航空母舰,都可以看作是对象。对象不仅仅能表示具体的事物,还能表示抽象的规则、计划或者事件等。 因此,面向对象的这个对象,指的是 客体 。所谓客体指的是 客观存在的对象实体 和 主观抽象的概念 。 客体或对象( Object )在哲学上指 可感知或可想像到的任何事物 ,既包括客观存在并可观察到的事物(如人物、树木、房屋,抽象的如物价、自由),也包括想像的事物(如神化人物)。—— 《维基百科》 2、结构化编程 最早的程序开发,使用的都是结构化(面向过程)程序设计语言。 计算机是帮助人们解决问题的,然而计算机终究是个机器,它只会按照人所写的代码,一步一步的执行下去,最终得到了结果。**结构化编程,就是按照计算机的思维写出的代码。**随着时间的推移,软件的规模逐渐扩大,业务逻辑变得越来越复杂的时候,当人再看到这些逻辑时,就无法维护和扩展了。 同时,结构化设计是以功能为目标来设计构造应用系统的,这种做法导致我们设计程序时,不得不将客体所构成的现实世界 映射 到由功能模块组成的软件系统中,这种转换过程,背离了人们观察和解决问题的基本思路。 3、面向对象编程

面向对象设计原则之依赖倒转原则

假如想象 提交于 2020-02-14 08:09:01
如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。依赖倒转原则是 Robert C. Martin 在 1996 年为“ C++Reporter ”所写的专栏 Engineering Notebook 的第三篇,后来加入到他在 2002 年出版的经典著作“ Agile Software Development, Principles, Patterns, and Practices ”一书中。依赖倒转原则定义如下: 依赖倒转原则 (Dependency Inversion Principle, DIP) :抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。 依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。 为了确保该原则的应用,一个具体类应当只实现接口或抽象类中声明过的方法,而不要给出多余的方法,否则将无法调用到在子类中增加的新方法。 在引入抽象层后,系统将具有很好的灵活性,在程序中尽量使用抽象层进行编程,而将具体类写在配置文件中,这样一来,如果系统行为发生变化,只需要对抽象层进行扩展,并修改配置文件,而无须修改原有系统的源代码

UML介绍

孤者浪人 提交于 2020-02-14 03:44:48
UML是什么 Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。 UML有什么 UML 2.4.1 发展了已经获得成功的 UML 2.0规范 ,并迅速成为建立软件系统可视化、规范、文档的标准。统一建模语言(UML) 也被用于非软件系统的建模,并在很多领域,诸如金融,军事,工程方面应用广泛。 UML 2 定义了13种基本的图,它们被分成两大类: 1. 结构建模图 结构图定义了一个模型的静态架构。它们通常被用来对那些构成模型的‘要素'建模,诸如:类,对象,接口和物理组件。另外,它们也被用来对元素间关联和依赖关系进行建模。 2. 行为建模图 行为图用来记录在一个模型内部,随时间的变化,模型执行的交互变化和瞬间的状态;并跟踪系统在真实环境下如何表现,以及观察系统对一个操作或事件的反应,以及它的结果。 UML可以用来做什么 嵌入式软件分析设计

软件工程与UML笔记

对着背影说爱祢 提交于 2020-02-10 17:26:18
软件工程与UML笔记 第一章 面向对象软件工程概论 要求学习的内容: 软件危机 软件工程的由来 软件工程的定义 软件工程的范畴 软件工程实践的目标 软件开发包含的活动 软件维护的成本 修复bug的代价 一.软件危机 软件定义: 软件是程序以及开发、使用和维护程序所需要的所有文档。 软件危机定义: 软件开发和维护过程中遇到的一系列严重问题 表现: 对软件开发成本和进度的估计不准确; 软件产品质量很不可靠; 可维护性差,软件的文档资料不完整和不合格; 软件成本逐年上升; 软件开发生产率不高,不能满足客观需要。 软件危机原因: (1)人们对于软件概念与范畴的理解。 早期软件工程师崇尚个人英雄主义,整个软件开发通常处于一种无序的状态。他们大多认为编写程序就是软件开发的全部。这种观念会导致随着软件规模的增大,程序员对于文档的忽略与不重视,使得软件开发产品的不健全与维护困难。 (2)软件的规模日益增长、设计日益复杂。 Visual Studio/Office等(M->G) (3)软件开发组织发生变化。 在上述因素发生变化的同时,软件开发组织也在发生着变化。早期开发一款小型软件,可能1-2个开发人员就可以完成。然而随着软件规模的飞速增长,软件开发组织也在同比例增长,由单打独斗的状态改变为一个团队若干开发人员共同研发一款产品。人员由一个变成团队协同开发,这种组织形式的转变

面向过程和面向对象及面向对象的三大特征

痴心易碎 提交于 2020-02-09 07:39:17
新手继续,大牛可以关闭浏览页了。 英文及缩写 :   面向过程:procedure oriented programming POP   面向对象:object oriented programming OOP 面向对象和面向过程的 历程 :   面向过程编程采取的是时间换空间的策略,因为在早期计算机配置低 ,内存小,如何节省内存则成了首要任务,哪怕是运行的时间更长。随着硬件技术的发展,硬件不再成为瓶颈,相反更好的模拟现实世界、系统的可维护性等问题凸显出来,于是面向对象设计应运而生。当下:应用在 PC 机上的一般应用系统,由于不太需要考虑硬件的限制,而系统的可维护性等方面却要求很高,一般采用面向对象方式;而在内存限制有所要求的嵌入式系统,则大多采用面向过程方式进行设计编程。 定义 :   面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可。面向对象是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。下面举一例说明面向过程和面向对象编程。 首先使用面向过程: 1、开始游戏, 2、黑子先走, 3、绘制画面, 4、判断输赢, 5、轮到白子, 6、绘制画面, 7、判断输赢, 8、返回步骤2, 9、输出最后结果。 把上面每个步骤用分别的函数来实现,问题就解决了。

我对面向对象设计的理解——Java接口和Java抽象类

穿精又带淫゛_ 提交于 2020-02-08 20:34:56
在没有好好地研习面向对象 设计 的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解。 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有方法名,没有方法体的东西,我实现它又有什么用呢?我从它那什么也得不到,除了一些方法名,我直接在具体类里加入这些方法不就行了吗? 为什么一定要有抽象类这个概念?为什么就不能把这个父类写成一个具体的类,子类再继承它不就可以了吗?何必弄一个抽象类出来,还要弄一些没有方法体的抽象方法,弄得又象接口又象类的,让人捉摸不定。 当我开始 学习 java设计模式,真正走进面向对象设计的大门之后,我才发现,自己对面向对象设计的理解原来是那么的片面,那么的肤浅,根本就没有真正理解面向对象思想的精髓,在某一种程度上还受着面向过程的影响,以为弄出了一个个类,就算是面向对象了,而其实还是被过程所驱使着。 我还是说说我现在对面向对象思想的理解吧,不一定正确全面,但我想应该还算是比以前略有进步吧。 面向对象思想,我觉得最关键的就是抽象。 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时

9.Java类和对象 详解(一)

北城余情 提交于 2020-02-06 13:05:25
一、面向对象简述 面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。 但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。 在面向对象定义之中,也规定了一些基本的特征: (1)封装:保护内部的操作不被破坏; (2)继承:在原本的基础之上继续进行扩充; (3)多态:在一个指定的范围之内进行概念的转换。 对于面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。 二、类与对象的基本概念 类与对象时整个面向对象中最基础的组成单元。 类 :是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法); 对象 :对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。 可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例

面向对象知识点总结

喜夏-厌秋 提交于 2020-02-02 19:32:35
第一章复杂性 1.软件复杂性的原因: 问题域的复杂的性; 管理费用开发过程的困难性 软件中随处可能出现的灵活性 描述离散系统行为困难。 2.控制系统复杂性的方法: 分解方法(算法分析和面向对象分解)、抽象的方法 3.复杂系统一般具有如下属性: 层次结构:复杂系统的架构是它所有的组件以及这些组件之间的层次结构的函数。 相对本原(primitives):组成系统的基础组件决定于观察者 分离关注:组件内与组件间的联系分离开来。 共同模式:复杂系统具有共同的模式,复用。 稳定的中间形式:随着时间的推移,系统变得稳定,同时为构建更为复杂系统而作为稳定的中间形式,复杂系统变得更加复杂。 第二章面向对象基础 1.面向对象技术的三个特征:(或基本机制) 封装,隐藏内部实现 继承,复用现有代码 多态,改写对象行为 2.面向对象技术的四个特征:(或基本机制) 抽象,分离变与不变 封装,隐藏内部实现 继承,复用现有代码 多态,改写对象行为 3.Java中抽象类与接口的联系与区别 相同点:1)都有未实现的方法;2)都不能用于创建对象(实例);3)一个具体的类继承或实现它们时,需要对未实现的方法提供具体实现。 不同点:1)接口中的方法都是未实现的,而抽象类中可以有实现的方法;2)接口中没有构造函数和属性,但抽象类中有;3)一个类只能继承一个抽象类,但可以实现多个接口。 4