达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心 达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心
媒体报道
 当前位置:主页 > 媒体报道 >

面向对象编程开发中类与对象的关系分析

时间:2019-05-22  来源:未知  作者:广州达内培训

我们在上文中简单介绍了关于面向对象编程中的对象的概念以及编程方法等问题,下面我们就一起来了解一下,关于编程开发中的类和对象的关系问题。

面向对象编程开发中类与对象的关系分析

类和对象的关系:

类是描述某些具有共性事物的一个抽象概念,它不是一个客观存在的东西,它就是一个模板。

类可以定义对象

简单说:类是对象的模板,对象是类的实例。

类的抽取过程是从众多对象中提取出相似特征和动作进行封装的,不是凭空捏造的,比如:

小明是一个学生,小花是一个学生,经过我们从这一个个对象中我们发现他们都有相同的属性和行为,

这个时候就可以使用学生类进行承载。思考的过程是先有对象再有类,使用的时候现有类再创建对象。

需要强调一点:每个对象都拥有相同的方法,但各自的数据可能不同。

类都有哪些构成?

一个类通常有哪些元素构成,这些元素都有什么存在价值,换句话我们可以通过这些元素可以干什么。

【类名】描述类的职责,知名达意

类名的好坏直接影响我们对这个类职责的定义,所以好花点时间去琢磨一下类的命名。

【注释】使用注释说明方法,属性,类职责

【属性】用来表示对象状态

【构造函数】可以为创建对象提供多种形态的入口,可以初始化对象

构造函数是在对象初始化的时候使用的,通常某个对象在提供自己的对外服务的时候,必须让其他对象传递相关的数据,

在构造函数中进行接受这些数据是经常的做法,如果某些数据是无关紧要的可以不用再对象创建时就提供的建议不要通过构造,

从某种意义上来说构造函数的用途就是为对象获取整个生命周期重要的数据提供一个入口,对外表达一个意义:你要想使用我(对象),就必须提供给我这些数据,否则我(对象)的服务是不能提供给你的。

比如:数据库持久对象,在使用它提供操作数据服务之前必须要给它提供数据源连接的信息,不然是不可以使用的,具有强制性。

构造函数经常用来:

1.初始化本对象的所有属性。

2.强制用户类提供相关数据,并提供多种创建该对象的方法(构造函数重载)

3.也可以在类初始化的时候做其他的业务操作。

【访问方法setter】保证访问属性的安全,修改属性保证只有一处

这也是面向对象又一特性"封装"的体现,控制自身属性的安全访问。

【公共方法】提供类对外的服务

提供公共方法也是类存在的重要职责,一个没有任何对外服务的类可以放弃啦。

类内部提供方法的实现细节,而类的使用者不用关心具体谢姐。

提公共方法的命名一样很重要,

【私有方法】将不想用户关心的实现,放到私有方法中。

【作用域】控制属性的访问范围。

怎么创建一个合理的类

1.提供合适的构造函数。

2.让类属性的作用域尽可能小。

3.对类中的元素要合理添加上注释,没有任何注释的类如果命名再不合理就会造成维护理解困难。

4.提供合适的对外接口,这个下面有专门讲。

5.设计的类必然是要和其他的类进行交互的,要么是调用其他的服务,要么本身提供服务,没有这两点的类可以干掉啦。

6.要知道一个原则:类应该只对自己负责

自身状态的变更:

比如:商品的状态由上架,下架。如果要变更商品的状态应该有商品自己去提供变更状态的公共接口。

自身提供的服务:

比如:画图形,方形,圆形,星型它们内容应该是知道如何画出自己的图形。这就是对象负责自己的行为。

7.减少对象之间的依赖

相互依赖的比较少,也就是说一个类的修改不会对其他类产生影响,或者影响很小。

我们经常看到使用hibernate的对象之间关系维护都是对象中直接持有另外一个对象,或集合。

甚至将属于另外一个类职责的行为放到了本类中。

这样的设计会增加对象之间的依赖。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!




