黑马程序员技术交流社区

标题: 面向对象的理解 [打印本页]

作者: xinzhang    时间: 2016-4-7 10:07
标题: 面向对象的理解
面相对象的理解(我自己的理解,不一定准确)      
面相对象基于面相过程,面相过程也是解决问题的一样思想,当我们需要解决一个问题时,我们需要设定好怎么一步步的去解决它,而具体的每
一步都需要我们自己亲自去完成,面对的是具体的每一个功能函数,功能相互协调完成需求。随着需求的更改和方法的增多,发现自己去实现每一个的功能
已近忙不过来了,所以我们就想到把这些方法都封装起来,当我们要解决这一类问题的时候,只需要找到封装这一类方法的实例,问题就很轻松了,我们就
会发现我们面对的是一个个的封装某一类功能的实例,这个实例就是对象,面向对象是解决问题的一种思维模式,将复杂的问题简单化。
举例:!比如说想找朋友聊天,按照面向过程来理解就是找到朋友,让后面对面交流!用面向对象来理解就是把找到朋友这个过程封装起来,我们不
用管这个过程,利用一个对象来实现跟朋友聊天的功能,这个对象就是手机。面相对象中我们更多的是指挥者,使功能的实现更简单。
在实际开发中在怎么理解面相对象 首先名词提炼法(由于任何对象都是Object类的子类,object就是物体的意思,就一名词),其次是说拥有数据,谁就
对外提供操作这些数据的方法。  
面相对象有四个比较重要的特征(封装,继承,多态和抽象)
|----封装:将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。(该逻辑单元负责将所描述的属性隐藏起来,外界
对客体内部属性的所有访问只能通过提供的用户接口实现) 即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为
(方法)来读取和改变。这样做既可以实现对客体属性的保护作用,又可以提高软件系统的可维护性。只要用户接口不改变,任何封装体内部的改变都不会对
软件系统的其他部分造成影响。结构化设计方法没有做到客体的整体封装,只是封装了各个功能模块,而每个功能模块可以随意地对没有保护能力客体属性实
施操作,并且由于描述属性的数据与行为被分割开来,所以一旦某个客体属性的表达方式发生了变化,或某个行为效果发生了改变,就有可能对整个系统产生
影响。举例:比如说手机打电话,发短信的操作系统都在手机内部封装起来了,外部只给我们按键来使用。
|----继承:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。继承性是面向对象程序设计语言不同于其它语言的最重要
的特点,是其他语言所没有的,不过只能单继承,接口可以实现多继承所不能做的事,继承就比如说10年前的手机,那种大哥大,只能够打电话和发短信,现
在的手机继承了开始手机的打电话和发短信的功能,但是他又具备其他的特有功能,比如说聊QQ等等,这里引入OverLoad和Override,并且说明这两种方式都
是多态的体现
|----多态:多态是指事物存在的多种体现形式,提高了代码的复用性,打个比方 对于吃饭这件事.中国人是用筷子吃. 外国人呢用刀和差子就是同
一件事,不同的对象做起来,产生的效果会不一样.父类的引用指向子类对象,不过只能操作父类特有的方法,不能操作子类特有的方法,但是多态的转型能够
满足这一需求,向上转型Fu f =new Zi(); 向下转型 Zi z1 = (Zi)f; 多态前提:存在继承或者接口,即覆盖,当要使用子类特有功能时,就需要使用向下转
型,向下转型的好处:可以使用子类特有功能。弊端是:需要面对具体的子类对象;在向下转型时容易发生ClassCastException类型转换异常。在转换之前必
须做类型判断。
|----抽象(一接口为例,都是理解的,定义方面的内容自己写)接口就是类里面共性方法的抽取,在实际开发中只要知道了类实现的接口的功能,就
能大致猜测这个类的做什么的,比如说手机它实现一个接口能打电话和发短信,我们只要得到这个接口就能够知道这个类是用来描述一个手机的,在我们查看
API的时候,接口也往往在最前面,在开发中,尽量使用接口来解决某一类的问题,这样会使方法看的简单,当方法多了时继承会使代码显得笨重。
instanceof 运算符可以用来决定某对象的类是否实现了接口


作者: z332406259    时间: 2016-4-7 10:32
感谢大大分享经验
作者: xinzhang    时间: 2016-4-7 10:37
z332406259 发表于 2016-4-7 10:32
感谢大大分享经验

互相交流而已
作者: 百里青山    时间: 2016-4-7 12:37
感谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2