面向对象圣经

【保研经验】北科自动化到北大工学院 作者:办公室某学长 谢邀。。。作为拖延症晚期患者,希望能在我科开学前写完。 先简单介绍一下我的保研过程,申请了清华叉院&北大叉院大数据&北大信科计算机夏令营,三者都没入营;申请了自所夏令营(自所来宣讲时未交简历,这是重大错误),给了第二批补录但没去;最终九推去了北大工学院。我的这次保研最终成功的经历可以说有一定运气成分,不具有普适性,但在前期准备过程中还是有经验可以分享的。 ... 阅读详情

1

第一天

上帝看到人类发明了计算机,但一直在用汇编语言艰难地写程序,很是伤心,就把编译器的秘密告诉了约翰·巴科斯,让他带领大家写出了编译器,从此人类可以用高级语言写程序,然后编译成机器语言去运行了。

上帝还教会了人类使用顺序、循环、分支这三种基本的程序结构来编写程序。

人类很高兴,写的代码越来越长。

2

第二天

但是人类经常写下臭长臭长的代码,然后把代码Copy得到处都是。

上帝说:“要有函数!你们可以用函数把长长的代码封装起来,这样就写一次,就可以到处调用了。”

0?wx_fmt=png

人类又发现有些函数的参数太长, 记不住,调用层次深的时候让人抓狂:

0?wx_fmt=png

上帝告诉Dennis Ritchie:“找个数据结构把参数组织起来,以后就传递这个数据结构!”

0?wx_fmt=png

上帝教导人类:程序 = 数据结构+算法

人类看到清爽的代码,觉得很舒服。

3

第三天

有人写了一个程序,用一个数据结构和函数实现了一个简单的栈。

0?wx_fmt=png

上帝看到了,皱了皱眉头,说道:“这个数据结构对外完全是不设防啊,不但自己的算法push,pop,top等可以操作,使用这个Stack的客户也可以操作elements这样的内部数据结构,可以获取任意元素的值,而不仅仅是通过push,pop来操作。依照人类的本性,还不搞得天下大乱?  不好不好。”

上帝说:“要有Object!”

上帝把Alan Kay叫来,告诉他:要把数据和操作给结合起来,形成Objec,以后Object的属性数据不允许直接访问,只能通过这个Object的函数来操作。

0?wx_fmt=png

人类觉得Object大法好,创建了很多Object出来,让他们互相调用。

4

第四天

上帝发现很多Object的方法都是相同的,他们被重复地放在一个个对象当中,太浪费了。

0?wx_fmt=png

上帝说:“要有Class!把这些重复的方法代码从对象中剥离出来,放到一个公共的Class中! ”

人类问:“那我们怎么把这些Object给创建起来?并且让Object 和 Class关联?”

上帝说:“可以用new 这个关键字: Stack object1 = new Stack(); ”

0?wx_fmt=png

Stack类的函数定义只有一份,但是Stack类生成的Object有很多份。

人类在写push()函数,pop()函数的时候,要操作Object的数据, 到底操作的是哪一个Object?

上帝说:“ 要有this !”

每次调用函数的时候,可以把要操作的Object作为一个隐藏的参数传递进去。例如void push(int data),真正在调用的时候是这样的:void push(Stack this, int data)。

有个叫Guido的说:“我能不能把this改成 self ? ”

上帝说:“随你喽!”

还有人说:“这不又回到我们原始的状态去了吗?  void push(Stack *s,int data)”

上帝告诫说:“虽然本质相同,但是表达形式不同,之前你在语法层面必须传递一个Stack 对象到函数,现在在语法层面不用加了。我会在编译后的代码,或者运行时自动给你们加上。”

Guido说:“我还是喜欢把self加到方法上!”

上帝没有说话,应该是默认了。

5

第五天

人类创建了很多很多的Class,上帝发现有些Class包含了类似的功能,还是有重复代码。

