打印

关于接口,实现,组合,继承如何理解?

[复制链接]
1722|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsbz|  楼主 | 2014-10-27 17:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最近想写单片机代码,提供给别人函数库。到底函数的参数搞成什么类型的,翻来覆去调整,也不满意。
最开始感觉用linux驱动的方式,后来觉得不好。后来又改了两三次。文档也得调整。最近弄了个understand软件发现有些地方还是关联太强,做不到弱耦合。
最后发现还是缺少理论作为指导。

相关帖子

沙发
keer_zu| | 2014-10-27 17:57 | 只看该作者
这些面向对象的概念,推荐看一看《面向对象:分析与设计》

使用特权

评论回复
板凳
xlsbz|  楼主 | 2014-10-28 08:04 | 只看该作者
keer_zu 发表于 2014-10-27 17:57
这些面向对象的概念,推荐看一看《面向对象:分析与设计》

你有时间可给出c例子。
我好好看看csdn后,再回复。
接口目的就是当用户需求改变后,减少内部代码更改。
当内部代码更改后,减少用户代码更改。
利于协作开发。

使用特权

评论回复
地板
keer_zu| | 2014-10-28 12:12 | 只看该作者
本帖最后由 keer_zu 于 2014-10-29 09:29 编辑
xlsbz 发表于 2014-10-28 08:04
你有时间可给出c例子。
我好好看看csdn后,再回复。
接口目的就是当用户需求改变后,减少内部代码更改。

基本是这个意思,非面向对象也可以做到这一点,但是面向对象和非面向对象有何区别?就是体现在“内部改变”这部分,面向对象的继承和多态保证了内部改变时,是可复用的,继承保证了扩展,多态保证了同样的接口提供不同的操作。

打个比方:
现在有一个“接口”(类):人,它定义了方法:”基本体检“(Ren.Tijian(Ren *ren));
它只是一个接口,没有具体的实例(在c++里面分别体现在:虚拟类和纯虚函数上);

然后分别由“人”派生出“男人”和“女人”(继承),它们分别实现了”基本体检“这个方法(两者分别实现各自的基本流程和内容,这里体现了多态)。

这时候“男人”由可派生出“成年男子“和”未成年男子“,它们继承了”男人“,同时分别增加了”附加体检项目“这个方法(比如成年男子要查那个xx腺,呵呵,具体方法为:ChengnianNanRen.fujia(ChengnianNanRen *cnnr))。(女人分类方法类似:"成年女子","未成年女子",如:ChengnianNvRen.fujia(ChengnianNvRen *cnnvr))

这个时候,如果分别新建一个"成年男子":范统和"成年女子":翠花,那么可以通过调用Ren.Tijian(&范统)和Ren.Tijian(&翠花)分别实现对两个人的基本体检。由于多态性,具体会分别调用适合各自的方法。

但是无法在Ren这个类的层面调用”附加体检“这个方法,因为这是扩展出来的,只能在各自的层面实现,比如:ChengnianNanRen.fujia(&范统)和ChengnianNvRen.fujia(&翠花)

@yyy71cj    @xlsbz  








使用特权

评论回复
5
keer_zu| | 2014-11-21 18:22 | 只看该作者
这个问题可以继续讨论的

使用特权

评论回复
6
liulx14| | 2014-11-25 10:22 | 只看该作者
keer_zu 发表于 2014-10-27 17:57
这些面向对象的概念,推荐看一看《面向对象:分析与设计》

你好,看到你和YYY71CJ的解释我体会很多新的知识,就单片机而言,比如8051,它的开发环境和芯片资源适合用面向对象的方式来做实际项目吗。

使用特权

评论回复
7
keer_zu| | 2014-11-25 14:22 | 只看该作者
liulx14 发表于 2014-11-25 10:22
你好,看到你和YYY71CJ的解释我体会很多新的知识,就单片机而言,比如8051,它的开发环境和芯片资源适合 ...

可以的,面向对象是一种不错的方法学,和平台无关,你可以使用C语言即可。

使用特权

评论回复
8
keer_zu| | 2014-11-25 14:24 | 只看该作者
@liulx14

最近在做的一个程序,在linux环境下,我干脆使用C++了,采用rational rose建模,生成代码,然后完善。

使用特权

评论回复
9
keer_zu| | 2014-11-25 14:27 | 只看该作者
@liulx14


@liulx14


使用特权

评论回复
10
keer_zu| | 2014-11-25 14:29 | 只看该作者
生成的代码:

使用特权

评论回复
11
liulx14| | 2014-12-2 09:42 | 只看该作者
keer_zu 发表于 2014-11-25 14:29
生成的代码:

你好版主,这两天没来看论坛,刚看到你给我解答的继承模式,很感谢,一般的单片机程序还是用C好了,C++这个感觉还是有些抽象,我现在是在做低功耗产品,对资源各方面要求比较节约。

使用特权

评论回复
12
keer_zu| | 2014-12-2 12:57 | 只看该作者
liulx14 发表于 2014-12-2 09:42
你好版主,这两天没来看论坛,刚看到你给我解答的继承模式,很感谢,一般的单片机程序还是用C好了,C++这 ...

是啊,C++用于功能复杂,平台足够强的应用

使用特权

评论回复
13
117788674| | 2014-12-2 14:38 | 只看该作者
keer_zu 发表于 2014-12-2 12:57
是啊,C++用于功能复杂,平台足够强的应用

版主,想能不能推荐几款书籍是关注状态机以及软时钟任务集于一体的或者分散的书籍看看?一致没有这方面的资源。

使用特权

评论回复
14
keer_zu| | 2014-12-2 15:23 | 只看该作者
117788674 发表于 2014-12-2 14:38
版主,想能不能推荐几款书籍是关注状态机以及软时钟任务集于一体的或者分散的书籍看看?一致没有这方面的 ...

可以看看 道格拉斯((Douglass Bruce Powel)) 的书:嵌入式与实时系统开发等,里面有对状态机的分析。还有他的c嵌入式设计模式。专门讲状态机的书好像不多,但是状态机是uml里面的重要部分,你可以找些uml状态图的案例来看一看,软时钟任务你指的是什么?

使用特权

评论回复
15
117788674| | 2014-12-9 16:42 | 只看该作者
keer_zu 发表于 2014-12-2 15:23
可以看看 道格拉斯((Douglass Bruce Powel)) 的书:嵌入式与实时系统开发等,里面有对状态机的分析。还 ...

就是时钟链表队列那些东西呀。

使用特权

评论回复
16
andylianggq| | 2014-12-11 18:59 | 只看该作者
keer_zu 发表于 2014-10-28 12:12
基本是这个意思,非面向对象也可以做到这一点,但是面向对象和非面向对象有何区别?就是体现在“内部改变 ...

说的好!:victory: 要是能上一段 伪代码,就好了。。。。。。

使用特权

评论回复
17
hnkf118| | 2014-12-15 14:28 | 只看该作者
make

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1614

帖子

4

粉丝