首页 文章 精选 留言 我的

精选列表

搜索[解释器],共10023篇文章
优秀的个人博客,低调大师

漫话:如何给女朋友解释什么是面向对象编程?

周末午后,我正在愉快的打着王者荣耀,五杀在即之际。女朋友拿着一本我看过的《面向对象编程》过来找我。 什么是面向对象?是要面向我写代码吗? 不是啦,这个面向对象的对象不是你这个对象啦。 此时,我突然感受到了一股莫名的杀气。 什么?你还有其他对象吗?有我好看吗?有我瘦吗?不对。你不能有其他对象。 什么是面向对象? 面向对象,英文名字叫Object Oriented,是一种软件开发方法。是和面向过程相对应的。 别给我拽英文。给我详细说说,说不明白今天就没完。 我有点饿了,要不然你给我做点饭,我慢慢的详细给你讲吧。 我现在就想听你给我讲,咱们直接点外卖吧,别自己动手做饭了。 其实,对于吃饭这件事儿,就可以分为面向过程吃饭和面向对象吃饭。自己亲自下厨就是面向过程,点外卖就是面向对象。 在面向过程的吃饭中,我们想要填饱肚子,需要自己亲自下厨把这顿饭做出来,那么,我们就需要先想好吃什么、然后去买菜、洗菜、洗米、蒸饭、炒菜等等一系列的事情。 pubicvoid做饭(){ 制定菜单(); 买菜(); 洗菜(); 洗米(); 蒸饭(); 炒菜(); } 那么,你说和点外卖相比,自己做饭有哪些缺点啊? 那还用说,麻烦呗。 的确,面向过程编程也一样,由于想要完成做饭这件事,需要自己定义很多个方法。除此之外,还有很多遇到很多其他问题,比如: 我不想吃米饭,我想吃馒头。 上次买的菜家里面还有,不需要去买菜。 中午吃剩下的菜家里面还有,直接热一热就可以吃了。 这次去的一家超市提供洗菜服务,不需要我们自己洗菜了。 以上这些突发事件,在编程中就叫做需求变更或者新的需求,这种事情发生是必然会发生的。 那么,有新的需求了怎么办,上面这种自己动手做饭的场景,就只能重新拼凑咯。 对于程序员来说,就需要通读代码,找出可以复用的方法,然后重新调用,不能复用的就重新写一个。时间久了,方法就会越来越多,系统维护越来越复杂。 面向对象,其实就是我们通过点外卖的方式来“做饭”。我们知道我们需要一顿饭,我们只需要打开外卖软件,在里面选择我们需要的菜品然后下单就可以了。我们不关心饭店做饭的过程。想吃什么点什么,家里来人了就再下一个订单,不想吃米饭了,想吃馒头了,也可以给饭店打电话,让他们把米饭换成馒头。 外卖软件.点餐(红烧肉,糖醋鱼,可乐一瓶).送达时间(一小时后).备注(可乐加冰) 所以,通过面向对象的方式“做饭”,就像上面的代码一样。 哦,我明白了,面向对象就是把本来可能需要自己做的事情交给别人来做?对于我来说,外卖软件就是个对象,我再面向他“做饭”,其实是他帮我做的。 额、你说的也对,也不对。在这个场景中,确实可以把外卖软件当做是「对象」。其实,在面向对象编程中,抛弃了函数,想要实现一个功能不再是通过函数的叠加调用实现的了。而是通过对象。 对象就是对事物的一种抽象描述。现实世界中的事物,都可以用「数据」和「能力」来描述。 比如我要描述一个人,「数据」就是他的年龄、性别、身高体重,「能力」就是他能做什么工作,承担什么样的责任。 描述一个外卖软件,「数据」就是他包含的菜品,而「能力」就是他可以点菜。 什么是封装? 我们把「数据」和「能力」组合成一个对象的过程就叫做「封装」。 封装的结果就是可以有一个类,通过这个类我们可以获得一个对象。然后我们就可以通过给这个对象下命令,让他执行自己的「能力」。 除了把「数据」和「能力」封装成一个「对象」更加方便使用以外,还有啥其他的特点么? 封装只是面向对象的第一步,目的是把现实世界的东西抽象成对象。面向对象真正有威力的地方是「继承」和「多态」。 举一个不是很恰当,但是女朋友比较容易理解的例子。 我们使用外卖软件点餐,当我们第二次去某一家店时,外卖软件会提示你上一次你在这家点了什么,你可以点击<再来一单>把上次的菜品直接加到购物车中,这就是「继承」。而在购物车中的物品你可以直接付款下单,也可以把增删和修改菜品。这就是「多态」。 什么是继承? 在面向对象编程中,当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类「继承」这个父类。继承后子类自动拥有了父类的部分属性和方法。 通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 比如: 狗{ 吠(); } 牧羊犬继承狗{ 放羊(); } 上面的例子中,狗类是父类,牧羊犬类是子类。牧羊犬类通过继承获得狗类的吠()的能力,同时增加了自己独有的放羊()的能力。转换成Java代码如下: publicclassDog{ publicvoidbark(){ System.out.print("旺旺旺"); } } publicclassHerdingDogextendsDog{ publicvoidherd(){ System.out.print("放羊中...."); } } publicclassMain(){ HerdingDogdog=newHerdingDog(); dog.bark(); dog.herd(); } 什么是多态? 同一操作,作用于不同的对象,可以产生不同的结果,这就是「多态」。通常说的多态都是指运行期的多态,也叫动态绑定。 要实现多态,需要满足三个条件: 有类继承或接口实现、子类重写父类的方法、父类引用指向子类的对象。比如: 犬科动物{ 吠(); } 狗继承犬科动物{ 吠(){旺旺旺} } 狼继承犬科动物{ 吠(){嗷嗷嗷} } 狗和狼都是犬科动物,拉来一直犬科动物,如果它你叫的话,你可能没办法直接分辨出他到底是狼还是狗。只要他真正的叫出来的时候,你才知道。这就是运行时多态。转化成Java代码如下: publicclassCanidae{ publicvoidbark(); } publicclassDogextendsCanidae{ publicvoidbark(){ System.out.print("旺旺旺...."); } } publicclassWolfextendsCanidae{ publicvoidbark(){ System.out.print("嗷嗷嗷...."); } } publicclassMain(){ Canidaecanidae=newDog(); canidae.bark(); Canidaecanidae1=newWolf(); canidae1.bark(); } 这样,就实现了多态,同样是Canidae的实例,canidae.bark调用的就是Dog类的方法,而canidae1.bark();调用的却是Wolf的方法。 有人说,你自己定义的对象,定义的时候不就知道canidae到底是什么类的对象了么,这个其实并不决定的,很多时候我们可能不知道,原因是,对象可能并不是我们自己new出来的,比如Spring的IOC。 奥,那我终于知道什么是面向对象编程了。 嗯,对了,外卖点好了么? 呃.... (全文完) 欢迎工作一到五年的Java工程师朋友们加入Java架构开发:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

