理解Java面向对象编程设计
1 前言
计算机革命的起源来自机器。编程语言就像是那台机器。它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分。语言的灵感来自其他形式的表达,如写作,绘画,雕塑,动画和电影制作。编程语言就是创建应用程序的思想结构。
面向对象编程(Object-Oriented Programming OOP)是一种编程思维方式和编码架构。
2 结构化程序设计
结构化程序设计主要强调的是程序的易读性。在该程序设计思想的指导下,编程基本是通过写不同目的的函数/过程来实现,故又称为“面向过程编程(Procedure Oriented Programming,POP)。面向过程开发方式是对计算机底层结构的一层抽象,它把程序的内容分为数据和操纵数据的操纵两个部分。这种编程方式的核心问题是数据结构和算法的开发和优化。
它解决了早期程序设计中大量用共享变量(全局变量)和GOTO语句,从而引发的结构混乱,不易改错和复用的问题。
3 面向对象编程设计
面向对象的思想主要是基于抽象数据类型(Abstract Data Type, ADT),在结构化编程过程中,人们发现把某种数据结构和专用于操纵它的各种操作以某种模块化方式绑定到一起会非常方便,做到“特定数据对应特定处理方法”,使用这种方式进行编程时数据结构的接口是固定的。如果对抽象数据类型进一步抽象,就会发现把这种数据类型的实例当作一个具体的东西、事物、对象,就可以引发人们对编程过程中怎样看待所处理的问题的一次大的改变。
面向对象程序设计的主要精神是将存在于日常生活中的对象(Object)概念应用在软件设计的发展模式(Software Development Model)中,着重于对象的分解与相互作用,重点是强调程序代码的可读性(Readability)、可重复使用性(Reusability)与扩展性(Extension),让程序设计人员在设计程序时能以一种更生活化、可读性更高的设计思路来进行程序的开发和设计。
4 码农洞见
面向对象编程和面向过程编程是现在主流的两种编程模式,它们既有区别也有。
4.1 两种编程范式之间的区别
在面向对象编程出现以前,面向过程颇受程序人员的青睐,因为面向过程编程采用的是“自上而下,步步求精”的编程思想,人们更易于理解这种思想。将程序一步一步的分解,并按照一定的顺序执行。这就是面向过程程序设计,以过程为中心,以算法为驱动。
程序 = 算法 + 数据结构
但是面向过程程序设计的不足之处在于,面向过程的程序上一步和下一步环环相扣,如果需求发生变化那么代码的改动会很大,这样很不利于软件的后期维护和扩展。
而面向对象程序设计的出现就可以很好的解决了这一问题,它的设计思想是“万物皆对象”。
程序 = 对象 + 消息传递
但是“任何事物都有两面性”,面向对象程序设计有其优点,但也带来了“副作用”——执行效率要低于面向过程程序设计。所以进行科学计算和要求高效率的程序中,面向过程设计要好于面向对象设计。而且面向对象程序的复杂度要高于面向过程的程序,如果程序比较小,面向过程要比面向对象更加清晰。
4.2 两种编程范式之间的联系
面向对象是在面向过程的基础上发展而来的,只是添加了它独有的一些特性。面向对象程序中的对象就是由数据和方法构成,所以完整的面向对象概念应该是:
对象=数据+方法
更进一步的可以描述为:
程序=对象+消息传递=(数据+方法)+消息传递
回到Java,我们说在Java中万物皆对象,其实是在说Java是一门面向对象的编程语言,Java程序的功能都是通过对象来完成的,根据业务需求将程序分解为不同的对象,再通过对象之间的相互调用关系来协同实现相应的功能。对编程思想的理解会因为你做的业务和代码的累积发生改变,随着知识的深入以及视野的开阔,一段时间后再回头看目前你所掌握的这些东西,你可能会发现某些地方理解得不够透彻甚至有误,这就是学习的过程。
到此这篇关于理解Java面向对象编程设计的文章就介绍到这了,更多相关Java面向对象编程设计内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
聊聊@RequestMapping和@GetMapping @PostMapping的区别
这篇文章主要介绍了@RequestMapping和@GetMapping及@PostMapping的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08
Spring+Hibernate+Struts(SSH)框架整合实战
SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架。本篇文章主要介绍了Spring+Hibernate+Struts(SSH)框架整合实战,非常具有实用价值,需要的朋友可以参考下2018-04-04
file.mkdir()、file.mkdirs()和file.createNewFile()的区别
本文主要介绍了file.mkdir()、file.mkdirs()和file.createNewFile()的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-04-04
SpringBoot + openFeign实现远程接口调用的过程
现在的微服务项目不少都使用的是springboot+spring cloud构建的项目,微服务之间的调用都离不开feign来进行远程调用,这篇文章主要介绍了SpringBoot + openFeign实现远程接口调用,需要的朋友可以参考下2022-11-11
Spring Security6 最新版配置及实现动态权限管理
Spring Security 在最近几个版本中配置的写法都有一些变化,很多常见的方法都废弃了,并且将在未来的 Spring Security7 中移除,因此又补充了一些新的内容,重新发一下,供各位使用 Spring Security 的小伙伴们参考,需要的朋友可以参考下2024-03-03
关于log4j日志扩展---自定义PatternLayout
这篇文章主要介绍了关于log4j日志扩展---自定义PatternLayout,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12
解决Eclipse/STS中出现Resource is out of sync with the file system
今天小编就为大家分享一篇关于解决Eclipse/STS中出现Resource is out of sync with the file system的异常问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-12-12


最新评论