去年学校开了一门《面向对象程序设计》课,没有好好听,现在搞项目开发的时候突然感到了这门课程的重要性了,也就只好翻开去年的资料,重新开始学习了,下面是我的总结,与大家分享一下。有不对的地方,希望大家给我指出来。
面向对象分析设计系列文章:
面向对象分析设计-------01基础
......
本文章的三大目标:
OO:建立对象的思维方式,对面向对象思想和理论有进一步的理解
UML:能够熟练地使用UML表达面向对象的设计思想
Model:运用对象技术的一般原则和模式进行应用系统的分析和设计建模
目录:
一、开篇亮剑:面向对象vs结构化
1、从设计设计思想的角度比较
2、(程序)实现角度比较
3、从建模的角度
二、了解对象技术(Object Technology)
定义
特点
Object Technology发展史
三、核心概念:对象与类
1、对象
2、类
3、对象与类的关系
四、对象技术相关原则
对象技术基本原则
对象技术相关机制
一、开篇亮剑:面向对象vs结构化
1、从设计设计思想的角度比较
结构化 | 面向对象 |
结构化思维用过程刻画数据间关系 | 对象思维直接用类表达数据间关系 |
结构化中,数据是死的,全部依赖算法操作 | 数据是活的,“她”知道自己的信息(属性),并能完成自己的工作(操作) |
结构化思维更像是一个人在解决所有问题 | 对象思维更像是一个团队的分工协作 |
2、(程序)实现角度比较
结构化 | 面向对象 |
数据结构+算法=程序设计 | 以对象为中心组织数据与操作 |
数据 | 对象属性 |
类型与变量 | 类与对象实例 |
函数(过程)调用 | 消息传递 |
类型与子类型 | 一般类与特殊类,继承 |
构造类型 | 整体-部分结构,聚合 |
指针 | 关联 |
3、从建模的角度
传统结构化方法 | 面向对象方法(UML) | |
需求模型 | 输入I、处理P、输出O的视角。 面向功能的文档(用户需求规格说明书)需求变化,其功能变化,所以系统的基础不稳固 | 从用户和整体角度出发。 使用系统抽象出用例图、活动图,获取需求;如需求变化,对象的性质相对功能稳定,系统基础稳定 |
分析模型 | 面向过程的数据流图DFD、 实体—关系图ERD、数据字典DD表示分析模型 功能分解,数据和功能/过程分开 | 把问题作为一组相互作用的实体,显式表示实体间的关系 数据模型和功能模型,状态、顺序、通信、活动图细化说明一致 类、对象图表示分析模型 |
设计模型 | 功能模块(SC图),模块之间的连接/调用是模块的附属形式 | 类和对象实现, 类/对象的关联、聚集、继承等连接、连接规范和约束作为显式定义 |
实施模型 | 体系结构设计 | 构件图,部署图 |
测试模型 | 根据文档进行单元测试,集成测试,确认测试 | 单元测试采用类图,集成测试用实现图和交互图,确认测试采用用例图 |
二、了解对象技术(Object Technology)
定义:A set of principles (abstraction, encapsulation, polymorphism, ..) guiding software construction, together with languages, databases, and other tools that support those principles.
特点:
1、模拟
可以顺应人类思维习惯,让软件开发人员在解空间中直接模拟问题空间中的对象及其行为。
面向对象实例表示:
东北人都是活雷锋 | 老张开车去东北…… 撞啦! |
class 人 { Region 籍贯; } class Region { } interface 雷锋 { helpPeople(){ } } class 东北人 extends 人 implements 雷锋 { 籍贯 = 东北; helpPeople(){ } } | class Car{ DriveTo(Region) throws Exception (撞车){} 人 Driver; } Main Program { 人 老张; Car 夏利; 夏利.Driver = 老张; try { 夏利.DriveTo(东北); } catch (Exception) { } } |
2、稳定
较小的需求变化才不会导致系统结构大的改变。
所以,可以把交不稳定的数据和功能用较稳定的类包起来,是的设计更加健壮。
3、复用
代码重用:类库、框架等重用机制
通过继承、关联、封装等手段
Object Technology发展史
三、核心概念:对象与类
1、对象
定义:
An object is an entity with a well-defined boundary and identity that encapsulates state and behavior.
State is represented by attributes and relationships.
Behavior is represented by operations, methods, and state machines.
每一个对象都有一个唯一的标识, 即使其状态有可能与其它对象一样
一个对象的状态是它反映于现实世界的一系列属性
对象的行为定义当其它对象发出请求时,该对象如何反应
在UML中的表示形式:
An object is represented as a rectangle with an underlined name.
2、类
定义:
A class is a description of a set of objects that share the same attributes, operations, relationships, and semantics.
An object is an instance of a class.
在UML中的表现形式:
A class is represented using a rectangle with compartments.
3、类和对象的关系
类是生成对象的模板:类的定义中包含有产生和删除对象的操作。
每一个对象都是某一个类的实例。
每一个类在某一时刻都有零个或更多的实体
类是静态的;它们的存在、语义和关系在执行前就已经定义好了
对象是动态的;它们在程序执行时可以被创建和删除
四、对象技术相关原则
对象技术基本原则:
对象技术相关机制:
泛化(Generalization) | A relationship among classes where one class shares the structure and/or behavior of one or more classes. 什么是继承 A subclass inherits its parent’s attributes, operations, and relationships .
单一继承 多重继承 |
多态(Polymorphism) | The ability to hide many different implementations behind a single interface. class abstract Shape { public abstract void draw(); } class Rectangle extends Shape { // 覆盖(override)基类方法 public void draw() { ... } class Circle extends Shape { // 覆盖(override)基类方法 public void draw() { … } 应用:1、假设我们有一个数组sharr,里面放着一排Shape,但是不知道哪些是Rectangle,哪些是Circle。利用多态性,我们可以: for (int i = 0; i < sharr.length; ++i) { Shape shape = (Shape)sharr[i]; shape.draw(); } 2、遍历整个数组的过程中,各个Shape自己知道应当如何在画布上绘制自己。shape.draw()这同一行代码在shape指向不同的对象时表现出不同的行为,这就是所谓多态性。 |