一、知识点介绍
1、概念说明
1)面向过程:是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。
(简而言之,面向过程强调的是功能行为,以函数为最小单位,考虑怎么做。)
2)面向对象:是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。
(简而言之,面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。)
2、优缺点比较
1)面向过程
优点:
流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。
效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。
缺点:
需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。
2)面向对象
优点:
结构清晰,程序是模块化和结构化,更加符合人类的思维方式;
易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;
易维护,系统低耦合的特点有利于减少程序的后期维护工作量。
缺点:
开销大,当要修改对象内部时,对象的属性不允许外部直接存取,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。
性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。
二、代码实例展示
'''
以下代码使用了面向过程的开发方式。
我们定义了两个函数,一个用于计算矩形的周长,一个用于计算矩形的面积。
然后在程序中调用这些函数来计算并输出矩形的周长和面积。
'''
# 面向过程开发
def calculate_perimeter(length, width):
perimeter = 2 * (length + width)
return perimeter
def calculate_area(length, width):
area = length * width
return area
# 调用函数计算矩形的周长和面积
length = 5
width = 3
perimeter = calculate_perimeter(length, width)
area = calculate_area(length, width)
print("周长为:", perimeter)
print("面积为:", area)
图 1 面向过程
'''
以下代码使用了面向对象的方法进行开发。
我们定义了一个矩形类(Rectangle),其中包含了矩形的长度和宽度属性,
并且定义了两个方法用于计算矩形的周长和面积。
'''
# 面向对象方法
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def calculate_perimeter(self):
perimeter = 2 * (self.length + self.width)
return perimeter
def calculate_area(self):
area = self.length * self.width
return area
# 创建矩形对象
rect = Rectangle(5, 3)
# 调用对象的方法计算矩形的周长和面积
perimeter = rect.calculate_perimeter()
area = rect.calculate_area()
print("周长为:", perimeter)
print("面积为:", area)
图 2 面向对象
三、总结
1)在面向过程开发中,程序的设计主要集中在函数的定义和调用上。函数是根据具体的操作逻辑编写的,并且通过传递参数来完成特定的任务。数据和函数是分离的,函数通过参数进行数据的传递和返回结果。
2)在面向对象方法中,程序的设计主要关注对象的创建和方法的调用。我们通过创建一个矩形对象(rect)来表示具体的矩形实例,然后通过调用对象的方法来完成相应的计算任务。对象封装了数据(即矩形的长度和宽度)和对数据的操作(即计算周长和面积的方法),通过方法来访问和操作数据。