uu聊天怎么玩_C++编程知识解析:如何理解面向对象中,对象与对象的关系?

在我上学的时候,一聊到设计模式都是很有格调的话题,仿佛设计模式就是解决软件开发的精髓,但是很长一段时间,我从骨子里是排斥设计模式的,因为我觉得自己连面向对象的知识都没有领悟,谈论设计模式还为时尚早,我尤其排斥那本被吹到爆炸的《大话设计模式》,那本设计模式看上去给你用形象的比喻讲明白了一个东西,但实际上你真正开始写代码的时候,发现自己什么都写不出来。

这篇博客是想退一步思考,总结一些面向对象的知识,比如思考“对象与对象的关系”到底是怎样的。

和大多数人一样,初学者面向对象时,uu聊天怎么玩“面向对象的三个特性是继承、包装、多态性等词汇。比如,一切都是对象。但是,只记住这些话,就很难理解面向对方。我记得自己真正的面向对象是读了《c的编程思想》,这本书的第一章介绍了oop,作者通过面向过程的c代码向c的oop写作方式,引出了面向对象的精髓。例如,面向对象实际上是一种思想,早期使用c的时候,也可以用面向对象的想法写(struct函数),但是这个代码是单向绑定的,支持面向对象的代码的优点是完成方法和数据的双向绑定。不像struct那样,不知道谁使用了这个数据结构。

这些关于封装的知识理论上被称为基于对象,但说句实在的,对于很多人而言,能在系统中用封装的思想将系统建模就已经很不容易了,这可能听上去有点夸张,但仔细想想,对于一个人,一个苹果,一张订单让你去建模,你可能很容易就建了,但如果是类似Controller,Action,Execute这些看上去像是动作的对象呢?

比如复杂的系统,如何抽象领域模型,使系统清晰地交流并不容易。继承和多态,其实继承本身和多态不是同一平行线的概念。这个继承,java实际上分为继承界面和继承类,继承类主要是为了代码的再利用,但是这个再利用是静态的,多利用就像动态的再利用。

c的分类,c提供的oop看起来像是为数学公式准备的,只有继承类,只有函数类别另外,c的继承包括公有继承、继承、私有继承等继承权、友元和多重继承。这些东西不是没用,而是一般人用不来,所以在java中都选择了精简。

面向对象本身的编程思想可以总结为

(1)所有数据都应该隐藏在所有类别的内部。

(2)类用户必须依赖类公共接口,但类不能依赖其用户。

(3)不要把实现细节放在类别的公共接口上。

(4)面向对象的方法签字实际上是信息协议,面向对象的本质是在对象和对象之间发送信息。

完成上述oop回顾介绍后,引进该博客的主要内容,对象与对象之间的关系。

使用关系 简单来说,我就是这样理解面向对象,每个对象都包装了自己的状态和协议,一个对象总是想要另一个对象。总结了一个对象如何使用另一个对象的方法,基本上总结了对象建模的所有场景。uu聊天怎么玩

我非常喜欢用汽车和加油站之间的关系举这个例子。这个例子是我从《OOD启示录》这本书中读到的。

汽车如何使用加油站?

首先作为参数可以传递给加油站:

ClassCar{voidget_gasoline(Gasstiongasstation);}
或者作为Car的属性,这看起来有点奇怪,但这辆车只能在指定的地方加油。

ClassCar{privateGasStationgasStation;voidget_gasoline(){gasStation...}
更奇怪的是土豪模式,直接new加油站出来。

classcar{voidget_gasoline({gasstation==newgasstation()}
另一种退出方式是从另一个地图对象中获得加油站对象,但这又引起了另一个问题。这个地图对象是从哪里来的?

Class Car{void get_gasoline(){GasStation gasStation = map.getGasStation();}}

以上的这些都是一个对象想使用另一个对象的方式,我要特别提醒一下那个作为一个属性的方式,同样是定义一个类的属性,比如一个person有一个name属性,那就是它拥有一个属性,算包含关系,而如果是一个person有一个country属性,这个时候就是关联关系了,就像是数据库里面的关联字段一样。不过更官方的叫法,其实将对象与对象的关系分为四种:依赖关系(Dependency),关联关系(Association),聚合关系(Aggregation),组合关系(Compostion)。其中,uu聊天怎么玩将其作为局部变量、方法参数或调用一种静态方法称为依赖关系。关联关系、聚合关系、组合关系都用会员变量来表现,但表现的对象的生命周期和耦合度不同。

继承 不仅可以使用对象,还可以通过继承获得这个“代码”前面提到的是,多态是动态的获得,继承就像静态的获得,就像编译者把这个代码复印给你一样。设计模式的书经常不值得继承,说不用组合继承,但是如果两种类型真的有父子关系的话,不用组合继承看起来很奇怪,维护性也很差。例如,如果你的子类继承了你的父类,只要给父类添加一种方法,那个子类就会默认得到,但是如果使用组合的话,就不能简单地拥有这些方法,一个一个地引用这个新的实现。

多重继承 说到继承,就必须提到多重继承。这个在java这个词中被禁止了。很多人说java可以实现头,但口头和继承类完全不是概念,继承类是重用的,那个口头有什么重用的地方?最多只是定义协议。多重继承这种思想本身没有问题。例如,木门继承了门和木两个父亲。这样,任何父亲添加新的属性和方法,都会默认地被木门继承,这是自然的建模。木门有门和木两种属性,这很奇怪。多重继承受到谴责的主要是那种钻石继承,父亲之间签字相同等问题,但也有提供限制版多重继承的语言,使用多重继承,不提高代码的复杂性。例如Mixin(混合类)。

元类 最后说元类,这个概念来源于元编程,元编程是什么例如,DSL,例如C的模板,元类即使用于制作类。这个在python中偶尔使用。简单的入门可以用type制作对象(type是元类)。

Foo=type(&#34Foo&#34(object,),{&#34hello&#34:hello})

很多使用场景都是设置类的__metaclass_属性,在创建这种类型时扩大这种类型。

今天的分享就到这里了,希望对大家有帮助~

不懂就问,对于准备学习编程的小伙伴,如果你想更好地提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对C/C本感兴趣的是,关注编辑在后台的私人信件。【编程交流】一起学习吧可以接受C/C的项目学习视频资料哦已设置关键词自动回复,台湾uu聊天室台词自动接收即可!

发表评论

您的电子邮箱地址不会被公开。