三⼤主流编程思想介绍
前⾔
  其实,在写这⼀篇⽂章之前我是⼗分纠结的,我在想到底是⽤世界观来阐述⾯向对象思想还是站在程序功能的⾓度去阐述⾯向对象思想,最终我决定使⽤两⽅⾯的⾓度来阐述⾯向对象这个概念,请记住:编程思想只是⼀种思想,与任何语⾔都⽆关,不要觉得⾯向对象就⼀定⽐⾯向过程好,实际上恰恰相反。⾯向过程才是所有代码在内存中最终的状态。
⾯向过程编程思想
  特性:模块化流程化
  优点:性能⽐⾯向对象⾼, 因为类调⽤时需要实例化,开销⽐较⼤,⽐较消耗资源;
  单⽚机、嵌⼊式开发、Linux/Unix等⼀般采⽤⾯向过程开发,性能是最重要的因素。
  缺点:没有⾯向对象易维护、易复⽤、易扩展
  ⾯向过程的思想就在于将⼀个问题逐步解决,将⼤问题分解成各种⼩步骤⼀步⼀步去执⾏,⼀旦完成基
本很少会有改变的场景,著名的例⼦有Linux内核,git等等。优点是代码可读性较⾼。并且他也是很多初学者最开始的⼀种思维⽅式,更多的是关⼼下⼀步操作该怎么做,以正在发⽣为⽬的。
lambda编程name = "⽼王"
# 第⼀步:买茶壶和茶叶
print("⽼王在超市买了⼀个茶壶和⼀袋茶叶...")
# 第⼆步:取⽔
print("⽼王拿出了珍藏已久的农夫⼭泉...")
# 第三步:⽣⽕
print("⽼王掏出打⽕机,点燃了⼀堆⽊屑...")
# 第四步:泡茶
def teapot(water,tea):
print("正在泡茶啊")
print("咕噜噜。。茶叶泡好了")
return"使⽤{0}泡好的{1}".format(water,tea)
print("⽼王正在泡茶..")
# 第五步:喝茶
res = teapot("农夫⼭泉","铁观⾳")
print("⽼王正在喝...",res)
函数式编程思想
  特点:⽆变量,⽆for循环
  优点:代码重复率低
  缺点:程序易读性差
  函数式编程是与数学函数⾼度结合的编程⽅式,纯粹的函数式编程语⾔没有变量只有常量,代码重复
率较低,且功能⼀旦完善就不会出错,在函数中没有for循环,所有的for循环⽤递归实现,函数式编程的⼀个特点就是允许把函数本⾝作为参数传⼊另⼀个参数,还允许返回⼀个函数。此外,Python中的lambda以及filter,map,reduce等等都是从函数式编程中提取出来的⼀些优秀且符合Python核⼼思想的好案例。
#  ⾃定义重现map
res = map(lambda x:x-1,[i for i in range(10)])
print(list(res))
def my_map(func,iterableser):
res = []
count = 0
def process(func,iterableser,count):
if len(iterableser):
res.append(func(iterableser.pop(count)))
process(func, iterableser, count)
else:
return
process(func,iterableser,count)
count+=1
return res
res = my_map(lambda x:x-1,[i for i in range(10)])
print(res)
⾯向对象编程思想
  特性:抽象封装继承多态
  优点:易维护、易复⽤、易扩展,由于⾯向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
  缺点:性能⽐⾯向过程低
从世界观的⾓度阐述⾯向对象思想
  对象:具体某⼀类的实际体
  类:抽象的概念,实际上是不存在的
  ⾯向对象是⼀种思想,从世界观的⾓度可以认为:⾯向对象的基本哲学是认为世界是由各种各样具有⾃⼰的运动规律和内部状态的对象所组成的;不同对象之间的相互作⽤和通讯构成了完整的现实世界。因此,⼈们应当按照现实世界这个本来⾯貌来理解世界,直接通过对象及其相互关系来反映世界。这样建⽴起来的系统才能符合现实世界的本来⾯⽬。
  ⽽从⽅法学的⾓度可以认为:⾯向对象的⽅法是⾯向对象的世界观在开发⽅法中的直接运⽤。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,⽽不是围绕功能来构造系统。
  class并不等于⾯向对象 .... ⽽是属于Python⾥⾯向对象编程中的⼀种语法:
def dog(name,sex,colour):
def init(name,sex,colour):
dic1 = {
"name":name,
"colour":colour,
"bark":bark,
"get_angry":get_angry,
}
return dic1
def bark(dic1):
print("⼀只{0}颜⾊的{1}狗,它的名字是{2},它现在在朝你汪汪叫".format(dic1["colour"],dic1["sex"],dic1["name"]))
def get_angry(dic1):
print("{0}⽣⽓了,它朝你扑过来了!".format(dic1["name"]))
return init(name,sex,colour)
d1 = dog("⼤黄","公","黄")
print(d1)
d1["bark"](d1)
d1["get_angry"](d1)
class Dog(object):
def__init__(self,name,sex,colour):
self.name = name
self.sex = sex
def bark(self):
print("⼀只{0}颜⾊的{1}狗,它的名字是{2},它现在在朝你汪汪叫".lour,self.sex,self.name))
def get_angry(self):
print("{0}⽣⽓了,它朝你扑过来了!".format(self.name))
d1 = Dog("⼤黄","公","黄")
print(d1)
d1.bark()
<_angry()
  使⽤class和上⾯def定义的思想都是⼀样的,他们同属于⾯向对象程式设计,但是class更为⽅便,还具备⼀些def不具备的功能。
  请记住,⽤⾯向对象语⾔写程序,和⼀个程序的设计是属于⾯向的对象设计是两种不同的概念,⼋杆⼦打不着。你可以⽤class去利⽤⾯向过程的⽅式写代码,当然也可以⽤def设计成⾯向对象的程序。
从程序功能⾓度来阐述⾯向对象思想
  对象:存放数据与功能集合体的容器,也可称之为属性与⽅法。
  类:类也是对象,存放具体实例对象公⽤的⼀些数据和功能。
  ⾯向对象的核⼼点在于对象⼆字,⼀切可以存放数据和功能的容器皆可称之为对象,⾯向对象实际上如果你真的已经接触过有⼀些时间了你会发现什么世界观的⾯向对象全是扯淡,我就觉得它的⼀个功能很强⼤!封装使⽤!⽤它来装东西使⽤⾮常⽅便!对,使⽤对象来装东西简直不要太好⽤。
  其实从程序功能⾓度来分析⾯向对象没什么好说的,⽤多了之后就会知道。别跟我扯什么有⽤没⽤的,我就是这么⽤⾯向对象的。你可以说我low,但是我告诉你我根本做不到将现实世界的投影完全存放到程序中,对我来说这是扯淡。
  有了⾯向对象我能做什么:
class Server(object):
port = 8008
def__init__(self):
self.__state = None
def run(self):
"""启动服务"""
print("本机IP:[{0}] 端⼝:[{1}] 服务启动成功".format(Server.ip, Server.port))
self.__state = 1
def stop(self):
"""停⽌服务"""
self.__state = 0
print("正在停⽌服务")
def get_status(self):
if self.__state == 1:
print("正在运⾏")
else:
print("没有运⾏")
def send_client(self,clent_ip):
print("本机IP [{0}] 正在向⽬标IP [{1}] 发送数据".format(Server.ip, clent_ip))
server1 = Server()
server1.run()
server1.send_client("127.0.0.23")
server1.stop()
<_status()
# 我⽤⾯向对象就是这样,⼀些公共的数据我想要了我就从类⾥⾯去拿,没有了我就实例化⾃⼰造。# 我觉得它的使⽤很⽅便,让代码看起来很整洁,我就这样⽤,有问题吗?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。