黑马程序员技术交流社区

标题: 活动第二期:面向对象?丰厚奖励等你拿!!! [打印本页]

作者: Micro    时间: 2015-3-17 17:06
标题: 活动第二期:面向对象?丰厚奖励等你拿!!!
本帖最后由 Micro 于 2015-3-18 10:39 编辑

最近好多新人反映黑马币难赚。so....论坛活动第二期上线啦!!!!

本期话题:说说你对面向对象的理解。  可举例说明..

活动规则:10字以上,禁止复制粘贴,网上百度等答案不允奖励。根据用情深浅奖励不同程度的技术分黑马币




----------------------------------------------------------------------华丽的分割线------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
顺便再次提醒一下新人常见的困惑:
关于签到:
这个是完全没有依据的说法。所谓的签到就是登陆一次网页客户端然后系统会自动奖励你2个黑马币这样。而不是到技术交流区发一些签到的大水帖!!虽然发帖是分奖励2黑马币。但水帖,是会被我删除的哦。删除后黑马币会减少。请所有马友自重,自觉维护好社区环境。
版主在此提醒各位获得技术分没有捷径可以走。
技术分从何而来:
可以直接到论坛主板块中进行转换,6黑马币向等于1技术分。
如何获得黑马币:
1.水帖(水贴请到吹水圣地版块)吹水圣地的H币是可以直接换黑马币的。1H币等1黑马币。
2.回帖。回复别人的帖子也是能有黑马币奖励的,一次回复+1黑马币。
3.发贴。一次发帖得2个黑马币,另外我还会对用心的会员进行额外奖励直接奖励技术分
4.参加活动。活动不定期举办,参加可获黑马币。
   建议所有同学发帖加上主题分类,这也是考核奖励的标准。
有些人说哪有这么问题可以用来发帖的话,这个完全靠你自己的发倔。写一些感想也行啊,比如你想了挺久的一个问题,让你解决了。那你就可以发到帖子上让大家来学习学习。或者互相鼓励鼓励。还可以贴代码的哦。但是别忘了解释、、为获得技术分。行动起来吧。




作者: kim55666    时间: 2015-3-17 17:22
不想拿着微薄的工资,天天混日子。想到黑马学些技术,找工作好有底气
作者: Micro    时间: 2015-3-17 17:28
kim55666 发表于 2015-3-17 17:22
不想拿着微薄的工资,天天混日子。想到黑马学些技术,找工作好有底气

这个,刚换了一个技术话题。但你还是积极的。值得奖励
作者: Micro    时间: 2015-3-18 10:30
活动今日上线,限时一周。同学们积极参加吧!
作者: 大白菜cabbage    时间: 2015-3-18 11:02
本帖最后由 大白菜cabbage 于 2015-3-18 11:23 编辑

首先面向对象具有三大基本特征,也就是:封装,继承和多态.
其次面向对象是一种编程思想,并不是说有了上面的三大特性就一定是面向对象了.

举一个最简单的例子,我们要创建一个正方形,面向过程的思想肯定是定义边长,最后得出面积.也就是这个对象本来不存在,被我们创建出来了.

用面向对象的思想思考的话,正方形属于矩形,那么我们需要创建一个矩形的类,然后传入这个矩形的长和宽,最后得出面积.

以后我们需要正方形也好,长方形也好,只要调用这个矩形的方法,就可以得出面积.
其实就是让虚拟的东西和我们现实中的东西产生联系,让别人看见你的代码就知道是要干什么.

这样同时还提高了代码的复用性,减少程序员的重复编码.




作者: whymerain    时间: 2015-3-18 11:02
不敢回复了,怕度没把握好被扣分。最近糗事百科非常火的一句话“好想有个家,家里有个她;白天么么哒,晚上啪啪啪”,前半句认为是面向对象,后半句认为是面向过程。
作者: 紫金飞侠雷    时间: 2015-3-18 12:00
面向对象,可以说万物皆对象,支取考虑事物对象能提供什么,至于怎样提供的不去考虑,比如要用电脑听歌,只关心电脑本身,不去考虑怎样播放。面向对象的精髓在于封装、继承和多态!!!
作者: Dreamsky_qihang    时间: 2015-3-18 12:34
面向对象的思想和面向过程的思想是两个截然不同的思想。面向对象的优点体现在他的代码可复用性,而且可维护性要优于面向过程的思想。
面向对象思想的特征中,继承使代码有了可复用性和可拓展性。封装把类的属性的实现细节隐藏起来,只给外部实现接口,这样就限制了代码的访问和修改的权限。而多态也提高了代码的可拓展性。