上帝说:“要有继承!把那些类似的、重复代码放到父类当中去,这样子类就可以直接使用,不用重新再写一遍了。”

0?wx_fmt=png

上帝又说:“要有多态!就是对同一个接口,使用不同的实例而执行不同操作。”

Person p = new Employee();

p.funcB()  // 执行Employee类的funcB()方法,而不是Person类的funcB()方法

人类看到继承的好处,开始疯狂使用。

支持单继承和支持多继承的两派人还发起了多次战争。

上帝非常担心,他告诫人类:“继承其实是破坏了封装性,父类的很多细节对子类都是可见的,父类的变化可能会极大地影响子类。”

人类不知道怎么办。

“你们要记住一条: 优先使用组合而不是继承。” 看到人类并不太懂,上帝叫来了Freeman , 告诉他一个“鸭子游戏”的例子,后来Freeman把这个例子写到了一本书里,这本书叫做《Head First 设计模式》。

“还有一条,” 上帝补充到,“面向接口编程,而不是实现编程。”

人类还是不懂,上帝叫来了Eric Gamma ,告诉他在面向对象设计和编程中要注意的23种通用模式, 让他和另外三个人写了一本书《设计模式:可复用面向对象软件的基础》,但是大家都说看不懂。

5

第六天

人类使用了继承和多态,理解了设计模式,但是代码还是一团糟。

上帝说:“编程的关键是要抽象啊!你们得把系统需求抽象成高层的概念,然后在概念层次进行编程。”


这句话本身就很抽象。

有大牛学会了,写出了很多优秀的软件。

大部分人表示学不会。

上帝也没有办法, 只是有点后悔,教了人类太多的东西, 而人类又不能完全掌握。

上帝一直在思考,要不还是让人类回到机器语言编程时代?

或者创造一种智能的机器来替代人类编程?

7

第七天

上帝觉得累坏了,就休息了,程序员们也休息了一天。


这就是星期天的来历。

出场人物:

约翰·巴科斯 : 计算机科学先驱之一、FORTRAN之父、1977年图灵奖得主、BNF(巴克斯-诺尔范式)的发明者之一。

Dennis Ritchie: C语言之父,Unix的创造者之一。

Guido van Rossum:Python之父。

Eric Freeman:《Head First 设计模式》作者之一。

Eric Gamma:《设计模式》作者之一,主要作品:JUnit,Eclipse JDT,Jazz, Visual Studio Code。

(完)

你看到的只是冰山一角, 更多精彩文章,请移步《2016文章精华》或者《2017文章精华》


码农翻身

用故事讲述技术

0.jpeg

抽象代数学习笔记(抽象代数的历史、运算) 1. 抽象代数历史 对于五次及以上的代数方程是否存在根式解这个问题,欧拉、拉格朗日、高斯等数学家都没得到答案,但是他们得出五次及以上的代数方程组不存在根式解的结论。19世纪初,阿贝尔提出五次及以上的代数方程不存在根式解,并找出一类特殊的五次及以上的代数方程可以用根式解表示出来。另外一个年轻的数学家伽罗华... 阅读详情

相关推荐

SAP CEWB 高效批量调整工艺路线与BOM的实战指南

本文详细介绍了SAP CEWB工具在批量调整工艺路线与BOM中的高效应用。通过实战案例和操作指南,帮助制造业企业快速掌握批量修改技巧,显著提升工作效率,避免手工操作带来的错误和耗时。特别适合需要频繁更新工艺路线和BOM的企业用户。

weixin_42524708的博客 397

OOP圣经———面向对象的五个基本特性

(1)万物皆为对象将对象视为奇特的变量,特可以存储数据。除此之外,你还可以要求它在自身上执行操作,理论上讲,你可以抽取待求解问题的任何概念化构件,将其表示为程序中的对象。(2)程序是对象的集合,他们通过发送消息来告知彼此所要做的。想要请求对象,就必须对该对象发送一条消息。更具体地说,可以把消息想象为某个特定对象的方法的调用。(3)每个对象都有自己的由其他对象所构成的存储换句话说,可以通过创建包含现有

