面向对象

面向对象,面向对象的优点 面向对象,面向对象的优点 什么是面向对象呢,百度百科的词条解释是这样的 面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物 阅读详情

1.面向对象(oop:object oriented programming)概念
1)两个核心的概念
类:是一群具有相同特征或行为的事物的一个统称(类是抽象的,不能直接使用)
对象:由类创造出来的具体存在

2)类和对象的关系
类是模板,对象是根据这个模板创建出来的
类只需要一个, 对象可以有多个

类:属性(信息)和方法(你能完成的动作)

1.类名:这类事物的名字(满足大驼峰命名法)
    大驼峰命名法:
        1.每个单词的首字母大写
        2.单词与单词之间没有下划线
2.属性:这个类创建出来的对象有什么特征
3.方法:这个类创建出来的对象有什么行为

3)类名的确定
名词提炼法分析整个业务流程,出现的名词,通常就是找到的类

4)属性和方法的确定
对 对象的特征描述,通常可以定义成属性
对象具有的行为(动词),通常可以定义为方法
提示:需求中没有涉及的属性或方法在设计类时,不需要考虑
例子:猫爱吃鱼 猫要喝水

class Cat: ##创建类,开辟一块内存空间
def eat(self): ##self引用的是和对象调用的内存地址一样的,在
print(‘猫爱吃鱼’)
def drink(self):
print(‘猫爱河水’)

tom = Cat() ##创建对象,调用类,也就是调用开辟的内存空间
print(tom) ##现实调用的内存年地址
tom.eat() ##调用类中的功能
tom.drink()

class Cat:                   ##创建类,开辟一块内存空间
    def eat(self):           ##self引用的是和对象调用的内存地址一样的,在
            print('%s 猫爱吃鱼' %self.name)
    def drink(self):
            print('%s 猫爱河水' %self.name)

2.
tom = Cat()         ##创建对象,调用类,也就是调用开辟的内存空间
tom.name = 'Tom'    ##命名
tom.eat()           ##调用类中的功能
tom.drink()


fentiao = Cat()
fentiao.name = 'fentiao'
fentiao.eat()
fentiao.drink()

self:
哪一个对象调用的方法,self就是哪一个对象的引用
在封装的方法内部,self就表示当前调用方法的对象自己
在调用方法时,程序员不需要传递self参数(但是定义的式时候,第一个参数
必须是self

可以使用 .属性名 利用赋值语句就可以在类的外部给对象增加属性(不推荐)
将对象的属性封装在类中

2.面向对象与面向过程的差异
1)面向过程:—侧重于怎么做?

1.把完成某一个需求的, 所有步骤, 从头到尾, 逐步实现
2.根据开发要求,将某些功能独立的代码封装成一个又一个函数
3.最后完成的代码,就是顺序的调用不同的函数

特点:代码的维护比较差

1.注重步骤和过程,不注重职责分工
2.如果需求复杂,代码变得非常复杂
3.开发复杂的项目的时候,没有固定的套路,开发难度很大

2)面向对象:----侧重于谁来做?
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法,耦合性比较低,便于维护

1.在完成某一个需求前,首先确定职责--要做的事(方法)
2.根据职责确定不同的对象,在对象内部封装不同的方法(多个)
3.最后完成代码,就是顺序的让不同的对象调用不同的方法

特点:

1.注重对象和职责,不同的对象承担不同的职责
2.更加适合对复杂的需求变化,是专门应对复杂项目的开发,提供固定的套路
3.需要在面向过程的基础上,再学习一些面向对象的语法

3.初始化方法:

类名() 可以创建一个对象
类名()创建对象的时候,python的解释器会自动执行以下操作
    1.为对象在内存中分配空间---创建对象
    2.调用初始化方法为对象的属性设置初始值 --初始化方法(__init__)
这个初始化方法是内置方法,是专门用来定义一个类具有哪些属性的方法

如:

class Cat():
    def __init__(self,new_name):    ##new_name就是一个形参,接受外界传入的值
        self.name = new_name        ##在类中的任何方法都可以使用
    def eat(self):
        print('%s 河水' %(self.name))
    def drink(self):
        print('%s 喝可乐' %(self.name))

#使用类名()创建对象的时候,会自动调用初始化方法__init__
tom =Cat('haha')  					##括号中就是给形参传递信息
tom.eat()
tom.drink()

