Java教程 什么是面向对象 最通俗讲解

Java教程系列之面向对象


你要悄悄的努力,然后惊艳所有人!


哈哈哈哈,言归正传,今天我带大家和我假期冲刺,一起学习Java吧!

Question:

1.为什么学习Java?

Java,C++,Python等等语言都是面向对象的语言,这个在学C的时候大家都有听说过。作为学习的第一门面向对象语言,我选择了Java。原因很简单:Java普遍,最好就业。实际上,面向对象的思想在这些语言之间是类似的,只是不同语言在一些语法上会有不同。所以如果将一门面向对象语言学精通,再入门其他语言也会更容易。

2.我是谁?

我是一名普通的大一学生,假期自学编程。写文章在鞭策自己的同时希望能对大家有所帮助,希望能带动大家一起学习,共同进步。

3.大一?这么菜?大一学生写的文章有价值吗?

的确是从零起步的,所以希望大佬多多包涵。但我相信,我的文章对那些和我一样都是新手的人一定有帮助。

我听过慕课上免费的公开课,看过网页上Java的教学,也花钱买过课。作为初学者,会更容易知道哪些知识点不好理解,什么样的讲法更适合理解。虽然我的水平一般,但是我把我看视频的经验都写在了文章里,所以我认为我的文章还是有价值的。

4.Java系列文章的规划?文章的特点?

我是打算以后靠Java就业的,所以对Java的理解也会逐渐深入,现在是小白,以后可能会做一些大项目等等。Java系列文章会不断更新。概念等知识会尽量以讲故事的形式和生活中的实例写。在文章的后面,我会以书面的语言总结一下文章的内容(如果有的话)。


前言结束,正文开始!


面向对象

通过这篇文章,你会理解面向对象和面向过程思维的区别

今天我们来大概理解一下面向对象的思想。在正经说面向对象之前,先想想你上个学期都学了什么东西了吧!我拿我自己举例子:C语言,就是那个被众多人称之为面向过程的语言,好像还挺厉害的。我都学会用C语言干什么了呢?我学了数组,学了指针,学了结构体和链表。但你要是问我实际会啥了,我就会用C语言写OJ了。(OJ:online judge)把自己写过的代码复制粘贴到网页上,要是过了就挺高兴,要是没过就得疯狂Debug。举个例子吧:

我在手机截图里面随便找了一个oj,通过这道题让大家体会面向过程的特点,进而更好的区分面向过程和面向对象的思想

一个数如果恰好等于等于他的因子之和,这个数就被称为“完数”。例如:6的因子是1、2、3,6=1+2+3,因此6是完数。请你判断输入的数是不是”完数“,是就打印YES,不是就打印NO。

Sample input:

6

Sample output:

YES

我在写这道题的时候会想,首先由输入,就要有scanf函数,然后用一个for循环从1到输入的数遍历一遍,判断一下从1到输入的数的因子,然后加和,最后我会把这个和与输入的数进行比较,如果相同就输出YES,不同就输出NO。

这样这道OJ题就做完了。我相信不管是简单的OJ,还是ACM竞赛的题,大家的做题思路都是这样的:读明白题,之后一步一步地想实现的步骤,然后写代码。

这种写代码的思路就是面向过程编程,又叫做POP,也就是Process-oriented programming。我们是重视过程的,我们要把解决这个问题从开始到结束的每一个细节考虑到,这就是面向过程的思想。可以说,我们高考之前是非常习惯用这种面向过程的思想考虑问题的。因为高考的时候,我们做的每一到物理题,数学题,也是用的这种思想。你需要一步一步去思考,然后解决问题。


那么面向对象的思想是什么呢?我请大家换一个角度,考虑一些实际的问题。

没错!实际的问题!

大家家里应该都有车吧!

现在假设,你假期闲的没事干,想写一个程序,写一个记录车的程序,记录你家隔壁老王的劳斯莱斯,顺便赚点外快,你会怎么写呢?

请仔细思考一下,思考两分钟…


在这里插入图片描述


聪明的你一定会想到,得标出这辆车的牌子,得标出这辆车车主的电话号,得标出这辆车的价格,得标出这辆车的行驶里程。这辆车有的时候得刷车,你的程序得体现出来吧!这辆车得去加油,你的程序得体现出来吧!这车是不是二手车,有没有漏油,出国事故吗?有些人对这辆车感兴趣,那我们是不是要记录一下汽车发动机的型号和马力,好方便吹牛逼?

等等等等,我们要记录很多东西。我们假设先用C语言简单写一下这个程序(不写全,大家明白意思就行)。

