python面向对象设计系列 -1

好久没写博客了,主要是感情问题,使得我的情绪很低落,很多事情根本提不起兴趣.但我不能一直停留在感情漩涡中,有些事情总会过去,自己也打算从漩涡中走出来,积极拥抱变化.所以我打算写一个python面向对象的系列(我从工作和看别人的示例得到的启发),目前打算是一周更新一篇,先把FLAG立了. 预计本周五-周六(实际上在周日才完成)更新这篇文章.

print('Hello, World!')

今天(2020-07-11)拖更,明天一定写,不好意思…

__time__ == '2020-07-12'

OOP意指面向对象程序设计

前记,要写出面向对象的代码,首先我们要了解什么是面向对象,任何面向对象的语言,都需要了解什么是对象?面向对象的特征有哪些?面向对象的特征意味着什么?

什么是面向对象?

根据维基百科的描述,面向对象是:面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象.
一堆专业术语堆砌的句子看起来,似乎很笨拙、很厚重.上面这句话既阐述OOP的定义,又声明OOP的好处.稍稍通俗一点来说:OOP是将数据块以及数据相关的行为封装成特殊的、名为对象的实体,同时对对象实现的生成工作是基于程序员给出的一系列“蓝图”(可以联想下flask中的blueprint),“蓝图”==》定义的类

对象和类的关系?

简单来说,类定义了一件事物的抽象特点,对象是类的实例化.我们需要关注的是类的概念.python和java对类要求程度,我觉得还是有些区别,相对来说java对类的成员变量(public、private、protected)的规定稍微严格,这也可能和python中鼓励大家写公有变量有关,但通俗来说,任何一门关于面向对象的语言,它的类应该都会涉及到:成员变量、方法、本身的名称、以及自身的类层次结构【子类、父类(超类)】

OOP的基础?

首先呢,OOP有四个基本的概念:抽象、多态、封装、继承,下面我们会一一介绍这四个基本概念.

抽象

李敖说:抽象的东西要具体化,具体的东西要抽象化.,这句话本身有点哲学的意味,程序设计本身呢,也算一门哲学把.我们先来看维基百科中对抽象的定义:抽象(Abstraction)是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。 简单来说我觉得,抽象的宗旨就是复杂的问题简单化,我们应该关注于能够反映现实世界特定内容的模型,它能准确地反映所有与特定内容相关的信息,同时我们应该忽略其它的信息.

封装

先看定义:具备封装性(Encapsulation)的面向对象编程隐藏了某一方法的具体运行步骤,取而代之的是通过消息传递机制发送消息给它。 简单来说,当你开一辆车时,你一般只需要转动钥匙即可,而不是打开引擎手动线,转动曲柳和气缸…… 关于封装,我觉得好一点的例子是接口(Interface),当我们调用接口时,我们并不关心接口内部如何工作,有哪些变量,我们只需要如何调动它,给它传参即可的,剩下的交给接口(是不是有一种做事在人(传参调接口),成事在天(接口)的感觉)。一般接口可由一个或多个组成,以面对复杂的需求情况.

继承

定义:继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化. 继承这个东西,大家应该很熟悉,因为在生活中最常见,就是一些东西从父母传给子女,继承这个词本身在OOP的定义就很符合抽象,再用抽象去定义抽象时,你会发现问题本质有点鸡生蛋,蛋生鸡的味道.当我们要使用继承时,就是我们想把问题的解决变得具体化one to one.

多态

定义: 多态(Polymorphism)是指由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。 这个用代码来解释,相对来说比较清晰:

“”“
这里面我们定义了Animal类,因为大部分都能发出声音,所以我们定义了make_sound的方法,
但是每种动物发出的声音其实是不同的,所以当我们定义的Dog以及Cat在继承Animal后,重写了
make_sound方法,所以当我们在调用Dog和Cat的make_sound方法后,其实它们发出的声音是不同的.
你可以看作多态是一个对象“假扮”成其它东西的能力.
”“”
class Animal()def make_sound():
		pass

class Dog(Animal):
	def make_sound():
		print('汪汪!')

class Cat(Animal):
	def make_sound():
		print('喵~')

对象之间的关系

除了上述的,对象(一般指类) 之间还存在一些别的关系:依赖、关联、聚合、组合.

依赖

依赖是类之间最常见也最微弱的关系,一般来说如果你修改一个类,另一个类会因为这个类的修改而有所变化,那这两个类之间肯定是存在依赖关系的.

关联

关联是一种特殊的依赖关系,或者说它是依赖关系种一种关系的具体化:关联是一个对象使用另一对象或与另一对象进行交互的关系.

聚合

聚合是一种特殊类型的关联,用于表示多个对象之间的“一对多”、“多对多”或“整体对部分”的关系.一般来说是一个对象拥有“一堆”对象one to more.

组合

组合是一种特殊类型的聚合,其中一个对象由一个或多个其他对象实例构成,请思考组合与包含的定义。

时间原因我没有给出这几种关系的例子,这个会后面进行弥补.
OOP维基百科链接
总结:之前我写代码的时候,我们在写代码的时候为什么要注意这些定义规范,有手能写不就行?后面我发现自己真是太渺小了,站在巨人的肩膀上,并不意味着我就是巨人.诚然有时候时间太赶,所以难免代码质量会下降.但我们要好好想想,不要因为在路上太久了,就忘记了当初上路的原因.掌握好概念,多写,多思考,衡量好性能,才能写出好的代码.
下周的更新将开始围绕设计模式展开,会多比较多的代码示例,考虑把示例代码放到github仓库中.
文章的最后借用一段有用但与文章无关的个人摘录做结束语:

python面向对象设计系列 -1_第1张图片

你可能感兴趣的:(面向对象,python,编程思想,python,设计模式,编程语言)