java面对对象入门(5)-抽象

最后更新 : 2020.02.26  

用最简单的话来说,您可以将抽象定义为仅捕获与当前视角相关的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 desired abstraction.

抽象更多地是关于隐藏实现细节。在Java中,抽象是通过抽象类和接口实现的。
封装是将实现(代码)及其操作的数据(变量)包装在同一类中。Java类是封装类的一个示例,其中所有实例变量都是私有的,并且只有该类中的方法才能操纵这些变量。
更多精彩请关注公众号【lovepythoncn】

- END -

273
0