一、面向对象思想的起源
软件人才
- 软件人才从低到高4个成长层次:软件蓝领,软件工程师,卓越软件人才,领军人物
- 卓越软件人才要求
- 系统分析和设计理论基础,掌握大系统需求分析、建模与仿真技术
- 应用系统设计能力,能够从事新兴产业软件的研发
- 国际前沿技术学习能力和交流能力
- 项目管理能力及自主业务提升能力
思维方式
- 面向对象 Object-oriented 是一种思维方式。学习面向对象的思维方式,利用面向对象的思维方式去思考实际问题,分析、设计、解决方案
- 对创建对象系统来说,了解UML工具、面向对象编程语言是必要的。但是,了解对象思想才是最重要!
- 学习建议:多练习、多实践、多思考
面向对象思想的起源
-
艾伦. C.凯创造性地提出面向对象编程思想,认为艺术和科学不分家。勤于思考、知识点融合、类比,产生新的思想。艾伦. C.凯创提出:
-
所有对事物的认识都始自于我们不愿盲目地接受这个世界。
-
我的灵感就是把这些(指对象)看做生物学上的细胞。
-
预测未来的最好办法,就是把它创造出来。
-
愿景重于目标。
-
-
把数据和处理数据的过程捆绑到一起,,可以直接使用过程,而不用去了解数据文件的格式。
艾伦·凯(Alan Kay)的思考
- 提倡应该关注消息机制和模块间的松耦合和交互,而不是模块内部的对象组成
- 做出非凡和可成长的系统的重中之重是设计好模块之间如何通讯,而不是模块应具有什么样的内部属性和行为方法
- “我把对象想象成生物细胞或者和网络上的单个计算机,它们之间只能通过消息进行通讯”-- 作为微生物学家背景
- 每个对象可以有多个代数与之关联,这些代数关系可以构成家族,而这些概念会非常有用 --作为数学家背景
二、面向对象的基本概念
类Class和对象Object
- 类Class:共享相同属性、操作、方法、关系或者行为的一组对象的描述符。
- 对象Object: 一个对象是根据一个类创建的一个实例。
- 类定义了实例的行为和信息结构,对象的当前状态(实例属性的取值)取决于作用于该对象的操作。用对象来定义类,用类来产生对象。
- 在设计软件系统的时候,对象是不存在的。在软件系统运行时,在内存中创建对象。
同义词
- 属性Attribute == 数据Data == 状态state == 信息information
- 方法Method == 操作operation == 行为behaviour = = 职责responsibility
软件功能的实现
-
类
- 定义了对象群体的逻辑结构,包括属性和操作
- 系统运行时,类作为产生对象的模板,但类在物理层面是不存在的
-
对象
- 系统运行时必须为每一个需要的对象分配内存、保存数据
- 对象存在于物理层面,每个对象都有自己的数据空间(内存)
- 所有的对象共享同一块代码空间
-
消息
- 对象之间的一种交流手段,就像我们日常工作中的各种交流手段
-
小结:软件系统是由多个对象组成,对象间通过消息相互交流、共同协作,以完成整个系统的功能
三、面向对象的思考方式
单一思维模式切换成多重思维模式
- 观察到的一切都是对象,这就是面向对象思考方式
- 软件系统是由多个对象组成,对象间通过消息相互交流、共同协作,以完成整个系统的功能
- 在对世界(系统)进行观察(建模)的时候,把它们看成是由一系列相互交流、互为影响的对象集
- 世界是由相互作用的对象组成的
- 描述与构建由对象组成的系统
软件开发常规的两种思维方式
- 面向对象(Object-Oriented Strategy)
- 适合解决不确定的事件、创新性的事件
- 致力于将数据和方法先做一个封装(分配一个对象做事,先考所需要的数据是否和它在一起)
- 面向过程(Structured Strategy)
- 处理已知的事实、组织规划几乎没有未知重要因素的场景
- 侧重于考虑方法的编写(哪个方法做什么事,不考虑所涉及的数据在哪里)
- 注意:把任意一段过程化的代码堆砌在一起形成一个类,这不是面向对象
示例:通信方式的比较
- 过程化解决方法通过信道传递数据,服务器端需要有专门的工具对接受的数据进行处理
- 面向对象解决方法通过信道传递对象(数据+对数据的处理方法)
- **OOAD(Object-Oriented Analysis and Design,面向对象分析与设计)**是一种软件工程的方法论,它强调在软件开发过程中使用面向对象的概念来分析和设计系统。
- 对象(Object):对象是面向对象的基础,它具有属性(数据)和方法(行为)。
- 类(Class):类是对象的蓝图(模板),定义了一组具有相同属性和行为的对象。
- 继承(Inheritance):继承允许子类继承父类的属性和行为,实现代码的复用。
- 封装(Encapsulation):封装是指隐藏对象的内部细节,仅对外暴露必要的接口。
- 多态(Polymorphism):多态允许不同类的对象对同一消息做出响应,实现方法的动态绑定。
- 接口与实现(Interface/Implementation):接口定义了一个对象应该具有的方法和属性,但不提供具体的实现。实现是指一个类实现了接口中定义的所有方法。
- 组合与聚合(Composition/Aggregation):组合是一种强依赖关系,表示部分和整体的生命周期是一致的,即部分不能脱离整体而单独存在。聚合是一种弱依赖关系,表示整体和部分的生命周期是独立的,部分可以不依赖于整体而存在。
- UML(Unified Modeling Language,统一建模语言)是一种面向对象设计的标准化图形表示法。它提供了一系列的图形符号和语义来描述软件系统的结构和行为。是一种建模工具,表达设计思想的工具。
- **设计模式(Design Patterns)**是在软件工程中经过验证的、用于解决常见问题的通用可重用解决方案。设计模式可以帮助程序员提高代码的可读性、可维护性和可扩展性。
- **面向对象原则(Object-Oriented Principles)**是一组设计原则,它们指导开发者在面向对象编程(OOP)中创建结构良好、可维护和可扩展的软件。
- 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它使用对象和类来组织代码。在面向对象编程中,对象是程序的基本构建块,每个对象都是类的一个实例,类则是定义了一组具有相同属性和方法的对象的模板。