Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 不良面向对象设计的特点_Oop_Design Principles - Fatal编程技术网

Oop 不良面向对象设计的特点

Oop 不良面向对象设计的特点,oop,design-principles,Oop,Design Principles,我正在读关于面向对象设计原则的书。我发现了一个糟糕设计的特点 很难改变,因为每一个改变都会影响到太多的其他人 系统的各个部分。(刚性) 进行更改时,系统中意外的部分会中断。 (脆弱性) 它很难在另一个应用程序中重用,因为它不能被重用 与当前应用程序分离。(不动) 我能理解前两个,但第三个对我来说有点难理解。 它是关于在基类中提取相关类的公共特征,从重复的代码中生成方法吗?但是它说很难在另一个应用程序中重用。通常我们编写特定于上下文的代码,而而不是工程不是一个好主意,我们有像YAGNI这样的好原则

我正在读关于面向对象设计原则的书。我发现了一个糟糕设计的特点

  • 很难改变,因为每一个改变都会影响到太多的其他人 系统的各个部分。(刚性)
  • 进行更改时,系统中意外的部分会中断。 (脆弱性)
  • 它很难在另一个应用程序中重用,因为它不能被重用 与当前应用程序分离。(不动)
  • 我能理解前两个,但第三个对我来说有点难理解。 它是关于在基类中提取相关类的公共特征,从重复的代码中生成方法吗?但是它说
    很难在另一个应用程序中重用。
    通常我们编写特定于上下文的代码,而
    而不是工程
    不是一个好主意,我们有像
    YAGNI
    这样的好原则(你不会需要它)我发现这些想法有点矛盾

    请提供您对此的宝贵意见。

    移动示例:

    假设以下类别:

  • 畜生
  • 犬科动物
  • 正如您所料,
    Canine
    扩展了
    Animal
    Dog
    扩展了
    Canine

    设计动物的方法之一是给它一种方法,它可以打印出树皮。也许,这个应用程序的最初目的只是为了狗,因此,
    talk
    吠叫方法很好。但是在另一个代码库中重用它会导致问题

    假设我们想要扩展
    动物
    并创建
    。鸟不叫:)

    很难想象有人会这样做。但这种情况经常发生。基类没有被抽象出来,这会导致代码放错位置,从而难以纠正/重用

    有人可能会说,
    Bird
    类可以覆盖
    talk
    方法。但是,如果另一个开发人员出于另一个原因扩展了
    Animal
    ,可能会忘记重写该方法。。。等等

    我知道这不是最好的例子,但它说明了问题所在