V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shenlei
V2EX  ›  C

怎么设计好一个类?

  •  
  •   shenlei · 2016-10-15 09:28:35 +08:00 · 3325 次点击
    这是一个创建于 2972 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    第四部分 用 C++ 做设计
    第 23 章 开发和设计
    23.1 概述
    。。。
    。。。
    beginor
        16
    beginor  
       2016-10-15 19:40:26 +08:00
    我觉得,对于单个类来说, 职责单一, 高内举, 能做到这两点就算是一个好的类。 至于体现松耦合则是多个类之间的关系了。
    q397064399
        17
    q397064399  
       2016-10-16 09:01:33 +08:00 via iPhone
    好吧 你需要敏捷软件开发
    HarveyDent
        18
    HarveyDent  
       2016-10-16 23:24:03 +08:00
    多写多踩坑,没有捷径的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5733 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:40 · PVG 10:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.