如有错误,欢迎留言指出讨论
1 面向对象和面向过程
1.1 面向过程注重的是结果,从结果出发去考虑问题的实现步骤。
1.2 面向对象注重的是设计,从现实生活的角度,从设计的角度去考虑问题的实现步骤。
1.3 虽然2种思想的目的都是为了做出一个程序,但是考虑问题的思想不一样。总之一句话:面向过程从结果出发考虑,面向对象以设计的角度解决问题。
1.4 使用情况:
· 对于一个小程序而言面向过程可能会更方便一点,可以很快捷的完成效果,面向对象反而会把简单问题复杂化,让初学者感觉很没必要。
· 对于一个大的项目而言我们不光看重的是程序结果,更看重的是程序的维护性和扩展性,保证这个程序不是一次性的程序,不是针对这一个功能而写的,最好保证这个程序将来使用的范围会更广,更好扩展。从这个角度考虑面向对象就更好一些了。
2 思想引入
2.1 问题1:
· 一辆车速度是60km/h,一条路总共1000km,请问多久可以走完。写出你的实现步骤。
· 你们肯定会这样写的,请看下方代码:
· 甚至会有人这样写,请看代码:
print(1000/60)
· 不管是第一种还是第二种做法其实都差不多,最终都能完成我题目的要求。但是这样写代码只能求出车速是60,路程是1000的用时,这段程序只能针对一个用户不适用于大部分的人,所以程序的扩展性很不好。其实这样写代码就是很明显的面向过程的思想,你的要求不就是要求出用时多久吗,只要我能完成结果即可,至于程序的扩展性我不考虑。以完成结果为目的,从结果出发考虑的问题,只要实现你的要求即可。
· 如果我想要扩展性比较好一点的程序,车速和路程是不固定的,是有客户来给定的,只要客户给出速度和路程我就可以求出时间这样的程序扩展性会不会好一点呢。应该如何实现呢?请看下方代码,可能有人会这样写:
· 上面这种做法是定义了一个函数,参数接收的是速度和路程,将来谁需要求时间只需要调用这个函数给出速度和路程即可,这样的话程序是不是就可以求出任意车速和路程的时间呢,拿这段程序和一开始写的代码作比较这段程序的使用范围是不是会更广阔一点。
· 其实上面的函数的做法就可以说是面向对象思想的体现了,将一段代码封装到一个函数中,将来这个功能可以重复的使用。这就是面向对象思想的第一个特征:封装。
2.2 问题二:
· 从这个程序可以看出虽然函数可以对一段代码进行封装,但是可能多个事物我们可能会写相同的函数,把不同的事物的代码全部写在一块可能会很乱,并且找起来也不方便。如果有一个容器里面可以封装很多的函数和变量的话这样我们管理起来是不是就很容易了。
· 在程序中可以封装很多函数和变量的就是类,关键字是class。
3 如何写一个类