fentiao = Cat('fentiao')
fentiao.eat()
fentiao.drink()
如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造

1.把希望设置的属性值,定义成__init__方法的参数
2.在方法内部使用self.属性名 = 形参 接收外部传递的参数
3.在创建对象的时候,使用类名(属性)调用

  1. 3种方法
    __del__方法:
    __str__方法:
    __del__方法:

在python中

当使用类名()创建对象时,为对象分配完空间后,自动调用__init__方法
当一个对象被从内存中销毁前(把这个对象从内存中删除掉),会自动调用__del__方法

应用场景
__init__改造初始化方法,可以让创建对象更加灵活
__del__如果希望在对象被销毁前,在做一些事情,可以考虑一下__del__方法,会被自动调用

如:
1)

class Cat():
def __init__(self,name):
    self.name =name
    print('%s 来了' %(self.name))
def __del__(self):
    print('%s 走了' %(self.name))

tom = Cat('tom')
print(tom.name)
#del tom        ##del关键字可以删除一个对象,del关键字自己调用__del__方法
print('*' *50)
print(tom.name)

__str__方法:

在python中,使用print输出对象变量的时候,默认情况下
会输出这个变量引用的对象是由哪一个类创建的对象以及在内存中的地址(十六进制表示)
如果在开发中,希望使用print输出变量时候
能够打印自定义的内容,就可以利用__str__这个内置方法了

如:

1)
		class Cat():
	    def __init__(self,name):
	        self.name =name
	    def __str__(self):      ##必须返回一个字符串
	        return 'i am %s' %(self.name)
		tom = Cat('tom')
		print(tom)
		fentiao = Cat('feniao')
		print(fentiao)
2)
					class Cat():
					    def __init__(self,name):
					        self.name =name
					tom = Cat('tom')
					print(tom)              ##直接输出的是调用的内存地址(默认是16进制)
					addr = id(tom)
					print(addr)             ##输出就是10进制地址
					print('%x' %(addr))     ##转换输出为16进制地址
					print('%d' %(addr))     ##转换输出为10进制地址
					fentiao = Cat('feniao')
					print(fentiao)

例子: 模拟C语言的冒泡排序,栈—>先进后出

class Zhan():
    def __init__(self):
        self.stack = []           ##用列表装数据,列表自动可以排序
    def push(self,value):         ##入栈,添加数值进来
        self.stack.append(value)        ##数值添加到列表中
        return True
    def pop(self):            			  ##弹出
        if self.stack:        			  ##如果不为空
            item = self.stack.pop()       ##取出栈顶元素,即取出最后一个元素
            return item
        else:
            return False       		 ##栈为空,报错
    def top(self):              	##出栈  与pop块功能一样,但是在特性是不一样的, 此处模拟C语言,所以两个都写了
        if self.stack:
            return self.stack[-1]   ##对列表进行反转,因为栈是先进后出的,所以要反转才能达到栈的特性
        else:
            return False
    def length(self):               ##判断长度
        return len(self.stack)
    def view(self):
        return ','.join(self.stack)
s = Zhan()
s.push('1')
s.push('6')
s.push('5')
s.push('3')
item = s.pop()
print(item)
print(s.view)

5.面向对象的封装
封装:

1.封装是面向对象编程的一大特点
2.面向对象编程的第一步,将属性和方法封装到一个抽象的类中
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部

如:
小明体重75.0公斤
小明每次跑步都会减肥0.5公斤
小明每次吃东西体重都会增加1公斤

class Person:
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight
    def __str__(self):
        return '我的名字是 %s 体重是 %.2f' %(self.name,self.weight)
    def run(self):
        print('%s 去跑步...' %(self.name))
        self.weight -= 0.5
    def eat(self):
        print('%s 吃东西...' %(self.name))
        self.weight += 1
xiaoming = Person('小明',75.0)
xiaoming.run()
print(xiaoming)
xiaoming.eat()
print(xiaoming)

例题1:

1.房子有户型,总面积和家具名称列表
	新房子没有任何的家具
2.家具有名字和战地面积,其中
	床:占4平米
	衣柜:占2平面
	餐桌:占1.5平米
3.将以上三件家具添加到房子中
4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

做法:

class HouseItem:        ##创建家具的类
    def __init__(self,name,area):
        self.name = name
        self.area = area
    def __str__(self):
        return'[%s] 占 %.2f 平方' %(self.name,self.area)

class House:            ##创建房子的类
    def __init__(self,house_type,area):
        self.house_type = house_type
        self.area = area
        self.free_area = area   ##剩余面积,当没有家具时,总面积就是剩余面积
        self.item_list = []
    def __str__(self):
        return('户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s'
               %(self.house_type,self.area,self.free_area,self.item_list))
    def add_item(self,item):
        if item.area > self.free_area:
            print('%s 的面积太大,无法添加' %(item.name))
            return
        self.item_list.append(item.name)
        self.free_area -= item.area     ##计算剩余面积

##创建家具对象
bed = HouseItem('bed',4)
print(bed)
chest = HouseItem('chest',2)
print(chest)
table = HouseItem('table',1.5)
print(table)

##创建房子的对象
home = House('两室一体',100)
home.add_item(bed)
home.add_item(chest)
home.add_item(table)
print(home)

例子2:

1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪 能够 发射子弹(把子弹发射出去)
4.枪 能够 装填子弹 ---增加子弹的数量

做法:

	class Gun():			##枪的类
	    def __init__(self,mode):
	        self.mode = mode
	        self.bullet_count = 0
	    def add_bullet(self,count):
	        self.bullet_count += count
	    def shoot(self):
	        if self.bullet_count <=0:
	            print('%s没有子弹~~' %self.mode)
	            return
	        self.bullet_count -= 1
	        print('%s~~~~~%s' %(self.mode,self.bullet_count))
	
	class Solder():			##人的类
	    def __init__(self,name):
	        self.name = name
	        self.gun = None
	
	    def fire(self):
	        if self.gun == None:
	            print('%s 没枪....'%(self.name))
	
	        self.gun.add_bullet(10)
	        self.gun.shoot()
	
##枪的对象
	gun = Gun('AK47')
	# gun.add_bullet(0)
	# gun.shoot()

##人的对象	
	solder = Solder('Ruien')
	solder.gun = gun
	solder.fire()
咖啡机点餐系统(面向对象程序设计) 这个实验作业是自己写的,上传的时候因为文件大小问题把out文件删了,建议用idea 作业写了个双系统,但是由于时间关系网页端没能写完。 老师可能会给你一个参考代码,那个是学院流传的好几届的人手一份的代码,那个功能上比我的全一点,你可以参考那个完善功能。 立即下载

相关推荐

stm32教程之三重ADC交错采样

ps:本文基于stm32F407ZGT6单片机 stm32F4单片机单通道采集的最大采样率为2.4M,所以有时会难以满足较高频率的采样,于是查阅芯片手册,发现stm32F4支持多重ADC采集,利用每个通道的转换时间,错位采样,从而提高采样率,最大把采样率开到2.4*3=7.2M. (去年初学ADC时研究的,基于cube和HAL库的三重ADC交错采样参考资料不多,我也是研究了一段时间,写下这篇博客希望可以帮助到更多人。) 示意图如下: 以下是官方例子的说明, In this ex...

weixin_52178036的博客 8876

OOP基本思想

面向对象思想      面向对象概念:是指把所有对象封装为对象,提高代码的复用性 【复用性就是指一段代码可以重复使用】 一:面向对象四大步骤: 1:给计算机定义一个类 【一个类又两部分组合:成员变量和成员方法】 2:创建类的对象并起名字 3:给对象的属性(即:成员变量) 4:调用这个类的方法解决问题 二:类的概念   &nbsp...

小白有个大牛梦 2786

有限状态机FSM详解(一)

有限状态机在维基百科中的解释是: 有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 至于为什么要学FSM,FSM可以把模型的多状态、多状态间的转换条件解耦。可以使维护变得容易,代码也更加具有可读性,也更加艺术。 理解有限状态机首先需要理解整个模型。我们把灯的开关作为示例,...

benjonc的博客 5万+

如果理解oop

OOP(object oriented programming),即面向对象编程,其中两个最重要的概念就是类和对象。 世间万物都具有自身的属性和方法,通过这些属性和方法可以区分出不同的物质。 属性和方法的集合就形成了类,类是面向对象编程的核心和基础, 通过类就将零散的用于实现某个功能的代码有效地管理起来了。 类只是具备了某些功能和属性的抽象模型,而实际应用中需要一个一个实体,也就是需要对类