enjoy_azad的博客 893

微信抢红包神器自动抢软件

微信抢红包神器自动抢软件

weixin_44006731的博客 8080

面向对象圣经----Python

设计模式解析里提到了面向对象设计考虑的几个视角,一个是概念层(解决需求的实现方式, 定义抽象类),一个是规约层(描述对象的行为, 定义接口),一个是实现层(实现对象的行为)。实际上我们大多数初级编程人员的眼睛一直是盯着实现层的,而这正是面向对象设计所极力避免的,即你不要在一开始就关注这些细节,你要关注的是规约(接口)。从概念层开始编程叫概念层次编程,其定义了需求的行为和实现方式;从规约层编程开始叫做面向接口编程,其描述了对象的行为。 第一天 上帝看到人类发明了计算机,但一直在用...

Be_Nice的博客 326

新手必看:瑞萨MCU选型时,QFP、QFN、BGA这些封装到底该怎么选?(附选型避坑指南)

本文详细解析了瑞萨MCU选型中QFP、QFN、BGA等封装的特点与适用场景,提供实战避坑指南。通过对比封装的空间占用、散热能力、焊接难度等核心维度,帮助工程师根据具体需求选择最合适的芯片封装,避免因选型不当导致的高成本与生产问题。

weixin_26965807的博客 421

【某音电商】protobuf聊天协议逆向

某音电商私信、聊天消息protobuf协议逆向分析与解析

吴秋霖的博客 2315

Java行业的圣经 -- 四本最重要的个人藏书,他们的书名都不含Java

作者   Thomas   E.   Davis         摘要     Thomas   Davis   推荐了四本书,它们可以让你在java开发中受益非浅。这些书扩展了Java的基本语法和语义,使你能更全面地理解面向对象的程序设计。         正文       《Design   patterns》         《Refactoring:   Improving   the

小刚的专栏 1350

基于Python的雪球网投资组合数据爬取与分析实战:从入门到精通

在当今数字化投资时代,数据已成为投资者最重要的资产之一。雪球网作为中国领先的投资社交平台,汇聚了大量优质的投资组合数据,这些数据对于量化投资研究和个人投资决策具有重要价值。本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的雪球网投资组合爬虫,并深入分析获取的数据。投资组合持仓明细及变动历史投资收益率曲线与风险指标投资者操作策略与调仓频率热门行业与个股关注度。

2201_76125261的博客 920

上帝和面向对象的七天

上帝用7天创造了“面向对象” |【Python之父客串】http://bbs.fishc.com/thread-102596-1-1.html(出处: 鱼C论坛) 第一天: 计算机的诞生使得人类使用汇编语言进行编程,上帝说这个太复杂了,于是将编译的秘密告诉约翰.巴克斯.于是巴克斯创造了第一个高级编程语言Fortran并且获得图灵奖,Fortran的但是使得“人类开始使用高级语言编程,然后编译成

luolang_103的博客 319

Midscene.js(2):代码集成 + 桥接模式(Bridge Mode)的使用「喂饭教程」

本文将手把手教你从零开始搭建一个 Node.js 项目,集成 Midscene.js,并利用其桥接模式实现对 Chrome 浏览器的自动化操作。我们将通过具体的实例,来展示 Midscene.js 的便捷性与 AI 能力的结合。

blues_C的博客 1844

GEE生物量碳储量——利用sens和MK检验方法计算1987-2022年森林地上生物量AGB和碳储量的时空变化特征

本文是将之前已经处理好的森林生物量和碳储量数据保存到GEE Assets中,然后分别将单张影像导入到代码编辑器中,构建一个时间序列集合,并且这里需要用到的是我们给影像添加指定的时间属性,这样方便进行下一步的时序分析和空间预测。首先,需要收集1987年至2022年期间森林地上生物量AGB和碳储量数据。该数据可以通过森林清查数据、卫星遥感数据等途径获取。然后,根据这些数据,可以使用sens(敏感性分析)和MK(Mann-Kendall)方法计算时空变化特征。

