根据定义,抽象隐藏了实现细节并仅显示了功能。但确切地说,我们隐藏的是什么,在哪里以及哪个部分?
AFAIK以下程序是抽象的一个例子:
public interface ToBeImplemented {
public string doThis();
}
public class Myclass implements ToBeImplemented {
@override
public string doThis() {
//Implementation
return null;
}
}
如果我错了,这不是抽象,那么抽象的正确例子是什么?
答案 0 :(得分:2)
您对抽象的定义是正确的。你提供的代码绝对是一种抽象形式。
为什么呢?
因为代码的用户只会提供接口。用户只会知道您的代码combined
执行某项任务,但他/她不知道代码是如何完成某项任务的。
例如:
doThis()
在此示例中,用户只能获取界面,因此他/她只知道您的代码可以总结为 n 。但是用户不知道你使用for循环来总结 n 。
答案 1 :(得分:1)
在上面的示例中,您可以编写如下内容:
@extends('book.show')
@section('comment')
Yuup!
@stop
}
然后你可以有另一个类,例如主要方法:
public interface ToBeImplemented {
public string doThis();
}
public class ImplementationA implements ToBeImplemented {
@override
public string doThis() {
//ImplementationA of doThis
return null;
}
}
public class ImplementationB implements ToBeImplemented {
@override
public string doThis() {
//ImplementationB of doThis
return null;
}
抽象是您可以声明ToBeImplemented引用,然后为其分配ImplementationA或ImplementationB(以及可能的任何其他实现)。但是你根据抽象ToBeImplemented编写代码,并让一些条件决定应该调用ToBeImplemented(以及因此doThis())的正确实现。
答案 2 :(得分:0)
维基百科是开始学习的好地方:Abstraction (computer science)
抽象的本质是保留在给定上下文中相关的信息,并忘记在该上下文中无关的信息。
John V. Guttag
将接口与实现分离是一种方式来提供抽象。
Collections framework in Java就是一个很好的例子。调用应用程序使用声明为接口的变量(引用),例如List
或Map
,而实际的对象实际上是一个具体的类,如ArrayList
或HashMap
。
如果界面提供了所有需要的功能,那么调用应用程序就不需要了解底层实现。
问题中显示的示例代码是将接口与实现分离的示例,因此也是抽象的示例。如果它使用特定的有意义的上下文(如BankAccount
作为接口,SavingsAccount
和CheckingAccount
作为实现,则会大大改进该示例。