作者: 417284911    时间: 2015-3-18 12:45
面向对象是抽象出来的一件事物,是虚拟化的,是人的一种惯性思维,方便解决问题的一种模式。面向对象有三个特性:封装、继承、多态。
所谓抽象成一种事物,比如人,把所有的成员属性抽象成人的各个器官,方法抽象成人的各个行为(人可以做饭,走路,说话等)。因此面向对象的模式就是定义一个类,而这个类就是这个对象,再去实现某个方法。相对而言,面向对象要好理解一些。
作者: tianlin    时间: 2015-3-18 12:58
面向对象 我觉得就是一个事物,一个物体,一个东西
它有属性和行为
作者: a380vs747`    时间: 2015-3-18 13:01
我是初学者,虽然也知道面向对象的三大特性:封装、多肽、继承。但是因为写的代码少,低级。所以对这三大特性并没有太大的理解。但是我也有一点自己的感觉:就是对象调用方法,谁,要做什么,就是哪个对象,要调用哪个方法。
刚学c基础的时候感觉很简单(其实是很难的,简单是因为我只学了皮毛),就三十多个基础词语,想要达成什么目的,就排头写,要做什么,按照过程一步一步来。
而学oc时就感觉很难了,好多东西乱七八糟的感觉,明明一个很简单是事情,却要先声明类,又定义方法的。然后再新建对象调用方法。那么多的乱七八糟的方法。一开始真的感觉就是看天书,比c语言难多了。一直到等我把oc基础看完,自己的思想转变后才发现,面向对象嘛,就是明白要完成一个什么任务,这个任务由谁来做(对象),怎么做(方法)。比如人吃饭,那就是让人这个对象,调用吃饭的方法。
现在做c语言的自测题,我都会不自觉的先把方法(函数)写好了,然后到时调用就行。
作者: 夏皮冬絺    时间: 2015-3-18 13:09
面向对象首先要对自己要做的东西进行梳理,然后根据自己实际的需要来对,我们所需要的这一类对象抽象出一个我们所需要的类来其中的成员变量的设定必定是程序中将会用到的不然没有必要去从对象身上抽象出该属性作为类的成员变量
作者: wzboy    时间: 2015-3-18 13:13
面向对象,
记得老师说过,把大象放到冰箱里需要几步
1.把冰箱门打开,
2.把大象放进去,
3,把冰箱门关上。
这是一个面向过程的程序。
如果下次要写代码,要求把水果放到冰箱里,就要重写一遍。为了提高代码复用率,提高程序的灵活性。就要抽象出一个方法。
如果是我,我就会把冰箱当做一个对象,创建一个函数,当调用的时候,把大象当做一个参数传进去。下次再放水果的时候,创建一个对象,把水果当函数传进去就行了。
记得在某个网站上看过一个类似的笑话:如果你让一个程序员去毁灭地球的话,他不会直接去毁灭,而是写一个毁灭宇宙的函数,把地球当做一个函数传进去、、、
作者: wzboy    时间: 2015-3-18 13:19
wzboy 发表于 2015-3-18 13:13
面向对象,
记得老师说过,把大象放到冰箱里需要几步
1.把冰箱门打开,

哈哈~谢谢版主,我会继续努力的。
冰箱的故事是苏坤老师讲的,班门弄斧了。
作者: xsun    时间: 2015-3-18 13:25
Keep it DRY, Keep It shy,and tell the other guy.

以前Java老师告诉我们的。
作者: 喧闹的世界    时间: 2015-3-18 13:47
面向对象,首先要了解什么是对象。万物皆对象,也就是所有东西都可以看做是对象。
面向对象的思想不同于面向过程思想注重每一个步骤的实现,而是把这些步骤分由不同的对象中。然后通过这个对象进行实现。如:用茶壶给一个杯子倒水:
面向过程的思维:1.拿来杯子。 2.拿起茶壶。 3.倒水。 那么如果是同样用茶壶给别东西倒水,又需要重新定义这三部。
而面向对象中:茶壶是一个对象,倒水是茶壶的一种行为。那么无论给什么东西倒水,只需要把这个东西拿给茶壶这个对象即可。

作者: adslunk    时间: 2015-3-18 14:00
http://bbs.itheima.com/thread-175101-1-1.html
之前发过帖子,貌似没人看- -
作者: 枫宇翔    时间: 2015-3-18 14:10
最开始我开始我是学习C,后来学习OC。谈谈自己的理解吧,可以和面向过程的相比较,面向过程就好像制造一台机器的时候,需要去考虑机每个机器的零件怎么工作,然后将各个零件完成组装成了一台机器。而面向对象,比较趋向于人类的思维,它就是把一台机器看作一个对象,我们关心的是这台机器需要做什么工作 以及机器的一些属性问题,又好像对于一个学生的时候,我们关系他做什么和一些和他本身的属性,而不去关系这个学生由什么组成的。我就是这样理解的,不知道有没有偏差,希望得到纠正
作者: a380vs747`    时间: 2015-3-18 14:13
老师,给您留言版留言的问题,您能看到么?
作者: Theshy    时间: 2015-3-18 14:20
所有物体或个体都能够看做对象,比如 人、车、桌子、椅子等
以人来说:对人的描述的 就是属性,年龄、姓名、性别....
人的动作就是方法:人会走、会吃、会思考....

