<什么是面向对象>

 面向对象编程(Object Oriented Programming),简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元一个对象包含了数据和操作数据的函数

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

➤面向对象和面向过程实例对比

假设要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个dict表示:

std1 = { 'name': 'Michael', 'score': 98 }
std2 = { 'name': 'Bob', 'score': 81 }
 

而处理学生成绩可以通过函数实现,比如打印学生的成绩:

def print_score(std):
print('%s: %s' % (std['name'], std['score']))
 

如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student这种数据类型应该被视为一个对象,这个对象拥有name和score这两个属性(Property)。如果要打印一个学生的成绩,首先必须创建出这个学生对应的对象,然后,给对象发一个print_score消息,让对象自己把自己的数据打印出来。

class Student(object):

    def __init__(self, name, score):
self.name = name
self.score = score def print_score(self):
print('%s: %s' % (self.name, self.score))
 

给对象发消息实际上就是调用对象对应的关联函数,称之为对象的方法(Method)。面向对象的程序写出来就像这样:

bart = Student('Bart Simpson', 59)
lisa = Student('Lisa Simpson', 87)
bart.print_score()
lisa.print_score()
 

➤总结

面向对象的设计思想是从自然界中来的,因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。Class是一种抽象概念,比如我们定义的Class——Student,是指学生这个概念,而实例(Instance)则是一个个具体的Student,比如,Bart Simpson和Lisa Simpson是两个具体的Student。所以,面向对象的设计思想是抽象出Class,根据Class创建Instance。面向对象的抽象程度又比函数要高,因为一个Class既包含数据,又包含操作数据的方法。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

最新文章

  1. JSP连接数据库,报Unable to compile class for JSP
  2. HTTP Header
  3. 数据库ORACLE中函数decode的用法
  4. C# 面试的“区别”
  5. DES加密算法实现
  6. android studio手动加入jar包
  7. js字符串函数之substring() substr()
  8. csu 1303 Decimal (数论题)
  9. Ganglia 监控Hadoop
  10. log4cplus配置文件使用
  11. mysql 特殊语句
  12. perl lwp关闭ssl校验
  13. mtime,ctime,atime
  14. Azkaban使用简单笔记
  15. 将preg_replace()改写为preg_replace_callback()
  16. poj 1639 最小k度限制生成树
  17. 李宏毅机器学习笔记1:Regression、Error
  18. Debian 9 + Windows 10 双系统安装体验
  19. 解决游戏server负载上限问题
  20. python的raw_input()函数。 函数的可变对象和不可变对象作为参数传递。

热门文章

  1. virtual和abstract的区别和联系
  2. html中插入其他html,并实现动态效果!
  3. Android SDK的安装与环境变量的配置
  4. mysql数据库单表增删改查命令
  5. 在Oracle中查询表的大小
  6. React 16 源码瞎几把解读 【前戏】 为啥组件外面非得包个标签?
  7. hdu 2475 BOX (splay)
  8. 出现ERROR: While executing gem ... (Gem::FilePermissionError)这种错误的解决办法
  9. linux CentOS 上安装chrome
  10. vsftpd.log内容的意义