初学一门新的编程语言时,我们总会先遇到某种语言的基础语法、基础类型、变量声明与条件控制语句等等。旅程的开始往往尽是对着面向过程代码的有样学样。
一路学习,披荆斩棘,了解了一些语言的高级用法与套路,却还是感觉难以理解其精髓;甚至会有些迷惑与困扰:
1.面对纷繁复杂的业务场景,繁复多变需求更迭,怎么样才能提高效率。
2.在经历了大量的近乎重复的业务代码的洗礼后,我们怎么才能,逐步搭建适合自己业务场景的框架工具。
要解决问题,我们需要在开发模式上多做思考。在面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。问题被看作一系列需要按照指定步骤完成的任务,但是逐渐的,我们注意到程序实践中,对代码的易维护、可扩展、高复用的呼声逐渐增加。我们也会了解到某些问题在我们周围不断重复发生,而该问题的解决方案的核心,也被总结成了很多成型的方法,灵活使用便能够避免大量的重复劳动。
现在咱们来谈一谈面向对象的程序设计理论与原则。
面向对象程序设计 (Object Oriented Programming) 本质上是以建立模型体现出的抽象思维方式和面向对象的实践方法。模型是用来反映编程实践中涉及到的事物特征和可预测的变化行为的一种抽象;通过这种抽象的思维方式与对应的实践方法来更好的统筹开发工作中遇到的具体问题。
而面向对象程序设计也可以说是一种编程架构。其中的基本原则是程序由单个能够起到子程序作用的单元或对象组合而成的。从而达到对程序 重用性、灵活性和扩展性的要求。面向对象编程包含了对象、类、继承、多态、消息等等。
通过建立模型可以将编程涉及到的事物,转化为编程系统中抽象的代表一些特点与行事方法的集合。面向对象程序设计方法是模拟人类的思维方式,使得软件的开发方法与过程接近人类认识世界、解决现实问题的方法和过程。
面向对象程序设计以对象为核心,认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作方法,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。
面向对象编程的基本特点:
1.封装性:
封装是指描述对象的属性以及其行为的程序代码组装到一起,把它们封装在一个类中,为软件结构的模块性提供基础。封装的最基本单位是对象,而使得软件结构的相关部件的实现“高内聚、低耦合”的“最佳状态”便是面向对象技术的封装性所需要实现的最基本目标。
2.继承性
继承性主要指的是类之间的联系与区别。而在子类可以获得父类定义好的部分属性与方法。同时也可以针对自己的特性进行拓展与扩充。
3.多态性:
多态性是指在面向对象技术中,当不同的对象同时接收到同一个完全相同的消息之后,所表现出来的动作是不相同的,具有多种形态;多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数是不同的。
面向对象技术在保障进行良好的需求设计的同时,也尽可能实现利用低成本来开发出高质量的应用软件的目标。
面向对象程序设计的优点,可以隔离变化,通过保持接口不变,内部的实现方式不会导致对外界的干扰,可以提高代码的可维护性;通过将不同模块进行独立细分,可以控制软件整体复杂度;
当然,面向对象程序设计也存在一些缺陷,当类数量过多,对象被大量创建时,势必会影响程序运行效率;如果将某些功能实现为大体量类库才能提供的功能,对众多类代码的可靠性、类功能的学习以及掌握产生挑战。
面向对象程序设计之后,也存在了新的编程开发模式。很多人也在看到了它的缺陷之后也都做了其他的尝试,这些我们以后再做分析。但是需要知道的是,随着编程实践的进行,每个开发模式都会有存在的理由和价值,不断学习灵活使用,才能在不同的场景中提升工作效率。
名词解释:
面向对象程序设计中的概念主要包括: 对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。
对象
对象是一个自包含的实体,用一组可识别的特性和行为来标识。类
类就是具有相同的属性和功能的对象的抽象的集合构造方法
又叫构造函数,是对类进行初始化的方法。封装 (encapsulation)
第一层意思: 每个对象都包含它能进行操作所需要的所有信息,良好的封装可以减少耦合
第二层意思: 将接口与实现分离的过程。类内部的实现可以自由修改并且具有清晰的对外接口。继承:
类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的结构和行为。继承描述了类之间的“ is a”关系。子类可以对基类的行为进行扩展、覆盖、重定义。继承者可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。
继承定义了类如何相互关联,共享特性。继承的工作方式是,定义父类和子类,或者叫做基类和派生类,其中子类继承父类的所有特性。子类还可以定义新的特性。组合:
即是类之间的关系也是对象之间的关系。在这种关系中一个对象或者类包含了其他的对象和类。组合描述了 “has a”关系。多态
一个名称可以表示很多不同类的对象,这些类和一个共同超类有关。因此这个名称表示的任何对象可以以不同的方式响应一些共同的操作。多态表示不同的对象可以执行相同的动作,但是要通过它们自己的实现代码来执行。 这样,子类以父类的身份出现; 子类在工作时以自己的方式来实现;子类以父类的身份出现时,子类特有的属性和方法不可使用。动态绑定:
也称动态类型,指的是一个对象或者表达式的类型直到运行时才能确定。通常由编译器掺入特殊代码来实现。静态绑定
也成为静态类型,指的是一个对象或者表达式的类型在编译时确定。消息传递
指的是一个对象调用了另一个对象的方法接口
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合,一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。 一个类可以支持多个接口,多个类也可以支持相同的接口。
接口预先定义时,还不知道类是否存在,方法如何实现。泛型 是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型和其方法的参数类型出现。