当我们谈论面向对象时,我们在谈论什么

初学一门新的编程语言时,我们总会先遇到某种语言的基础语法、基础类型、变量声明与条件控制语句等等。旅程的开始往往尽是对着面向过程代码的有样学样。
一路学习,披荆斩棘,了解了一些语言的高级用法与套路,却还是感觉难以理解其精髓;甚至会有些迷惑与困扰:

1.面对纷繁复杂的业务场景,繁复多变需求更迭,怎么样才能提高效率。
2.在经历了大量的近乎重复的业务代码的洗礼后,我们怎么才能,逐步搭建适合自己业务场景的框架工具。

要解决问题,我们需要在开发模式上多做思考。在面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。问题被看作一系列需要按照指定步骤完成的任务,但是逐渐的,我们注意到程序实践中,对代码的易维护、可扩展、高复用的呼声逐渐增加。我们也会了解到某些问题在我们周围不断重复发生,而该问题的解决方案的核心,也被总结成了很多成型的方法,灵活使用便能够避免大量的重复劳动。

现在咱们来谈一谈面向对象的程序设计理论与原则。

面向对象程序设计 (Object Oriented Programming) 本质上是以建立模型体现出的抽象思维方式和面向对象的实践方法。模型是用来反映编程实践中涉及到的事物特征和可预测的变化行为的一种抽象;通过这种抽象的思维方式与对应的实践方法来更好的统筹开发工作中遇到的具体问题。

而面向对象程序设计也可以说是一种编程架构。其中的基本原则是程序由单个能够起到子程序作用的单元或对象组合而成的。从而达到对程序 重用性、灵活性和扩展性的要求。面向对象编程包含了对象、类、继承、多态、消息等等。
通过建立模型可以将编程涉及到的事物,转化为编程系统中抽象的代表一些特点与行事方法的集合。面向对象程序设计方法是模拟人类的思维方式,使得软件的开发方法与过程接近人类认识世界、解决现实问题的方法和过程。

面向对象程序设计以对象为核心,认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作方法,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。

面向对象编程的基本特点:

1.封装性:
封装是指描述对象的属性以及其行为的程序代码组装到一起,把它们封装在一个类中,为软件结构的模块性提供基础。封装的最基本单位是对象,而使得软件结构的相关部件的实现“高内聚、低耦合”的“最佳状态”便是面向对象技术的封装性所需要实现的最基本目标。

2.继承性

继承性主要指的是类之间的联系与区别。而在子类可以获得父类定义好的部分属性与方法。同时也可以针对自己的特性进行拓展与扩充。

3.多态性:

多态性是指在面向对象技术中,当不同的对象同时接收到同一个完全相同的消息之后,所表现出来的动作是不相同的,具有多种形态;多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数是不同的。

面向对象技术在保障进行良好的需求设计的同时,也尽可能实现利用低成本来开发出高质量的应用软件的目标。

面向对象程序设计的优点,可以隔离变化,通过保持接口不变,内部的实现方式不会导致对外界的干扰,可以提高代码的可维护性;通过将不同模块进行独立细分,可以控制软件整体复杂度;

当然,面向对象程序设计也存在一些缺陷,当类数量过多,对象被大量创建时,势必会影响程序运行效率;如果将某些功能实现为大体量类库才能提供的功能,对众多类代码的可靠性、类功能的学习以及掌握产生挑战。

面向对象程序设计之后,也存在了新的编程开发模式。很多人也在看到了它的缺陷之后也都做了其他的尝试,这些我们以后再做分析。但是需要知道的是,随着编程实践的进行,每个开发模式都会有存在的理由和价值,不断学习灵活使用,才能在不同的场景中提升工作效率。

名词解释:

面向对象程序设计中的概念主要包括: 对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。

  • 对象
    对象是一个自包含的实体,用一组可识别的特性和行为来标识。


  • 类就是具有相同的属性和功能的对象的抽象的集合

  • 构造方法
    又叫构造函数,是对类进行初始化的方法。

  • 封装 (encapsulation)
    第一层意思: 每个对象都包含它能进行操作所需要的所有信息,良好的封装可以减少耦合
    第二层意思: 将接口与实现分离的过程。类内部的实现可以自由修改并且具有清晰的对外接口。

  • 继承:
    类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的结构和行为。继承描述了类之间的“ is a”关系。子类可以对基类的行为进行扩展、覆盖、重定义。继承者可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。
    继承定义了类如何相互关联,共享特性。继承的工作方式是,定义父类和子类,或者叫做基类和派生类,其中子类继承父类的所有特性。子类还可以定义新的特性。

  • 组合:
    即是类之间的关系也是对象之间的关系。在这种关系中一个对象或者类包含了其他的对象和类。组合描述了 “has a”关系。

  • 多态
    一个名称可以表示很多不同类的对象,这些类和一个共同超类有关。因此这个名称表示的任何对象可以以不同的方式响应一些共同的操作。多态表示不同的对象可以执行相同的动作,但是要通过它们自己的实现代码来执行。 这样,子类以父类的身份出现; 子类在工作时以自己的方式来实现;子类以父类的身份出现时,子类特有的属性和方法不可使用。

  • 动态绑定:
    也称动态类型,指的是一个对象或者表达式的类型直到运行时才能确定。通常由编译器掺入特殊代码来实现。

  • 静态绑定
    也成为静态类型,指的是一个对象或者表达式的类型在编译时确定。

  • 消息传递
    指的是一个对象调用了另一个对象的方法

  • 接口
    接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合,一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。 一个类可以支持多个接口,多个类也可以支持相同的接口。
    接口预先定义时,还不知道类是否存在,方法如何实现。

  • 泛型 是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型和其方法的参数类型出现。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 面向对象介绍 范式编程 编程是程序员用 特定的语法+数据结构+算法 组成的代码来告诉计算机如何执行任务的过程。 一...
    drfung阅读 1,899评论 0 1
  • java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继...
    863cda997e42阅读 653评论 0 1
  • 抽象类 什么是抽象类 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的...
    go以恒阅读 594评论 0 3
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,188评论 0 5
  • 标签(空格分隔): Java面向对象 问题思考 什么是面向对象? 为什么要面向对象? 怎么面向对象? 问题解决 什...
    outSiderYN阅读 1,004评论 0 7