【JAVA设计模式总结】——从面向对象到函数式编程和UML

本文总结了从面向对象到函数式编程的转变,阐述了命令式、声明式和函数式编程的区别,并深入探讨了面向对象编程的四个基本原则。此外,还介绍了统一建模语言UML的相关概念,包括泛化、实现、依赖、关联、聚合和组合。最后,讲解了SOLID设计原则,强调了单一职责、开闭、里式替换、依赖倒置和接口隔离原则的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从面向对象到函数式编程

编程范式

  • 命令式编程范式

    • 命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。

    • 举例说明:

      • List results = new List();
        foreach(var num in collection)
        {
        if (num > 5)
        results.Add(num);
        }
      • 1)在中央火车站乘坐1号电车;2)在第三站下车;3)向右走,朝第六大道行进,直到第三个路口
    • C, C++ 还是 C#, Java, Javascript, BASIC, Python, Ruby

  • 声明式编程范式

    • 以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做。
    • 举例说明:SELECT * FROM collection WHERE num > 5
    • SQL、HTML、CSS
  • 函数式编程范式

    • 即只关注做什么而不是怎么做。但函数式编程不仅仅局限于声明式编程。

    • 举例说明:

      • List results = collection.stream()
        .filter(n -> n > 5)
        .collect(Collectors.toList());
    • JavaScript 、C# 中的 LINQ 和 Java 中的 Lambda 和闭包

  • 面向对象编程范式OOP

    • 对象和类

      • “汽车”是一个类,则一辆特定的本田思域汽车就是“汽车”类的一个对象
    • 面向对象的四个基本原则:

      • 封装

        • 主要是指属性和行为的绑定,将对象的属性和行为保存到一个地方
      • 抽象

        • 使得对象可以公开它所做的事,而隐藏它是如何做到这些事的
      • 继承

        • 指对象或类基于另一个对象或类的能力
      • 多态

        • 提供了不同类型的实体使用相同接口的选项
        • 编译时多态和运行时多态

统一建模语言UML

  • 泛化

    • 描述继承的关系称为泛化,Is-A关系
  • 实现

    • 描述类的接口实现的关系称为实现
  • 依赖

    • 用于定义一个类以某种方式依赖于另一个类,而另一个类可能依赖于或不依赖于第一个类,Uses-A关系
  • 关联

    • 聚合

      • Has-A关系

        • 主类不存在时,所包含的类的实例又可以独立于第一个类之后生存
    • 组合

      • 主类不存在时,依赖类不再存在

面向对象的设计原则

  • SOLID

    • 单一职责原则——SRP

      • 其定义是应该有且仅有一个类引起类的变更,这话的意思就是一个类只担负一个职责。

        举个例子,在创业公司里,由于人力成本控制和流程不够规范的原因,往往一个人需要担任N个职责,一个工程师可能不仅要出需求,还要写代码,甚至要面谈客户,光背的锅就好几种,简单用代码表达大概如此:

        public class Engineer {
        public void makeDemand(){}
        public void writeCode(){}
        public void meetClient(){}
        }

      • 优点

        • 单一职责原则的优点:
          类的复杂性降低,实现什么职责都有明确的定义;
          逻辑变得简单,类的可读性提高了,而且,因为逻辑简单,代码的可维护性也提高了;
          变更的风险降低,因为只会在单一的类中的修改。
    • 开闭原则——OCP

      • 其定义是一个软件实体如类、模块和函数应该对扩展开放,对修改关闭

        例如前面单一职责原则举的工程师类,我们说的是把方法抽离成单独的类,每个类负责单一的职责,但其实从开闭原则的角度说,更好的方式是把职责设计成接口,例如把写代码的职责方法抽离成接口的形式,同时,我们在设计之初需要考虑到未来所有可能发生变化的因素,比如未来有可能因为业务需要分成后台和前端的功能,这时设计之初就可以设计成两个接口,

        public interface BackCode{
        void writeCode();
        }
        public interface FrontCode{
        void writeCode();
        }

    • 里式替换原则——LSP

      • 定义:所有引用基类的地方必须能够透明地使用其子类的对象。
    • 依赖倒置原则——DIP

      • 它的定义是:
        高层模块不应该依赖底层模块,两者都应该依赖其抽象;
        抽象不应该依赖细节;
        细节应该依赖抽象;
    • 接口隔离原则——ISP

      • 其定义是:
        客户端不应该依赖它不需要的接口
    • 迪米特原则——LOD

      • 规则是:
        一个对象应该对其他对象有最少的了解
内容概要:本文将金属腐蚀现象比作游戏角色受到持续伤害(debuff),并采用浓度迁移损伤方程来建模这一过程。文中首先介绍了浓度迁移的概念,将其比喻为游戏中使角色持续掉血的毒雾效果,并展示了如何利用Numpy矩阵存储浓度场以及通过卷积操作实现浓度扩散。接着引入了损伤方程,用于评估材料随时间累积的损伤程度,同时考虑到材料自身的抗性特性。作者还提供了完整的Python代码示例,演示了如何在一个二维网格环境中模拟24小时内金属表面发生的腐蚀变化,最终得到类似珊瑚状分形结构的腐蚀形态。此外,文章提到可以通过调整模型参数如腐蚀速率、材料抗性等,使得模拟更加贴近实际情况。 适合人群:对材料科学、物理化学感兴趣的科研工作者技术爱好者,尤其是那些希望通过编程手段深入理解金属腐蚀机制的人群。 使用场景及目标:适用于希望借助数值模拟方法研究金属腐蚀行为的研究人员;可用于教学目的,帮助学生更好地掌握相关理论知识;也可作为工程项目前期评估工具,预测不同条件下金属构件可能遭受的腐蚀损害。 阅读建议:由于文中涉及较多数学公式编程细节,建议读者具备一定的Python编程基础以及对线性代数有一定了解。对于想要进一步探索该领域的学者来说,可以尝试修改现有代码中的参数设置或者扩展模型维度,从而获得更丰富的研究成果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值