OOD启示录

时序数据库influxDB(一)Linux安装与图形化/CLI连接influxDB2.2.0 0. 介绍 时序数据库,也就是TSDB,是区别于关系数据库的一种数据库,比较适合记录时间为横轴的若干数据点 InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 在用TSDB之前,存储一些传感器数值用MySQL表如下: 在web应用中,经常有按时间查找和展示历史数据的需求,如下: 以上的情况相比MySQL 就更适合用TSDB influxDB infl 阅读详情
(1)所有数据都应该隐藏在所在的类的内部。p13
 
(2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。p15
 
(3)尽量减少类的协议中的消息。p16
 
(4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。 p16
 
(5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。p17
如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。
 
(6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。p17
 
(7)类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。 p18
 
(8)类应该只表示一个关键抽象。p19
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响 .
 
(9)把相关的数据和行为集中放置。p19
设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。
 
(10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。p19 
朝着稳定的方向进行依赖.
 
(11)确保你为之建模的抽象概念是类,而不只是对象扮演的角色。p23
 
(12)在水平方向上尽可能统一地分布系统功能,也即:按照设计,顶层类应当统一地共享工作。p30
 
(13)在你的系统中不要创建全能类/对象。对名字包含Driver、Manager、System、Susystem的类要特别多加小心。p30
规划一个接口而不是实现一个接口。
 
(14)对公共接口中定义了大量访问方法的类多加小心。大量访问方法意味着相关数据和行为没有集中存放。p30
 
(15)对包含太多互不沟通的行为的类多加小心。p31
这个问题的另一表现是在你的应用程序中的类的公有接口中创建了很多的get和set函数。
 
(16)在由同用户界面交互的面向对象模型构成的应用程序中,模型不应该依赖于界面,界面则应当依赖于模型。p33
 
(17)尽可能地按照现实世界建模(我们常常为了遵守系统功能分布原则、避免全能类原则以及集中放置相关数据和行为的原则而违背这条原则) 。p36
 
(18)从你的设计中去除不需要的类。p38
一般来说,我们会把这个类降级成一个属性。
 
(19)去除系统外的类。p39
系统外的类的特点是,抽象地看它们只往系统领域发送消息但并不接受系统领域内其他类发出的消息。 
 
(20)不要把操作变成类。质疑任何名字是动词或者派生自动词的类,特别是只有一个有意义行为的类。考虑一下那个有意义的行为是否应当迁移到已经存在或者尚未发现的某个类中。p40
 
(21)我们在创建应用程序的分析模型时常常引入代理类。在设计阶段,我们常会发现很多代理没有用的,应当去除。p43
 
(22)尽量减少类的协作者的数量。p52
一个类用到的其他类的数目应当尽量少。 
 
(23)尽量减少类和协作者之间传递的消息的数量。p55
 
(24)尽量减少类和协作者之间的协作量,也即:减少类和协作者之间传递的不同消息的数量。p55
 
(25)尽量减少类的扇出,也即:减少类定义的消息数和发送的消息数的乘积。p55
 
(26)如果类包含另一个类的对象,那么包含类应当给被包含的对象发送消息。也即:包含关系总是意味着使用关系。p55
 
(27)类中定义的大多数方法都应当在大多数时间里使用大多数数据成员。p57
 
(28)类包含的对象数目不应当超过开发者短期记忆的容量。这个数目常常是6。p57
当类包含多于6个数据成员时,可以把逻辑相关的数据成员划分为一组,然后用一个新的包含类去包含这一组成员。 
 
(29)让系统功能在窄而深的继承体系中垂直分布。p58
 
(30)在实现语义约束时,最好根据类定义来实现。这常常会导致类泛滥成灾,在这种情况下,约束应当在类的行为中实现,通常是在构造函数中实现,但不是必须如此。p60
 
(31)在类的构造函数中实现语义约束时,把约束测试放在构造函数领域所允许的尽量深的包含层次中。p60
 
(32)约束所依赖的语义信息如果经常改变,那么最好放在一个集中式的第3方对象中。p60
 
(33)约束所依赖的语义信息如果很少改变,那么最好分布在约束所涉及的各个类中。p60 
 
(34)类必须知道它包含什么,但是不能知道谁包含它。p61
 
(35)共享字面范围(也就是被同一个类所包含)的对象相互之间不应当有使用关系。p61
 
(36)继承只应被用来为特化层次结构建模。p74
 
(37)派生类必须知道基类,基类不应该知道关于它们的派生类的任何信息。p74
 
(38)基类中的所有数据都应当是私有的,不要使用保护数据。p75
类的设计者永远都不应该把类的使用者不需要的东西放在公有接口中。 
 
(39)在理论上,继承层次体系应当深一点,越深越好。p77
 
(40)在实践中,继承层次体系的深度不应当超出一个普通人的短期记忆能力。一个广为接受的深度值是6。p77
 
(41)所有的抽象类都应当是基类。p81
 
(42)所有的基类都应当是抽象类。p82
 
(43)把数据、行为和/或接口的共性尽可能地放到继承层次体系的高端。p85 
 
(44)如果两个或更多个类共享公共数据(但没有公共行为),那么应当把公共数据放在一个类中,每个共享这个数据的类都包含这个类。 p88
 
(45)如果两个或更多个类有共同的数据和行为(就是方法),那么这些类的每一个都应当从一个表示了这些数据和方法的公共基类继承。 p89
 
(46)如果两个或更多个类共享公共接口(指的是消息,而不是方法),那么只有他们需要被多态地使用时,他们才应当从一个公共基类继承。 p89
 
(47)对对象类型的显示的分情况分析一般是错误的。在大多数这样的情况下,设计者应当使用多态。p89
 
(48)对属性值的显示的分情况分析常常是错误的。类应当解耦合成一个继承层次结构,每个属性值都被变换成一个派生类。 p96
 
(49)不要通过继承关系来为类的动态语义建模。试图用静态语义关系来为动态语义建模会导致在运行时切换类型。p97 
 
(50)不要把类的对象变成派生类。对任何只有一个实例的派生类都要多加小心。p99
 
(51)如果你觉得需要在运行时刻创建新的类,那么退后一步以认清你要创建的是对象。现在,把这些对象概括成一个类。 p103
 
(52)在派生类中用空方法(也就是什么也不做的方法)来覆写基类中的方法应当是非法的。p103
 
(53)不要把可选包含同对继承的需要相混淆。把可选包含建模成继承会带来泛滥成灾的类。p108
 
(54)在创建继承层次时,试着创建可复用的框架,而不是可复用的组件。p112
 
(55)如果你在设计中使用了多重继承,先假设你犯了错误。如果没犯错误,你需要设法证明。p120
 
(56)只要在面向对象设计中用到了继承,问自己两个问题:(1)派生类是否是它继承的那个东西的一个特殊类型?(2)基类是不是派生类的一部分?p121
 
(57)如果你在一个面向对象设计中发现了多重继承关系,确保没有哪个基类实际上是另一个基类的派生类。p122
 
(58)在面向对象设计中如果你需要在包含关系和关联关系间作出选择,请选择包含关系。p123
 
(59)不要把全局数据或全局函数用于类的对象的薄记工作。应当使用类变量或类方法。p140
 
(60)面向对象设计者不应当让物理设计准则来破坏他们的逻辑设计。但是,在对逻辑设计作出决策的过程中我们经常用到物理设计准则。 p149
 
(61)不要绕开公共接口去修改对象的状态。p164
InterMol:分子模拟转换工具 InterMol:分子动力学模拟的转换工具 我们目前处于 beta 测试阶段。 Desmond<=>Gromacs<=>Lammps 转换在 InterMol 中本地进行。 AMBER->X 是通过将 AMBER 转换为 GROMACS,然后使用 ParmEd 转换为其他程序来执行的。 AMBER->CHARMM 由 ParmEd 直接执行。 基本用法 要检查它是如何工作的,使用convert.py脚本中找到intermol目录: $ python convert.py -h usage: convert.py [-h] [--des_in file] [--gro_in file file] [--lmp_in file] [--amb_in file file] [-crm_in file] [--desmond] [--gromacs] [- 立即下载

相关推荐

influxdb-cli:InfluxDB 的 SQL CLI

InfluxDB-CLI InfluxDB 的 SQL CLI 安装 npm install influxdb-cli -g 截屏 选项 InfluxDB SQL CLI Usage: node ./influxdb-cli Options: -h, --hostname Host [%s] [default: " localhost " ] --port Port [%s] [default: 8086] -s, --secure Use HTTPS if flag is present [default: false] -u, --user User [%s]

[转载]61条面向对象设计的经验原则

摘抄自《OOD 启示录》--Arthur J.Riel 著 鲍志云 译 “你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。”                                                                                  ----------Arthur

PUPU的专栏 1190

命令行删除描述文件_写一个删除lock文件的skill脚本

来源:IC技能搬运工 作者:小目Cadence软件使用过程中偶尔会遇到文件被lock的情况,这是Cadence软件对文件的一种保护措施,大部分情况都是对用户友好的,但是偶尔也会给用户带来困扰,给工作带来的一定的不便。文件是如何被锁的Cadence在用户打开文件进行编辑的时候会在文件的同一级目录新建一个lock文件,用来标识文件的状态。一般情况下如果文件被正常关闭,这个lock文件会在...

weixin_39781452的博客 1353

关于类的设计

聚集模拟了具有(has-a)关系,表示两个对象之间的对象关系。归属关系中的所有者对象称为聚集对象(aggregating object),而它的类称为聚集类(aggregating class)。归属关系中的从属对象称为被聚集对象(aggregated object),它的类称为被聚集类(aggregated class)。特别的:如果一个对象只归属于一个聚集对象,那它和聚集对象之间的关系就称为组

liuweishikong的专栏 877

飞书应用开发脚手架lark-harness:从零构建企业级机器人

在构建企业级应用时,开发脚手架是提升工程效率和规范性的关键工具。其核心原理在于通过预设的项目模板、最佳实践和通用模块封装,自动化处理项目初始化、配置管理和基础架构搭建。这种技术价值在于将开发者从重复性劳动中解放出来,确保团队技术栈统一,并降低维护成本。在Node.js生态中,脚手架常与Express或Koa等Web框架结合,用于快速构建Web服务、API接口和实时事件处理系统。具体到飞书开放平台开发场景,开发者需要处理OAuth 2.0授权、事件订阅验证、消息加解密等复杂且标准的流程。lark-harnes

weixin_30703911的博客 613

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6172

61条面向对象设计的经验原则-《OOD启示录》Arthur J.Riel

61条面向对象设计的经验原则-《OOD启示录》Arthur J.Riel (1)所有数据都应该隐藏在所在的类的内部。p13 (2)类的使用者必须依赖...

weixin_30687051的博客 82

西电计组实验二 运算器实验

算术逻辑运算实验 一.实验目的   1.了解简单运算器的数据传输通路。   2.验证运算功能发生器的组合功能。   3.掌握算术逻辑运算加、减、与的工作原理。   4.验证实验台运算的8位加、减、与、直通功能。   5.按给定数据,完成几种指定的算术和逻辑运算。 二.实验原理   算术逻辑单元ALU的数据通路如图2-1所示。其中运算器ALU181根据74LS181的功能用VHDL硬件描述语言编辑而成,构成8位字长的ALU。参加运算的两个8位数据分别为A[7…0]和B[7…0],运算模式由S[3…0]的16种

Polaris的博客 1万+

《OOD启示录》

我先放几本书,大家先看看 转载于:https://www.cnblogs.com/chance_win/archive/2005/06/01/165730.html

weixin_34203832的博客 302

Redhawk解析PAD / IOPAD的实现方法

Redhawk解析IOPAD的实现方法1. IOPAD DEF的概念说明2. 生成 IOPAD GDS文件3. 生成 IOPAD DEF文件4. Redhawk解析过程中读取IOPAD DEF 本文主要简述【Redhawk解析IOPAD】的实现原理方法,具体脚本没有放在这里。 1. IOPAD DEF的概念说明 2. 生成 IOPAD GDS文件 注: getinfo2IODEF.tcl 是基于innovus获取IOPAD的摆放信息以及库信息。 run_cerate_iopadgds.csh 是基于c

kobayashiyou的博客 3155

YOLOv11改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

Hello,各位读者们好.本文为最新YOLOv11有效涨点专栏目录,YOLOv11以及发布了一个月左右,这个过程中我也是给大家整理了许多的机制,其中包含了C3k2、主干(均支持根据yolov11训练的版本进行二次缩放,全系列都能轻量化)、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。

Snu77的博客 8万+

无责任书评——OOD启示录

在China-pub评价很高的一本书,曾一度放在很显要的位置推荐,买回来,才发现和我想象的差很远,感觉是一本很老的书,主要讲OO设计的一些经验原则,但......泛泛而谈,整本书,列了60多条,但反正我个人感觉没什么太大用处而且,整本书,后面有一半的内容是附录附录2说是C++内存泄露的,以为有什么独到见解,发现就是简单的将有new没delete、delete[]用成delete 这些基础得不能再基

sssxueren的专栏 1745

多角度模板匹配的模板创建技巧

基于形状的模板匹配多角度创建技巧

manuoo的专栏 3403

OOD 启示录,C++内存泄漏

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"class Color{public:int x,y;char *color;public:Color(const int x1,const int y1, char *test):x(x1),y(y1){color=new char[strlen(test)+1];st

hehe的专栏 637

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 49

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

常见内存泄露及解决方案-选自ood启示录

  常见内存泄露及解决方案-选自ood启示录new/delete, array new/arrray delete匹配case 1: 在类的构造函数与析构函数中没有匹配地调用 new/delete! 解决方法:检查构造函数,在出现new的情况下,按相反的顺序在析构函数中匹配添加delete! 这里有两个意思:  1〉new与delete匹配,array new/array delete匹配; 

专注于移动互联网 1872

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

常见内存泄露及解决方案(转自OOD启示录)

 常见内存泄露及解决方案-选自ood启示录new/delete, array new/arrray delete匹配case 1: 在类的构造函数与析构函数中没有匹配地调用 new/delete! 解决方法:检查构造函数,在出现new的情况下,按相反的顺序在析构函数中匹配添加delete! 这里有两个意思:  1〉new与delete匹配,array new/array delete匹配;  

zlc113的专栏 426

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

.net文章列表

.NET重要技术思考——原文在《程序员》杂志第六期 61条面向对象设计的经验原则-《OOD启示录》Arthur J.Riel

Elva.net 988
上一篇: Effective C++
C_plus_learner
博客等级 码龄22年 0粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值