第二部分 面向对象OOP(重点)基础

面向过程和面向对象的区别:

经常听到有人说,计算机语言可以归为面向过程语言和面向对象语言,那么到底什么是面向对象,什么是面向过程呢?

答:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。

如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

                                                                                    ——摘自《C#编程词典》

车开动去新疆,车开动的这个方法应该写在车里还是司机里呢?应该写在车里,因为对于车开动这个过程,车本身比司机更加了解其中的过程,因此方法应该写在最直接拥有的类中

        对象的作用域  可以存活在{}之外,但是引用它的变量只能存活在{}之内,不被引用的对象,java的垃圾回收(GC)起会判断其实无用的,然后释放这些对象的内存空间,可以理解为如果引用死了,对象就要跟着殉情...但是你根本确定不了什么时候回收没有引用的对象

面向对象优势:加功能不用更改以前程序、动态分配内存

把类之间的调用想象成类之间的交谈


面向对象语言的五个基本特性:

(1)万物皆对象:将对象视为奇特的变量,它可以存储数据。也可对自身进行操作,理论上可以抽取任何物体将其表示为程序中的对象,其实可以把基本类型也看成是是对象,只是它们使用了一个更简洁的初始化方式,创建一个并非是引用的“自动”变量,直接存储值

(2)程序是对象的集合,它们通过发送消息告知彼此要做的,要想请求一个对象,就必须对该对象发送一条消息,也就是对某个特定对象的调用请求(对象先创建后使用)

(3)每个对象都有自己的由其他对象所构成的存储:可以将一个对象放到另一个对象之中,构成复杂模型

(4)每个对象都拥有其类型:每个对象都是一个类的实例

(5)某一特定对象的所有对象都可以接收同样信息:比如圆形类型的对象同时是几何类型的对象,所以一个圆形对象必然能接受到发送给几何形对象的消息,也就是拥有其属性和方法。

(6)面向对象的目标就是去创建能够提供理想的服务来解决问题的一系列对象。

思维方式:将问题从表象中抽取出来,思考什么样的对象可以马上解决问题


类与对象的关系

类是构造对象的模板或蓝图,类是一个抽象的,实例化成具体东西后变成对象。类指的是一类东西,而对象指的是具体东西,比如狗是一个类,而具体的一条狗就是一个对象。

类描述了具有相同特性(数据类型)和行为(功能)的集合,由此可以把它看做是一个数据类型

类的创建(类对应名词,名词里的状态名词表示属性,方法对应动词,比如狗是个名词表示一个类,狗的状态比如狗的名字,狗的年龄表示属性,狗会跑就是一个动作表示方法)

<修饰符>class<类名>{

<属性(状态)>

<构造方法>

<普通方法>

}


构造器(构造方法)

对类进行初始化    语法:修饰符  类名(参数){  }  让对象在创建的时候有初始值

(1)与类名相同,不可写返回值,在new时被调用。

(2)每个类自带一个无参构造器,赋默认值,引用类型为null,若写了一个构造器,无参构造器会变成不合法,若想使用无参构造器需要手动写一个(每个类最好有一个无参构造器)。

(3)构造函数参数是什么类型,对象传参时就是什么类型,若想传入Animals型,则构造函数参数为Animals型                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

(4)构造代码块{  }是给对象用的(成员方法,成员函数),在执行父类构造方法后执行子类构造代码块,不管执行哪个构造函数,都会先执行构造代码块,构造代码块在构造函数执行前执行。父构造代码块,父构造函数,子构造代码块,子构造函数


对象创建

Animal xb=new Animals();(创建对象new+构造方法(构造器)调用类的构造器)

xb是引用对象的一个变量相当于遥控器,而对象相当于电视机,只要能握住这个遥控器,就能保持与电视机的相连。  new可以表示给我一个新对象,而Animals表示的是这个引用可以引用什么对象。

状态(实例变量):内部数据,描述对象的特征的信息

行为:方法

标识:每个对象都有唯一的标识和其它对象区分开,就是每个对象在内存中都有唯一的地址

访问对象成员:xb.color 属性  xb.run()方法


对象创建步骤

1.将Animals.class加载进内存

2.栈内存分配一个xb变量的空间 

3堆内存分配空间,创建对象,提供对象地址(对象存在堆内,更具对象大小分配空间,虚拟机觉察对象不用时自动回收 )

4.对对象属性进行初始化

5.调用构造方法对对象初始化  对象被使用前取得对象遥控器,对对象进行改变

6.将对象内存地址赋给给xb指向对象,方法对象的多次使用。.(堆上的对象不被引用会变成无用)


如果要处理联系人的数据更新

        应该创建数组将每一个联系人的对象放进去,虽然这样占的内容比较多,但是这样可以随时获取每一个人联系人,如果直接建立多个联系人对象,虽然省内存,但是只有一个数据引用,引用的总是最后一个创建的对象,不能获取以前的联系人


例:创建5个Person对象,保存到数组里,想要实现根据id查找到Person的信息,这时因为要对Person对象进行操纵,所以必须创建另一个类,人员管理类。

对一个类进行操纵是在另一个类中进行的这也就是以后所说的has-a关系。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 类之间的关系: 1.组合(has-a):一个类的方法操纵另一个类的对象 // ,汽车类has-a引擎类 2.继承(...
    孙浩j阅读 506评论 0 1
  • 写在之前 因为简书字数限制,完整版地址:https://www.zybuluo.com/hainingwyx/no...
    hainingwyx阅读 13,881评论 0 41
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,046评论 0 4
  • 看完李笑来老师《人生的终极问题到底是什么》感触良多,老师提出来什么更重要,从而引出什么最重要,认清之后一刀切,将左...
    智御阅读 183评论 0 1