cpp编程惯用法--抽象

cpp编程惯用法

学过cpp primer ,写过一些例子,还是容易迷失在文案的海洋里面。

我觉得我已经成了一个用class写c的php程序员。还按照这个方法,完成了个项目,

完成项目的过程中真是有点头大,不过写着写着渐渐的熟悉,回过头来发现两点

1 需要对c++语法中常用的部分进行总结。
2 需要懂得每个项目里面的内存模型,对象什么时候产生,做了什么事情,什么时候销毁
3 需要更多的了解智能指针
4 需要更多的了解c++ 线程编程方面的知识

是有点迷失,所以需要一本更加精炼的书,这个时候我发现了c++编程惯用法,毫无疑问,这是本好书,至少对我来说。

第一部分《抽象》

设计是迭代的,我们需要不断的思考,考虑是什么?为什么?记录边界,记录下关键点。

面向对象,是对数据的抽象ADT,通过抽象出数据,对外提供接口,对内提供实现。

通过public(接口)和private(实现)了ADT,ADT使程序更加容易维护

程序都可以被划分成:ADT和ADT的实现

记录下ADT的好处:

有助于类更好的设计
它是你和用户的协议
记录过程中我们可能发现问题
清晰文档有利于重构
理解ADT有利于避免以实现驱动的设计

性能和ADT的平衡?

我们需要明白自己是设计ADT还是实现ADT?

建立抽象模型过程就是权衡:什么该有?什么不该有的过程?

0 尽可能理解你需要处理的对象,尽可能抓住关键点
1 明白什么应该出现在模型中
2 如果存在疑问,暂时不要考虑,因为扩展总是比修改多余的部分更加容易

没有出现在抽象模型中的东西和出现在抽象模型的东西都一样重要,需要取舍

抽象模型间的关系,自己问自己问题,想象场景-如果不对,及时更正

抽象模型间的关系 一对一,一对多,多对一,还是多对多

多少才算多?考虑数量问题

如何保证关系会随着时间的变化而变化

is-a 属于,子类型化,派生类是一个父类的子类,a属于b这个集合

例如法拉利跑车属于汽车

has-a a包含b这个集合,a拥有b,电脑拥有键盘

use-a 两个对象间的相互联系

关系是单向的还是双向的?

关系在c++中通常通过指针实现,双向的开销更大,单向更简洁表现力差

是否有着多重关系

关系是否必要

我们需要考虑边界

假设条件是否有效?假设在什么条件下成立?假设失败?

可以通过卡片或者uml图记录 抽象模型

你可能感兴趣的:(c/c++,从零开始学习cpp)