面向对象方法与技术是一种现代软件开发范式,它强调将现实世界的实体抽象为具有封装性、信息隐藏、自治性和通信性的对象,从而提高软件的生产效率、可靠性、易维护性和可扩展性。本章首先回顾了面向对象方法的发展历程,从早期的Simula-67到后来的Object、Liskov原则、抽象数据类型(ADT)、CLU、Smalltalk、C++、Java、UML,再到XML、Web服务等,展示了这一思想的演进和应用。
面向对象的引入源于人们希望软件开发能够更好地模拟现实世界的逻辑,使得问题的解决更加直观和有针对性。其核心动机包括:
1. **封装性(Encapsulation)**:将数据和操作数据的方法组合在一起,隐藏实现细节,只对外提供接口,增强了代码的安全性和维护性。
2. **信息隐藏(Information Hiding)**:确保对象内部状态对外部不可见,只有经过定义的接口才能访问,实现了职责划分和保护数据完整性。
3. **自治性(Autonomy)**:对象独立执行其任务,有自己的生命周期,降低了系统的耦合度。
4. **通信性(Communication)**:对象之间通过消息传递进行交互,支持模块化的协作,提高软件灵活性。
5. **被动性(Passivity)**:对象被动响应外部请求,体现了事件驱动和无状态设计的原则。
在面向对象方法下,软件设计倾向于从问题域概念出发,直接映射到软件结构,使分析和实现的界限更为清晰。这种方式带来的优点有:
- **减少复杂性**:通过对象的粒度化,降低系统的整体复杂性。
- **可维护性**:由于对象的独立性和封装,修改一个对象不会影响其他部分,便于维护。
- **可扩展性**:新功能可以通过创建新的对象或修改现有对象实现,易于适应需求变化。
- **可重用性**:对象可以作为模块复用,避免重复劳动。
- **表述自然**:用直观的方式表达业务逻辑,易于理解和沟通。
- **数据和功能结合**:将数据和处理逻辑绑定在一起,提高代码的清晰度。
相比之下,过程化方法则更侧重于过程、数据结构和算法,系统以流程驱动,数据和过程相对分离。虽然两者各有优劣,但面向对象方法因其优势,在现代软件工程中占据了主导地位。