用最简单的话来说,您可以将抽象定义为仅捕获与当前视角相关的Java对象的那些细节。
例如,一个
HashMap
存储键值对。它为您提供了两种方法get()
以及put()
从map存储和检索键值对的方法。实际上,这是您想要在应用程序中使用map时所需的唯一信息。它在内部的工作方式,您无需知道如何使用它。这是Java中很多抽象的例子。以**现实生活中的抽象示例为例,**它可以是电视遥控器。您知道,当您按遥控器上的任何按钮时,电视上会应用某些功能,例如更改频道,更改音量等。您无需知道遥控器内部的工作原理即可正常使用。这是一个抽象的例子。
1.如何理解面向对象中的抽象
在面向对象的编程理论中,抽象涉及定义代表抽象“角色”的对象的功能,这些抽象“角色”可以执行工作,报告和更改其状态,并与系统中的其他对象“通信”。
在计算机科学中,抽象是一个过程,通过该过程定义数据和程序的形式类似于其含义(语义),同时隐藏实现细节。– 维基百科
任何编程语言中的抽象都可以通过多种方式工作。从创建子例程到定义用于进行低级语言调用的接口可以看出。
一些抽象试图通过完全隐藏它们依次建立在其上的抽象(例如设计模式)来限制程序员所需概念的广度。
2.抽象类型
2.1数据抽象
数据抽象是一种创建复杂数据类型的方法,它只公开有意义的操作来与数据类型进行交互,而将所有实现细节隐藏在外部工作中。
这种方法的好处包括随着时间的推移改进实施的能力,例如解决性能问题是任何。这个想法是这样的变化不应该对客户代码有任何影响,因为它们在抽象行为中没有区别.
2.2控制抽象
软件本质上是用任何编程语言编写的大量语句的集合。大多数时候,语句是相似的,并在多个地方重复多次。
控制抽象是识别所有此类语句并将其作为工作单元公开的过程。我们通常在创建函数来执行任何工作时使用此功能。
3.如何在Java中实现抽象?
由于抽象是面向对象编程实践的核心原则之一,而Java遵循所有OOP原则,因此抽象是Java语言的主要构建基块之一。
在Java中,抽象是通过interfaces
和实现的abstract classes
。接口允许您完全抽象化实现,而抽象类也允许部分抽象。
数据抽象的范围从创建简单的数据对象到复杂的集合实现(例如 HashMap或)HashSet
。
类似地,从定义简单的函数调用到完整的开源框架可以看出控件抽象。控制抽象是结构化编程背后的主要力量。
3.1Java抽象示例
让我们再来看一个使用interfaces的Java抽象示例。在此示例中,我将创建各种报告,这些报告可以在应用程序生存期内随时按需运行。作为报表的使用者,类无需知道报表的内部run()
,只需执行此方法即可执行报表。
Report.java
import java.util.List;
public interface Report
{
List<Object> run(ReportContext reportContext);
}
ReportContext.java
public class ReportContext {
//fields
}
EmployeeReport.java
import java.util.List;
public class EmployeeReport implements Report
{
@Override
public List<Object> run(ReportContext reportContext) {
//Custom Logic
System.out.println("Executing employee report");
return null;
}
}
SalaryReport.java
import java.util.List;
public class SalaryReport implements Report
{
@Override
public List<Object> run(ReportContext reportContext) {
//Custom logic
System.out.println("Executing salary report");
return null;
}
}
现在,使用run()
方法执行报告。
Main.java
package com.howtodoinjava.abstraction;
public class Main {
public static void main(String[] args) {
ReportContext reportContext = new ReportContext();
//Populate context
Report eReport = new EmployeeReport();
eReport.run(reportContext);
Report sReport = new EmployeeReport();
sReport.run(reportContext);
}
}
程序输出。
Executing employee report
Executing employee report
4.封装与抽象
Encapsulation
is realization of your desiredabstraction
.
抽象更多地是关于隐藏实现细节。在Java中,抽象是通过抽象类和接口实现的。
封装是将实现(代码)及其操作的数据(变量)包装在同一类中。Java类是封装类的一个示例,其中所有实例变量都是私有的,并且只有该类中的方法才能操纵这些变量。
更多精彩请关注公众号【lovepythoncn】
来源:CSDN
作者:有理想的coder
链接:https://blog.csdn.net/huangmingleiluo/article/details/104506358