类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象
面向过程:
一切以事务的发展流程为中心.
面向对象:
一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象

打比方:
大象进冰箱
步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门

面向对象:大象, 你进冰箱.
此时主语是大象. 我操纵的是大象. 此时的大象就是对象

1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程思维

  优点: 负责的问题流程化, 编写相对简单

   缺点: 可扩展性差

2. ?向对象: ?切以对象为中心. 什么是对象? 不好解释. 先解释什么是车? 有轱辘, 有?方向盘, 有发动机, 会跑的 是车. 好 在解释一个. 什么是人. 有名字, 年年龄, 爱好, 会唱歌跳舞思考的是人. 我们给这两个 东?下了一个简单的定义. 总结: 具有相同属性和动作的结合体叫对象. 面向对象思维, 要自 ?建立对象. 自己建立场景. 你是就是面向对象世界中的上帝. 你想让车干嘛就干嘛. 你想让 人干嘛人就能干嘛.

  优点: 可扩展性强

  缺点: 编程的复杂度?高于面向过程

# 造车
c = Car()   # 类名()  # 创建对象
# 出厂之后进行改装
c.color = "红颜色"  # 对象.属性 点: 的  当属性不存在的时候. 添加一个属性
c.pai = "京A88888" # 对象.属性
c.pailiang = "555L" # 排量

print(c.color) # 此车是红颜色
print(c.pai)
print(c.pailiang)

c.color = "绿颜色" # 当属性存在的时候是修改属性信息.
# 对象.属性 = xxxx 设置属性信息

print(c.color)class Car:    
# 类名首字母大写, 严格遵守驼峰命名规范# __init__方法是一个特殊的方法. 初始化方法. (构造方法)
#在python中我们可以是用__init__(self) 函数给对象进行初始化操作. 这个函数(方法)被称为构造函数(方法).# 在创建对象的时候会自动的调用__init__()
# self就是你创建出来的那个对象

    def __init__(self, color, pai, pailiang): # init初始化方法. 在创建对象的时候. 默认执行这个函数
        # print("我是init")
        # print("self = ", self)
        # self.color="红色" # 在出厂的时候都是红色
        self.color = color
        self.pai = pai
        self.pailiang = pailiang
        # c.color = "红色"

    # 跑: 动作, 功能 -> 函数
    # 在类中写的函数 -> 方法
    # self 当前类的对象.
    def pao(self): # self是自动传递的. 不用管它
        print("%s我的车能跑" % self.color)  # self.color

    def jump(self):
        print("you jump, I jump")

类. 对象      类就是对属性和方法的封装    
类:

就是图纸. 创建对象的第一步. 先画图纸.也就是先写类.
对象: 对象就是车. 通过图纸造出来的具体的东西. 通过类来创建对象

类与对象的关系:

类是对事物的总结. 抽象的概念念. 类用来描述对象. 对象是类的实例化的结果.

对象能执行哪些方法. 都由类来决定. 类中定义了什么. 对象就拥有什么 
类是对xxx事物的归类.

写法:
__init__(self, 参数) 参数一般作为属性设置给对象. 对象就是self, 对属性的封装.

# 在python中我们可以是用__init__(self) 函数给对象进行初始化操作. 这个函数(方法)被称为构造函数(方法).

def 方法(self, 参数): 方法. 第一个参数一般是固定的self. 当前类的对象.
pass

对象是xx类型的一个具体
创建对象: 类名()

创建类:
class 类名:

def __init__(self): # 初始化方法. 又被成为构造方法
self.属性 = 值
self.属性 = 值
self.属性 = 值

def fangfa(self):
方法体(函数体, return)

创建对象:
变量 = 类名() # 实例化 <-> 创建对象

变量.属性 # 访问对象的属性信息
变量.方法() # 访问类中的方法

面向对象和面向过程对比

大象装冰箱
脚本, 此时代码是最简单的.  不需要构思整个程序的概况
print("开门")
print("装大象")
print("关门")

函数式编程. 比脚本麻烦. 对功能有了概况.

def kai():
    print(‘开门‘)
def zhuang():
    print("装大象")
def guan():
    print(‘关门‘)

kai()
zhuang()
guan()

面向对象编程, 对整个系统进行分析. 分析出需要哪些对象. 然后给对象进行归类.
先写类. 然后使用类创建对象. 最后用对象去执行相关的操作
class Elephant:
    def __init__(self):
        print("创建了一个大象")

    def kai(self):
        print("开门")

    def zuan(self):
        print("大象进冰箱")

    def guan(self):
        print("大象把门带上")

dx = Elephant()
dx.kai()
dx.zuan()
dx.guan()

第一回合
脚本胜
函数侧重的是功能
面向对象侧重的是 归类
PK2回合
# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 超人
# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 蝙蝠侠
# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 蜘蛛侠

# 面向过程: 代码非常的冗余. 尤其是参数
def fight_superman(name, jineng):
    print("%s使用%s攻击超人" % (name, jineng))

def fight_batman(name, jineng):
    print("%s使用%s攻击蝙蝠侠" % (name, jineng))

