SOLID原则的方法--面向对象与功能编程(附实例)

378 阅读7分钟

坚实的原则

在开始了解坚实的原则到底是什么?我们必须了解原则的确切含义。

原则是给一个概念命名的东西,这样你就可以对这个概念进行讨论和推理。

他们帮助我们知道我们的代码是好是坏。原则可以帮助你远离麻烦。

作为一个关心软件产品的开发者.主要目标是在整个开发阶段创建高质量的代码,并希望提高代码的内部质量。

基本上,设计原则为设计更好的软件应用程序提供了高层次的指导方针。这些原则被命名为 "SOLID原则"。

SOLID原则是一套最流行的设计原则。由美国软件工程师和讲师Bob叔叔(Robert C.Martin)在他2000年的论文《设计原则设计模式》中首次提出。

什么是OOPS和函数式编程?

面向对象的编程。

面向对象的编程是开发人员使用的一种范式。它更关注数据而不是代码。OOPs依赖于类和对象的概念。类是对象的蓝图,它描述了一个对象的行为方式和一个对象将包含的内容。

对象是一个类的实例,它的行为与该类所定义的一样。简而言之,面向对象的编程是一种对数据比对代码顺序更重视的方式。

历史。

让我们来看看OOPS的历史。

面向对象的编程 "是Alan Kay在1966或1967年左右在读研究生时提出的。Ivan Sutherland的开创性的Sketchpad应用程序是OOP的早期灵感来源。它是在1961年和1962年之间创建的,并在1963年发表在他的Sketchpad论文中。

函数式编程。

我们都知道,函数式编程由于其解决现代问题的效率和可扩展性而成为时下的潮流。

函数式编程是一种通过创建纯函数来思考软件建设的方式。纯函数是那些从不引起副作用的函数。它们总是对相同的输入给出或产生相同的输出。函数式编程语言的重点是表达式和声明,而不是语句的执行。

注意:在本博客的后面,我们将使用JavaScript(作为一种函数式编程方法),它提供了函数式功能,因为我们知道Js支持一流的函数。

Javascript是函数式编程的完美选择,因为它可以提高Angular和ReactJS等框架的性能。

历史

让我们来看看函数式编程语言的历史。

函数式编程是基于一个被称为Lambda Calculus的数学基础(由Alonzo Church在1930年代开发)。

第一个函数式编程语言LISP是在20世纪50年代末由John Mc Carthy为IBM 700/7000系列科学计算机开发的,同时作为麻省理工学院(MIT)。FP是专门为处理符号计算和列表处理应用而设计的。

一些流行的函数式编程语言是LISP、Python、Erlang、JavaScript等。

SOLID原则的必要性。

固体原则的目标是减少依赖性,使工程师改变软件的一个领域而不影响到其他领域。

这是一种提高代码质量和可维护性的简单方法。

固体原则是一个首字母缩写,它是对表明软件正在腐烂的症状的一种补救措施。这些症状是僵化、脆弱、不动。

由于SOLID原则是许多其他原则的子集。所以我将详细讨论其中的一些原则。

Liskov's Substitution Principle(LSP) :

在面向对象的编程方面。

首先让我们开始了解LSP的历史。有一位女士是公认的计算机科学家,她叫Barbara Liskov。她是2008年图灵奖的得主。所以基本上,LSP是以 "Barbara Liskov "命名的。在1998年的论文中,Liksov以 "数据抽象和层次结构 "为题,初步提出了底层LSP的概念。

后来在1999年,这篇论文被重新表述,并给出了一个严格的数学表述。Barbara Liskov和Jeannette Wing重述了这篇论文,题目是 "行为子类型",使用不变量和限制条件。

LSP原则主要关注超类和子类之间的关系。

这个原则是open close原则在行为方面的延伸,意味着我们必须确保新的驱动类在不改变其意外行为的情况下扩展基类。

简而言之,基类必须被子类所取代。

下面是一个实际的例子

让我们举个例子,所有的动物都有一个共同的行为,即以某种方式说话。但所有的动物都有不同的声音,如马和驴。两者都是动物,具有相同的属性,但在技术上两者的声音在现实中是不同的。

让我们举一个例子,所有的动物都有一个共同的行为,即以一种方式说话。但是,所有的动物都有不同的声音,如马和驴都是动物,有相同的属性。但在技术上,两者在现实中的声音是不同的。换句话说,马和驴的说话方法分别打印出一个字符串 "neigh "和 "hee haw"。这些子类的实例可以在使用动物的实例时被替换。

尽管两者都返回字符串。如果我们用水母而不是驴子,那么它将返回一个空字符串,因为水母不发声。这意味着,动物类的一个实例不能被水母类的一个实例所替代。因此,它违反了LSV。

在函数式编程方面。

Liskov替代原则,这个原则在函数式编程中很常见。在这里,我们可以创建一个包含泛型的函数,以确保一个输入可以持续地被替换为另一个输入,而不需要对现有的代码进行任何修改。

下面是实际的例子。

接口隔离原则(ISP)。

在面向对象的编程方面。

许多特定的客户接口比一个通用接口要好。不要强迫任何客户实现一个与他们无关的接口。ISP将非常大的接口分割成最小的、特定的接口,这样客户就只需要知道他们感兴趣的方法。

下面是一个实际的例子

从函数式编程的角度来看。

我们知道,在现实中,接口能够实现组件之间的每一次交互。

有五个SOLID原则。只有四个原则适用于JavaScript,即SOLD。第三条原则,即接口隔离原则,并不适用。其背后的原因是,在这个原则中,有一个词interface,它需要注意的是它表明了接口的概念。因此,如果任何语言都有接口的概念,那么只有这第三条原则是适用的。

例如,java、c#都有一个接口的概念,所以第三条原则在这里适用。

如果有些语言没有接口的概念。那么第三条原则就无法使用或无法适用。

由于JavaScript没有接口,所以这里的第三原则不可能实现。

下面是一个实际的例子。

依赖性反转原则(DIP)。

在面向对象的编程方面。

这是一个很好的解决方案,可以减少我们软件中的紧耦合。高层模块不应该依赖低层模块。两者都应该依赖于抽象。

抽象不应该依赖于细节,细节应该依赖于抽象。

比如说。

电视机需要一个电池,但它没有说哪个品牌的电池。你可以使用任何你想要的品牌的电池。

下面是一个实际的例子

就函数式编程而言。

在函数式编程中,抽象是处理代码的默认方式,函数是抽象的,所以依赖性倒置原则在此适用。

这里是实践的例子。

结语。

所以,从以上所有关于面向对象和函数式编程的经验中,我得出的结论是,由于世界上很多人都在通过实施SOLID原则转向这两种编程语言,我们可以坚持传统的设计来更有效地编写代码。它将帮助我们正确地组织我们的代码,在不降低软件性能的情况下变得相当可扩展。这也会帮助其他开发者更好地理解代码。因此,它也提高了项目/软件的可维护性。