编程语言不断涌现,不同的方法也不断涌现。面向对象的编程就是这样一种方法,在过去的几年中变得非常流行。
本章讲述了Python编程语言的特性,使其成为一种面向对象的编程语言。
编程语言规划分类
Python可以在面向对象编程方法论下进行表征。 下图显示了各种编程语言的特性。 观察使其面向对象的Python特性。
- 编程范式
- 过程程序,主要有 - C, C++, C#, Objective-C, java, Go
- 脚本,主要有 - CoffeeScript, JavaScript, Python, Perl, Php, Ruby
- 函数式,主要有 - Clojure, Eralang, Haskell, Scala
- 编译类
- 静态,主要有 - C, C++, C#, Objective-C, java, Go, Haskell, Scala
- 动态,主要有 - CoffeeScript, JavaScript, Python, Perl, Php, Ruby, Clojure, - 类型类
- 强类型,主要有 - C#, java, Go, Python, Ruby, Clojure, Erlang, Haskell, Scala
- 弱类型,主要有 - C, C++, C#, Objective-C, CoffeeScript, JavaScript, Perl, Php
- 内存类
- 托管,其它
- 非托管,主要有 - C, C++, C#, Objective-C
什么是面向对象编程?
面向对象意味着面向对象。 换句话说,它意味着功能上针对建模对象。 这是用于通过数据和行为描述一系列交互对象来为复杂系统建模的众多技术之一。
Python是面向对象编程(OOP),是一种编程方式,专注于使用对象和类来设计和构建应用程序。面向对象编程(OOP)的主要支柱是继承,多态,抽象和封装。
面向对象分析(OOA)是检查问题,系统或任务并识别它们之间的对象和相互作用的过程。
为什么选择面向对象编程?
Python是用面向对象的方法设计的。 OOP提供以下优点 -
- 提供清晰的程序结构,可以轻松映射真实世界的问题及其解决方案。
- 便于维护和修改现有的代码。
- 由于每个对象都是独立存在的,因此可以轻松添加新功能而不会打扰现有对象,从而增强了程序的模块化。
- 为代码库提供了一个很好的框架,供程序员轻松修改和修改提供的组件。
- 赋予代码可重用性
程序与面向对象编程
基于程序的编程源于基于功能/过程/例程概念的结构编程。 在面向程序的编程中访问和更改数据很容易。 另一方面,面向对象编程(Object Oriented Programming,OOP)允许将问题分解成多个称为对象的单元,然后在这些对象周围构建数据和函数。 它比过程或功能更强调数据。 在OOP中,数据也是隐藏的,不能被外部程序访问。
下图中的表格显示了POP和OOP方法的主要区别。
程序化编程(POP)与程序化编程(POP)的区别。 面向对象编程(OOP)。
序号/项 | 程序化编程 | 面向对象编程 |
---|---|---|
基于 | 整个焦点集中在数据和函数上 | 基于真实世界的场景。整个程序划分为称为对象的小部分 |
可重用性 | 有限的代码重用 | 代码重用性高 |
途径 | 自上而下的方法 | 面向对象的设计 |
访问说明符 | 没有 | public , private 以及 protected |
数据移动 | 数据可以从功能中自由移动到系统中的功能 | 在Oops中,数据可以通过成员函数进行移动和相互通信 |
数据访问 | 大多数功能使用全局数据进行共享,可以从系统中的功能自由访问 | 数据不能在方法之间自由移动,它可以保存在公共或私人的位置,这样就可以控制数据的访问 |
数据隐藏 | 在流行中,隐藏数据的方式非常特殊,所以安全性稍差 | 它提供数据隐藏,更安全 |
重载 | 不可能 | 函数和运算符重载 |
示例语言 | C, VB, Fortran, Pascal | C++, Python, Java, C# |
抽象化 | 在过程级别使用抽象 | 在类和对象级别使用抽象 |
面向对象编程原理
面向对象编程(Object Oriented Programming,OOP)是基于对象而不是动作的概念,以及数据而不是逻辑。 想要使编程语言成为面向对象,它应该有一种机制来支持类和对象的使用,以及基本的面向对象原则和概念的实现和使用,即继承,抽象,封装和多态。
下面简单了解面向对象编程的各个支柱 -
封装
该属性隐藏了不必要的细节,并使管理程序结构变得更加容易。 每个对象的实现和状态都隐藏在明确定义的边界之后,并为它们提供了一个干净而简单的界面。 实现这一目标的一种方法是将数据保密。
继承
继承也称为泛化,它允许我们捕获类和对象之间的层次关系。 例如,“水果”是“橙色”的泛化。 从代码重用的角度来看,继承非常有用。
抽象化
这个属性允许我们隐藏细节,只显示概念或对象的基本特征。 例如,驾驶滑板车的人知道在按喇叭时发出声音,但不知道如何在按下喇叭时实际产生应该是什么样的声音。
多态性
多态性意味着许多形式。 也就是说,某件事或行为是以不同的形式或方式呈现的。 多态的一个很好的例子是类中的构造函数重载。
Python面向对象
Python编程的核心是对象和OOP,但是您不需要通过将代码组织到类中来限制自己使用OOP。 OOP增加了Python的整个设计理念,并鼓励一种干净而实用的编程方式。 面向对象还可以编写更大更复杂的程序。
模块与类和对象
模块就像“字典”,在使用模块时,请注意以下几点 -
- Python模块是封装可重用代码的包。
- 模块存储在一个有
__init__.py
文件的文件夹中。 - 模块包含功能和类。
- 模块使用
import
关键字导入。
字典是一个键值对。 这意味着如果有一个关键的EmployeID
字典,如果想检索它,那么需要使用下面的代码行 -
employee = {"EmployeID": "Employee Unique Identity!"}
print (employee ['EmployeID'])
可通过使用以下过程来处理模块 -
- 模块是一个包含一些函数或变量的Python文件。
- 导入需要的文件。
- 现在,可以使用
.
(点)运算符访问该模块中的函数或变量。
考虑有一个名为employee.py
的模块,其中包含一个名为employee
的函数。 该函数的代码如下所示 -
# this goes in employee.py
def EmployeID():
print ("Employee Unique Identity!")
现在导入模块,然后访问函数EmployeID
-
import employee
employee.EmployeID()
可以在其中插入名为Age
的变量,如下所示 -
def EmployeID():
print ("Employee Unique Identity!")
# just a variable
Age = "Employee age is **"
现在,按照以下方式访问该变量 -
import employee
employee.EmployeID()
print(employee.Age)
现在,我们来比较一下字典 -
Employee['EmployeID'] # get EmployeID from employee
Employee.employeID() # get employeID from the module
Employee.Age # get access to variable
请注意,Python中有常见的模式 -
- 以一个
key = value
风格的容器 - 通过键的名称获取某些内容
将模块与字典进行比较时,两者都是相似的,除了以下内容 -
- 在字典的情况下,键是一个字符串,语法是
[key]
。 - 在模块的情况下,键是一个标识符,语法是
.key
。
类就像模块
模块是一个专门的字典,可以存储Python代码,所以你可以用.
操作符来获得它。 类是一种对函数和数据进行分组并将其放置在容器中的方式,以便您可以使用.
操作符访问它们。
如果要创建一个类似于员工模块的类,则可以使用以下代码执行此操作 -
class employee(object):
def __init__(self):
self. Age = “Employee Age is ##”
def EmployeID(self):
print (“This is just employee unique identity”)
注 - 类比模块更受欢迎,因为它可以按原样重用它们,且不会受到太多干扰。 使用模块时,整个程序只有一个。
对象就像小型的模块
一个类就像一个迷你版本的模块,可以用类似的方式导入类,就像使用类实例一样。 请注意,当实例化一个类时,会得到一个对象。
您可以实例化一个对象,类似于像函数一样调用一个类,如图所示 -
this_obj = employee() # Instantiatethis_obj.EmployeID() # get EmployeId from the class
print(this_obj.Age) # get variable Age
可以通过以下三种方式中的任何一种来执行此操作 -
# dictionary style
Employee['EmployeID']
# module style
Employee.EmployeID()
Print(employee.Age)
# Class style
this_obj = employee()
this_obj.employeID()
Print(this_obj.Age)