优秀的个人博客,低调大师

Ubuntu 创始人解释为什么决定放弃 Unity

Ubuntu 的创始人Mark Shuttleworth分享了更多关于 Ubuntu 为什么选择放弃 Unity 的细节。上周发布的 Ubuntu17.10 是自 2011 年推出以来,首次没有使用 Unity 桌面的 Ubuntu。 创始人 Mark Shuttleworth表示已和 Canonical 公司的其他“领导者”达成了共识,认为他们应该让公司成为上市公司。所以为了吸引潜在的投资者,该公司不得不专注于其盈利领域 —— 但是 Unity、Ubuntu 手机、Unity8 和一体化都不能盈利。缺乏盈利能力可能意味着 Unity 的死亡,但更广泛的 Ubuntu 项目则是十分健康的。 Mark Shuttleworth 表示他最骄傲的一件事就是过去七年中,Ubuntu 已经变得完全可持续。即便明天他被汽车撞了,Ubuntu 项目也能继续发展下去。他还说到,这是不是有点神奇?这样一个世界级的企业平台,完全免费提供,但它却是可持续的。 此外,Mark Shuttleworth 表示 Canonical 公司将会集中在云以及物联网领域发展。 失去 Unity 可能是对桌面用户的一大打击,但它有助于平衡公司的其他部分。 原文发布时间:2017-10-26 本文来自云栖社区合作伙伴“ Debian社区”,了解相关信息可以关注“ Debian社区”。

优秀的个人博客,低调大师

微软解释机器学习如何改进 Windows 10 更新体验

