
发表日期: 2021-04-25 12:48:09 浏览次数:113
宿迁企业微信公众号小程序开发公司、宿迁企业网页设计方案、宿迁做网站开发价格、宿迁微信公众号制作运营报价明细表、宿迁网站设计公司费用、宿迁网站推广大概需要多少钱
宿迁,简称宿,别称水城,古称下相、宿豫、钟吾等,江苏省地级市,宿迁位于长三角北翼,江苏省北部,是长三角北翼区域性综合交通枢纽, [1] 地处徐州、连云港、淮安中心地带。宿迁是江苏省沿海地区向中西部辐射的重要门户城市 [2] ,是徐州都市圈、江淮生态经济区核心城市 [3] 、一带一路节点城市 [4] 。截至2020年6月,宿迁下辖2区3县 [5] ,总面积8555平方千米。截至2019年末,宿迁户籍人口592.36万 [6] 。
宿迁是西楚霸王项羽的故乡,有着5000多年的文明史和2700多年的建城史,曾是泗水国、钟吾国、宿国都城,历史悠久,人文荟萃,素有“华夏文明之脉、江苏文明之根、淮河文明之源、楚汉文化之魂”之称 [7] 。宿迁是酒文化的发源地之一,有中国白酒之都称号 [8] ,洋河、双沟两大名酒出产于此。宿迁是典型的苏北水乡,坐拥骆马湖、洪泽湖两大淡水湖,大运河、古黄河、淮沭新河等众多河流镶嵌其间。乾隆皇帝六下江南五次驻跸于此,赞叹宿迁为“第一江山春好处” [9] 。
宿迁是首批12个社会信用体系建设示范城市 [10] ,是中国优秀旅游城市 [11] 、国家园林城市 [12] 、国家卫生城市 [13] 、全国文明城市 [8] 。2020年10月,宿迁被评为全国双拥模范城(县) [14] 。
很遗憾,由于C++语言的限制,所有公有的、受保护的和私有的类成员都必须出现在类的声明中。理想情况下,类的头部应该如下所示:
#include<string>class URLDownloader{public:
URLDownloader();
bool DownloadToFile(const std::string &url,
const std::string &localFile);};复制代码随后可以在其他地方声明所有的私有成员,例如在.cpp文件中。但对于C++而言,这是不可能做到的。(因为如果这样做就需要在编译时知道所有对象的大小。)尽管如此,仍然有一些方法可以让私有成员在头文件中不可见(Headington, 1995)。一种常用的技巧称为Pimpl惯用法,它将所有的私有数据成员隔离到一个.cpp文件中独立实现的类或结构体内。之后,.h文件仅需要包含指向该类实例的不透明指针(opaque pointer)即可。
强烈建议在API中采用Pimpl惯用法,这样就可以将所有实现细节完全和公有头文件分开。如果你不想这么做,至少也要将头文件内不需要的私有方法移到.cpp文件中,并将它们转换为静态函数(Lakos, 1996)。但只有当私有方法仅访问类的公有成员或者根本不访问任何类成员时才能这么做,(例如接收文件名字符串,然后返回该文件名的扩展名的程序)。很多工程师认为如果类使用了私有方法,那么就必须将其包含在类的声明当中,但这么就暴露了多余的实现细节。
提示 将私有功能声明为.cpp文件中的静态函数,而不要将其作为私有方法暴露在公开的头文件中。(更好的做法是使用Pimpl惯用法。)
除了隐藏类的内部方法和变量之外,还应该尽力隐藏那些纯粹是实现细节的类。大多数程序员都习惯隐藏方法和变量,但是其中很多人忽视了一个事实——并非所有的类都是公开。实际上,一些类仅用于实现,因此应该将其从API的公有接口中移除。
例如,考虑一个简单的Fireworks类:该接口可以指定烟火动画在屏幕上的位置,同时可以控制火焰粒子的颜色、速度和数量。显然,该API需要记录制造烟火效果的每个粒子,以确保它能更新每个粒子在每一帧中的位置。这意味着需要引入一个包含单个火焰粒子状态的FireParticle类。API客户永远不需要访问FireParticle类,因为它纯粹是API的实现。因此,应该将其包含在Fireworks类的私有部分中,并声明为私有类。
#include<vector>class Fireworks{public:
Fireworks();
void SetOrigin(double X. double y):
void SetColor(float r, float g, float b);
void SetGravity(float g);
void SetSpeed(float s);
void SetNumberOfParticles(int num);
void Start();
void Stop();
void NextFrame(float dt);private:
class FireParticle
{
public:
double mX,mY;
double mVelocityX,mvelocityY;
double mAccelerationX, mAccelerationY;
double mLifeTime;
};
double mOriginX, mOriginY;
float mRed, mGreen, mBlue;
float mGravity;
float mSpeed;
bool mIsActive;
std::vector<FireParticle*>mParticles;};复制代码注意,这里并没有为FireParticle类使用getter/setter方法。如果需要,可以这么做;但从严格上意义上讲,这并不是必要的,因为不能从公共接口中访问该类。在类似情况下,一些工程师会想使用结构体代替类,以表示该结构是POD(Plain Old Data)类型。
此外,也可尝试将FireParticle类的内容隐藏起来而不是出现在头文件中,这样即便检查头文件也不会发现它。
优秀的的API设计应该是最小完备的。即它应该尽量简洁,但不要过分简洁。
显然,API应该是完备的,即它应该提供客户需要的所有功能,但这些功能可能不那么显而易见。要解决此问题,应当提前收集需求并使用用例建模,以获知客户期望的API行为。之后你就可以宣称,API已经实现了这些期望的功能。
最小化API存在一个不太明显的矛盾。但是,最小完备是可以计划的最重要的特征之一,它对API的长期维护以及升级会产生重大影响。确切地说,今天作出的决定会限制将来所能做的事情。它还会影响API的易用性,因为紧凑的接口更符合用户的思维习惯(Blanchette, 2008)。所以,接下来的部分将探讨保证API最小化的各种技巧,以及为什么需要最小化。

宿迁企业微信公众号小程序开发公司、宿迁企业网页设计方案、宿迁做网站开发价格、宿迁微信公众号制作运营报价明细表、宿迁网站设计公司费用、宿迁网站推广大概需要多少钱
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878