#include<stdio.h>
void refuelTheCar();
void brushTheCar();
int main() {
    char *carOwnerTelephone = "18888888888";//车主电话,方便挪车时候用
    char *carBrand = "劳斯莱斯";//汽车品牌
    char *carName = "老王的劳斯";//汽车的名字
    return 0;
}
void refuelTheCar() 
{
    printf("今天给车加油了");
    //...具体不写全了,这里还可能写加油的日期,加多少钱的油,等等
}
void brushTheCar()
{
    printf("今天去刷车了!");
    //...在哪洗的车?效果如何?等等
}

我大概写了写,大家看一看这个代码,看起来挺好的,可以使用。

看着好像挺对的,这程序写完了怎么使用呢?只能去修改main函数对吧。

然后第二天,你去跟老王说了:我给你的劳斯莱斯写了一个记录的程序。

他看了看,觉得挺好的。

但是他跟你说,我媳妇儿还有一辆保时捷呢,我还有一辆法拉利,你也都给我写了吧!我看你这项目不错,我王多鱼投了!你先把我公司五百多个同事的车记录一下吧!钱少不了你的!


你回家了,感觉挺开心的。但是你得记录好几百辆车,难道要写好几百个函数吗?这显然不合理!

你不应该这么写这个程序,有一个更好的方法解决这个问题,那就是面向对象。(接下来步入正题,要认真看,一遍没看懂就多看几遍!

在这个实际应用问题中,我们发现我们研究的对象是车,我们要记录车的品牌,车主人电话,车的马力,车的三围(长宽高,别想多了嗷!)等等一系列的数据。我们还需要写一些函数记录每一次汽车加油,每一次洗车的数据等等。

在这个实际问题中,我们发现和之前的oj不一样,我们不再强调过程了,而是去强调记录车的数据。老王家的劳斯莱斯是我们记录数据的对象,我们要去记录他。

在这个实际问题中,我们在面向对象编程,我们这些车当作了研究的对象,而车的品牌,车主人电话,车的马力,洗车的数据,就像是一个一个标签一样贴在了这辆车上

我们发现这和之前我们写的C语言函数很不一样了,因为我们在面向对象写程序了。我们发现:C语言不能很好地解决我们的需求了(确实!因为C语言本身就是面向过程的语言)。所以,我们需要一门面向对象的语言,来解决这个问题。之前我们冥思苦想一个解决问题的算法,而今天这个实际问题,我们以汽车为对象,展开研究。这就是面向对象编程(OOP Object-oriented Programming)。

当然了,有些学的好的同学一定会说,你这需求,我用C语言的结构体也能满足!

实际上我最开始学的时候,我也是这么想的!我还把函数写出来了,你们看看你们是不是这个意思:

请认真看这段代码!

#include<stdio.h>
struct Car {
    char * carOwnerTelephone;
    char * carBrand;
    char * carName;
    void refuelTheCar()
    {
        printf("今天给车加油了");
        //...具体不写全了
    }
    void brushTheCar()
    {
        printf("今天去刷车了!");
        //...
    }
};

int main() {
    struct Car wangCar;
    wangCar.carName = "老王的劳斯";
    wangCar.carBrand = "劳斯莱斯";
    wangCar.carOwnerTelephone = "18888888888";
    wangCar.brushTheCar();//如果洗车了,我可以直接调用洗车函数

    struct Car zhangCar;//如果有别人来用这个车的系统,我可以在new一个车的结构体
    //...
    
    return 0;
}

上面的这段代码,的的确确就是面向对象的编程思想。看懂了他,你就大概明白面向对象是怎么一回事了。

同时,你可能会有疑问,既然这是用C语言写的代码,为什么说C是面向过程不是面向对象呢?事实上,这还仅仅是面向对象的皮毛,我们接下来还要学习很多面向对象中提到的概念,比如继承,重写,转型,抽象,接口等等。这些是C不具备的(如果你有实力,也可以试试能不能把C改成一个面向对象的语言)。

我们的这个程序中研究的是车,我们以车为研究对象。那假设我们要做个养狗系统呢,我们就得以狗为研究对象。总之,在面向对象编程中,我们研究什么,就可以以什么为研究对象。这也就是所谓的万物皆对象。

通过生活中的应用,去理解面向对象,会更简单一些。

总结知识点

面向过程编程 POP Process-oriented programming

面向对象编程 OOP Object-oriented Programming

这节课没啥知识点,如果你能明白面向对象就够了。也可以去看看别的面向对象的讲解,深度理解一下。

(关注博主,带你起飞!)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值