面向对象软件开发的阶段 面向对象分析(OOA)
面向对象分析(Object-Oriented Analysis,缩写OOA)涉及从类和对象的角度分析问题,这些类和对象都要从问题领域(problem domain)中找出。
本阶段的任务主要是,彻底地分析问题和明确地指定要求。要在客户(真实的客户,人)的问题领域找出类和对象,并用其完整地描述什么方案可行,什么方案不可行。换言之,我们应采用客户能够理解的类和对象来描述问题。这些类和对象都可以直接在问题领域中找到。
OOD(面向对象设计)阶段在OOA(面向对象分析)阶段之后,在本阶段中,我们将在OOA阶段开发的框架中加入细节,待解决的问题将被分解为类和对象用于实现中。本阶段需要完成的任务包括定义类之间的关系、描述对象如何才能适应系统的进程模型、如何跨地址空间划分对象、系统如何完成动态行为等。OOD阶段的成果将更加清楚,而且更容易理解。
OOA和OOD都不是C++语言所特有的,它们是解决任何面向对象问题的基本方法。事实上,OOA 和 OOD 并不依赖于任何语言。
面向对象编程(OOP)这是面向对象软件开发环节的最后一个阶段。将 OOD 阶段的成果输出,将其输入至OOP 阶段中。这个阶段,将用选定(或根据项目要求指定)的语言编写真正的代码。如前所述,面向对象编程是一种由合作对象(就是类的实例)构成程序的编程方法,可通过继承关系设计出相关联的类。
面向对象编程的特性有:
抽象;
封装和数据隐藏;
多态;
继承;
代码的可重用性。
面向对象程序设计的优点:
1、数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;
2、通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;
3、结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;
4、通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度;
5、以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统。
数据抽象,封装,层次
在OOP中普遍存在两种层次:is-a和has-a。
is-a关系指子类是父类的特殊类型,即特殊化,如候鸟是一种鸟。
has-a关系指被继承类是新类的一部分,如轮胎是汽车的一部分。
对于 OOP,继承是另一项非常重要的特性。不支持继承的语言不能成为面向对象编程语言。某些语言支持数据抽象和封装,但并不支持任何形式的继承。这样的语言不是面向对象编程语言,它们被称为基于对象语言(object-based language),虽然可以实现对象,但是,却无法通过继承扩展它们(如Ada和Modula-2等都属于这个范畴的语言)。
继承是区别基于对象语言和面向对象语言的关键特性。
对象模型的优点:1.代码复用;2.模块化;3.数据保护等。
批注面向对象和面向过程思想的区别是:
面向过程重在思考使用函数实现功能,思考的重点是函数;
面向对象的基础是类,类从结构体发展而来,因此类的本质应该是一组数据的集合,思考的重点是数据.
而类内的成员函数(方法)即是处理数据的过程.面向对象的所有过程应该思考为类内数据的组成与变更,而类间交互的过程是数据的io,
同时最显著的区别是,面向过程的版面全是函数,面向对象的版面全是类(自定义类型).
模板允许传入参数类型,并生成相应类型的类或函数,模板大量用于容器(存储某种类型的数据),除此之外其行为更像是一个面向过程的通用函数,因为它思考的不是对一块数据的处理,而是对一个功能的通用化实现.
C++也强调了让编译器参与检查代码部分,例如使用const后就可以不用再考虑这块数据的安全性了,因为这相当于告诉编译器这块由它来检查.
另一个思想是将将一切都看做为:输入,输出和权限.函数/对象的输入是参数,输出是返回值,同时如果想使用只读操作,则加const&,如果想执行写操作可使用&操作.指针目前在new和传入c风格字符串外不知道还有什么用,对了指针还有一个独有的特性,可移动(自增自减运算).
成员变量即属性,如ps中的属性面板,这是对象的核心含义,方法是为了改变属性,最终还是要返回属性值的.