lerdor的专栏 5187

Jetson-nano 编译实时内核并烧录

前言 之前一篇文章介绍了正常的烧录过程,使用的是默认内核,实际工作中需要对内核打补丁升级为实时内核,并对其重编译。 一、准备内容 官网大法好 官方内核下载链接 官方交叉编译器下载链接 官方文档 ubuntu主机一台 根据官网选择下载对应的文件, 1、L4TDriver Package (BSP) source jetson内核文件。 2、官方交叉编译器 因为我们不是在jetson上直接编译,而jetson是arm平台,所以要进行交叉编译。 二、使用步骤 1.解压 内核 tar -xjf public_s

ldl371122的博客 3287

RK3588实战:如何将8路1080P视频流实时拼接成一张超清全景图?聊聊AVS模块的那些事

本文深入解析了RK3588芯片的AVS模块如何实现8路1080P视频流的实时全景拼接技术。通过硬件加速、时间同步、几何校正和色彩均衡等关键技术,RK3588能够高效处理高密度视频流,输出超清全景图。文章还提供了优化策略和实战经验,帮助开发者充分发挥RK3588的潜力。

weixin_27014595的博客 738

OOP思想指的是什么?

OOP思想指的是面向对象编程,面向对象强调对象的“抽象”、“封装”、“继承”、“多态”,相比面向过程该思想专注于通过对象的一些方法去解决问题,不同的功能可能由不同的对象来负责解决。

m0_70556273的博客 3342

Valgrind 从入门到精通:内存调试和性能分析

Valgrind 提供了强大的 API,允许开发者编写自定义的检查工具。通过扩展 Valgrind,可以针对特定场景实现更精准的检测。

大模型大数据攻城狮的专栏 1217

什么是OOP思想?

什么是OOP思想?

weixin_66108142的博客 1143

AIGC时代的必备技能:提示词工程(Prompt Engineering)全面指南

本文主要介绍了AIGC时代的重要技能——提示词工程(Prompt Engineering)。文章首先定义了提示词的概念,强调其作为人类与AI沟通桥梁的重要性,并详细阐述了提示词的功能特性,包括输入、大模型处理和输出三个环节。接着,文章探讨了提示工程的重要性,如提高输出质量、节省资源和时间等。随后,文章深入分析了提示词的基本构成要素,包括指令、上下文、输入数据和输出指示符,并提出了提示词的五大基本原则:清晰性与具体性、提供充足的上下文、明确任务与目标、考虑受众和迭代思维。最后,文章介绍了提示词的七大常见技巧

weixin_43178406的博客 27万+

注意力机制模块:二次创新:CBAM 与 ECA 融合形成 CECA 模块,参数量减少 40%

文章摘要: 本文提出一种轻量化注意力模块CECA,通过融合CBAM和ECA的优势解决模型部署中的精度与速度矛盾。CBAM虽具备通道和空间双重注意力,但参数量大;ECA轻量但缺乏空间注意力。CECA采用ECA的一维卷积替换CBAM的通道注意力部分,保留其空间注意力模块,在保持双注意力能力的同时减少40%参数量。实验表明该方案在边缘设备部署中能维持精度并提升推理速度,特别适用于YOLO等目标检测模型的轻量化改进。文章详细拆解了架构设计、代码实现及参数量优化原理,为算法工程师和嵌入式开发者提供了实用解决方案。

ZXSXJ的博客 237

OOP编程思想

OOP编程思想 OOP核心思想:封装,继承,多态。 理解: 对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 oop的基本思想:把组件的实现和接口分开,并...

宇宙无敌大帅锅 2万+

高通平台蓝牙学习-- 基于WCN6750 Bluetooth 5.2的讲解

摘要:蓝牙5.2解决方案WCN6750具备多项先进特性:完全兼容5.2标准及ANT+协议,支持2Mbps高速BLE和长距离传输;采用射频集成方案,与WLAN共享天线并支持5G并发;内置功率放大器,支持Class1/2传输;提供双音频流和Slimbus接口优化。其HCI UART接口支持3.2Mbps速率,通过BlueZ协议栈实现蓝牙5.2功能,包括2Mbps模式和长距离传输,符合核心规范要求。(149字)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 3万+