把属性和方法封装起来,也就是类的建立,就是面向对象的实现
作者: Own    时间: 2015-3-18 14:55
还没看到。。。。。
作者: 豆子    时间: 2015-3-18 15:19
面向对象,用句俗话来说就是:自己的事情自己做。这样做符合人类的思维习惯,也增加了提高了代码的复用性。
就拿吃饭来说:如果我们自己做饭,就是面向过程,要自己买菜,洗菜,炒菜,煮饭,到最后吃饭,这一系列的事情都是我们独立完成的,这个时候你必须知道从买菜到做饭这一系列的事情是怎么做的。
而如果到餐厅吃饭就像面向对象了,餐厅就是对象,我们只要到了餐厅点了菜,过半个小时,菜就上齐了能吃饭了,这样就减轻了我们的负担,我们并不需要知道是怎么做饭的怎么买菜的,使吃饭这件事更简单了。每个人都能去饭店吃饭,提高了代码的复用性。
作者: Micro    时间: 2015-3-18 15:20
a380vs747` 发表于 2015-3-18 14:13
老师,给您留言版留言的问题,您能看到么?

看到了。。回复你了。我不是老师,我也是学生。一起加油。
作者: ab63333334    时间: 2015-3-18 15:30
面向对象的思想,即把所有的事物都看做对象,万物皆对象,每一个对象都有自己的属性和行为,我们通过设置对象的属性和调用对象的方法来操控对象.
面向对象的三大特点是封装,继承,多态.
对象的特质是:具有唯一性,分类性,继承性,和多态性,
对象的要素在于抽象,封装,以及共享,
作者: 碧空海    时间: 2015-3-18 15:35
面向对象和面向过程是两个不同时思维方式,面向过程时,考虑的是怎么具体的实现每个最小的步骤。面向对象就是面向过程这么多小步骤的分类集合。我是这样理解的。
作者: 童冀    时间: 2015-3-18 15:47
还是初学这个东西,面向对象的感觉就是自己建成一个又一个的模块,然后把这些有功能的模块调用起来,建成自己想要的程序高楼,哈哈哈
作者: 风中一场梦    时间: 2015-3-18 16:28
一、思想
  面向过程 :关注的是解决问题需要哪些步骤。
  面向对象 :关注的是解决问题需要哪些对象。

以人吃饭为例 ,面向过程 需要 拿碗 盛饭 吃
     
                面向对象 只需要人吃饭就行了 ,怎么吃不用管。

以类创建对象: 类名  一个类的名称         
               属性  类所包含的成员变量   如 身高体重
               方法  执行的行为           如 吃饭 睡觉 打豆豆

二、三大特性之封装

@public 可以让成员变量被外部访问 ,这不符合面对对象思想,我们用@private(私有)或@protected(默认当前类或

子类都可访问默认)限制外部对类的访问。通过set方法与get方法,让外部通过方法间接访问或使用内部变量。


三、三大特性之继承
  NSObject是一个基本类,类要创建对象必须继承这个基本类。
  继承一个类,子类将拥有父类的所有成员变量与方法。子类不能定义与父类的相同的成员变量,但可以重写方法。方法查找默认从子类开始查找再到父类。使用super可以直接从父类调用方法。self指向当前对象。

组合也可以拥有一个类的成员与方法,但创建该类的同时,也必须创建它所拥有的类,并用指针指向。
  
继承 :狗是动物; 狗继承动物
组合 :人拥有一条狗 。

三、三大特性之多态
  
  编译器会找到对象本身真真的那个对象。父类指针指向子类。
  如人养一条动物(可以是狗可以是猫) 那么用动物指针指向猫(或指向狗)都可以。而该指针可以调用真实对象的方法,不用我们人为判断。父类指针不可访问子类的成员变量(可运行但有警告),使用强制转换即可

作者: JiangHG    时间: 2015-3-18 17:21
要谈面向对象就要说说面向过程,我的理解是,面向对象和面向过程只是解决问题的两种思考方式
面向过程:它关注所要解决问题需要涉及的具体步骤,像C语言就是一条一条执行语句来实现具体的功能。
面向对象:它关注解决问题需要哪些对象。个人认为它是一种更加抽象的编程方法,更贴近现实的生活,它关注的焦点是问题的本身而不是语言。
举一个具体的例子来说:要建造一栋大楼,
面向过程的方法:关注具体的建造过程
1.打地基
2.垒砖
3.加盖
面向对象:关注需要哪些对象,由于建造师可以造楼所以只要找到建造师就行啦
建造师(对象)
    》打地基(方法)
    》垒砖 (方法)
    》加盖  (方法)
可以看出两种思想都能达到解决问题的目的,只是思考的方式不同,在举几个现实生活中的面向对象的其他例子:
1> 想打电话\发短信 --- 找手机这个对象,不用分析电话拨通及通话的具体过程,这些由运营商做好了,我们只管找到终端也就是手机这个对象用它的打电话方法就可解决问题。
2>去饭店吃饭--找服务员这个对象,不用分析这个菜怎么做的这个过程
3> 电脑坏了   -- 找电脑修理工这个对象,不用分析你这电脑是修硬件还是修软件以及怎么修,找到他就可把电脑帮你修好。
总之面向对象跟贴近我们生活中遇到的问题。
作者: 粘糊浆    时间: 2015-3-18 17:26
对象都有一个指针指向它。 对象相比基本数据类型,内容更丰富,可以有自己的成员变量,可以将一些代码封闭成起来,形成自己的方法,提高了安全性,提高 了代码的复用性。
作者: still过客    时间: 2015-3-18 17:32
编程思想的发展,是从面向过程到面向对象。面向过程,简称OPP,它是以事件为中心,事件是核心,列出了完成事件的每一个步骤,一步一步完成。面向对象,简称OOP,它是以事物为中心,参与事件的事物是核心,完成事件只是事物的一个小任务。面向对象侧重于从问题在寻找客体、客体的作用。客体间的关系即“谁”、“做什么”、“怎么做”,面向过程侧重于问题的分解即“事件怎么做”。
作者: 寂静夜凄凉    时间: 2015-3-18 17:47
面向对象是具体的实例(它里面有很多属性),而面向过程是实例(属性)的构成,记得李老师讲OC时里面有个表那张图片, 面向对象就是那个表的外表,面向过程就是那个表的心脏。。
作者: 代翰麒    时间: 2015-3-18 17:55
希望可以顺利入学
作者: 代翰麒    时间: 2015-3-18 17:58
个人理解,面向对象是从一个对象为单位,去考虑事情,比如说小明踢足球,那么这个过程按照面向对象的方法,可以把小明作为一个对象,足球作为一个对象来拆分。而不去想小明怎么去踢。
作者: manitowang    时间: 2015-3-18 17:58
面向对象的设计。可看做五子棋,整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。可以明显地看出,面向对象是以功能来划分问题,这样设计出来的所谓面向对象的程序有良好的可移植性和可扩展性。
作者: BeNotJustCoder    时间: 2015-3-18 20:01
程序员?面向对象编程?——别逗了,没对象你编毛的程啊
作者: 约瑟翰庞麦郎    时间: 2015-3-18 20:09
面向对象更加贴近生活,符合人们的思考方式,只需要关心解决问题所需要的东西,而把解决问题的方法交给系统,因为系统已经把他们都封装好了(程序员的功劳),所以使用过程变得更加简便,比如手机界面,用户只需要点几下就OK啦。
作者: BeNotJustCoder    时间: 2015-3-18 20:36
我的自行车爆胎了
面向过程:将自行车放倒->拆轮胎->抽出内胎->找漏气点->打磨内胎->上胶水->补胎->把内胎塞回去->装轮胎->OK
面向对象:找一个修车店(创建对象),他补胎(调用方法),把自行车给它(对象当参数给他),OK,So easy.
作者: richardchan    时间: 2015-3-18 21:32
说说我的理解,面向对象就是直接把所有事物都当作独立的对象,处理问题过程中所思考的不再主要是怎样用数据结构来描述问题,而是直接考虑重现问题中各个对象之间的关系。可以说,面向对象革命的最重要价值就是在于改变了人们看待和处理问题的方式。:):)
作者: 童冀    时间: 2015-3-18 22:06
面向过程就是上面的一段话,得一步步执行,面向对象里重要的对象就是黑马币啦,创建一个黑马币类,command+c然后command+v........
作者: 一步一个脚印    时间: 2015-3-18 22:21
面向对象和面向过程都是一种编程的方法或者说是思想。面向过程以函数为模块,将一个大的问题分解成一个个小的问题,然后这些小的问题用函数实现,强调的是功能性。而面向对象提供了一种和现实世界很容易映射实例对象,这样在软件设计阶段的模型和开发时候的模型基本是一致的,大大简化了问题,利于大型编程。
作者: 13hoop    时间: 2015-3-18 22:44
面向对象在我看来是过程编程发展的必然,随着代码量的变大再多人协作的情况下,不可能照顾到每一项功能的具体实现,而面向对象通过一个个对象隐匿了具体细节,但同时模块化各项任务,更接近人类思维规则,加上权限分配,为项目的大型管理提供方便
作者: 贾永强    时间: 2015-3-18 22:55
我觉得面向对象除了三大特征外,还进一步体现了模块化的思想,使具有相同特性的归为一类,可复用性更高。
作者:  常洋洋    时间: 2015-3-18 23:00
面向对象就是不管怎么做成的,只知道谁会做就可以了,例如要去北京做火车,你找火车就行了,不用操心火车是咋跑的
作者: louxunxi4745    时间: 2015-3-18 23:01
C语言是面向过程,而OC是面向对象,把对象相同的属性归结为类,比如动物类,一只猫是动物的对象,一只狗也是,他们都有相同的属性,即四条腿,两只耳朵
作者: 木线    时间: 2015-3-18 23:08
面向对象比较好理解吧,我们每天的生活,越累越接近与面向对象的状态了。

比如说洗衣服,以前你洗衣服要找洗衣机,搁洗衣粉,接水龙头,设定洗衣机,接通电源等等,现在有个app叫做e袋洗,点一下手机,他们就上门来收衣服了,你让他们什么时候洗好,他们就送来了。你除了掏钱,啥也不用干。

就像你以前洗衣服是面向过程的,洗衣服过程中详细的怎么样洗你都要考虑清楚,比较复杂。

用app,就好像面向对象,你只需要把钱和衣服给他,让他洗好送回来,中间啥也不用考虑。好像这个app把你的整个洗衣过程给封装了,只是给了接口你可以用这个功能,至于到底怎么洗的,你不需要知道。

而这种设计,最根本的好处就是让我们的思维空间节省了太多。
作者: zzyyzz1992    时间: 2015-3-18 23:44
我也来水一水,:lol
面向对象是一种编程的思维吧,把一切都看成对象。
面向对象有许多的设计模式。在UI编程中有一种普遍采用的模式,叫MVC,Model View Controller。
Model对象用来存储数据
View 对象用来绘制界面
Controller 对象充当一个协调者的角色。相当于大脑,可以读取Model的数据,命令View进行界面绘制等。
在MVC中,写的优秀的符合MVC格式的代码三者分工明确,各司其职,互不越界。
在做小软件时或许不那么讲究也可以很有效率的搞定,但是项目一旦做大,代码一定要符合MVC规范,否则代码会越写越乱,陷入泥沼。
各位在学习时一定要多注意实践这种设计思想,从而提高代码规范性,养成良好的习惯!
作者: hero200521296bj    时间: 2015-3-18 23:47
我觉得面向对象就是,想实现一件事情,只需要创建一个对象去实现就好。这个貌似C语言也是函数和结构体的思想,但是与C语言相比,最大的优势在于面向对象还可拥有一个对象,人可以拥有一个狗,通过指针操作狗,实现狗的一些行为。这时候的OC功能就更强大了。所谓君子不器,君子是指有德者像现在的高层管理者,不能把自己当做一个容器,一个工具。而是要善于使用工具,也就是善用你的大臣,去做更多的事情。面向对象就是不要把自己当做一个工具,main函数的作用就是开拓思路,如何设计出更好的思路,想出更好的idea。
作者: 军团指挥官    时间: 2015-3-18 23:53
面向对象是一种编程思想,与面向过程最大的不同就是考虑问题的视角不同;
面向对象,关键在于一个对象。这种思想着重考虑一件事情完成过程中都有哪些对象参与其中;
比如上班这件事,面向过程就要考虑很多细节问题:早上起床,然后洗脸刷牙吃饭,刷卡坐地铁到公司,刷卡进公司上班等等, 要考虑很多很多细节问题;而面向对象考虑方法就简单的多,在上班这个过程中,我只需要考虑有哪些对象参与其中:人,地铁,公司。然后给对象定义一些动作,比如人:起床,吃饭,走路。地铁:载人。最后根据需要调用对象的各种方法动作,完成早上起来上班这件事。
这就是我理解的面向对象,求奖励。
作者: moresurui0308    时间: 2015-3-19 00:36
本帖最后由 moresurui0308 于 2015-3-19 00:37 编辑

这个只能笼统的谈谈自己的看法。
最主要的,面向对象设计使我们以一种自然的方式对待软件设计过程。
首先,人类其实是以对象的方式进行思维的,比如你正对着的电脑,手里的鼠标,脚下的汪汪或者喵喵。。都是常见的对象。这些对象都有共同点,它们都有属性(如颜色大小重量等)和行为(如汪汪叫或者喵喵叫或者撒娇。。。),软件对象也都拥有各种属性和行为。人类是通过研究属性和观察行为来学习现有的对象的,不同的对象拥有可以具有相似的属性和行为,我们可以对他们比较来区分(如汪汪是小狗,喵喵是小猫)。
然后,这样看来,面向对象设计其实是类似人们描述现实世界对象的方法对软件进行建模啦。面向对象可以利用类内关系,即某个类的对象都有一样的特征,如交通工具类——电动车汽车小三轮就有很多共同点。面向对象也可以利用继承关系,即新的对象类是由吸收已有类的特性加上自己独特的特性派生的。比如“超能人”类的对象当然具有一般性的“正常人类”的特性,只是它有更为特殊的属性(蜘蛛侠和你有相当多的共性,但是人家会吐丝,你会么。。)。
当然面向对象设计的封装性能对信息进行很好的隐藏。
关于面向对象和面向过程。。。面向对象语言(如C++)和面向过程语言(如C)。C语言中编程单位是函数,而C++中是类,类最终要实例化为对象,类包含了实现操作的函数和实现属性的数据。
小弟愚见。。。只是有模糊的概念但是说不清楚的感觉。。
作者: 安若宸king    时间: 2015-3-19 08:46
面对对象,把重点放在需要处理的对象上,淡化过程的概念。面对对象的方法,可以把处理方法封装起来,而使程序员把精力放在功能的实现上,达到更好的功能实现
作者: 锵锵来跳鱼    时间: 2015-3-19 08:55
比如说要成立一所小学,我设计人这个类,利用这个类创建市长,工人,校长,教师,学生,我用对象市长获得土地使用权,利用对象工人制造生产材料,并且建造小学,利用对象校长管理学校,利用对象教师教授学生,利用对象学生来接受知识。我通过创建所需对象,并指挥调度对象完成我要完成的任务。
作者: azen    时间: 2015-3-19 09:50
额。我会先设计小学这个类,然后调用小学类的alloc init方法创造小学对象。然后调用小学对象的建造方法建小学,调用对象的管理方法,管理小学
作者: 落花有意    时间: 2015-3-19 09:54
  我记得有个师哥跟我说过,面向过程和面向对象的区别,他拿炒西红柿打的比方,如果是面向过程,就要考虑先放油,再放西红柿,放调味料之类的。而面向对象,就是把东西准备好,直接放到锅里就OK了。面向对象,特点有封装,继承,多态,编程的时候更加好用。或者说像现在的一款沙盒游戏叫做《我的世界》,面向对象给我们的就是让我们建造一个个的砖,通过不同的调用和构造就能造成全世界。
作者: 歧路    时间: 2015-3-19 10:40
面向对象就是直接将各种事物作为对象,直接命令他们做一些事情,而不用管它们怎么做
作者: 舒少勇    时间: 2015-3-19 12:48
对象与类的关系:
对象是类的实例化,类是对象的实现细节,
当没有为类创建人和对象时 类本身并不存在于内存当中的
每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。

作者: Plus.    时间: 2015-3-19 14:39
面向对象就是将事物拟人化,将它们看作一个个具体的生命,他们会在特定的条件(参数)下做一些特定的事(返回值),我们只需要给她那个条件(参数)叫她去做什么就行了,而不用去管她为什么要那么做怎么会那么做,面向对象的这种思想也更符合人类的思考方式,所以引入面向对象的思想来编程会使编程简单化、合理化,写出更有条理、更健壮的程序
作者: yyx1992    时间: 2015-3-19 16:54
本帖最后由 yyx1992 于 2015-3-21 00:30 编辑

面向对象是一种模拟人思考的东西,类可以理解为组成对象的元素或模块。例如,你看到一辆车,那么车就是一个对象,而车的轮子,速度,发动机什么的都属于组成部分,就是“类”。面向对象拥有行为,相对智能一些,比如这辆车要跑,我只需调用它跑的行为就可以了,而至于它怎么实现的我可以不用管。因此面向对象更容易令人理解,更好的编程,对象可以继承对象,包含对象;就比如汽车,我可以说它继承了(属于车)车,但是包含了发动机这个对象,与现实生活十分相似,因此更容易理解与实现面向对象三大特性:封装,继承,多态

作者: ★W...    时间: 2015-3-19 18:25
你不懂电脑,但你又要买。你去买就要被人坑,因为你不懂电脑。怎么办呢?找个懂的人吧,他封装了一些功能:他了解硬件,了解行情等。这个人就是你要的”对象“。
作者: yuang4074    时间: 2015-3-19 19:12
我觉得面向对象,可以让程序员更加具体的把现实世界映射到计算机世界,更好的表述现实世界,让计算机更好的理解现实,更好,更快,更智能地完成人们预期的功能。
作者: qq350106106    时间: 2015-3-19 19:39
个人感觉还好呀!
作者: Reliable    时间: 2015-3-19 19:43
我对面向对象的理解:首先要理解什么是类才能搞懂什么是对象。类就是通过抽取事物的特点把一群具体的东西抽象化。而对象则反之这个过程,在抽象化的群体中给其中之一注入灵魂,使他成为群体中一个具体的个体,我们知道名,知道姓。好比我和我的同学都是学生,我们都要上课,我们都是20多岁,学生是一个类,它包含了一群这样人的群体,所以它没有具体的名字,因为它代表了一类人,但是它有这一类人的特点,共性。而我则是其中的一个对象,是这群人中的一个具体的人。这就是对象
作者: jackwang    时间: 2015-3-19 20:00
本帖最后由 jackwang 于 2015-3-19 20:27 编辑

面向对象:
    字面意思,将视角放在对象上,开发,解决问题,分析问题,思考问题,都站在对象的角度上考虑。
    我觉得和面向过程对比,更能体会出面向对象的思想。面向过程,就是解决问题时,着眼于过程。将一个大问题分解成一个个的过程来解决。而面向对象的思想告诉我们要分析出问题中有那些对象,依靠对象提供的功能和属性去解决问题,而不是依靠过程(即函数)去解决问题。
     如果你一直用面向过程的思想解决问题,你会发现,实际上是你在一个人控制着,完成着整个程序的流程。
     而用面向对象的思想,每个被创建出来的对象都相当于一个具有一定功能的小人,这些小助手可以听你的
   指挥,并完成你交给它的任务,从而使得你开发起来,尤其对于解决大型复杂问题感觉容易的多,因为你有了助手,只需要下达命令就可以了,至于如何实现的,对象来帮你完成,面向过程就无法做到这一点,只能是下达命令到方法(过程),而一个方法的独立性往往比较差,和其他方法的耦合程度有时很高,最后形成一团纠缠在一起的乱面条,正是无法将他们相对屏蔽封装起来,才要出现面向对象的思想。也就有了类,封装的特性。
      所以面向对象的思想要求我们在描述事物时,要站在事物的角度上,想想自己是该事物,哪些事情应该是我来做或者我来做最方便、最合适的,哪些事情是我独自就可以解决的,哪些功能是我可以对外提供的。要将事物看成一个具有生命的独立个体来去描述事物。所以毕老师说的经典例子:如何画圆,圆最清楚。因为园中有描述一个圆实例的半径的字段,有圆心位置字段,甚至有圆的颜色字段。
     至于继承、多态,这些都是在封装之后,为了描述类之间的关系,对象之间的特性而出现的技术。最核心本质的还是对事物的描述,即类的封装、定义。而对于提高代码的复用性,可扩展性,灵活性,健壮性,这些都是在封装的基础之上。      其实面向对象中也有面向过程,面向对象中的每个对象中功能的实现就是面向过程的。实际上面向过程比较适合于我们个人平时的思维,因为平时我们就是自己干,不求人,也不指挥别人,我们是一个工程的具体施工者,是一个大楼的具体建造者。而面向对象是让我们作为领导来去解决问题,作为一个指挥者,指挥一个个的对象去解决问题,然而一个个对象的创建过程,构造过程,就又用到了面向过程,然而你只需要用面向过程创造一次这个事物就可以了,以后你只需要知道该事物所提供的功能,去指挥它就好了。不需要再考虑该事物如何构造、运转了。这其实就会降低了我们做大型复杂项目的难度了。
      另外,受上面的坛友启发,觉得应该补充这一点,类的出现,也即面向对象思想的出现,使得,我们有了抽象的事物、具体的实例个体的概念。这样的概念非常有利于开发,但是它是牺牲了一定的效率,使得数据有一定的冗余来达到便利开发的。所以,当我们熟悉了解面向对象后,会发现,面向对象的思想站在的角度是上帝的角度,面向过程的思想站在的角度人的角度。面向对象的思想更适于我们去描述这个世界,因为它给出了抽象(类)和具体(实例)的定义。



作者: hellooc    时间: 2015-3-19 21:27
面向对象编程引入了类和对象的概念,把一些具有相同特性,包括行为和属性的事物归为一类,这一类中的个体就是属于这个类别的对象,并在此基础上产生了封装、继承和多态的概念。
封装:类中定义的属性只有类中的对象才拥有,并通过访问控制来控制外界是否能够通过对象访问其属性,类中定义的行为(即方法)也只有其对象才拥有(可使用)。通过封装可以使代码称为一个独立的块。
继承:把类再细分成多个子,这些划分出来的类不仅拥有原类中的所有属性和方法,还具有自己特有的属性和方法,原类就称为父类或超类,划分后的类称为子类,子类还可以再细分称多个类。继承可用于扩展代码。
多态:只要对象属于这个类或者其某个子类,都可以通过指向这个类的指针调用该对象的方法,即同一接口访问多个不同对象的方法。
不论封装,继承或者多态都大大提高了代码的可重用性。
作者: darewolf    时间: 2015-3-19 23:19
面向对象,就是通过分类,把有共同特点的生物分到一类(比如在生物学分类,植物,动物,哺乳动物......),更加符合人们的逻辑思维。用在计算机编程中,通过分类,总结共性,找出个性。用封装,继承,多态,简化问题,提高效率。
作者: 岳挺    时间: 2015-3-20 02:08
面向对象是相对于面向过程来说的,面向过程,如果需要实现某个功能的话,需要一步步具体步骤来实现这个功能,但是面向对象的话,我们只需要调用这个对象的某个方法就能实现这个功能,而这个方法具体细节如何,我们并不需要知道。一个简单的例子,我们算一个2的5次方,面向过程我们需要2*2*2*2*2一步一步才能计算出来,但是面向对象的话,我们可以用计算机,用计算机的乘方功能就能算出来。
作者: sydie    时间: 2015-3-20 09:57
类别不同,所对应的功能不同。面向对象,首先要对对象按一定方式分类。
作者: gaizuojia    时间: 2015-3-20 10:38
面向对象不就是你喜欢一个人,不管做朋友还是做恋人,你只关注这个人。
作者: marswawa    时间: 2015-3-20 10:48
面向对象的好处我想从两个角度去分析,一个是对象本身,另外一个是对象的使用者。
我们可以将汽车看为一个对象,他能实现载人的功能,他内部的发动机,各种配件如何协作,如何装配,如何制动等等细节功能只有造汽车的人知道,这些功能没必要给使用汽车的人知道,这样就使的分工明确,我专心设计对象的每一个功能和细节,只要将必要的接口开放给使用者即可,如方向盘,和刹车闸,作为汽车的使用者只需关心如何通过对象接口使用对象即可,对对象内部运作原理无需担心,这样就会使得造车的专心造车,造船的专心造船,造飞机的专心造飞机,大家分工明确,互不干扰,整个团队的效率都得到了提高,最后我想说未来是面向对象的天下。
作者: czh251    时间: 2015-3-20 12:56
对象就是很多属性的集合体,有了这个对象,可以对这个对象进行操作,甚至其他对象也可以使用这个对象。
作者: sixleaves    时间: 2015-3-20 16:12
:D 面向对象封装是为了和别人合作、但是又不想让别人乱动代码。所以需要把一些东西封装为private。还有一点是为了提高代码的复用
:D面向对象继承、继承即可以提高代码的复用。又可以配合实现多态、我记得java的面向对象和C++的是这样的,嘻嘻、
:D至于多态、其实觉得多态的实现也是为了提高代码的复用性,方便编写和维护、、、
所以、我觉得面向对象这种技术,就是改进了编写大型软件的方式、提高了代码的复用性、比较方便维护、比较容易在开发人员之间相互合作、交流。
作者: iMcG33k    时间: 2015-3-20 16:21
本帖最后由 iMcG33k 于 2015-3-20 16:24 编辑

面向对象不就是把程序分成一个个人么,每个人都有都有自己会做的事情(方法)都有自己知道的知识(数据),大家也都有自己的师傅(父类)、徒弟(子类),师傅能干徒弟的事(多态),自己不会的交给别人做(代理),大家安同一标准做事情前立个规矩(接口、协议),你师父没教你的我教你了(分类),没必要给人看的东西就把它们藏到自己心里(封装)。。。
作者: 殷俊    时间: 2015-3-20 18:20
面向对象:说高深点,就是万物皆对象,嘿嘿
说简单点,那么就有三大特征:封装、继承和多态;面向对象,就是将一系列细节和功能隐藏起来,也就是封装,作为操作者,就只需要通过封装后的对象,就可以实现功能,就好比我不知道电脑在内部结构和运作的方式,但我依然能通过这个外部所呈现的对象来获取他的功能,这样就使一切变的简单起来,当然你也要知道这个对象有哪些功能才行。
举个例子,比如小明的爸爸是木匠,小明从小跟爸爸学会了做木工,一天小明的爸爸叫小明和他一起去修房,那么这个时侯小明就是一个对象,小明爸爸作为操作者,只需要知道小明会修房,然后操作他,也就是叫上他一路去修房就行了,不需要知道小明具体会怎样动作,这就相当于小明自己封装了这些功能。等小明去修房后,小明爸爸发现小明不仅学会了自己的修房技术,而且还有自己独特的修房技术,这时,我们可以说,小明继承了爸爸的修房功能,并且还定义了自己特有的方法。有一天小明爸爸不在家,有人找他去修房,小明代替爸爸去了,一样把房修好了,那么这时就体现出多态的特点。


作者: 陈捷旋    时间: 2015-3-20 19:13
面向对象就是一思想。比如我去一家公司面试,老板叫主管来面试我,那么对于老板 主管就是对象,因为他有筛选他人的能力,知道谁能做这工作谁做不了。而相对于主管来说我就是对象,因为我能做那些他做不了或是不愿做的事情,这就是简单的面向对象的讲解
作者: jackchen    时间: 2015-3-20 21:43
我的理解就是面向对象主要是和“结构化”过程相区别的把,所谓结构化就是通过算法一步步的来解决问题,像机器人一步一步走都是通过算法设计好的。而面向对象则不必那样死板,无论程序员怎么写程序,只要能满足用户的最终需要就行了,非常灵活。再来解释下对象,所谓对象就是我们所遇到的一切任何事物包括人,动物啊等。面向对象有三个最基本的特征,即:封装、继承、多态。封装很好理解就是一块整体的东西里面包含了很多小的东西,比如飞机里面的核心技术发动机,我们不知道发动机的内部构造,但我们只把它拿来用就可以了。继承就更好理解了,比如我们人类或者动物都有继承各自祖先的特征,反映到程序上来就是通用的属性和方法。多态字面意义上理解就是类别很多,比如同样的狗有不同的品种。
作者: 临汾皮皮    时间: 2015-3-20 22:57
面向对象就是把一些本来很死的代码步骤,以及繁琐的算法,通过对象来进行层次化,创建对象很重要,对象内部的方法可以自己写,也可以使用系统的,在我们需要调用对象的时候,创建它就好了,不用管它内部如何计算,如何调用。面向对象省略了一大堆头疼的代码量,让我们轻松~~
作者: hero200521296bj    时间: 2015-3-20 23:58
中括号左边是方法实施者,首字母大写的就是类,一般是要去创建一个新对象,返回值一般是指针;首字母小写的是对象,一般是要做某个事情,返回一般是具体的数值。
作者: 杨先生    时间: 2015-3-21 11:31
面向对象的编程思想就是把你需要解决的问题中的所有具体的东西,都看成一个对象,然后把所有具有相同性质的对象组成一个类,那些与问题无关的对象则忽略。比如你自己的班级,对于你来说,你们班就是一个班级对象。而班级中的某个具体的人,他也是一个对象。
作者: 王超1991    时间: 2015-3-21 12:00
面向对象设计是从现实世界中抽象出与其相应的信息世界中的模型,以便进一步在计算机世界中模拟实现现实世界中的功能。
这需要从具体的事物中抽象,发现它们的共同特征,无外乎是状态与功能,然后定义为类,即相当于模板,具体的事物则是一个个实例。
   状态与功能分别用类的属性与类的方法来表示。
从以上可知,类的对象是现实存在的,不用去发现,而要从一个一个的实例对象中抽象,发现类。
作者: Etby    时间: 2015-3-21 20:06
万物皆对象?
将各种事物的属性和功能抽象化,数据化。
然后抽取相似状态进行分析,形成不同的体系。
最后万物归根,抽象出来并且数据化,形成了类与类类型。
然后,我们就可以自顶向下,不论是任何一个事物,都可以用数据或者类来表达。
然后,就可以让我们的程序描述以及计算很多关于事物的问题。
然后就是不断的面向对象编程。
作者: caishipi    时间: 2015-3-21 20:37
面向对象,字面上的理解就是直接面对面的意思。在计算机语言这方面来说,就像C++语言,OC语言,java语言等高级语言,它们易懂且接近生活语言,也就是像面对面沟通一样。
作者: koala1122    时间: 2015-3-21 22:18
是针对面向过程而言的另一种编程思想,面向过程是把功能用一句句代码,把功能分成若干个步骤,每个步骤完成,就完成了功能。而面向对象则是更接近于人做事的思想,人去做什么,都是用一定的方法去完成某件事,而具有相同特征和行为的一些对象可以称为一个类,相同的类可以调用共同的方法等等
作者: Hua_san    时间: 2015-3-21 22:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: Hua_san    时间: 2015-3-21 22:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: Hua_san    时间: 2015-3-21 22:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: 唐绍禹    时间: 2015-3-22 10:53
我的理解是,面向对象就是把一些复杂的过程简单话,分模块,这样思考起来简单,解决问题严谨,不容易出错。比如举个简单的例子,盖一栋楼房。工程师将图纸画好,规划好后,会让做预算的算一下大概的需求,那么他只会给做预算的一个指令就够了,至于做预算的是怎么在计算他就不用再详细的思考。因为在之前预算就学会了一套计算方法,相当于调用这个方法,实现这个方法。盖楼房就可以看做一个类,预算只是其中的一个方法。这样以后再盖房子还是一样的使用这个类创建一个对象,同样的步骤,而且不容易遗漏和出错!   
作者: arethusa    时间: 2015-3-22 11:19
就是以对象为中心思考问题,从一般对象分析出对象共有的属性,方法,从而创建出类!相对于面向过程能更生动的解决问题
作者: 王强~    时间: 2015-3-22 12:45
面向对象就像钢铁侠,有多个部件组成,这些部件,有的是为了修饰钢铁侠外形,有的是为了实现钢铁侠的某部分功能
作者: darewolf    时间: 2015-3-22 14:48
万物皆对象。

作者: 大梦成    时间: 2015-3-22 15:04
之前学过在复杂的软件工程中,面向对象能够让框架直接映射代码,因而使代码可读性增强,同时也容易维护,代码的可重用性也大大的提升了。
作者: oucding    时间: 2015-3-22 16:04
面向对象仿佛就是汽车生产商把汽车造出来了,他只告诉你怎么开,怎么停,想听音乐按哪个键,想导航又是按哪个键,他是不会告诉你汽车内部怎么构造,这根电线干啥的,那个轴是起啥作用的
作者: 静好    时间: 2015-3-22 18:52
通俗地讲,面向对象只关注解决问题需要那些对象,通过对象所具有的功能和属性解决问题。
作者: 铅笔头    时间: 2015-3-22 18:59

   面向对象(Object Oriented)简称OO,是相对于面向过程而提出的一种
编程思想,也是解决问题的一种思路。
    首先我们谈谈面向过程,它是一种以事件为中心的编程思想,就是分析解
决问题所 需要的步骤,然后用函数把这些步骤一步一步的实现,使用的时
候,在一个一个的调用。例如:考试(发卷子,做题,收卷)。
    然后我们看面向对象,它是一种以事物为中心的编程思想,就是将事物抽
像成为对象,将事物的行为看成方法,将事物的属性看成是成员变量。在解决
问题时,只需要找到相应,方法的对象,调用即可。例如:考试,找 老师,
学生。具体老师,和学生怎么做,在调用时,我们是不用操心的。
    深入的去理解,面向过程的思想就是代码的“流水账”按照时间的先后,一
步步完成任务,而面向对象,则是将所有的属性和方法以事物为标准进行分
类。在将每一类方法和属性写好封装在事物中。然后我们在做任务时,只要调
用事物及做好的方法就可以了!
本人入学考试考这个。。。。。
作者: tubao1991    时间: 2015-3-22 22:02
面向对象主要有三大特性:封装,继承,多态。封装的优点是将变化隔离,便于使用,提高重用性和安全性。常见为:getX();setY();使用继承的优点提高了代码的复用性,提高了软件的开发效率,降低了程序产生错误的可能性。 让类与类之间产生了关系,提供了另一个特征多态的前提;多态的特性是程序的抽象程度和简捷度更高,提高了程序的扩展性,有助于程序设计人员对程序的分组协同开发。
作者: 老树    时间: 2015-3-23 09:15
面向对象,是将所有的属性和方法以事物为标准进行分
类。在将每一类方法和属性写好封装在事物中。然后我们在做任务时,只要调
用事物及做好的方法就可以了!

作者: Ammar    时间: 2015-3-23 09:57
面向对象就是不管要做什么事情,都必须先创建可以做这件事情的对象,然后通过对象调用对象方法来执行做这件事情的思维方式。而面向过程就是 直接想办法通过各种方法搞定这件事就可以啦,至于是谁搞定的不重要啦,重要的是这件事被解决了。
作者: Moo頭    时间: 2015-3-23 10:29
限时一周,还来得及吧。
面向对象是一种思想,可以让复杂问题简单化,让角色从执行者变成指挥者
具体将功能封装进对象,强调具备了功能的对象
例如两个人在不同城市要说话,面对面交谈就很麻烦。但是他们可以调用手机的通话功能,通过手机进行交谈就变得简单,至于手机怎么通话由手机自己解决。
作者: 王俨    时间: 2015-3-23 13:49
黑马报名费在网上支付靠谱吗?求交过的人回答
作者: chenyf    时间: 2015-3-23 16:11
谢谢,说下我的理解。
面向对象为对象的使用者隐藏了数据的复杂性, 把原本暴露给用户的复杂部分隐藏了起来, 通过封装等手段, 只暴露出几个接口, 用户通过这几个接口来操纵对象中封装的数据。
现实中有这样的例子:电视机就是一个很好的例子。
我们不用管电视机内部是怎样实现的, 不用管它内部复杂的电路就可以使用它, 通过电视机上的按钮, 我们可以打开电视, 关闭电视, 切换频道, 调整音量等等。 电视机上的那些按钮就像接口, 我们只需操纵按钮就能操纵电视机了, 不用管它内部怎么实现。
当然面向对象还有继承特性。举个例子: 假如一个老鼠父类,这种老鼠都会打洞, 它有个子类叫水老鼠, 水老鼠除了会打洞(继承于父类), 它还会游泳, 这个技能是父类中所没有的, 继承允许子类有自己独特的方法(例如游泳)。
作者: yangzeyu    时间: 2015-3-23 21:38
面向过程关注的是解决问题需要多少步骤,面向对象关注的是解决问题要找哪些对象。面向对象就是利用这些对象的功能来达到目的,不会再去考虑里面的步骤。
作者: guanguan0622    时间: 2015-3-23 21:48
面向对象就是站在对象上去考虑问题。如果你去算一个长方形的周长,你就要考虑长方形的长和宽。你要先定义长方形的类,然后在类里定义长和宽!




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