Oop 接口是最高级别的抽象吗?

Oop 接口是最高级别的抽象吗?,oop,interface,Oop,Interface,我对抽象和封装感到困惑。我觉得类是封装的,因为它封装了数据和行为,而接口是抽象的。请评论一下维基百科上的文章。特别是,您可能对面向对象编程的抽象感兴趣。我引用了以下相关章节的部分内容: 在面向对象编程理论中, 抽象涉及到 定义表示抽象对象的对象 能够执行工作、报告的“演员” 打开并更改其状态,以及 与中的其他对象“通信” 系统。术语封装 指隐藏状态详细信息, 但是扩展了数据类型的概念 从早期的编程语言到 将行为与行为紧密联系在一起 数据,以及标准化的方式 不同的数据类型相互作用,这是非常重要的

我对抽象和封装感到困惑。我觉得类是封装的,因为它封装了数据和行为,而接口是抽象的。请评论一下维基百科上的文章。特别是,您可能对面向对象编程的抽象感兴趣。我引用了以下相关章节的部分内容:

在面向对象编程理论中, 抽象涉及到 定义表示抽象对象的对象 能够执行工作、报告的“演员” 打开并更改其状态,以及 与中的其他对象“通信” 系统。术语封装 指隐藏状态详细信息, 但是扩展了数据类型的概念 从早期的编程语言到 将行为与行为紧密联系在一起 数据,以及标准化的方式 不同的数据类型相互作用,这是非常重要的 抽象的开始。什么时候 抽象进入到 已定义操作,启用对象 要替换的不同类型, 这叫做多态性。当它 相反的方向进行, 在类型或类中, 构造它们以简化复杂的 一组关系,称为 委托或继承


一般来说,我会说接口和类应该是抽象的例子,将数据作为概念上的“东西”处理,而不是原始数据。封装用于使这些抽象与概念上不同的“事物”的其他抽象很好地协同工作。

我认为您的术语很混乱

  • -将相关数据和功能放在一个位置。我们可以通过上课来做到这一点

  • -允许使用统一接口处理不同数据类型的值

  • 多态性可以通过继承基类(带有虚拟函数)和/或实现接口来实现

    这些技术(和其他技术)为我们提供了一种新的解决方案,它真正适用于我们用来将问题分解为更小组件的任何过程

    编辑


    Q) 您会问“我可以说,抽象是通过封装和多态性实现的最顶层层次结构吗?”

    A) 我不能回答这个问题,我不知道你说的“最高”和“最高”是什么意思。 这里没有等级制度

    是一种抽象形式,它可以在不使用面向对象的情况下实现,它应该在层次结构中的什么位置

    我对层次结构所能做的最好的定义就是这样(直接从我自己的头脑中产生,所以YMMV)

  • 抽象是一种实践 把一个大问题分解成 更小的组件,所以每个都更小 这个问题可以在 (相对)隔离
  • 多态性是一种我们可以使用的技术 用于实现抽象。信息技术 包括识别不同的类型 数据和行为,可以 以均匀的方式处理
  • 接口仅声明 行为,封装 一种类型的行为。它不提供任何信息 实际行为或数据
  • 抽象类声明 行为,但也可能提供 行为和数据,全部封装 在一种类型中
  • 因此,可以看到一个接口 提供更简单或更纯粹的 形式的多态性比抽象性强 上课

  • 封装的目的是隐藏实现细节:

    一个精心设计的例子:

    public class Person {
      private int age;
    
      public boolean canBuyBeer() {
        return age >= 21;
      }
    
    }
    
    您可以稍后将其更改为:

    public class Person {
      private int age;
      private boolean isInUSA
    
    
      public boolean canBuyBeer() {
        if( isInUSA )
            return age >= 21;
        else
             return age >= 18;
      }
    
    }
    
    关于年龄和出身的规则可以改变,但打电话的人不需要知道

    接口可用于抽象出不同的类型。考虑这一点:

    public interface Beverage {
      public boolean containsAlchohol;
    }
    
    public class Soda implements Beverage {
      public boolean containsAlchohol {  
          return false;
      }
    }
    public class Beer implements Beverage {
      public boolean containsAlchohol {
           return true;
      }
    }
    
    您可能会更新以下人员:

    public class Person {
      private int age;
      private boolean isInUSA
    
    
      public boolean canBuyBeverage(Beverage b) {
        if( b.containsAlchohol() ) {
           if( isInUSA )
               return age >= 21;
           else
               return age >= 18;
        }
        else {
            return true;
        }
      }
    
    }
    
    因此,如果一个人可以购买某种饮料,那么他就是在封装逻辑。饮料接口抽象出与饮料相关的逻辑


    我们可以举更好的例子,但这是总的想法。

    我认为你说得对。一个界面概括地说:这就是这种事情。一个班级说:这是它的工作原理;我会把细节藏在心里。类是(通常)接口抽象的具体实现。

    我的评论是:什么?你需要解释的更多。错误的界面。你应该用OOP和你所说的任何语言来标记它,这样我们就可以为你指出正确的方向。这些术语在不同的语言中是否不同。我想OOPS在任何地方都是一样的。我可以说,抽象是通过封装和多态性实现的最高层次结构。