上一篇:没有了
下一篇:没有了

友情链接:
  • PostgreSQL 12 发布,性能改进与更好的服务器配置
  • GraalVM 19.0 发布,与Java 8se兼容的Java虚拟机
  • Linux 5.1.1 发布,几个修复
  • KDE Applications 19.04 开源软件套件获得第一点发布 - 现在可以
  • Linux内核将很快默认情况启用“-Wimplicit-fallthrough”
  • Linux 桌面年是否终于到来了?
  • IWD 0.18 发布,无线守护进程
  • Fedora 31提供更新的MinGW工具链,用于在Linux上构建Windows软件
  • Wine-Staging 4.8带来更多操纵杆改进,64位ARM Windows App修复
  • Vulkan 1.1.108 发布,两个新的扩展
  • Wine 4.8采用Unicode 12.0更新,更好地支持操纵杆
  • D9VK 0.11 发布,性能改进及D3D9修复
  • Android Studio 3.5 Beta 发布,性能优化改进
  • Firefox和GNOME最终可以在Linux 5.2的AFS文件系统上运行
  • KDE Plasma 5.16推出重写的通知系统
  • WSL Arch Linux已正式登陆Microsoft Store应用商店
  • DifferentialEquations.jl v6.4.0 发布,用于微分方程高性能求解
  • Debian 10 “Buster” 目前在GNOME默认使用Wayland,但仍有可能
  • RHEL 8发布后,用户等待CentOS 8的推出
  • Unity 2019.2 Beta 发布,带来许多Linux和Vulkan补丁
  • Libinput 1.13.2 发布,为苹果TouchPad提供更好的手指检测功能
  • Phoronix Test Suite v8.8.0m3 发布,开源基准测试
  • CentOS 8.0作为Red Hat Enterprise Linux 8.0社区版重新构建的进
  • LWJGL 3.2.2 发布,针对Vulkan 1.1和其他新包的更新
  • Mesa 19.0.4 发布,许多RADV, RadeonSI和Intel修复
  • 英特尔为BFloat16添加GCC 10和LLVM Clang 9编译器支持
  • ZFS On Linux 0.8-RC5 绑定在SPL代码中
  • GNU调试器 GDB 8.3 发布及安装更新,支持RISC-V与IPv6连接等
  • OpenMandriva Lx 4.0将Python 2排除在其基本操作系统之外
  • Kaidan作为Jabber/XMPP聊天客户端加入KDE
  • Google在Chrome中发布新的Cookie控件,改善用户隐私
  • 由于证书问题,Mozilla延迟Firefox 67推出
  • Google宣布Kotlin为Android应用程序开发的首选语言
  • 币安交易所被黑客入侵,超过7000比特币被盗
  • Linux 5.2中的XFS获得“大量新东西”
  • qBittorrent 4.1.6发布! 如何在Ubuntu 18.04中安装它
  • GTK 3.96 发布,作为向GTK 4.0迈进的又一步
  • GNOME 3.32.2桌面环境发布,最新的bug和安全修复
  • 图虫Premium亮相金鼠标,掀起视觉营销新风潮
  • 工业4.0对质量管理产生的变化及影响
  • Krita 4.2 Alpha带来性能改进,其他数字绘画增强功能
  • Radeon ROCm 2.4 发布,兼容TensorFlow 2.0
  • 易烊千玺代言优酷VIP会员,“ECG”模式开创明星互动新玩法
  • 怡亚通推出“三销合一”品牌创赢计划 联手湖南广电打造营销增长
  • 面向Windows 10的Chromium Microsoft Edge Beta泄露
  • 适用于Ubuntu手机的Ubuntu Touch OTA-9发布,全新的外观和改进
  • NotePad++ 正则表达式替换高级用法
  • 针对Linux 5.1内核更新的MuQSS补丁
  • 捕鱼1000炮
  • 网易彩票网
  • 快三平台
  • pk10盛兴开奖直播
  • 梭哈平台