课时1:面向对象简介

简介: Java的面向对象编程(OOP)是其核心特性之一,强调模块化设计与重用。OOP具有三大特征:封装性、继承性和多态性。封装确保内部操作对外不可见;继承允许在已有类基础上扩展功能;多态支持类型转换和灵活处理。OOP设计流程包括分析(OOA)、设计(OOD)和编程(OOP),帮助开发者构建复杂而高效的程序。理解OOP的关键在于将其与生活中的合理场景类比,使抽象概念更易掌握。

课时1:面向对象简介


摘要:我们来了解一下最为重要的概念——Java的面向对象编程。Java语言最大的特点在于面向对象的编程设计。并且,面向对象的编程设计也随着Java自身的发展而不断发展。

1. Java的面向对象编程概念

2. 面向对象三个主要特征

 

01. Java的面向对象编程概念

 

同时,很多最初不支持面向对象编程的编程语言,也都开始向其转变。当然,要知道并非所有人都认为面向对象编程是完善的。不过,依然有许多开发者认为面向过程编程或者函数式编程更好。对于函数式编程,大家暂时不用过于急切,因为后续在Java中会涉及函数式编程的相关概念,在Scala中也会接触到相关内容。


从整体的设计角度而言,面向对象编程绝非凭空出现的。从整个行业趋势来讲,面向对象编程的支持是更为合理的。但凡事无绝对,至少70%-80%的开发者认同面向对象编程。

说到面向对象编程,就不得不提及传统的程序开发。我们知道,从最早一直流行至今的编程语言有C、C++以及Java。其中,C语言已成为面向过程开发的代表。而C++ 以及Java都是面向对象的编程语言。


大家要清楚C与C++出现的先后顺序,是先有C,再有C++,然后由C++ 衍生出了Java。实际上,C++ 在从C演变的过程中,受到了IBM的Smalltalk语言的启发,所以C++ 相较于C而言是较新的一种编程形式。


所谓面向过程,指的是面对一个问题的解决方案。例如,假设郭仁义同学是一位心灵手巧之人,有一天要给林强做个玩具,比如做一个会活动的小人。倘若有一天林强拿出去玩,不小心摔倒了,把玩具小人的胳膊摔断了,腿也摔折了,那这个玩具的胳膊若是摔坏了,到外面去配胳膊是配不到的,只能重新做一个胳膊,而且新做的胳膊有可能材质不一样。比如原本玩具是用紫檀木做的,结果发现紫檀木没了,只能找黄花梨木来做,材质就不一样了。


所以,相较于面向过程而言,面向过程更多是面对一个问题的解决方案,在多数情况下,不会进行重用的设计思考。


而面向对象主要的设计形式是模块化设计。举例来说,今天骑自行车出去,出去之后发现车链子坏了,是能在外面配到一条车链子,把车修好后继续骑行的。再假设,郭仁义和林强出去,假如车胎扎了,也能去换一个车胎


所以,面向对象的主要操作是模块化设计,并且能够进行重用配置,这就是面向对象的主要特征。

在整个面向对象的设计当中,更多时候考虑的是标准,这一点在汽车生产方面体现得尤为明显。汽车是由几万个零件组合而成的,不同的工厂生产不同的零件。


比如在日本有一家公司生产螺母,其螺母质量特别好,全世界都在采购。如果产品想要使用这种螺母,就需要告知其规格,对方根据这个规格生产出符合要求的螺母,就能正常使用了。就像苹果手机,后盖需要用一种特殊的螺丝刀才能打开,它也是有规格标准的,只要符合这个规格标准,就能用相应的螺丝刀打开。


所以,面向对象考虑的是基于标准的模块化设计,在使用时根据标准进行拼装,这就是面向对象设计的核心本质。

 

02. 面向对象三个主要特征

 

面向对象具有三个主要特征,分别为封装性、继承性以及多态性。


首先来看封装性,其最简概念在于内部的操作对外不可见。所谓安全,便是当内部操作皆不可被直接知晓、使用时,方能实现。这就如同家中设有保险箱,若王建告知安和敏自家保险箱密码是123,还声称十分安全,那安和敏或许便会在半夜设法前去打开,二者道理相通。


再谈谈继承性,这一概念相对更易理解。例如,假设林强拥有300亿资产,在其离世前,将这笔资产留给了郭仁义。那么,郭仁义便可基于这300亿资产,进一步构建自己的资金体系。当然,郭仁义也有可能在短时间内将这笔资产挥霍一空,比如其决定整日肆意花钱,或许不出一个月,便将这300亿资产耗费殆尽。所以,继承指的是在已有类或已有结构的基础上,持续进行功能的扩充。


事实上,在当下诸多设计中均会体现这一特性。以手机为例,手机极具代表性。如今人们不难发现,无论手机如何演变,其始终离不开通话功能。手机最初是基于通话功能构建的,而后又在通话功能的基础上增添了短信功能,这两项功能构成了手机的基础。


不过,最初的手机并无如今这般复杂的操作系统,相对较为简易、安全,而当下手机的操作系统虽存在被监听的情况,但归根结底,仍需通讯功能作为支撑。由此可见,其原本的设计是较为完善的,只是在后续开发过程中不断融入了新功能罢了。


再看计步器,起初它仅具备记录行走步数的功能,后来在此基础上,人们觉得功能不够丰富,便又增添了心率监测等功能,这便是在已有基础上持续开发拓展,体现了继承性这一特性。


