精华内容
下载资源
问答
  • 开闭原则

    2021-01-28 20:22:59
    开闭原则 一、如何理解“对扩展开放、修改关闭”? 开闭原则:Open Closed Principle,简称为OCP。 描述:软件实体( 模块、类、方法等)应该“对扩展开发、对修改关闭”。 解释:添加一个新的功能,应该是通过在已...

    开闭原则

    一、如何理解“对扩展开放、修改关闭”?

    • 开闭原则:Open Closed Principle,简称为OCP。
    • 描述:软件实体( 模块、类、方法等)应该“对扩展开发、对修改关闭”。
    • 解释:添加一个新的功能,应该是通过在已有代码的基础上扩展代码(新增模块,类,方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式完成。
    • 注意点:
      • 开闭原则并不是说完全杜绝修改,而是以最小的修改代码的代价来完成新功能的开发。
      • 同样的代码改动,在粗代码粒度下,可能被认定为“修改”,在细代码粒度下,可能又被认定为”扩展“。

    如何做到“对扩展开放、修改关闭”?

    • 我们要时刻具备扩展意识、抽象意识、封装意识。在写代码的时候,我们要多花点时间思考一下,这段代码未来可能有哪些需求变更,如何设计代码结构,事先留好扩展点,以便在未来需求变更的时候,在不改动代码整体结构、做到最小代码改动的情况下,将新的代码灵活地插入到扩展点上。
    • 很多设计原则、设计思想、设计模式,都是以提高代码的扩展性为最终目的的。特别是 23 种经典设计模式,大部分都是为了解决代码的扩展性问题而总结出来的,都是以开闭原则为指导原则的。最常用来提高代码扩展性的方法有:多态、依赖注入、基于接口而非实现编程,以及大部分的设计模式(比如,装饰、策略、模板、职责链、状态)。
    展开全文
  • 今天给一个学生辅导归并排序,他问了上面这个问题. 下面是我的一点个人体会,对比一下左和左区间的特点 ...2、已知长度L的情况,右的调用形式为f(array,start,start+L) ,右的调用形式为f(arra...

    今天给一个学生辅导归并排序,他问了上面这个问题.

    下面是我的一点个人体会,对比一下左闭右开和左闭右闭区间的特点

    1.使用左开右闭的话,则子区间的长度公式为legnth=end-start,

    右闭的话长度公式为legnth=end-start+1

    显然后者的计算要复杂一些

    2、已知长度L的情况下,右开的调用形式为f(array,start,start+L)

    ,右闭的调用形式为f(array,start,start+L-1),需要调用者自己记得-1,右闭增加了调用者的使用难度,

    3、右开时,for循环格式为

     for(i=start;i<end;++i)

    右闭时,for循环格式为

     for(i=start;i<=end;++i),要多打一个=号,增加了打字量

    4、最关键的地方是右闭无法表达出序列为空的情况,也就是右闭实际上假定了序列里至少只有一个元素,但是这个假定很多时候是不满足的,而右开就可以表示出空集

    展开全文
  • 运算和运算腐蚀和膨胀是运算和运算的...erode_dilate.png对于运算还有一个很重要的作用,就是消除暗背景的较亮区域,目的是在不改变黑色台球面积的情况,消除球的白色环形区域。def erode_dilate...

    开运算和闭运算

    腐蚀和膨胀是开运算和闭运算的基础,先腐蚀然后膨胀就是开运算,而先膨胀然后腐蚀就是闭运算。

    开运算

    先腐蚀后膨胀的过程为开运算

    ,看上去把细微连在一起的两块目标分开了。下面图中说明已经足够详细来说明开运算。

    98729fa1393b2abf91108e5c05107d40.png


    erode_dilate.png

    对于开运算还有一个很重要的作用,就是消除暗背景下的较亮区域,目的是在不改变黑色台球面积的情况下,消除球上的白色环形区域。

    def erode_dilate():
        I = cv2.imread("images/eight_ball.jpeg",0)
        # 结构元半径
        cv2.imshow("I",I)
        r = 1
        i = 1
        MAX_R,MAX_I = 20,20
        cv2.namedWindow("morphology",1)
        def nothing(*arg):
            pass
        cv2.createTrackbar("r","morphology",r,MAX_R,nothing)
        cv2.createTrackbar("i","morphology",i,MAX_I,nothing)
        while(True):
            # 显示原图
            r = cv2.getTrackbarPos('r','morphology')
            i = cv2.getTrackbarPos('i','morphology')
            print(r)
            s = cv2.getStructuringElement(cv2.MORPH_RECT,(2*r + 1,2*r+1))
            d = cv2.morphologyEx(I,cv2.MORPH_OPEN,s,iterations=i)
            cv2.imshow("morphology",d)
            k = cv2.waitKey(5)
            if k==27:
                break
        cv2.destroyAllWindows()

    这个函数的第一个参数表示内核的形状,有三种形状可以选择。

    • 矩形:MORPH_RECT;
    • 交叉形:MORPH_CROSS;
    • 椭圆形:MORPH_ELLIPSE;

    第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得

    getStructuringElement 函数的返回值: 对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element 形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。

    代码:

    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))

    7a137267b5cfb82741711b225a6ec63b.png

    d4d81ee21d42c220b9296409db3a4718.png

    089d0a767591bbe6733bbfd750288c9a.png


    闭运算

    与开运算的操作相反,闭运算是对图像先膨胀后腐蚀。先膨胀,再腐蚀,可清除小黑点。

    c82da0b6a92db1eeb41d46fd03024341.png

    目的是去掉所有骰子上的黑色区域。同样知道膨胀操作可以消除黑色,但是如果是膨胀会增大骰子的面积,而闭运算恰恰可以避免这一点,消除黑色同时不会改变骰子的面积。

    def erode_dilate():
        I = cv2.imread("images/toss_die.jpeg",0)
        # 结构元半径
        cv2.imshow("I",I)
        r = 1
        i = 1
        MAX_R,MAX_I = 20,20
        cv2.namedWindow("morphology",1)
        def nothing(*arg):
            pass
        cv2.createTrackbar("r","morphology",r,MAX_R,nothing)
        cv2.createTrackbar("i","morphology",i,MAX_I,nothing)
        while(True):
            # 显示原图
            r = cv2.getTrackbarPos('r','morphology')
            i = cv2.getTrackbarPos('i','morphology')
            print(r)
            s = cv2.getStructuringElement(cv2.MORPH_RECT,(2*r + 1,2*r+1))
            d = cv2.morphologyEx(I,cv2.MORPH_CLOSE,s,iterations=i)
            cv2.imshow("morphology",d)
            k = cv2.waitKey(5)
            if k==27:
                break
        cv2.destroyAllWindows()

    391cbed231abd61455f6594b1e0843b1.png


    toss_die.jpeg

    11c4e5b3f4c08659f0a255dda0a97d5e.png


    屏幕快照 2019-12-27 下午9.28.12.png

    展开全文
  • 首要的妨碍是一个气缸的信号坏了,我接后展现靠拢开闭的指示灯不亮,我用磁铁感到了plc有信号,靠拢首要的妨碍是一个气缸的信号坏了,我接后展现靠拢开闭的指示灯不亮,我用磁...  首要的妨碍是一个...

      首要的妨碍是一个气缸的信号坏了,我接上后展现靠拢开闭的指示灯不亮,我用磁铁感到了下plc上有信号,靠拢首要的妨碍是一个气缸的信号坏了,我接上后展现靠拢开闭的指示灯不亮,我用磁...

      首要的妨碍是一个气缸的信号坏了,红外光电开关工作原理三线亲切开闭P我接上后展现靠拢开闭的指示灯不亮,我用磁铁感到了下plc上有信号,靠拢

    70161e33509f8acd9092d470facb046e.png

    01f34d958ce4e43d33b51c13781a0d95.gif

      dao但也有种它的信专号是闭点信号的,属以是确定下靠拢开闭的信号品种3、靠拢开闭的信号线串胡乱线了,这个段做高只消从靠拢开闭处的接线断开,万用外一打就很好判别了,好比断开后,信号线仍有电,断定是串线、确认下你看的PLC里的信号,确认是这个靠拢开闭的信号,别灯下黑了。。。

    b4655db8d41c3bde9e8920963a3d0756.png

    01f34d958ce4e43d33b51c13781a0d95.gif

      实践说了这么众也没用,你判别一下,plc是否能寻常事业,LC上有信号但亲切开闭上面的灯不亮。plc能寻常事业外明靠拢开闭是好的,只但是靠拢开闭指示灯不亮,不影响应用效力。

      自动化与智能的区别

    展开全文
  • C++左区间的理解

    千次阅读 2018-10-11 09:07:37
    C++的区间是左的,关于这样做的优势,做了一个笔记整理,也处理之前一直比较模糊的区间二分的问题。 左的区间第一个优势是,当需要取中间元素的时候,mid=begin+end/2的定位问题。如果区间元素的个数...
  • 配电房开闭所综合监控系统的自动联动功能全部在一体化监控装置实现,在网络断线、服务器故障、软件关闭等情况不影响系统的报警、联动以及记录等功能。
  • 开闭原则的实现策略主要在面向对象的封装性和多态性的基础,利用面向对象的其他原则完成的。 如: 拓展 百分之百的开闭原则很难达到,但要尽量符合开闭原则;该原则也是度量程序设计的好与坏的唯一标准。在设计时...
  • 开闭原则(OCP)

    2016-09-22 19:42:10
    [b]开闭原则(OCP)[/b] 1.开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。 2.对扩展开放,对修改关闭, [b][/b] 指的是可以在源代码的...
  • 形态学的运算、运算、梯度运算、顶帽运算、黑帽运算都是建立在形态学的腐蚀膨胀操作之的,下面分别介绍。 运算:先腐蚀后膨胀的过程,可以用来消除小物体。运算:先膨胀再腐蚀,用于排除小型黑洞。形态学...
  • 一篇着重介绍了开闭原则的概念,通过类图我们可以看出,如果不对Client和Server类进行解耦,当Client类需要使用另外一个Server类时,必须对相关代码进行修改.导致不必要的僵化性和脆弱性.下面将通过一个渐进的示例来...
  • 目前大多数立井使用的上下滑动栏杆式罐帘门存在频繁开闭困难的问题,为减轻工人劳动强度,研制了一套气动控制立井罐笼罐帘门开闭装置,文章详细介绍了该装置的组成及工作原理。气动控制立井罐笼罐帘门开闭装置可由立井...
  • 这些关系被解释为-对偶,其中由于回响而通过插入Wilson循环来移动弦背景。 利用ABJ理论和局部ℙ1×ℙ1的拓扑字符串之间的联系,我们明确写了开放和闭合字符串幅度之间的非平凡关系。
  • 散列方法与散列方法

    万次阅读 2013-08-23 10:33:10
    今天看了云风的blog得知lua 是散列的,go 是散列的,一时不知开闭散列是啥意思就查了,原来就是解决hash冲突的方法,而且都很熟悉,只是名字忘了 冲突解决策略 尽管散列函数的目标是使得冲突最少,但实际...
  • 开闭原则指的是软件实体(一个类、方法、模块)对扩展和修改两个行为的一个原则。 具体就是 对扩展开放、对修改关闭 特别强调的是用抽象构建框架、用实现扩展细节。 这样可以提高软件系统的可复用性、可维护性...
  • 散列:也叫开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置,那么可以把key存放到冲突位置中的“一个” 空位置中去 1. 线性探测 比如场景,现在需要插入元素44,先通过哈希...
  • 不考虑开闭原则情况,当产品经理要求增加银行种类,在原有基础需要修改TransferAccount类,这时增添一个银行支付方式,可能会影响前面两个的方式: public class OCP { public static void main(String[] args)...
  • 开闭原则的定义:软件实体对扩展是开放的,对修改是关闭的;怎么理解呢?...此时,不应该直接在Pig增加fly()的方法,因为如此一来违反了开闭原则;而是采用适配器模式,关于适配器的细节,会在...
  • 开闭原则 基本介绍 Open Closed Principle(OCP)软件实体(模块、类、方法等)应该“对扩展开发、对修改关闭” 如何理解"对扩展开放,对修改关闭"? 添加一个新的功能,应该是通过已有的代码基础扩展代码(新增模块、类...
  • 为有效提高MTRNN查询的效率, 在概述MTRNN基础采用几何方法开发了基于R-tree的区域和区域修剪方法并进一步提出了高效的过滤算法。过滤算法通过构造修剪区域和修剪区域来修剪查询空间, 对大数据的MTRNN...
  • 开闭原则: 对修改关闭, 对拓展开放 1.如何理解“对扩展开放、对修改关闭”? 添加一个新的功能,应该是通过在已有代码基础扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性...
  • SOLID--OCP(开闭原则)

    2020-01-21 12:01:10
    第一,开闭原则并不是说完全杜绝修改,而是以最小的修改代码的代价来完成新功能的开发。 第二,同样的代码改动,在粗代码粒度,可能被认定为“修改”;在细代码粒度,可能被认定为“扩展”。 如何做到“对扩展...
  • 散列 也叫开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置,那么可以把key存放到冲突位置中的“一个” 空位置中去。 那如何寻找一个空位置呢? 线性探测 比如 现在需要...
  • 设计模式--开闭原则

    2021-01-08 15:12:03
    模块应该在尽量不修改代码的前提进行拓展 提供方的变动不会引起使用方的修改 这就指导我们用抽象来构建框架,用实现拓展细节 一段代码,根据图形代码画图形 class Shape { int type; } /** * 矩形 */ class...
  • what: 软件设计过程中对扩展性开放,对修改关闭。即软件实体应该在不修改的前提扩展,这个...实际,设计模式的应用就是使软件的结构在某种程度满足“”原则。 how: 在面向对象设计中,不允许更改
  • 一般来说:表示 2,3,...,12 这一串自然数有以下四种方法: a)2 ≤ i < 13 b)1 < i ≤ 12 c)2 ≤ i ≤ 12 d)1 <...表示相邻数列时,前数列的边界与后边界的下边界相等 ([2,13) 与 [13,...
  • 通过形态学过滤图片中的噪声点 ...图左上角是语义分割的结果(这里是二分类,多分类类似), 分别使用腐蚀,膨胀,运算,运算,运算+运算对原始结果进行了处理 处理前 处理后 Eroded 腐蚀: 用来...
  • 原则定义 一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况进行扩展。 现实理解 比如说当美化卧室构造时,我们尽可能贴墙纸,增加摆件,尽量避免在...抽象化是开闭原则的关键。
  • 在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提变更它的行为。该特性在产品化的环境中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 821
精华内容 328
关键字:

下闭上开