面向对象

本文详细介绍了面向对象设计的基本原则,包括职责单一、开闭原则等,并解释了封装、继承、多态等核心特征。此外,还探讨了类与对象的概念、创建方式以及构造方法、重载与重写等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、面向对象设计原则
1、职责单一
2、OCP原则(o:open c:close p:principle)开闭原则
3、依赖倒置:主要针对父类,可以更加灵活的实现
二、面向对象的三大特征
1、封装
2、继承
3、多态
若是还有第四点,那么就是抽象
三、面向过程与面向对象
面向过程:对一个流程的整个体系需要非常的熟悉,了解每一个细节,事必躬亲。
面向对象:只针对自己所负责的那一块区域,熟知这一小块区域内的所有东西,其他的东西只管使用不负责内部的结构亦或是生产。
四、定义 类
(是对象的抽象)
    class 类名{
        //属性和方法.
    }
    1、考虑有哪些类
    2、考虑每个类里面的属性和方法(合适的属性或者方法应该出现在合适类中)
    3、类与类的关系
    一个文件中可以有多个类,但是只允许有一个是public的,并且该public的类名和文件名一致。
(1)继承
(2)依赖:关系比聚集还要弱  例如:班级和学生
(3)聚合:
    聚集-关系较弱   例如,球员和教练
    组合-关系较强   例如,人的身体各个部位
五、创建对象
类名 对象名 = new 类名();
访问的对象的属性:对象名.属性
访问的对象的方法:对象名.方法名();
六、构造方法
构造方法的特征:
    1、方法名和类名相同
    2、没有返回类型,连void也没有
    3、构造方法是在new对象的时候进行调用
    4、当一个类建好之后默认会有一个没有参数的构造方法
    5、当类里面加了一个带参数的构造方法之后,原来没有参数的构造方法会自动消失,如果需要使用没有参数的构造方法,需要特殊声明
七、重载(overload) 静态多态
特征:
    1、方法名相同
    2、参数不同(参数的个数不同、参数的类型不同)与返回类型无关
    3、构造方法也可以重载
八、this
1、this代表的是当前对象
2、this只能出现在方法中
3、构造方法使用this互相调用的时候必须放在构造方法的第一行
九、包
1、作用:解决类的重名问题
2、包名的规范:将域名倒着写
    类中使用包:package 包名;
    包的导入:import 包名.类名;
十、继承
  1. 继承作用

    继承划分了类的层次性,父类代表的是更一般、更泛化的类,而子类则是更为具体、更为细化;继承是实现代码重用、扩展软件功能的重要手段,子类中与父类完全相同的属性和方法不必重写,只需写出新增或改写的内容,这就是说子类可以复用父类的内容,不必一切从零开始。 
    
  2. 继承关系

    什么是一种什么,就是包含,例如 A∈B
    
  3. 构造方法

    在实例化子类对象的时候,会调用子类的构造方法。
    但是在调用子类构造方法的时候,默认会调用父类的没有参数的构造方法,如果父类没有无参的构造方法,那么会报错。
    如果非要调用父类有参数的构造方法,那么需要在子类的构造方法中使用super进行显式调用,但是这行代码必须放在第一行。
    
  4. super

     在子类中调用父类的方法或者是属性。
    
十一、重写(overwrite override) 动态多态
又叫做 覆盖      
1、目的:对父类的方法实现不满意,在子类中重写一个方法
2、重写满足的条件:
    A、继承关系
    B、方法名相同,参数相同,返回类型一致或者兼容
    C、重写方法不能使用比被重写方法更严格的访问控制权限
3、@Override 可以在编译的时间检查是不是重写
十二、Object类
toString():输出一个对象的时候,默认会调用toString方法,如果对默认的实现不满意,可以自己去实现toString,这种就叫重写。
equals():判断2对象是否相等,默认的实现就是引用地址是否相等,如果对默认实现不满意,自己重写该方法。
十三、访问控制符

访问权限:
这里写图片描述
private:可以修饰方法,属性,内部类,即为除了外部类的所有
default:默认,表现为什么都不写,可以修饰外部类,内部类,方法,属性
protected:同private
public:同default

十四、抽象类
1、有抽象方法的类一定是抽象类,抽象类中不一定有抽象方法。
2、抽象类不能被实例化,即为不能被new
3、抽象类中有构造方法,若是被继承,那么必须要有一个没有参数的构造方法,若是没有无参数的构造方法,那么会报错。

PS:abstract,native 方法没有实现。底层一般是c或者c++实现的

十五、final
1、可以修饰类,属性和方法
2、final修饰的限制
(1)final修饰的类不能被用于继承,刚好与abstract矛盾,即为两者不能同时出现。
(2)若是修饰属性,那么被修饰的属性一旦赋值就不能被更改,但是可以不在声明的时候赋值,可以通过构造方法的方式来赋值。
(3)若是修饰方法,那么该方法不能被重写,但是可以被重载。
十六、接口
1、接口的作用:为了解决单一继承不能满足需要的问题。
2、定义接口 interface  
3、使用接口 implements
4、接口中定义的内容:接口之中可以定义属性,方法。
5、接口与抽象类的区别
    (1)接口中的方法都是抽象的方法,默认为public abstract;在抽象类中的方法可能有抽象的方法,但也可能没有。
    (2)接口中没有变量的说法,所有的定义声明都默认为public static final。
    (3)接口之中没有构造方法;抽象类中有构造方法,但是两者都不能被实例化,即为都不能new,抽象类的构造方法仅仅是在被继承之后给子类使用。
    (4)接口是被实现implements;抽象类是被继承extends。
注:jdk 1.8接口里可以放有实现的方法!
6、接口与类
类可以且仅仅可以继承一个类,可以实现多个接口;接口只能继承接口,但可以继承多个接口。
7.抽象类与接口的设计
抽象类是用于被继承的,两者需要拥有包含关系,例如Animal和Cat;接口是用于被实现的,两者只要有共同点就可以,例如Airport和Bird。
十七、多态
基本条件:
(1)需要有继承或者是实现关系
(2)重写
(3)父类引用子类对象
十八、static

可以修饰除外部类以外的所有。放在方法区的静态池中。static修饰的属性或是方法通过 类名.属性 或者 类名.方法 就可以直接访问,但同时也可以通过产生对象来访问,但被static修饰的某个属性不再属于某个对象,而是所有同类对象公有的。

被static修饰的方法或者是变量被称为 类方法、类变量;其他的无static修饰的被叫做实例方法、实例变量。

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值