怎么设计好一个类?

2016-10-15 09:28:35 +08:00
 shenlei

小弟本科通信,研究生也是通信,给硬件写驱动,改驱动。工作找的是 C++的后台开发,可是我一直没从 C 语言面向过程转向 C++的面向对象编程上来,还请各位帮忙解释下怎么设计一个 C++的类。小弟不甚感激。

3123 次点击
所在节点    C
18 条回复
svenFeng
2016-10-15 09:41:42 +08:00
看 C++ primer 的一些关于类设计的内容,然后试着写一个稍稍大一些的项目,就可以理解面向对象的好了。
liuxu
2016-10-15 09:52:44 +08:00
学面向对象学一下 java 快速教程应该是最好的
bossfrog
2016-10-15 10:01:34 +08:00
一个设计良好类就是一个明确清晰的"黑盒子",使用者不需要知道太多的东西、甚至根据直觉就能把它用对。和语言无关
anubiskong
2016-10-15 10:08:08 +08:00
函数式编程, 解决你的烦恼, 手动斜眼
AscenZ
2016-10-15 10:08:14 +08:00
同意二楼的看法,之前还只学了 c/c++的时候,对面向对象比较难理解,后来做了一段时间 OC ,对面向对象才理解的好一点,现在再回来看 c++感觉清晰了一些。建议可以先看一下 java / OC 之类的。
lsmgeb89
2016-10-15 12:29:12 +08:00
没有觉得 C++ 的面向对象很难理解,概念都是差不多的,不用去看 Java 什么的

C++ Primer Chapter 7 & 15
Umix
2016-10-15 13:16:02 +08:00
大话设计模式
msg7086
2016-10-15 13:18:50 +08:00
noli
2016-10-15 14:43:29 +08:00
c 和 c++长于解决的问题的尺度是不一样的。 c 面对硬件驱动这种问题是非常合适的工具。如果你想知道 c++中面向对象这一部分怎么用怎么写,你得先清楚它适合解决的问题的尺度。

c++适用的场合一般是对性能要求非常高的大规模软件场景。什么叫做大规模,就是几十成百上千号人,为同一个软件项目生产代码,别拿 linux 内核来抬杠。这时候编程语言除了要承担产出机器码的终极作用,还必须承担一部分的人与人之间沟通的作用。

c++中的面向对象,很多时候就是为了这种情况来使用的。换句话说,如果只是你的个人小工具,没必要因为 OO 而 OO ,怎么舒服怎么来。

面向对象三大思想,继承,封装,多态,在 c++中都是为了更好地沟通而设计的。

能接受这个思路再往下说。
SuperMild
2016-10-15 14:56:08 +08:00
lz 这个问题问得太大了,感觉还是先看书吧,基础的东西(包括类的思想和实现方法)书里都有写,然后遇到想不通的地方可以再来问,举出具体的例子。
xsxsxszs
2016-10-15 17:56:18 +08:00
建议先别看设计模式之类的,容易把自己绕进去,导致为了模式而模式。可以看好的开源代码模仿着来,设计模式这种应该是有一定项目经验之后再去看比较好。印象比较深刻的是硕士设计模式课程,有工作经验的同学听了觉得获益匪浅,说终于明白了以前工作里为什么要那么设计结构。而没工作经验的同学(比如我)基本一头雾水,觉得太理论了,听了两次课就没再去了。
zhidian
2016-10-15 18:14:09 +08:00
同意楼上。先写(几)十万行代码再说。发现痛点了,再去重构。你就能设计一个好类了。

刺激量不够,理论和方法,都是浮云。

个人感觉,冲着架构师去,是成不了架构师的。首先你要是一个程序员。
nozama
2016-10-15 18:47:25 +08:00
我自己是这样工作的:抽象出问题的本质(思考...) -> 封装数据和行为 -> 对照 SOLID 原则反复重构 -> 设计模式浮现
hyrious
2016-10-15 19:12:38 +08:00
先区分好 is_a 和 has_a
zhuangzhuang1988
2016-10-15 19:32:42 +08:00
既然是 c++板块
肯定是买本 c++老爹的书
https://book.douban.com/subject/4604591/ 《 C++程序设计语言》
然后看

第四部分 用 C++ 做设计
第 23 章 开发和设计
23.1 概述
。。。
。。。
beginor
2016-10-15 19:40:26 +08:00
我觉得,对于单个类来说, 职责单一, 高内举, 能做到这两点就算是一个好的类。 至于体现松耦合则是多个类之间的关系了。
q397064399
2016-10-16 09:01:33 +08:00
好吧 你需要敏捷软件开发
HarveyDent
2016-10-16 23:24:03 +08:00
多写多踩坑,没有捷径的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312943

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX