编程基础概念:面向对象编程
===》点我返回目录《===
如今,在全球科技领域中广泛采用面向对象编程(OO)语言作为主要开发工具。这种方法论是基于传统结构化方法演变而来的。早期软件架构主要采用数据结构与算法相结合的方式进行设计与实现。随着软件复杂度不断增加,在单个应用程序中可能出现数百个函数、过程以及复杂的内部数据模型。维护工作变得异常繁重。为了简化管理与维护问题,开发人员开始将整个软件划分为若干独立的功能模块,并对每个模块进行专门的设计与实现工作。每个功能模块内部又包含了一些基础的数据类型和相关操作逻辑单元,并统称为对象(Object)。
基于这样的观点, 程序由一系列对象及其间的消息传递构成. 似乎并不出奇, 甚至觉得理所当然. 然而, 这一理念确实是一个重要进展. 这种模式最终演变为主流, 现如今所有系统都采用了这一模式
这个范式为什么好呢?理论上的研究表明,需求构成了“问题空间”,程序构成了“解决空间”,两个空间的相似度决定了解决的困难度。传统上,我们要解决一个问题,计算机给我们提供的却是寄存器、内存、加法器这一类机器的概念术语,所以那个时候将问题空间映射到解决空间的时候很复杂。而面向对象事件驱动的模型,跟现实世界的问题空间有一定程度的相似度,我们能够比较省力地进行映射,解决问题。这个现实世界,本就是一个一个主体客体构成,它们发生了什么事情,本来就是通过消息传递方式联系在一起的。面向对象编程有一些新的术语,如类,对象/实例,消息,方法,属性。我们后面会接触到。
不过我们也要清楚认识到任何一种编程范式都有其局限性。面向对象范式的一个显著问题是过分关注实体(对象),而未能将操作或算法独立化,在某些特定场景下可能会显得笨拙和繁琐。以关系数据库为例,在1970年代发展起来的基于关系理论的方法虽然强大有力但在与面向对象思想的兼容性方面却存在一定障碍,在软件设计过程中往往被迫采用ORM(Object-Relational Mapping)这样的映射机制这种复杂的解决方案不仅效率低下而且难以维护。我的观点是将关系数据库类比为管道而非传统的对象模型应该采用代数演算的方式来处理数据从而实现更为灵活高效的设计体系在这种情况下我们的设计模式应当更加注重同时关注实体、行为与关联三者之间的平衡而不能偏废其中任何一个方面。
Python涵盖了多种编程范式包括过程式编程、函数式编程以及面向对象编程此外还可以综合运用多种范式。我们所编写的程序会综合运用过程与对象两种方式并会进行相关讲解
Python类的结构是:
class ClassName:
<statement-1>
.
<statement-N>
代码解释
类是一种对象的概括性表现,在传统编程中相当于变量用于存储数据以及函数用于执行操作;同样也可以被视为单独完成特定功能的程序模块。
类本质上仅是一个定义,在运行时需要基于该类定义生成相应的实例对象进行执行。这些实例对象具有独特的属性集合以及一系列可执行的方法,并且不同对象之间的属性值互不干扰、独立存在。
而一类对象可以定义其子类。这些子类不仅继承了父代的基本属性与行为(methods),还可以添加自身特有的特性。任何现实中的系统通常都会建立一套完整的继承结构。这也是面向对象编程中的一个挑战。不谨慎地进行设计可能会导致整个体系结构混乱。所以架构师通常会创建接口或虚设的对象来作为系统的外部界面,
接着构造出抽象类别来进行基础功能的具体实现,
最后让开发人员根据需求定义具体的子类别并完成相关的业务逻辑处理。\n
在语言的实际实现过程中, 除了基于实例运行的方式外, 还会支持在类层次上进行运行, 允许直接访问类内部的数据成员以及相关的操作方法。
看一个例子:
class MyClass:
i = 100 #类变量
def __init__(self,initp): #构造方法
self.i=initp #实例变量
def test(): #类方法
print(MyClass.i)
return "test()"
def method1(self): #实例方法
return 'hello world'
代码解释
测试一下:
x = MyClass(10) #创建一个类实例
y = MyClass(20)#创建另一个类实例
print(x.i) #x实例的变量i
print(y.i) #y实例的变量i
print(MyClass.i) #类变量i
print(MyClass.test()) #类方法test()
代码解释
在历史上许多科学家都为面向对象编程的发展提供了宝贵的思路。因此我们无法确切地断言是谁最先提出了面向对象概念。我要提及的Alan Kay是一位非常有声望的学者,在20世纪60年代就提出了这一理念,并开发了Smalltalk语言,并为图形界面设计奠定了基础。于2003年获得图灵奖,并引用他广为人知的一句话作为座右铭:‘最佳的方式是创造未来’。

(Alan Kay,1940.5.17 - ,图片来源:维基百科)
