然后,面向对象呢,狗是一个对象。所有狗都有共同的操作(方法)只是在不同的场景下使用不同(选用和顺序不同等)。而每一个对象都有自己的属性,比如狗狗的name和alive,这和 C 中的结构体是一回事。而在调用的时候,都是以对象为开始,目标对象很明确。而且通过 Dog 的定义,也能知道狗到底有哪些操作可以进行。(虽然一般都是在文档里说清楚的,但是现代IDE的自动完成功能已经在很大程度上代替了翻文档这件事)
其实说白了,面向对象的关键在于对象……没有对象,一切都无从说起。对于由OOP而生的一大堆设计模式,同样可以用单纯的 C 语言实现出来。我记得 Gnome 就是纯 C 风格的界面库嘛……人家 OOP 的 Qt 能干的事情,非 OOP 的 GNome 一样可以干
如果只有C经验,JS并不是一门合适的用来体会面向对象的语言。JS中实现面向对象的思路(原型继承)和市面上几乎所有语言都不一样,并且有自己的独特性和难点。
相比较之下Java、C#是“正统面向对象”的选择
以Python、PHP、Ruby为代表的脚本语言虽然大都是{面向过程/面向对象/函数式}的混合,但其中OO部分远比JS容易理解&相对通用
如果你的目标是学JS,那就学JS,如果你的目标是学OOP,那《JS中的OOP》和《其他语言OOP》基本是两件事情。以上。
假如你养狗,
领养
给取个名
然后每天做的事情
喂狗
带狗上厕所
如果下雨呢就把狗关屋里玩
如果没下雨就把狗放
晚上给狗洗澡
之后陪狗玩一会儿
把狗关狗窝里睡觉
就这么直到狗死
把狗埋了
用 C 来实现是什么样呢
可以看到,这一系列的事情,都有一个主体:狗。当然用 javascript 也可以同样的实现,不过要说的是面向对象方式
用 javascript OOP 来实现是什么样呢
有啥一样有啥不一样
可以看出来面向对象和面向过程其它没多大区别,主要流程还是顺序、分支、循环。其主要的区别在于,函数(方法)所附着的对象。
面向过程的时候,操作是没有固定对象的,需要将要处理的对象作为一个参数传递进去。而且对于一个开发者来说,你也不知道对狗操作的函数到底有哪些。
然后,面向对象呢,狗是一个对象。所有狗都有共同的操作(方法)只是在不同的场景下使用不同(选用和顺序不同等)。而每一个对象都有自己的属性,比如狗狗的
name
和alive
,这和 C 中的结构体是一回事。而在调用的时候,都是以对象为开始,目标对象很明确。而且通过 Dog 的定义,也能知道狗到底有哪些操作可以进行。(虽然一般都是在文档里说清楚的,但是现代IDE的自动完成功能已经在很大程度上代替了翻文档这件事)其实说白了,面向对象的关键在于对象……没有对象,一切都无从说起。对于由OOP而生的一大堆设计模式,同样可以用单纯的 C 语言实现出来。我记得 Gnome 就是纯 C 风格的界面库嘛……人家 OOP 的 Qt 能干的事情,非 OOP 的 GNome 一样可以干
设计模式
设计模式
设计模式
重要的东西说三遍,不会使用设计模式的思想你永远写不了好的面向对象,而且设计模式也很简单
面向对象一般要配合着设计模式,我也是只会过程式不会抽象面向对象,也正在学习中。你把面向对象学完应该接着学习设计模式,会有帮助的
我就不信你写c的时候不大量使用结构体和配套的函数。
只要多写就好了,我估计大多数人一开始的时候都写过很多class{}包裹起来的过程代码,多写多总结就好了。
最好是找点比较好的项目,那种你自己会使用到的项目,自己尝试写一次,然后再去读别人的实现,反省一下自己的实现有什么问题。
带着实践过程中的问题,再去读OOP的文章和书,就会有体会。
总之,别想速成,这个时间是以年为单位的。
C语言中有struct,使用struct你可以定义自己想要的类型,比如
可以看出,我们自定义了一个新的类型,有name、age、interest三个属性。
对于JS,我并不太懂,但是我就以C++举例吧,我们可以定义一个Person类
这个新定义的类,有name、age、interest三个属性,看起来是不是很像C语言中的struct,但是在C++的类中还可以定义类的方法,比如Person是人,可以说话,所以就定义了Say()方法,可以跑步,所以定义了Run()方法。
这里面只是简单的解释,但是面向对象会涉及到很多的知识,比如:设计模式、访问控制符、继承等。
大道至简. 面向对象的起因是希望程序语言更接近人类语言.
过程语言 像是叙事文.
面向对象 则更像是散文.或者说明文. 只要把事务描述清楚就好
面向对象的低层也是过程语言. 一个类.一个方法 最终在被调用时.还是依照调用顺序被执行.面向对象倾向于描述事务而不是描述过程.
使用角度.面向对象处理业务复杂度高的问题时,更有优势.
有人说java是面向对象的. 但你依然可以用它当过程语言来写.所以没啥好与不好. 只有更加适合.
用拟人的修辞手法,生动形象地表达出代码的作用
面向对象是一种编程思想, 而不是编程语言.
用C语言也可以写出具有面向对象概念的的程序来, 所谓的面向对象只是编译器提供给你的特性.
面向对象的三大特性--继承,封装与多态要好好去理解, 不是仅仅知道就可以, 而要深入去理解, 以后想深入的话可以试着去理解编译器是怎么来实现这一块东西的. 然后就是多写代码, 从C过渡的话, 最难的应该就是要把代码封装成类吧, 一开始都不习惯的, 都是一个函数一个函数写, 然后调用就好了, 强迫自己把函数功能分类, 一个类只提供同类型的一系列功能, 然后通过实例来调用. 差不多这么多吧.