def fight_spiderman(name, jineng):
    print("%s使用%s攻击蜘蛛侠" % (name, jineng))

fight_superman(‘小猪佩奇‘, "嘴巴嘟嘟")
fight_batman(‘小猪佩奇‘, "嘴巴嘟嘟")
fight_spiderman(‘小猪佩奇‘, "嘴巴嘟嘟")

class Pig:
    def __init__(self, name, jineng):
        self.name = name
        self.jineng = jineng

    def fight_superman(self):
        print("%s使用%s攻击超人" % (self.name, self.jineng))

    def fight_batman(self):
        print("%s使用%s攻击蝙蝠侠" % (self.name, self.jineng))

    def fight_spiderman(self):
        print("%s使用%s攻击蜘蛛侠" % (self.name, self.jineng))

pg = Pig("小猪佩奇", "嘴巴嘟嘟")
# 不需要向原来一样传递一样的参数了
# 面向对象的程序: 结果相对清晰. 缺点: 代码量比原来大, 上手太难
pg.fight_batman()
pg.fight_spiderman()
pg.fight_superman()

如果写一个定时任务, 半夜12点. 给老板发送财务报表(一张图)
def send_email(address, name, title, content):
    print("发送邮件")

def send_wechat(wechat_num, name, title, content):
    print("发送微信")

def send_chat(wechat_num, name, title, content):
    print("发送短信")

def send_dd(wechat_num, name, title, content):
    print("发送钉钉")

def send_oa(wechat_num, name, title, content):
    print("发送OA")

class Messager:
    def __init__(self, name, title, content):
        self.name = name
        self.title = title
        self.content = content

    def send_email(self, address):
        print("发送邮件")

    def send_wechat(self, wechat_num):
        print("发送微信")

    def send_chat(self, phone_num):
        print("发送短信")

    def send_dd(self, dd_num):
        print("发送钉钉")

    def send_oa(self, oa_num):
        print("发送OA")

用面向对象就比面向过程稍微好一些.
  可维护性比原来好

python同时支持面向对象和面向过程:
面向过程: 应用程序相对比较小. 不需要大规模的设计
面向对象: 程序非常大. 项目管理 维护成本很高. 此时更适合用面向对象(结构)

java : 纯面向对象  => 可以把一个微型项目. 做成巨型项目

面向对象三大特征:封装 继承 多态

  1. 封装: 把很多数据封装到一个对象中. 把固定功能的代码封装到一个代码块, 函数, 对 象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如.你写了?个很?B 的函数. 那这个也可以被称为封装. 在面向对象思想中. 是把一些看似无关紧要的内容组合到一起统一进行存储和使用. 这就是封装.

# 封装:
# 1. 对属性的封装
# 2. 对功能的封装
# 3. 模块
# 4. 包

  2. 继承: ?类可以自动拥有父类中除了私有属性外的其他所有内容. 说白了, 儿子可以 随便用爹的东西. 但是朋友们, ?定要认清楚一个事情. 必须先有爹, 后有?子. 顺序不能乱, 在python中实现继承非常简单. 在声明类的时候, 在类名后面添加?个小括号, 就可以完成继承关系. 那么什么情况可以使?继承呢? 单纯的从代码层面上来看. 两 个类具有相同的功能或者特征的时候. 可以采?继承的形式. 提取?个?类, 这个父类中编写着两个类相同的部分. 然后两个类分别取继承这个类就可以了. 这样写的好处 是我们可以避免写很多重复的功能和代码. 如果从语义中去分析的话. 会简单很多. 如果语境中出现了了x是?种y. 这时, y是?种泛化的概念. x比y更加具体. 那这时x就是y的 ?类. 比如. 猫是?种动物. 猫继承动物. 动物能动. 猫也能动. 这时猫在创建的时候就 有了动物的"动"这个属性. 再比如, ?骨精是?一个妖怪. 妖怪天?生就有?个比较不好的功能叫"吃人",  白骨精?出?就知道如何"吃人". 此时 白骨精继承妖精. 话不多说上代码.

在python中, ?个类可以同时继承多个父类. 说?了, 现在一个?子可能会有多个爹了. 既然是有这么多个爹,  总得有远有近. 比如. 有?个这样的牛B的人物, 叫锅不美. 就有很多个爹嘛.

# 当出现xxx是一种yyy类型的东西. 可以使用继承关系
# 猫是一种动物
class Animal:
    def dong(self):
        print("动物会动, 顾雍")

class Cat(Animal): # 子类其实是对父类的一种扩展
    def catchMouse(self):
        print("猫很皮, 抓老鼠")

# c = Cat()
# c.dong()
# c.catchMouse()

a = Animal() # 父类的对象不能执行子类中的功能
a.dong()   #动物会动, 顾雍
# a.catchMouse() # 创建的是动物. 动物不能执行抓老鼠
class Animal:
    def dong(self):
        print("动物会动, 顾雍")

class Cat(Animal): # 子类其实是对父类的一种扩展
    def dong(self): # 子类中写了和父类一模一样的方法. 这个叫方法的覆盖, 重写
        print("猫上蹿下跳")

    def catchMouse(self):
        print("猫很皮, 抓老鼠")