接下来谈谈多态性,多态性是在继承性基础上拓展而来的概念,主要涉及类型的转换处理。例如,以某人举例,其原本为男性,后通过变性手术转变为女性,待至40岁时,又因个人意愿通过手术变回男性。


假设有一场所规定仅限男性和女性进入,那么经历过变性的这类人群按此规定便不符合进入条件。再假设某场所限定仅人类可进入,若携带宠物前往,自然也不符合准入要求。由此可知,多态性体现的是在一定范围内允许进行变化的一种处理形式。


上述内容便是面向对象的三个主要特征。当然,这三个特征还需我们逐步深入领会并消化,毕竟在实际应用中,继承与多态往往是相互结合来综合考量的问题。


在进行面向对象程序开发时,通常包含三个步骤。其一为OOA,即面向对象的分析;其二是OOD,指面向对象设计;其三为OOP,意为面向对象的编程。


image.png

正常来讲,应当先对所有相关内容进行分析,接着开展设计工作,而后再进行程序开发。不过,当下我们可先通过编程去了解面向对象能实现哪些功能,以及面向对象的核心语法结构是怎样的,之后再由程序回溯至分析环节,按照这样的形式推进。


当然,最终还是要逐步深入理解面向对象分析,实际上,面向对象分析很难做到量化。总而言之,有一条最为简单的设计原则,那就是生活中合理的场景,在程序中一般也说得通。需明确,不要认为程序代码是抽象之物,实际上它与我们生活中的操作及思考流程是一致的。


就好比日常生活中要吃饭,人们并非只关注吃饭这一行为本身,实际上还涵盖移动至餐桌、拿餐具进食、用餐完毕后收拾擦拭等一系列环节。所以要记住,以生活中的方式去进行程序分析,是最为快捷的学习途径。

相关文章
|
API 开发者
微信native支付对接案例详解
本文详细介绍了微信Native支付的对接流程,包括效果展示、产品介绍、接入前准备、开发指引、API列表、支付通知等,并强调了只有通过微信认证的服务号才能对接微信支付。每年需支付300元认证费用。
580 3
|
人工智能 自然语言处理 搜索推荐
【潜意识Java】了解并详细分析Java与AIGC的结合应用和使用方式
本文介绍了如何将Java与AIGC(人工智能生成内容)技术结合,实现智能文本生成。
1308 5
|
Web App开发 移动开发 安全
h5页面的优缺点(浅谈)
H5页面优点包括:跨平台性,易于传播,丰富的多媒体支持,开发成本低,更新便捷,良好的交互性。缺点则有:性能受限,功能受限,高度依赖网络,存在安全风险,用户体验一致性差。确保H5页面在不同设备上的兼容性,需遵循HTML5标准,使用响应式设计,并进行多设备测试。优化H5页面性能的方法包括减少HTTP请求,压缩文件大小,利用缓存机制,优化代码执行效率等。
|
NoSQL Redis
Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝无法连接解决方案
Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝无法连接解决方案
Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝无法连接解决方案
|
iOS开发
如何识别手机是否有灵动岛(dynamic island)
如何识别手机是否有灵动岛(dynamic island)
985 0
|
存储 算法 测试技术
面向对象测试和传统测试的区别
面向对象测试和传统测试的区别
473 10
|
监控 关系型数据库 MySQL
一次彻底讲清如何处理mysql 的死锁问题
【10月更文挑战第16天】本文详细介绍了如何处理 MySQL 中的死锁问题,涵盖死锁的概念、原因、检测方法及解决策略,强调通过优化事务设计、调整数据库参数、手动处理和预防措施等手段,有效减少死锁,提升数据库性能与稳定性。
2578 0
|
Web App开发 缓存 前端开发
【专栏】探索前端技术WebAssembly和Progressive Web Apps(PWA)如何塑造前端开发的未来
【4月更文挑战第27天】本文探讨了WebAssembly和Progressive Web Apps(PWA)如何塑造前端开发的未来。WebAssembly是一种低级字节码格式,允许在浏览器中运行接近原生性能的代码,解决JavaScript在高性能计算上的局限。PWA则通过Service Workers等技术提升网站的离线使用和性能,提供类似原生应用的体验。这两项技术的崛起将使前端开发更高效、多样化,并推动Web应用向更离线化和本地化发展。随着5G和物联网的发展,前端技术将在边缘计算和智能设备中发挥更大作用。开发者需持续学习适应新技术,以应对这个快速变化的领域。
496 4
|
存储 缓存 前端开发
【Flutter前端技术开发专栏】Flutter中的图片加载与缓存优化
【4月更文挑战第30天】本文探讨了 Flutter 中如何优化图片加载与缓存,以提升移动应用性能。通过使用图片占位符、压缩裁剪、缓存策略(如`cached_network_image`插件)以及异步加载和预加载图片,可以显著加快加载速度。此外,利用`FadeInImage`、`FutureBuilder`和图片库等工具,能进一步改善用户体验。优化图片处理是提升Flutter应用效率的关键,本文为开发者提供了实用指导。
1393 0
【Flutter前端技术开发专栏】Flutter中的图片加载与缓存优化
|
算法 芯片
DNA测序原理:illumina和Pacbio对比介绍
DNA测序原理:illumina和Pacbio对比介绍