怎么设计好一个类? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shenlei
V2EX    C

怎么设计好一个类?

  •  
  •   shenlei 2016 年 10 月 15 日 3892 次点击
    这是一个创建于 3388 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言    2016 年 10 月 15 日
    谢谢大家的回复,我总结下:
    1.先多写点 cpp 代码,找点感觉
    2.再原有代码的基础上多多重构。
    18 条回复    2016-10-16 23:24:03 +08:00
    Em5O7B1JGfjQnBry
        1
    Em5O7B1JGfjQnBry  
       2016 年 10 月 15 日 via Android
    看 C++ primer 的一些关于类设计的内容,然后试着写一个稍稍大一些的项目,就可以理解面向对象的好了。
    liuxu
        2
    liuxu  
       2016 年 10 月 15 日
    学面向对象学一下 java 快速教程应该是最好的
    bossfrog
        3
    bossfrog  
       2016 年 10 月 15 日 via Android
    一个设计良好类就是一个明确清晰的"黑盒子",使用者不需要知道太多的东西、甚至根据直觉就能把它用对。和语言无关
    anubiskong
        4
    anubiskong  
       2016 年 10 月 15 日
    函数式编程, 解决你的烦恼, 手动斜眼
    lightzh
        5
    lightzh  
       2016 年 10 月 15 日
    同意二楼的看法,之前还只学了 c/c++的时候,对面向对象比较难理解,后来做了一段时间 OC ,对面向对象才理解的好一点,现在再回来看 c++感觉清晰了一些。建议可以先看一下 java / OC 之类的。
    lsmgeb89
        6
    lsmgeb89  
       2016 年 10 月 15 日
    没有觉得 C++ 的面向对象很难理解,概念都是差不多的,不用去看 Java 什么的

    C++ Primer Chapter 7 & 15
    Umix
        7
    Umix  
       2016 年 10 月 15 日 via Android
    大话设计模式
    noli
        9
    noli  
       2016 年 10 月 15 日 via iPhone
    c 和 c++长于解决的问题的尺度是不一样的。 c 面对硬件驱动这种问题是非常合适的工具。如果你想知道 c++中面向对象这一部分怎么用怎么写,你得先清楚它适合解决的问题的尺度。

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

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

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

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

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

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

    第四部分 用 C++ 做设计
    第 23 章 开发和设计
    23.1 概述
    。。。
    。。。
    beginor
        16
    beginor  
       2016 年 10 月 15 日
    我觉得,对于单个类来说, 职责单一, 高内举, 能做到这两点就算是一个好的类。 至于体现松耦合则是多个类之间的关系了。
    q397064399
        17
    q397064399  
       2016 年 10 月 16 日 via iPhone
    好吧 你需要敏捷软件开发
    HarveyDent
        18
    HarveyDent  
       2016 年 10 月 16 日
    多写多踩坑,没有捷径的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2873 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:10 PVG 22:10 LAX 06:10 JFK 09:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86