干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

==

目前在软件开发领域有两种主流的开发方法:结构化开发和面向对象开发。结构化开发是一种比较传统的开发方法,早期的高级编程语言,如Basic、C. Fortran和Pascal等,都是支持结构化开发的编程语言。随着软件开发技术的逐步发展,为了进一步提高软件的可重用性、可扩展性和可维护性,面向对象的编程语言及面向对象设计理论应运而生,Java语言就是一种纯面向对象的编程语言。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

一般说来,软件开发都会经历以下生命周期:

  • 软件分析:分析问题领域,了解用户的需求。

  • 软件设计: 确定软件的总体架构,把整个软件系统划分成大大小小的多个子系统,设计每个子系统的具体结构。

  • 软件编码:用选定的编程语言来编写程序代码,实现在设计阶段勾画出的软件蓝图。

  • 软件测试:测试软件是否能实现特定的功能,以及测试软件的运行性能。

  • 软件部署:为用户安装软件系统,帮助用户正确地使用软件。

  • 软件维护:修复软件中存在的Bug,当用户需求发生变化时( 增加新的功能,或者修改已有功能的实现方式),修改相应的软件。

为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点:

  • 可重用性:减少软件中的重复代码,避免重复编程。

  • 可扩展性:当软件必须增加新的功能时,能够在现有系统结构的基础上,方便地创建新的子系统,不需要改变软件系统现有的结构,也不会影响已经存在的子系统。

  • 可维护性:当用户需求发生变化时,只需要修改局部的子系统的少量程序代码,不会牵一发而动全身, 修改软件系统中多个子系统的程序代码。

架构化的软件开发方法简介

============

结构化开发方法主要是按照功能来划分软件结构的,它把软件系统的功能看作是根据给定的输入数据,进行相应的运算,然后输出结果,如下图所示。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

进行结构化设计时,首先考虑整个软件系统的功能,然后按照模块划分的一些基本原则(比如内聚性和松耦合)等,对功能进行分解,把整个软件系统划分成多个模块,每个模块实现特定的子功能。为了提高软件的内聚性,在模块中还会把功能分解到更小的子模块中。在完成所有的模块设计后,把这些模块拼装起来,就构成了整个软件系统。软件系统可看作是多个子系统的集合,每个子系统都是具有输入/输出功能的模块,如下图所示。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

结构化设计属于自顶向下的设计,在设计阶段就不得不考虑如何实现系统的功能,因为分解功能的过程其实就是实现功能的过程。结构化设计的局限性在于不能灵活地适应用户不断变化的需求。当用户需求发生变化,比如要求修改现有软件功能的实现方式或者要求追加新的功能时,就需要自顶向下地修改模块的结构,有时候甚至整个软件系统的设计被完全推翻。

在进行结构化编程时,程序的主体是方法,方法是最小的功能模块,每个方法都是具有输入/输出功能的子系统,方法的输入数据来自于方法参数、全局变量和常量,方法的输出数据包括方法返回值,以及指针类型的方法参数。一组相关的方法组合成大的功能模块。

面向对象的软件开发方法简介

=============

面向对象的开发方法把软件系统看成是各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点:

  • 把软件系统看成是各种对象的集合,这更接近人类认识世界的自然思维方式。

  • 软件需求的变动往往是功能的变动,而功能的执行者一对象一般不会有大的变化。这使得按照对象设计出来的系统结构比较稳定。

  • 对象包括属性 (数据)和行为(方法),对象把数据及方法的具体实现方式一起封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性,从而提高了软件的可维护性。

  • 支持封装、抽象、继承和多态等各种特征,提高了软件的可重用性、可维护性和可扩展性。这些特征将在后面的章节中详述。

广义地讲,面向对象编程是结构化编程的一种改进实现方式。传统的面向过程的结构化编程的最小子系统是功能模块,而面向对象编程的最小子系统是对象。

对象模型

在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。

(1)自底向上的抽象。

建立对象模型的第一步是从问题领域的陈述入手。分析需求的过程与对象模型的形成过程一致,开发人员与用户的交谈是从用户熟悉的问题领域中的事物(具体实例)开始的,这就使用户与开发人员之间有了共同语言,使得开发人员能彻底搞清用户需求,然后再建立正确的对象模型。开发人员需要进行以下自底向上的抽象思维:

  • 把问题领域中的事物抽象为具有特定属性和行为的对象。比如一个模拟动物园的程序中,存在各种小动物对象,比如各种小猫、小狗等。

  • 把具有相同属性和行为的对象抽象为类。比如尽管各种小猫、小狗等对象各自不同,但是它们具有相同的属性和行为,所以可以将各种小猫对象抽象为小猫类,而各种小狗对象抽象为小狗类。

  • 当多个类之间存在一些共性(具有相同属性和行为)时,把这些共性抽象到父类中。比如在前面的例子中,小猫类和小狗类又可以进一步归于哺乳动物类。

(2)自顶向下的分解。

在建立对象模型的过程中,也包括自顶向下的分解。例如对于计算机系统,首先识别出主机对象、显示器对象、键盘对象和打印机对象等。接着对这些对象再进一步分解,例如主机对象由处理器对象、内存对象、硬盘对象和主板对象等组成。系统的进一步分解因有具体的对象为依据,所以分解过程比较明确,而且也相对容易。所以面向对象建模也具有自顶向下开发方法的优点,既能有效地控制系统的复杂性,又同时避免了结构化开发方法中功能分解的困难和不确定性。

UML:可视化建模语言

面向对象的分析与设计方法,在20世纪80年代末至90年代中发展到一个高潮。但是,诸多流派在思想和术语上有很多不同的提法,对术语和概念的运用也各不相同,统一是继续发展的必然趋势。需要用一种统一的符号来描述在软件分析和设计阶段勾画出来的对象模型,统一.建模语言(Unified Modeling Language, UML)应运而生。

UML是一种定义良好、易于表达、功能强大且普遍适用的可视化建模语言。它吸取了诸多流派的优点,而且有进一步的发展,最终成为大众所共同接受的标准建模语言。

面向对象开发中的核心思想和概念

===============

在面向对象的软件开发过程中,开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型。到底如何建立对象模型,如何用程序代码实现对象模型,并且能保证软件系统的可重用、可扩展和可维护性呢?

问题领域、对象、属性、状态、行为、方法、实现

问题领域是指软件系统所模拟的真实世界中的系统。随着计算机技术的发展和普及,软件系统渗透到社会的各个方面,几乎可用来模拟任意一种问题领域,如学校、医院、商场、银行、电影摄制组和太阳系等。

对象是对问题领域中事物的抽象。对象具有以下特性:

(1)万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如在学校领域,对象包括学生、成绩单、教师、课程和教室等:在银行领域,对象包括银行账户、出纳员、支票、汇率、现金和验钞机等;在商场领域,对象包括客户、商品、订单、发票、仓库和营业员等:在电影摄制组领域,对象包括演员、导演、电影、道具和化妆师等;在太阳系领域,对象包括太阳、月亮、地球、火星和木星等;在用Java语言创建的图形用户界面中,窗口、滚动面板、按钮、列表、菜单和文本框等也都是对象。

(2)每个对象都是唯一-的。对象的唯一性来自于真实世界中事物的唯一性。世界上不存在两片一模一样的叶子,因此在软件系统中用来模拟每片叶子的对象也具有唯一性。例如学校领域的学生小张、学生小王、小张的成绩单和小王的成绩单,这些都是唯一的对象。在Java虚拟机提供的运行时环境中,保证每个对象的唯一性的手段是为它在内存中分配唯一的地址。

(3)对象具有属性和行为。例如小张,性别女,年龄15,身高1.6米,体重40kg, 能够学习、唱歌和打羽毛球。小张的属性包括:姓名、性别、年龄、身高和体重。小张的行为包括:学习、唱歌和打羽毛球。例如一部手机:品牌名称是诺基亚,价格是2000元,银白色,能够拍照、打电话和收发短信等。这只手机的属性包括:品牌类型type、 价格price 和颜色color,行为包括拍照takePhoto()、 打电话call)、 收短信sendMessage(和发短信receiveMessage()。

同一个类的所有实例具有相同属性,表明它们的属性的含义相同,但是它们的状态不一定相同,也就是属性取值不一定相同。例如演员小红、小白和小黄,都有姓名、性别、年龄、身高和体重这些属性,但是他们的属性取值不同。

同一个类的所有实例包括类本身的所有实例,以及其子类的所有实例。类的所有实例具有相同行为,意味着它们具有一些相同的功能。类本身的所有实例按同样的方式实现相同的功能,而子类与父类之间,以及子类之间的实例则可能采用不同的方式来实现相同的功能。

类、类型

====

类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。如下图所示,对象模型用来模拟问题领域,Java 程序实现对象模型,Java程序运行在Java虚拟机提供的运行时环境中,Java虚拟机运行在计算机机器上。

计算机受其存储单元的限制,只能表示和操作一些基本的数据类型,比如整数、字符和浮点数。对象模型中的类可以看作是开发人员自定义的数据类型,Java 虛拟机的运行时环境封装了把自定义的数据类型映射到计算机的内置数据类型的过程,使得开发人员不必受到计算机的内置数据类型的限制,对任意一种问题领域,都可以方便地根据识别对象、再进行分类(创建任意的数据类型)的思路来建立对象模型。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

消息、服务

软件系统的复杂功能是由各种对象向电视机对象发送一个“开机”消息。电视机对象接受到这个“开机”消息,执行相应的开机操作。此外,遥控器还能向电视机发送其他消息,例如选择频道、调节音量、播放VCD和关机等。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

每个对象都具有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。例如电视机具有的功能包括:开机、关机、选择频道、调节音量和播放VCD等。遥控器为了获得电视机的服务,需要向电视机提出获得特定服务的请求,提出请求的过程称为发送消息。对象提供的服务是由对象的方法来实现的,因此发送消息实际上也就是调用一个对象的方法。

最后

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。

我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。

不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-doU2Cli5-1713329439657)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值