此星光明博客 1264

Atitit object 和class的理解 目录 1.1. 发现很多Object的方法都是相同的,他们被重复地放在一个个对象当中,太浪费了。 1 1.2. 那我们怎么把这些Object给创建起来

Atitit object 和class的理解 目录 1.1. 发现很多Object的方法都是相同的,他们被重复地放在一个个对象当中,太浪费了。 1 1.2. 那我们怎么把这些Object给创建起来?并且让Object 和 Class关联?” 2 1.3. 要操作Object的数据, 到底操作的是哪一个Object?:“要有this!” 4 1.4. 要有继承防止Class包含了...

attilax的专栏 372

【项目实战】YOLOV5 +实时吸烟目标检测+手把手教学+开源全部

本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~ 文章目录本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~一、项目展示二、项目资源共享1:训练图片:香烟图片+吸烟手势+烟雾三、

cv君的博客 13万+

研读Rust圣经解析——Rust learn-14(面向对象)

继承(Inheritance)是一个很多编程语言都提供的机制,一个对象可以定义为继承另一个对象定义中的元素,这使其可以获得父对象的数据和行为,而无需重新定义。面向对象讲究封装,调用者无需知道如果实现,只需要知道如何使用即可,Rust的包管理、模块管理、pub关键字、函数fn,trait这些符合封装的思想。多态是面向对象的一个重要特征,指同一类事物同时具有多种形态,即同一类事物,在不同时刻,代表的对象不一样,指的是对象的多种形态。从这里看,Rust不是面向对象的,因为Rust没有继承只有实现(trait)

qq_51553982的博客 1078

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【万字硬核】别只懂面向对象!结构化技术:拯救软件危机的“上古神器”与期末通关圣经

结构化技术诞生于半个多世纪前,但它所倡导的理性、秩序与工程精神,早已融入软件开发的基因。当我们谈论微服务、云原生、AI编程时,不应忘记那些在纸上手绘DFD、在白板前争论模块划分的先驱。软件开发不仅是编写代码的艺术,更是管理复杂性的科学。无论你是为了通过考试,还是为了成为卓越工程师,请珍视这份遗产。它或许不再是舞台中央的主角,但永远是支撑大厦的地基。当你面对一团乱麻的需求感到迷茫时,不妨回到原点:拿起笔,画一个圈,拉一条线,问自己——“数据从哪里来?到哪里去?谁在处理它?

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 152

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

设计模式:可复用面向对象软件的基础 pdf电子书分享

计算机领域的经典图书《设计模式:可复用面向对象软件的基础》电子版分享

rz_wlz的专栏 2126

豆瓣9.6分,Scala编程圣经第5版隆重来袭

要说Scala编程界的圣经,那必须是这本蜚声世界的、由Scala 语言缔造者Martin Odersky编写的—— 《Scala编程》 Programming in Scala 本书全面涵盖了整个编程语言、重要类库及其背后理念,全面且强大,是Scala领域当之无愧的王者之作! 本书上市14年来,紧跟语言版本持续迭代,不断以豆瓣评分8.9、9.2、9.4的成绩刷新着领域的天花板! 其中第三版的中文版更是以9.6高分傲视群雄。 第四版的中文版也收到不少读者的好评! 如今,这部长青经典之作又迎来了一次重大

博文视点(北京)官方博客 3万+

面向对象的合理解释

到底什么是面向对象,今天似乎有了一个合理解释。 这么说吧,一个女孩, 二十有五,待嫁闺中。 现在需要找对象。 那么,见别人面的第一印象,基本上就是面向对象了,高不高帅不帅。 为了安全起见,如果能见见对方的家长,是更安全的,因为很多特性是继承的。对方的父母就是基类,我们要找的对象当然就是子类。继承和派生。 至于虚函数和抽象,那就是第一条件,肯定得是个男人。 有房有

