面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统,交互式界面,应用结构,应用平台,分布式系统,网络管理结构,CAD技术,人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后到产物,是一种高级的编程思想。
面向对象就是一种新的编程模式。
面向过程?把所有的功能都写在一起,逐行实现
面向对象在其它编程语言中普遍使用,Java,PHP,Python
什么是对象?
什么是收音机,对象是一个整体,对外提供一些操作。
什么是面向对象开发?
就是在使用对象时,只关注对象提供的功能,不关注其内部细节。
比如,每次使用封装好的运动框架
注意:面向对象是一种通用思想,并非只在程序中使用,任何事情都可以使用----公司老板分配任务
面向对象的特点
封装:不考虑内部实现,只考虑功能实现
继承:从已有对象上,继承出新对象
多态:多种形态,一个功能的不同的应用场景
对象的组成
方法(有归属)----函数(自由的)
属性(有归属)----变量(自由的)
OOA和OOD
OOA面向对象分析:
人类起源:单细胞----人,进化过程中,增加了各种器官,各个器官之间分工协作
为什么统治世界的是人类?-----精密的分工协作
大规模分工,精密协作
面向对象分析:将大问题拆分成小问题,并试图用分工协作来完成的思维方式。
OOD面向对象设计:
1.分析模块后,确定职责
大哥招小弟--端茶倒水,点烟捶背捏脚
2.确定耦合关系
确定通信关系,如何交流,暗号
弊端:当耦合达到一定程度时,如果换了一个助理,需要重新耦合,资源消耗太大
高内聚低耦合
3.为OOP做准备
对象如何被发明的?
大量信息的处理和加工困难,打包之后,将内容包含在其中。信息传递速度更快,效率更高
面向对象和面向过程的区别
面向对象--先实现功能,再运行。分工协作,同时发生,解决问题。
面向过程--一边实现,一边运行。效率低下。
面向对象并不是程序员发明的。在程序中我们叫面向对象(OO),在生活中叫分工协作。
当我们需要一套可以反复经过使用的,经过分类,代码设计经验的总结时,就用到了设计模式。
设计模式:
工厂模式:原料、加工、出厂
function createPeople(name,age,like){
var obj = new Object(); //原料
obj.name = name; //加工
obj.age = age;
obj.like = like;
obj.show = function(){
alert("我叫"+this.name+",今年"+this.age+"岁,喜欢"+this.like)
};
return obj; //出厂
}
var obj = createPeople("AAA",23,"LOL");
var obj2 = createPeople("BBB",30,"JAVA");
obj.show();
obj2.show();
但是这种工厂模式已经被JS抛弃,
因为JS内置了一种的工厂模式
function CreatPeople(name,age,like){
this.name = name;
this.age = age;
this.like = like;
this.show = function(){
alert("我叫"+this.name+",今年"+this.age+"岁,喜欢"+this.like);
}
}
var obj = new CreatPeople("ABC",20,"PHP");
var obj2 = new CreatPeople("QWE",32,"Python");
obj.show();
obj2.show();
JS内置的工厂模式比传统的工厂模式更高效,复用性更强。
JS内置的工厂模式叫构造函数。
使用Json创建对象
var obj = {
name:"admin",
age:23,
like:"LOL",
show:function(){
alert("我叫"+this.name+",今年"+this.age+"岁,喜欢"+this.like)
}
}
obj.show()
function CreatPeople(name,age,like){
this.name = name;
this.age = age;
this.like = like;
this.show = function(){
alert("我叫"+this.name+",今年"+this.age+"岁,喜欢"+this.like);
}
}
var obj = new CreatPeople("ABC",20,"PHP");
var obj2 = new CreatPeople("QWE",32,"Python");
obj.show();
obj2.show();