A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张文文 中级黑马   /  2015-1-20 16:32  /  3030 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

     这是比较简单的问题,大家不用咬死学到的定义不放,因为定义讲的都比较抽象,不利于理
解记忆。大家可以结合实物,具象的阐述一下它的含义。这样大家学起来也比较有意思,理解
起来也比较容易,学起来也没有那么枯燥。

题目:简述面向对象的含义,对三大特性(封装,继承,多态)进行阐述。

20 个回复

倒序浏览
面向对象:把每个东西看成对象,把属性和行为封装进一个对象。封装就是,比如一个打印机,你知道他有打印功能,但是不知道它是怎么运作的。你只需要使用它。继承就是 “is-a”的关系。多态,就是对象的多种形态

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
封装:就像秘书,想做什么,找有专门技术(方法)的秘书做。
回复 使用道具 举报
封装:就像秘书,想做什么,找有专门技术(方法)的秘书做。
继承:就像富二代,老子有什么,他就有什么,不过他又有富二代独有的特性(方法),他父类没有,富二代更个      性,可以定制更多的方法
多态:本来是怪叔叔(父类),却有装成小年轻(子类指针),跟我们抢小妹妹。

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3 赞一个!

查看全部评分

回复 使用道具 举报
面向过程解决问题是考虑事物的发展过程:如音乐播放器有以下几个过程
->打开播放器
->播放音乐
->关闭音乐播放器
面向对象是把问题看着对象来解决(万物皆对象):
1.打开(方法功能)
2.播放(方法功能)
3.关闭(方法功能)
面向对象有三大特性:封装,继承,多态
一,封装
封装的目的主要是将对象的属性信息封装起来,避免暴露在外面任由其他对象调用修改或是设置的值不符合实际,
设置和调用对象的成员变量主要用到setter和getter
如:
  1. //Person类的声明
  2. @interface Person  :NSObject

  3.          int _age;  //年龄
  4.          double _weight;  //体重

  5. // 年龄的setter和getter
  6. - (void) setAge: (int) age;
  7. - (int) age;
  8. //体重的setter和getter
  9. - (void) setWeight:(double) weight;
  10. - (double) weight;
  11. @end
  12. //Person类的实现
  13. @implement Person
  14. // 年龄的setter和getter
  15. - (void) setAge: (int) age
  16. {
  17.        if(age<=0)
  18.        {
  19.            NSLog(@"年龄应大于0,请重新输入,谢谢!");
  20.        }else   _age=age;
  21. }
  22. - (int) age
  23. {
  24.      return _age;
  25. }
  26. //体重的setter和getter
  27. - (void) setWeight:(double) weight
  28. {
  29.       if(weight<=0)
  30.        {
  31.            NSLog(@"体重应大于0,请重新输入,谢谢!");
  32.        }else   _weight=weight;
  33. }
  34. - (double) weight
  35. {
  36.      return _weight;
  37. }
  38. @end
复制代码

二,继承
继承主要是扩充类的属性和方法,一般是子类继承父类的,这样子类就可以拥有与父类的所有属性和方法,子类就不用重复声明定义了,进而抽取了共同代码
如:Animal类
成员变量有:int  _age;       double _weight;
方法有: - (void)  run;     -  (void)  sleep;
子类Dog属于Animal的一种,应当有用和Animal的属性方法所有Dog类的声明如下:
@interface Dog :Animal
{
     int   _color;  //毛色
}
@end
这样Dog类也拥有成员变量:int  _age;       double _weight;
方法:- (void)  run;     -  (void)  sleep;
同时还用自己的特色:int _color:表示Dog的毛色
三,多态
多态值事物具有多种形态,OC对象具有多态性
如:Student 类为Person类的子类
Person *p = [ Student new ];   //子类对象赋值给父类指针
p->_age=10;   //父类指针访问对应的属性和方法
[ p walk ];

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
面向对象:就像你去餐厅吃饭,你一上来就叫服务员叫菜,完了过一会,服务员就会直接给你上菜。这之间,你不需要了解这个哪个厨子做的,也不需要了解这个厨子是怎么把这个做出来的。

封装:将一个东西,打包,对外只提供 打包后的名字,或者暴露在外的接口等。你直接用就行。

继承:就像是一台电脑,它继承了CPU,它拥有CPU的全部功能,但它又不仅仅只拥有CPU的功能,它还有显示器,键盘等扩展功能。

多态:就是一滴水,拿过来一制冷,就成冰珠了,但它实际上还是一滴水,只不很变成了固态。

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
面向对象其实在没接触OC之前就已经很常见了,对于其三个特性,我是这么理解的:
封装:就是外界根本不用知道你内部到底有那些东西,只要我能调用你进行某些工作就行了。类似于黑盒,看不到内部的构造,但是我可以通过黑盒的提供的东西来调用和操作黑盒内部的东西。
继承:继承其实就是子类继承父类的东西,相当于子类保留了父类的血统,但是子类可能会新增某些基因,也可能会基因变异(重写父类方法,多态)。
多态:多态就是以父之名,儿子顶着父亲的名号出去乱跑(子类对象赋值给父类指针),而当儿子以父亲的名号去做父亲做不到的事的时候(调用子类扩展的方法),由于OC的弱语法,编译器发出警告,又由于OC的动态检测的特性,在儿子真正要做父亲做不到的事的时候,就会显露其儿子的本性,去做儿子才能做的事。当然这个儿子也不一定非要顶着父亲的名号出去惹事,他也可以冒充是其他人(弱语法,可以赋值给任何对象)

