发表于: 2017-05-25 22:24:57
4 1051
【JS-TASK4】JS中的面向对象编程
小课堂
分享人:韩阳
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
1.背景介绍
什么是面向对象编程?
面向对象编程是一种通用思想,主要概念为:
把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)/泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派(dynamic
dispatch)。
为什么要面向对象编程
面向对象是为了解决系统的可维护性,可扩展性,可重用性。
2.知识剖析
对象的概念
“对象”是具有方法与属性的实物的抽象。
面向对象的特征详解
封装:找到变化并且把它封装起来
继承:子类继承父类,可以继承父类的方法及属性,实现了多态以及代码的重用,因此也解决了系统的重用性和扩展性,但是继承破坏了封装.
多态:接口的多种不同的实现方式即为多态。接口是对行为的抽象.方法不变,通过接收的参数变化,来实现多态。
如何封装一个对象
构造函数模式
functionCat(name,color){this.name = name;this.color = color;this.type ="猫科动物";this.eat =function(){alert("吃老鼠");}; }varcat1 =newCat("大毛","黄色");
构造函数模式存在的问题?如何改进?
Prototype模式
把那些不变的属性和方法,直接定义在prototype对象上
functionCat(name,color){this.name = name;this.color = color; } Cat.prototype.type ="猫科动物"; Cat.prototype.eat =function(){alert("吃老鼠")};
3.常见问题
如何实现构造函数的继承
4.解决方案
采用"拷贝"方法实现继承。
5.编码实战
functionAnimal(){} Animal.prototype.species ="动物"; Animal.prototype.hi="hello";functionCat(name,color){this.name = name;this.color = color; }functionextend2(Child, Parent){varp = Parent.prototype;varc = Child.prototype;for(variinp) { c[i] = p[i];console.log(i); species hi } } extend2(Cat, Animal);varcat1 =newCat("大毛","黄色"); alert(cat1.species);// 动物
6.扩展思考
面向过程到面向对象思维如何转变?
当我们习惯了面向过程编程时,发现在程序过程中到处找不到需要面向对象的地方,最主要的原因,是思维没有转变。程序员通常在拿到一个需求的时候,第一个反应就是如何实现这个需求,这是典型的面向过程的思维过程,而且很快可能就实现了它。而面向对象,面对的却是客体,第一步不是考虑如何实现需求,而是进行需求分析,就是根据需求找到其中的客体,再找到这些客体之间的联系。因此面向过程和面向对象的思维转变的关键点,就是在第一步设计,拿到需求后,一定先不要考虑如何实现它,而是通过UML建模,然后按照UML模型去实现它。这种思路的转变,可能需要个过程。
7.参考文献
参考一:赵学智
参考二:阮一峰
8.更多讨论
鸣谢
感谢大家观看
BY : 陈尚欢|韩阳
PPT链接:https://ptteng.github.io/PPT/PPT/js-04-ObjectOrientedPrograming2.html#/14
明天做的事情,准备复盘评审/复习
问题:假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。
评论