c = Cat() # 创建的是猫.
c.dong()  # 类中的方法的查询顺序. 先找自己, 然后再找父类
#猫上蹿下跳
# python支持多继承
class Foo1:
    def getMoney(self):
        print(‘给你个大嘴巴子‘)

    def play(self):
        print("玩儿")

class Foo2:
    def getMoney(self):
        print(‘给多点儿‘)

class Bar(Foo1, Foo2): # 离当前类最近的是亲爹, 后面的是干爹.
    pass

b = Bar()  # 就近原则,         MRO的C3算法
b.getMoney() # Foo2里的
#给你个大嘴巴子

3. 多态: 同?个对象, 多种形态. 这个在python中其实是很不容易说明白的. 因为我们一 直在用. 只是没有具体的说.  比如. 我们创建一个变量a = 10 , 我们知道此时a是整数 类型. 但是我们可以通过程序让a = "alex", 这时, a又变成了字符串类型.  这是我们都知道的. 但是, 我要告诉你的是. 这个就是多态性. 同一个变量a可以是多种形态. 可能 这样的程序和说法你还get不到具体什么是多态. 接下来. 我们来看一个程序. 北京动 物园饲养员alex?一天的?工作. 从早上开始喂养猪豬, 中午喂哈?士奇, 晚上还得喂阿拉斯加. 来我们?代码实现这样的代码:

多态的好处:  程序具有超高的可扩展性.  ?向对象思想的核心与灵魂. python?带多态.

# 多态性: 同一个对象. 多种形态.
# python支持的是鸭子类型. 会嘎嘎叫的东西就是鸭子
# 为了程序能够正常执行. 本来需要传递进来一只鸭子. 但是我只需要传递一个会嘎嘎叫的东西就可以了

优点:超强的可扩展性. 面向对象的核心就是多态

原文地址:https://www.cnblogs.com/H1050676808/p/10133734.html

时间: 2024-07-30 13:50:43

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态的相关文章

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

面向对象的三大特性---封装继承多态

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面

Python 面向对象和面向过程对比

# 大象装冰箱 # 脚本, 此时代码是最简单的. 不需要构思整个程序的概况 print("开门") print("装大象") print("关门") # 函数式编程. 比脚本麻烦. 对功能有了概况. def kai(): print('开门') def zhuang(): print("装大象") def guan(): print('关门') kai() zhuang() guan() # 面向对象编程, 对整个系统进行分析

面向对象三大特性(封装/继承/多态)

引入:在面向对象思想中,有三大特性,封装  继承  多态. 思考:我们在使用类和对象实现编程的时候,到底是遵循这什么样的逻辑呢?为什么要这样规范类呢? 引入:面向对象很重要的思想就是隐藏,即外部不知道类内部是如何实现业务逻辑的,只管调用和使用结果,这个就是面向对象三大特性之一:  封装 1.封装[掌握] 定义:封装,字面意思就是将内容装到某个容器中,并进行密封保存,在面向对象思想中,封装指数据和对数据的操作捆绑到一起,形成 对外界的隐藏,同时对外提供可以操作的接口. 1.数据:即要操作的数据,在

面向对象三大特性:封装,继承,多态(一,封装和继承)

封装.继承和多态是面向对象程序设计的三个核心特性. 封装是面向对象技术中的一个重要概念,是一种信息隐藏技术,它体现了面向对象程序设计的思想. 继承是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,育雏利用已有的类来完成更复杂.更深入的程序开发. 多态允许以一种统一的风格处理已存在的变量和相关的类,多态性使得向系统增加功能变的容易. 一.封装 封装的含义是:类的设计者把类设计成一个黑匣子,使用者只能看见类中定义的公共变量和公共方法,而看不见方法的具体实现细节,

面向对象三大特征——封装、多态、接口

一.封装 1.封装的概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作与访问.混那个通过规定方法访问数据 2.封装的好处: 1).只能通过规定方法访问数据: 2).隐藏类的实现细节: 3).方便修改实现: 4).方便加入控制语句. 3.封装的步骤: 1).修改属性的可见性.--设为private; 2).创建爱你共有的getter/setter方法.--用于属性的读写; 3).在getter/setter方法中加入属性控制语句.--对属性值的合

面向对象的三个基本特征 封装 继承 多态

一.封装: 封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类).被封装的对象通常被称为抽象数据类型.  封装的意义: 封装的意义在于保护或者防止代码(数据)被我们无意中破坏.在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改. 封装提供了一个有效的途径来保护数据不被意外的破坏.相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat

面向对象三大特性:封装,继承,多态(二、多态)

多态 一,多态的概念 多态(polymorphism), 是指一个名字可以有多种语义.在面向对象语言中,多态是指在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法.通常有两种途径实现多态:方法的重载和覆盖. 多态性允许以统一的风格处理已存在的变量及相关的类.多态性使得向系统里增加新功能变得容易.继承性和多态性是降低软件复杂性有有效技术. 二,多态的实现 1.方法的重载 方法重载时: 参数必须不同.参数个数不同或类型不同. 返回值可以相同,也可以不同. 重载的价值在于它允许通过使用一个