评分

参与人数 1黑马币 +4 收起 理由
张文文 + 4 赞一个!

查看全部评分

回复 使用道具 举报
拿着定义和代码对着看,就可以了。

评分

参与人数 1黑马币 +1 收起 理由
张文文 + 1

查看全部评分

回复 使用道具 举报
封装就是私有化  继承就是实现的一个扩展提高复用当两个或两个以上的类,具有部分相同的内容(属性和方法)并且可抽象出另一个类彼此之间满足is-a关系  多态就是同一个实现接口,使用不同的实例而执行不同的操作  

评分

参与人数 1黑马币 +2 收起 理由
张文文 + 2

查看全部评分

回复 使用道具 举报
封装就是私有化  继承就是实现的一个扩展提高复用当两个或两个以上的类,具有部分相同的内容(属性和方法)并且可抽象出另一个类彼此之间满足is-a关系  多态就是同一个实现接口,使用不同的实例而执行不同的操作  
回复 使用道具 举报
对象从类中产生,具有类所描述的所有属性和方法。面向对象注重结果,弱化过程。形象一点,就是我们可以用手机这个对象打电话,但对过程中手机如何发射信号,基站如何接收和转发以及接收者手机如何响应,这些过程我们都无需关心,我们只要知道手机有打电话这个功能就行了。这也是封装的本义所在,封装的另一个作用就是保护对象的属性和方法。就如同螃蟹是横着爬的,你不能一定要让他直着爬是不是。
继承就如同人类的香火传承,子承父业。但他们之间又是有很大区别的,继承中子类功能与父类相比只多不少,但现实生活中,却有这么一句老话,叫“富不过三代”。
多态:感觉很复杂

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
面向对象:就是从结果来考虑问题,不用考虑就提实现过程
封装:就是把所有东西打包起来,只提供个接口,你按格式写输出就能得到想要的输出,管他怎么实现的呢
继承:就是子类跟父类拥有一样的属性,但是子类还能定义新属性
多态:就是一个本质的东西有不同的形式

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
比如说处理关于路上各种车的问题。
面向对象含义:把将要处理的所有车都当成是一个个对象来看待。
封装:对我们来说,每个车都能跑,至于为什么能跑,里面的机器是怎么工作的我们不必了解也没办法了解,因为我们看不到。这就是汽车设计者将工作原理封装了起来,只留下了油门(接口)供我们驾驶。
继承:不管是自行车,电动车,还是汽车他们都有一个统称——车。车有共同的特性,比如说轮子,比如说传动装置。所以车就是他们共同的父类,而他们也从车这个父类那里继承了轮子和传动装置等。
多态:要想组装成一台能跑的车,得需要提供具体的零件,比如说我只提供2个轮子,那就是自行车;我提供两个轮子,一个电瓶,那就是电动车;我要提供4个轮子,一个发动机,那就是汽车。这就是同样的生产线,我提供不同的零件(参数),就能得到不同的车(结果)。这就是多态

评分

参与人数 1黑马币 +4 收起 理由
张文文 + 4 赞一个!

查看全部评分

回复 使用道具 举报
synhm 中级黑马 2015-1-21 21:08:45
14#
面向对象设计是一种把面向对象的思想应用于软件开发过程中,是建立在“对象”概念基础上,比如你要去巴黎,直接买车票坐飞机就到了,无需考虑其过程。
封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。比如一个电器,把零部件封装在一个封套,只需提供操作即可。
继承是一种层次结构,这种层次结构描述了“是一种”关 例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种
多态即同一个动作作用不同的对象产生不同的具体行为

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
封装
就像一台电视,买回家之后,拿来选台,控制声音大小阿,就是一般公开的方法
但是像是里面电路板怎么运作是私有方法,一般人很难去使用它

继承
像是一般生物繁殖,小孩会继承一些父母的五官特徵,可能眼睛鼻子嘴巴跟父母一模一样,
但是个性又与父母不一样,拥有自己的个性

多态
拿打篮球举例,一样是近篮网得分(方法),却有灌篮、运球上篮、投篮等等不一样的方式传到篮网达到得分的目的

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3 很给力!

查看全部评分

回复 使用道具 举报
面向对象思考的是解决问题需要用到什么对象。封装主要是为了安全,继承是将两个类相同的属性和方法抽象出来形成父类,将两个类联系起来。多态是子类对象复制给父类类型指针,主要用于方法的参数。

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
1.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。 2.封装:    封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。  3. 多态性:    多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确描述共性的方法,对象的一个新类可以从现有的类中的派出,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。 面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
lumingfu 来自手机 中级黑马 2015-1-29 10:55:27
19#
首先对象是指人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。而事物之间共同属性可以用类来定义,把类具体化就是对象了。面向过程注重功能的实现过程,面向对象注重对象的性致,有很多类和接口,能够方便调用,功能越复杂,优势越明显。
封装:让模块保持独立性,使程序修改影响降低,安全性提高。
继承:一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。可重用性高,大大提高程序灵活性。
多态:允许不同类的对象对同一消息作出响应。

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3

查看全部评分

回复 使用道具 举报
封装就是开机键,按了以后电脑就运行了,别的都不用管。
继承就是土匪:你的东西是我的,我的东西还是我的。
多态就是领导:你的手下可以由自己指挥,也可以被领导指挥。

评分

参与人数 1黑马币 +3 收起 理由
张文文 + 3 不错,有新意

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马