java面向对象学习心得
在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性和方法两个主要部分。下面学习啦小编收集了一些关于java面向对象学习心得,希望对你有帮助
java面向对象学习心得篇一
我相信在各位学习的过程中,都会从书上看到面向对面和面向过程的定义,但是如何理解它们之间的区别和转换成自己的思想并运用在软件爱国过程中,我想很多初学者都不能很好的把握。下面我就对面向对象和面向过程做一个简单的分析。
面向过程,顾名思义,其中心意义在于“过程”二字,比如你要吃饭,那么首先是要选地,播种,施肥,成熟,收获,煮饭,然后才能吃饭,那么面向过程就是从开始到结束,分析出解决问题的需要的每一个步骤,然后用函数将这些步骤一个一个实现,使用的时候一个一个一次调用就行了。
面向对象,同样的,你去饭店吃饭的时候,只需要对服务员说一句你要吃饭就行了,你不需要关心饭是怎么来的,这就是面向对象。那么面向对象就是把组成问题事务分解成一个个对象,建立对象不是为了解决一个步骤,而是用来描述某个事务在解决问题步骤中的行为。面向对象是以功能来划分问题,而不是步骤。
以上的解释来源于书上,对于初学者而言,这样的描述过于抽象,不能很好的理解。下面我举个具体的例子来说明。
从书面上来说,可能面向过程更好理解,但是其实面向对象更符合人们的思考习惯。比如外面去商场买衣服,那么商场的功能就是提供衣服,你不需要关心衣服是怎么来的,你只需要向商场提出你要买衣服的要求就可以。就那贪吃蛇这个游戏而言,对于面向过程:1、吃一个;2、绘制画面;3判断是否死亡,就这样依次调用函数,一个一个步骤进行。
而对于面向对象,建立三个对象:1、蛇;2、画面系统;3、规则系统。首先进行操作,然后将操作后的结果提交至画面系统进行画面绘制,绘制之后的结果提交至规则系统判断是否死亡。这样一招功能来划分问题。
从上面的解释来看,面向对象和面向过程依然难以区分,但是如果我要返回上一步,那么对于面向过程而言,从初始状态到判断是否死亡到现实画面可能都需要改动。而对于面向对象则只需要重新设计画面系统,在里面保存上一步的坐标即可,这里不需要涉及到规则系统和其他操作。
面向对象的功能划分保证了面向对象的可扩展性。比如我需要为贪吃蛇重新改写一套规则,在面向过程中,规则已经渗透到整个程序的各个角落,改写不如重写。那么在面向对象中,则只需要重新设计规则系统即可。
其实面向对象和面向过程都强调代买重用,用了对象不代表你的程序就是面向对象,要做到局部改动需要足够的经验,很多人在用java编程时依旧是面向过程的思想(尽管在程序中使用的类和对象),这样的程序设计依然缺乏重用性和可移植性。
java面向对象学习心得篇二
大三的时候学校组织我们去苏州NIIT参加四个月的java实训,我开始系统的学习期java,之前大学的时候学的比较宽泛,没有专门的正对java的学习。
首先我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭,因为我早以习惯用C来编写程序,很欣赏C的简洁性和高效性,喜欢C简练而表达能力丰富的风格,特别忍受不了Java运行起来慢吞吞的速度,相对冗长的代码,而且一个很简单的事情,要写好多类,一个类调用一个类,心里的抵触情绪很强。
我对Java的面向对象的特性琢磨良久,自认为有所领悟,也开始有意识的运用OOP风格来写程序,然而还是经常会觉得不知道应该怎样提炼类,面对一个具体的问题的时候,会觉得脑子里千头万绪的,不知道怎么下手,一不小心,又会回到原来的思路上去。
举个例子,要发广告邮件,广告邮件列表存在数据库里面。倘若用C来写的话,一般会这样思考,先把邮件内容读入,然后连接数据库,循环取邮件地址,调用本机的qmail的sendmail命令发送。
然后考虑用Java来实现,既然是OOP,就不能什么代码都塞到main过程里面,于是就设计了三个类:
一个类是负责读取数据库,取邮件地址,调用qmail的sendmail命令发送;
一个类是读邮件内容,MIME编码成HTML格式的,再加上邮件头;
一个主类负责从命令读参数,处理命令行参数,调用发email的类。
把一件工作按照功能划分为3个模块分别处理,每个类完成一件模块任务。
仔细的分析一下,就会发现这样的设计完全是从程序员实现程序功能的角度来设计的,或者说,设计类的时候,是自低向上的,从机器的角度到现实世界的角度来分析问题的。因此在设计的时候,就已经把程序编程实现的细节都考虑进去了,企图从底层实现程序这样的出发点来达到满足现实世界的软件需求的目标。
这样的分析方法其实是不适用于Java这样面向对象的编程语言,因为,如果改用C语言,封装两个C函数,都会比Java实现起来轻松的多,逻辑上也清楚的多。
我觉得面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的,只要领会了这一点,就领会了面向对象的思维方法。
举一个非常简单的例子:假使现在需要写一个网页计数器,客户访问一次页面,网页计数器加1,计数器是这样来访问的后台有一个数据库表,保存每个id(一个id对应一个被统计访问次数的页面)的计数器当前值,请求页面一次,对应id的计数器的字段加1(这里我们忽略并发更新数据库表,出现的表锁定的问题)。
如果按照一般从程序实现的角度来分析,我们会这样考虑:首先是从HTTP GET请求取到id,然后按照id查数据库表,获得某id对应的访问计数值,然后加1,更新数据库,最后向页面显示访问计数。
现在假设一个没有程序设计经验的人,他会怎样来思考这个问题的呢?他会提出什么样的需求呢?他很可能会这样想:
我需要有一个计数器,这个计数器应该有这样的功能,刷新一次页面,访问量就会加1,另外最好还有一个计数器清0的功能,当然计数器如果有一个可以设为任意值的功能的话,我就可以作弊了。
做为一个没有程序设计经验的人来说,他完全不会想到对数据库应该如何操作,对于HTTP变量该如何传递,他考虑问题的角度就是我有什么需求,我的业务逻辑是什么,软件应该有什么功能。
java面向对象学习心得篇三
面向对象,正如张老师所说的只可意会,不能言传。是相对于面向过程而言的,是个相对的概念。我以前学过C语言,VB等面向过程,也学过C++,C#等面向对象的语言,然而PHP既是面向过程又是面向对象的语言,虽然面向对象的功能不是很强大,但这可以说明一点:面向过程和面向对象不是完全对立的,是可以共存的。有人认为面向对象是面向过程的替代品,我不这么认为。我个人认为,两种编程思想各有千秋。面向对象固然优越,但是要根据实际情况来看,也许有的问题使用面向过程要简单些,我们为什么要舍弃简单使用复杂的呢。对于我们现代的程序员来说,面向过程和面向对象同样重要,我们都要掌握,根据具体情况,择优选择使用开发思想。以上是我对面向对象的理解,也许由于现阶段的知识有限,理解还不是很深刻。但我坚信随着我知识的进一步提高,对于面向对象我会有新的理解。
JAVA是一种完全的面向对象的语言,因此在这里我们就不在谈论面向过程了。JAVA的面向对象同其他的面向对象的语言一样,同样支持OOP的三个基本特征:封装,继承,多态。
首先要理解对象和类的概念,类是某一类事物的描述,是抽象的,概念上的定义。而对象是类的一个实例。随着学习的深入,会对这两个概念有更加深刻的理解。类将数据和函数封装在一起,数据表示属性,函数表示行为。定义一个类使用class关键字。要创建一个新的对象,需要使用new关键字,例如:Person p=new Person( );变量p实际上是新产生的对象的引用句柄。通过张老师的讲解我们知道对象内存的分配是在堆内存中分配的,而引用变量的地址分配是栈内存中分配的。句柄中的值实际上是堆内存中为对象分配的地址空间的首地址。明白了这一点对于以后的关于内存的分配和垃圾的处理将会有更进一步的体会。如果把一个句柄的值置为空,那么在堆内存中分配的对象的地址空间的内容就不能再被引用,也就成为垃圾,等待垃圾回收器的处理。
张老师在视频中讲得关于对象的比较问题讲得很清楚,这也是我觉得最重要的收获,当然要先学会前面内存中的分配方法才可以真正的明白“==”和equals()方法的不同。“==”用于比较两个变量的值是否相等,也就是给对象分配的首地址是否相等,即是否是同一对象。而equals()用于比较两个对象的内容是否相等。这两个对象不一定是同一个对象,只要内容相等就可以。
关于匿名对象,使用匿名对象有两种情况:1.如果一个对象只要一次方法调用。2。将匿名对象作为实参传递给函数调用。如:new person();这个语句没有产生句柄引用变量,直接用new关键字创建。待本语句执行完这个对象实际上就变成了垃圾。
为了实现类的封装性,需要在成员变量和成员函数前添加访问控制符:private ,public,protected。Private表示私有,只要同一个类的方法才可以访问。Public表示公有,任何类都可以访问。Protected表示受保护的,只有本类和本类的子类中的方法可以访问。为了方便实现类的封装性,我们一般将类的属性设为私有,将方法设为公有。通过类的封装性隐藏了类的实现细节,可以方便修改,增强了可维护性。
构造函数是类的一个重要内容,函数的名字与类名相同,不含有返回值,在方法中不能有return语句返回一个值,相当于对类进行初始化。访问控制符一定要用public,否则无法新建一个类的对象。通过构造函数的重载可以实现不同的初始化。
猜你感兴趣:
7.java学习心得