面向对象

面向过程编程(Procedure Oriented):
     “面向过程”是一种以过程为中心的编程思想。简而言之,面向过程强调流程化,步骤化的思考方式。程序的执行方式也是自顶向下,依次执行

    基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。

   举个典型的面向过程的例子, 数据库备份, 分三步,连接数据库,备份数据库,测试备份文件可用性。

 1 def db_conn():
 2     print("connecting db...")
 3  
 4  
 5 def db_backup(dbname):
 6     print("导出数据库...",dbname)
 7     print("将备份文件打包,移至相应目录...")
 8  
 9 def db_backup_test():
10     print("将备份文件导入测试库,看导入是否成功")
11  
12  
13 def main():
14     db_conn()
15     db_backup('my_db')
16     db_backup_test()
17  
18  
19  
20 if __name__ == '__main__':
21     main()
优点:流程明确,步骤清楚,便于分析
缺点:
  如果我们只是简单的实现一个功能,比如说我们之前写的购物车,是完全可以的
  但是当我们程序变得越来越大,每个文件和每个文件中的某些变量以及函数是有依赖关系的,当我们改了A文件中的变量或者函数的时候,其他文件也要跟着修改,此时程序就变得不好维护,并且随着程序越来越大,这种编程方式的维护成本也会越而来越高,使用面向过程的编程方式就显得心有余而力不足了。
 
面向对象编程:
    “面向对象编程”是将任何一类事物抽象成一个统一的整体来研究。
 
  核心:利用“类”和“对象”来创建各种模型从而实现对真实世界的描述
  
  我们来理解一下什么是类和对象?
   
   
   谁是类,谁是对象?
 
   好处:因为它可以使我们的程序变得简单维护以及可扩展,并且能够提高我们程序的开发效率。 

总结:

  类-----> 是对一类拥有相同属性的事物的抽象或者说模板。比如说 人类

   对象---> 是一个类的实例化后的产物,一个类可以造(实例化)多个对象,但每个对象亦可以有不同的属性。就像每个人是具体的对象,但人与人之间有共性,亦有不同
 
在我们程序中怎样定义类和对象呢?
  现在想要造N个人的对象:
 
  1.创建人类,且只需要创建一次    
  
1 class Human{
2 
3 }
  
      但是很明显,这个类是空的,显然和我们人类特征是不符的

  所以,我们想想,

  我们人类都有什么? (体重,身高,姓名...)--> 属性

  都能干什么?   (哭,笑,打招呼,吃饭...)--->方法

  在面向对象中,我们使用“变量”模拟属性,使用“函数”模拟方法功能

 1 class {
 2    // 属性
 3    public $name = "nobody";
 4    public $height = 30;  
 5    
 6   // 方法  
 7    public function  say(){
 8           echo "hello world";  
 9     }
10 }

  2.再由类创造人的对象,可以创建N个

 1 class Human{
 2     # 属性
 3     public $name = "nobody";
 4     public $weight = 30; 
 5     .....
 6 
 7     # 方法
 8     public function say(){
 9         echo "hello world";
10     }
11     ...... 
12 }
13 $zhangsan = new Human();
14 $lisi = new Human();
15 .......

   我们可以把$zhangsan当成一个箱子,里面装了N多的属性和方法,$zhangsan = {"name":'nobody','height':30}

   那我们来看,如果我们想要获取name属性值,我们应该怎么办?  

 1 class Human{
 2     # 属性
 3     public $name = "nobody";
 4     public $weight = 30; 
 5     .....
 6 
 7     # 方法
 8     public function say(){
 9         echo "hello world";
10     }
11     ...... 
12 }
13 $zahngsan = new Human();
14 
15 #获取name的值
16 echo "name:",$zhangsan->name;
17 .......

  3.如何选择面向对象还是面向过程,对于一个有着丰富开发经验的老手来说,这是个得心应手的过程。而对于一个新手而言,其实从两者的对比就可以看出,当我们的业务逻辑比较简单时,使用面向过程能更快的实现。但是当我们的业务逻辑比较复杂时,为了将来的维护和扩展,还是面向对象更为靠谱点!当然,当我们被经理催着上交项目时,不要再选择纠结了,哪个能让你更快的完成项目就用哪个吧!

   

原文地址:https://www.cnblogs.com/shangzekai/p/6142469.html