郝玉杰的专栏 915

OO真经——关于面向对象的哲学体系及科学体系的探讨

2010-08-03 作者:张洋 来源:张洋的blog   目录 Catelog        目录 Catelog        序言 Perface        真经第一章:世界 Waltanschauung        真经第二章:抽象 Abstraction        真经第三章:层次 Arrangement

xiunai78的专栏 4204

python圣经是哪本_我的圣经:17年前的那本《Python 2.1 宝典》

办公室里有一个小小的书橱,摆放着我平时经常翻看的图书。但有一本书,一直放在那里,很多年都没有动过,书名叫做《Python 2.1 宝典》,译自美国计算机Bible丛书《Python 2.1 Bible》。今天是圣诞节,在这个特殊的日子里谈论《Python 2.1 Bible》,纯粹是巧合。Bible,直译为圣经,但这本《Python 2.1 Bible》的中文名字译作《Python 2.1 宝典》...

weixin_35740588的博客 604

我的圣经:17年前的那本《Python 2.1 宝典》

办公室里有一个小小的书橱,摆放着我平时经常翻看的图书。但有一本书例外,一直放在那里,很多年都没有动过,书名叫做《Python 2.1 宝典》,译自美国计算机Bible丛书《Python 2.1 Bible》。今天是圣诞节。在这个特殊的日子里谈论《Python 2.1 Bible》,纯粹是巧合。Bible,直译为圣经,但这本《Python 2.1 Bible》的中文名字译作《Python 2.1 宝典》,我觉得倒是更贴切一点。

Python作业辅导员 - 天元浪子 1万+

Java行业的圣经-四本最重要的个人藏书

 Java行业的圣经-四本最重要的个人藏书 作者 Thomas E. Davis 译者 msklsf@263.net Java行业的圣经 四本最重要的个人藏书,他们的书名都不含Java 摘要 Thomas Davis 推荐了四本书,它们可以让你在java开发中受益非浅。这些书扩展了Java的基本语法和语义,使你能更全面地理解面向对象的程序设计。 正文 《Design patterns》

§为艺术而技术§ 1574

javascript“圣经"

编程世界里只存在两种基本元素,一个是数据,一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。 数据天生就是文静的,总想保持自己固有的本色;而代码却天生活泼,总想改变这个世界。 你看,数据代码间的关系与物质能量间的关系有着惊人的相似。数据也是有惯性的,如果没有代码来施加外力,她总保持自己原来的状态。而代码就象能量,他存在的唯一目的,就是要努力改变数据原来的状态。

zhangtai8891的专栏 976

Java行业的圣经

    Java行业的圣经 四本最重要的个人藏书,他们的书名都不含Java作者 Thomas E. Davis译者 msklsf@263.net摘要Thomas Davis 推荐了四本书,它们可以让你在java开发中受益非浅。这些书扩展了Java的基本语法和语义,使你能更全面地理解面向对象的程序设计。正文《Design patterns》《Refactoring: Improving the De

702

面试之Java圣经1

第一部分Java之面向对象 前言 我又回来了,哈哈哈哈哈哈哈,这次裸辞准备春招,冲冲冲。整理一下学习到的知识。 Java是一门面向对象语言,它具备了C++的各种优点,同时放弃了多继承和指针。因此功能很强大。废话不多话上干货。所有今天聊聊Java面向对象的特征。 一、封装是什么? 封装就是类的实现细节进行隐藏,对外只提供接口,控制程序中读和修改的权限。好处就是隐藏了类的实现细节,让调用者只能通过规定的方式区调用,让操作规范化。同时还可以通过访问控制符来限制访问的权限。 ...

the_kingyang的博客 526
上一篇: 小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?
下一篇: 什么是DevOps
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值