【问题标题】:What is the use of Abstraction?抽象有什么用?
【发布时间】:2019-07-03 15:04:34
【问题描述】:

我很难理解抽象在 Java 中的整体使用。

我一直在研究这个链接中的一个例子:https://javatutorial.net/java-abstraction-example 我了解它的实现,但我不明白为什么它甚至是必要的。如果他们只是要在 2 个子类中再次创建,为什么他们在 Employee 类中创建了 calculateSalary 方法?

【问题讨论】:

  • 正如链接中所说的Abstraction is a process of hiding the implementation details from the user 所以calculateSalary() 抽象函数是在抽象super class 中定义的,所以它是sub class(这是扩展员工抽象类)可以根据他们的@987654327 定义@ 和这些 algorithm/calculation 将对其他 entities/user 隐藏
  • 所有关于面向对象编程和设计的好文章都谈到了抽象。你学过哪些?
  • @VaradMondkar 抽象的好处不是某种隐藏(这意味着某种(错误)保密)。真正的好处是更少的耦合,作为回报,更少的摩擦。推荐观看this youtube snippet of Uncle Bob talking about polymorphism and decoupling (the relevant part is about 15 minutes long)
  • @Turing85 感谢您更正和分享视频。

标签: java abstraction


【解决方案1】:

抽象的整体使用是解耦。要使用Employee,不需要知道实现,只需要知道接口及其契约。这例如用于Collections.sort(List<T> list)Collections.sort(...) 的程序员不需要知道特定列表的实现即可对其进行排序。这提供了实现支持符合List interface 的未来代码的好处。 This question 在这方面是相关的 (#selfPromotion)。更少的耦合会导致更少的摩擦和整体更不脆弱的代码。

也就是说,您提供的示例很差,因为它违反了Single Responsibility Principle:计算薪水不是Employee 实例的责任。为此,我们应该有一个单独的对象来计算工资,基于Employee-instance 和一些工作时间。在内部,这个 Uber 计算器可以使用 Chain of Responsibility,每个 Employee 实现一个 Calculator,将 Employee 与他们的工资计算方式分离。这提供了可扩展性和灵活性的额外好处:如果计算薪水的方式发生变化(例如,公司可能会改变政策以便每个FullTimeEmployee 获得相同的薪水,或者公司可能希望按周计算薪水而不是按月计算),使用FullTimeEmployee 的其他服务说不受影响)。

【讨论】:

  • 完美解释
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 2019-05-30
  • 2017-04-15
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多