代码之家  ›  专栏  ›  技术社区  ›  Phil H

OO设计的优势在于语义还是封装?

  •  19
  • Phil H  · 技术社区  · 17 年前

    我使用的是一个功能性极强的系统,并且一直渴望OO的语义和封装。但我可以看到,OO的封装可能会成为对象灵活扩展的障碍。所以目前,我可以把语义看作是一种更大的力量。

    还是封装是所有有价值代码的关键?

    changeColor(door,blue) door.changeColor(blue) .

    11 回复  |  直到 16 年前
        1
  •  29
  •   Ed Kirwan    17 年前

    (对象的)行为:一组动作的集合,对它们何时发生有一组约束。

    http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf

    然而,根据上述ISO定义,对象是我想建模的任何东西。因此,类可以封装在包中,只要其中一些类对包接口有贡献(即包的公共类),而另一些类是信息隐藏的(包中的私有类)。

    http://www.research.ibm.com/journal/sj/382/stevens.pdf

    正如该论文所说,用从未改进过的话来说,最小化模块之间的连接也最大限度地减少了变化和错误传播到系统其他部分的路径,从而消除了灾难性的涟漪效应,即一个部分的变化会导致另一个部分的错误,从而需要在其他地方进行额外的更改,导致新的错误等。

    依赖于特定修改类的类比不依赖于修改类的类别受到影响的概率更高。

    修改后的类可能带来的最大潜在负担是依赖它的所有类的影响。

    因此,减少系统中所有类之间的最大潜在依赖数可以降低对特定类的影响导致其他类更新的概率,从而减少所有更新的最大潜在负担。

        2
  •  9
  •   Tony the Pony    17 年前

    最终,如果没有一定程度的封装,很难想象以一致和可维护的形式设计一个复杂的系统。

        3
  •  5
  •   Ken    17 年前

        4
  •  4
  •   peterchen    17 年前

    隔离复杂性 IMO是任何设计的主要目标吗:将功能封装在接口后面

    OO为此提供了各种机制——oyu提到的两种机制:


        5
  •  4
  •   Brian    17 年前

    理解 细分工作任务

    • 以名词为中心

    blogged

        6
  •  3
  •   Steven Huwig    17 年前

    Alan Kay wrote :

    OOP对我来说只意味着消息传递,本地 保留、保护和隐藏

        7
  •  2
  •   dwc    17 年前

    OOP的机制很容易用简单的C语言通过结构和函数指针来实现。你甚至可以通过这种方式获得一点OOP的感觉。然而,在这样的环境中,面向对象编程(OOP)的习惯用法并不那么常见。当面向对象编程有实际的语言支持时,范式的表现力就会显现出来,语言实现想法的方式对“说”什么以及如何表达有非常真实的影响。例如,请参阅lisp、python、ruby等中使用closure/lambdas的代码差异。

        8
  •  1
  •   RS Conley    17 年前

    封装与多态性相结合。大多数面向对象编程语言中的类实现一个或多个接口的能力对我的软件开发产生了最大的影响。此功能允许我精确定义两个对象之间的交互。

        9
  •  1
  •   user35978    17 年前

        10
  •  0
  •   Black    17 年前

    通过分析一块砖来分析房子。

    继续类比: 为了最大限度地利用砖块,只需将它们放在一起。这 这同样适用于类和对象。

    那里 are a lot of design patterns

    其中一些模式甚至是对第三段的回答

        11
  •  0
  •   Paul    16 年前

    四人帮

    @Phil,如果我没理解错的话,你提到的区别在于程序调用数据/方法的方式:在oo中,首先有一个对象/实例,然后通过对象调用对象的数据/方法;在函数式中,方法是直接调用的。

    推荐文章