什么是面向对象? 谈谈你对面向对象的理解

面试官提问:什么是面向对象? 谈谈你对面向对象的理解 面试题拆解: 这道面试题对于工作时间不是很长的Java程序员来说,出现频率是比较高的。 那么到底什么是面向对象呢?讲面向对象之前,需要先聊一下面向过程,并聊聊两者的区别。 再从面向对象的角度出发,聊聊面向对象的三大特性:封装、继承、多态。 面试题回答 下面是面试君对于这个面试题的回答,不一定全对,可具有一定的参考借鉴意义: 面试官你好,我来回答一下这个问题,对于什么是面向对象,它是一种编程思想。聊到面向对象,我们需要聊一下面向过程的编程方式

qfguan的博客 5万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

面向对象思想总结

  一、面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。       面向对象有一个非常重要的设计...

每一天都是余生 2万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java面向对象专题

Java面向对象专题解读

从知识输入到知识输出 4265

什么是面向对象

什么是面向对象? Java语言是一种面向对象OOP(Object Oriented Programming)还有OOD(面向对象的设计),OOA(面向对象的分析) 的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象

weixin_50005657的博客 5491

JAVA面向对象是什么?

JAVA面向对象面向对象?What???什么是对象(Object)?什么是面向对象?面向对象有什么特征? 面向对象?What??? 众所周知 Java是一种面向对象的语言,那么什么是面向对象? 什么是对象(Object)? 对象就是具有某些的特殊属性(成员变量)和行为方式(方法)的实体。 现实生活中的任何事物都可以看作是对象,无论是具体或抽象的事物,Java中就有了一种思想叫做“万物皆对象”...

weixin_44684812的博客 9944

什么是面向对象,为什么要面向对象

一、 面向对象,这个对象到底是什么? 这个对象不是C#中的实例,C#中我们把一个类的实例也叫做对象,这种对象严格的说应该是面向对象的编程实现(OOP)中的对象,面向对象编程,也不是面向类的实例编程。对象的定义是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。也有的定义为“一切都是对象”然而面向对象也不能简单...

weixin_33738982的博客 2075

如何理解面向对象(什么是面向对象?)

面向对象是一种思想,是相对于面向过程而言的。面向对象是将功能等通过对象实现,将功能封装进对象中,让对象去实现具体细节。封装性、继承性、多态性。封装性就是把对象的属性和实现的细节隐藏起来,仅对外提供公共的访问方式。继承性就是两种事物间存在一定的所属关系,继承是多态的前提。多态性就是父类引用指向子类对象。面向对象的特点是:将复杂的事情简单化;从以前的过程中的执行者变成指挥者;是符合现在人们的思考习惯的一种思想。

frozenpenguin的博客 3747

面向对象总结

在软件开发领域,面向对象编程(简称 OOP)是一种极为重要且广泛应用的编程范式。它以对象作为程序的基本单元,将数据和操作数据的方法封装在一起,通过抽象、继承、封装、多态等特性,让程序的结构更加清晰、可维护性和扩展性更强。对于刚接触编程不久的我来说,掌握面向对象编程的核心知识点,是深入学习编程语言和开发复杂软件系统的关键一步。接下来,我将从面向对象基础和面向对象高级两个部分,对相关知识点进行详细总结。

2501_91923303的博客 906

面向对象思想

第一节 面向过程和面向对象思想 1. 面向过程和面向对象的区别   面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的 方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性 的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方 式。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析 (OOA...

贝西奇谈 1546

面向对象分析、面向对象设计、面向对象编程、面向对象编程语言的基本概念

什么是面向对象编程和面向对象编程语言? 面向对象编程的英文缩写是 OOP,全称是 Object Oriented Programming 面向对象编程语言的英文缩写是 OOPL,全称是 Object Oriented Programming Language 面向对象编程 面向对象编程是一种编程范式或编程风格。它以类和对象最为组织代码的基本单元,并将封装、抽象、继承、多态四个特性作为代码设计和实现...

Angus的博客 1966

什么是对象?为什么要面向对象?怎样才能面向对象

什么是面向对象、为什么面向对象、怎样才能面向对象、类和对象的关系

学了总是会忘...+_+ 1202
上一篇: os模块
下一篇: 面向对象的三大特征
Dead_LS
博客等级 码龄7年 6粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值