Oop 函数是封装的一个例子吗?

Oop 函数是封装的一个例子吗?,oop,object,methods,encapsulation,Oop,Object,Methods,Encapsulation,通过将功能放入函数中,这本身就是一个封装示例,还是需要使用对象进行封装 我试图理解封装的概念。我当时的想法是,如果我这样做: n=n+1 这是作为大量代码的一部分在野外执行的,然后我把它放在一个函数中,比如这个函数,然后我将这个加法逻辑封装在一个方法中: addOne(n) n = n + 1 return n 或者,如果我对外界隐藏addOne的详细信息(比如它是一个对象方法,并且我使用私有/受保护的访问修饰符),那么它只是一种封装吗?这是一种组件级别的东西 退房: 在计算机

通过将功能放入函数中,这本身就是一个封装示例,还是需要使用对象进行封装

我试图理解封装的概念。我当时的想法是,如果我这样做:

n=n+1

这是作为大量代码的一部分在野外执行的,然后我把它放在一个函数中,比如这个函数,然后我将这个加法逻辑封装在一个方法中:

addOne(n)
    n = n + 1
    return n

或者,如果我对外界隐藏addOne的详细信息(比如它是一个对象方法,并且我使用私有/受保护的访问修饰符),那么它只是一种封装吗?

这是一种组件级别的东西

退房:

在计算机科学中,封装是将软件组件的内部机制和数据结构隐藏在已定义的接口后面,这样,组件(其他软件)的用户只需要知道组件的功能,而不必依赖于组件如何工作的细节。其目的是实现潜在的更改:可以在不影响其他组件的情况下改进组件的内部机制,或者可以使用支持相同公共接口的不同组件替换组件


(我不太理解你的问题,如果这个链接没有回答你的疑问,请告诉我)

通常,在不提及属性而不仅仅是方法的情况下谈论封装不是很有意义的——你可以对方法设置访问控制,当然,但是,如果没有任何数据限定在封装方法的范围内,很难看出这将是多么荒谬。也许你可以提出一些论证来证实这一点,但我怀疑这将是曲折的


因此,不,您很可能不使用封装,因为您将方法放入类中,而不是将其作为全局函数。

封装的抽象概念意味着您隐藏了实现细节。面向对象只是使用ecnapsulation的一个例子。另一个例子是称为module-2的语言,它使用(或使用)实现模块和定义模块。定义模块隐藏了实际实现,因此提供了封装

当你可以考虑黑盒子时使用封装。对象是一个黑盒子。您知道它们提供的方法,但不知道它们是如何实现的

[编辑]
至于更新问题中的示例:这取决于您定义封装的范围有多窄。你的AddOne例子并没有隐藏任何我相信的东西。如果变量是数组索引,调用方法moveNext,可能还有另一个函数setValue和getValue,那么这就是信息隐藏/封装。这将允许人们(可能还有其他一些函数)浏览您的结构、设置和获取变量,同时他们知道您正在使用数组。如果编程语言支持其他或更丰富的概念,则可以通过更改含义和接口来更改moveNext、setValue和getValue的实现。对我来说,这就是封装。

我将是第一个不同意答案趋势的人。是的,函数封装了一些实现。你不需要对象(我想你用它来表示类)


请参见。

方法不再是封装的示例,正如汽车不再是良好驾驶的示例一样。封装与synax无关,它是一个逻辑设计问题。对象和方法都可以表现出良好和不良的封装

考虑这一点最简单的方法是,代码是否隐藏/抽象了代码中不需要了解/关心实现的其他部分的细节

回到汽车示例: 自动变速器具有良好的封装性:作为一名驾驶员,您关心前进/后退和速度。 手动变速器密封性差:从驾驶员的角度来看,低速/高速所需的特定档位通常与驾驶员的意图无关。

否,密封不需要物体。在最广泛的意义上,“封装”只是意味着“从视图中隐藏细节”,在这方面,方法是封装其实现细节

但这并不意味着您可以仅仅因为将代码划分为多个方法就说代码设计良好。一个由500个公共方法组成的程序并不比用一个1000行方法实现的程序好多少

在构建程序时,无论您是否使用面向对象技术,您都需要考虑在许多不同的地方进行封装:隐藏方法的实现细节,隐藏不需要了解的代码中的数据,简化模块接口,等等

更新:要回答您更新的问题,“将代码放入方法”和“使用访问修饰符”都是封装逻辑的不同方式,但每种方式的作用级别不同

将代码放入方法中会隐藏组成该方法的单独代码行,以便调用方不必关心这些代码行是什么;他们只担心方法的签名

将类上的方法标记为(比如)“private”会隐藏该方法,以便类的使用者不必担心它;他们只关心类的公共方法(或属性)。

当然

例如,仅对其参数进行操作的方法将被视为比对全局静态数据进行操作的方法“更好的封装”


封装早在OOP之前就已经存在了:)

也许您混淆了抽象和封装,这在面向对象的更广泛上下文中是可以理解的

适当封装