微软在 2018年 4月Windows更新时第一次大规模使用机器学习(ML),ML 通过监测PC运行状况的六个核心领域(例如总体可靠性),以确定功能更新过程是否顺利进行。而在 2019 年 5 月发布的更新推送中,这是微软使用 ML 的第三次迭代,可评估的领域增加到了 35 个,微软计划在未来的更新中进一步扩大覆盖范围。 微软表示,使用 ML 来部署更新拥有更好的更新体验,例如下图,通过 ML 更新后系统启动的卸载数量不到一半、内核崩溃的数量减少一半,以及更新后的驱动程序问题的数量减少了五倍。 微软是如何设计和构建支持 Windows 10 更新的机器学习模型 最近,微软发布博文介绍了这一技术信息。微软使用的是一个经过动态训练的模型,它通过在最新更新的 PC机上训练,有区分好的和坏的更新体验的能力。下图是一个详尽的机器学习图,展示了机器学习算法的整体框架。 每个 Windows 10 更新版本都先推给早期使用者(比如 Windows 内部人员和主动寻求更新的人)。有了这些体验者,微软开发人员就可以通过诊断数据(例如内核模式崩溃、异常关闭和驱动程序问题)来监控他们的更新体验。 机器学习在其中提供了两个关键功能: 它确定了一些有安全隐患的问题,从而可以及时采取措施保护尚未更新的 PC,以便 Windows 开发人员能够及时调查和解决这些问题 它预测和发现那些可以顺利进行更新的PC,从而提供更新 每天都重复这样一个过程,使模型不断地从最近更新的 PC 机中获得学习。然后随着时间的推移和不断解决问题,相比之下,过去那些更新了的 PC就又有了缺陷,而现在学习到的更好的经验就会重新对他们进行更新。 微软使用Azure Databricks构建 ML 模型,评估那些准备升级的 PC(准备数据,创建单个模型,并计算出分数): 微软表示,ML 驱动的推出过程中,一个关键因素就是具有能够及早发现兼容性问题的能力,使他们能够建立保护措施,以保护其他的PC不进行本次的更新。而以往来说,兼容性问题是通过实验室艰苦测试、反馈和其他渠道检测到的。虽然这些手段仍在使用,但在微软复杂的生态系统中,将 ML 应用到PC 的诊断数据,将使微软能够更快识别与任何更新相关的兼容性信息,如硬件特性、驱动程序、应用程序等方面。 为了发现兼容性问题,他们使用异常检测,以发现某些特征或模式在什么时候导致的故障率会比整体的预期高。通过使用 Azure Databricks,就可以快速扩展到数百万台 PC,并建立保护措施,以防止 PC 被更新相关的潜在问题干扰。下图显示了某个功能或模式的失败率为 82%,而基准失败率约为 3%。从而确定需要保护的位置,以防止其他 PC 遇到类似问题: 微软表示,目前的机器学习方案还不够完善,接下来会进一步发展 ML,以确保 ML 是全面的、更自动化的和灵活的,能够在几秒钟内而不是几个小时内解决问题。 参考:https://www.ithome.com/0/447/862.htm

优秀的个人博客,低调大师

云栖大会之前 阿里云解释企业云安全架构逻辑

安全性是所有云计算平台都绕不开户的核心,一个基础常识是,所有客户考虑是否上云的第一点因素,就是云的安全性,也正是这一点,促使云服务商们大力关注自身安全性,不论是亚马逊还是阿里。 9月28日,阿里云在云栖大会之前,发布首个企业云安全架构,以及《2017阿里云安全白皮书》(简称白皮书)。 阿里云安全事业部总经理肖力于现场表示,大量企业将业务部署在云端,但是国内90%的企业都没有自身的安全团队,安全水平不及格。仅有2%的公司会在安全上有较大投入。 IDC中国企业研究部高级分析师赵明宇也强调了云上安全的重要性,他对雷锋网表示,IDC研究结果显示,2016年全年,全球范围内,因安全事故造成超过一千亿美元的直接经济损失;国内也有超过一百亿美元的损失。“今天,因为IT安全事故所带来的资产流失与业务流失是非常严重的。” 那么未来云的趋势会是什么样子的? 据

优秀的个人博客,低调大师

Ubuntu 创始人解释为什么 Ubuntu 决定放弃 Unity

Ubuntu 的创始人 Mark Shuttleworth 分享了更多关于 Ubuntu 为什么选择放弃 Unity 的细节。 上周发布的 Ubuntu 17.10 是自2011年推出以来,首次没有使用 Unity 桌面的 Ubuntu。 创始人 Mark Shuttleworth 表示已和 Canonical 公司的其他“领导者”达成了共识,认为他们应该让公司成为上市公司。所以为了吸引潜在的投资者,该公司不得不专注于其盈利领域 —— 但是 Unity、Ubuntu手机、Unity 8 和一体化都不能盈利。缺乏盈利能力可能意味着 Unity 的死亡,但更广泛的 Ubuntu 项目则是十分健康的。 Mark Shuttleworth 表示他最骄傲的一件事就是过去七年中,Ubuntu 已经变得完全可持续。即便明天他被汽车撞了,Ubuntu 项目也能继续发展下去。他还说到,这是不是有点神奇?这样一个世界级的企业平台,完全免费提供,但它却是可持续的。 此外,Mark Shuttleworth 表示 Canonical 公司将会集中在云以及物联网领域发展。 失去 Unity 可能是对桌面用户的一大打击,但它有助于平衡公司的其他部分。 原文发布时间为:2017-10-26 本文作者:佚名 本文来自云栖社区合作伙伴“51CTO”,了解相关信息可以关注。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册