• 面向对象?面向过程?一文带你了解什么是编程范式
  • 来源:天均地鞭
鲁迅啊,不对,这句话是马丁·福勒说的,不是鲁迅先生说的。我们平常在编程时,复杂度是永远的敌人。最初令人印象深刻的就是程序非常复杂,具有许多活动部件和相互依赖的组件。但是,将现实问题转换为简单的解决方案的能力则需要更深入的理解。在开发应用程序或解决简单问题时,我们经常说“如果我有更多的时间,我会写一个更简单的程序”。主要的原因就是,我们创作了一个复杂度非常高的程序。当然如果程序写的越简单,调试和理解就越容易。程序变得越复杂,就越难以执行。管理复杂性是程序员的主要问题。那么程序员如何处理复杂性呢?有许多通用的方法可以降低程序的复杂性或使其更易于管理。主要方法之一是编程范例。让我们深入探讨编程范式!编程范式一词是指一种编程风格。它不是指特定的语言,而是指您编程的方式。众所周知有许多的编程语言,但是在实现它们时都需要遵循一些策略,而这种策略就是一个范式。编程范例的类型
描述了不同的编程风格命令式编程范式“imperative”一词来自拉丁语“impero”,意思是“I command”。而从“emperor”那里得到的也是同一个词,这很贴切。你是皇帝。你给电脑一点指令,它一次一个指令,然后报告。此类范式由几个语句组成,在执行完所有语句之后,运行结果会被存储。它是编写一个指令列表,来告诉计算机一步一步做什么。在命令式编程范式中,步骤的顺序至关重要,因为给定的步骤在执行步骤时会根据变量的当前值产生不同的结果。为了说明这一点,让我们使用命令式编程范式来找到前十个自然数的和。在C语言中的示例:#include <stdio.h>

int main()
{
int sum = 0;
sum += 1;
sum += 2;
sum += 3;
sum += 4;
sum += 5;
sum += 6;
sum += 7;
sum += 8;
sum += 9;
sum += 10;

printf("The sum is: %d\n", sum); //prints-> The sum is 55

return 0;
}在上面的示例中,我们命令计算机逐行执行操作,最后存储值并打印出来。1.1过程式编程范例过程编程(这也是必须的)允许将这些指令拆分为过程。注意:过程不是函数。它们之间的区别在于函数返回值,而过程则不返回值。更具体地说,函数被设计为具有最小的副作用,并且在给定相同的输入时总是产生相同的输出。另一方面,过程没有任何返回值。它们的主要目的是完成给定的任务并产生预期的副作用。过程的一个很好的例子是众所周知的for循环。for循环的主要目的是产生副作用,并且不返回值。为了说明这一点,让我们使用过程范式方法来编写前十个自然数之和。在C中的示例:#include <stdio.h>

int main()
{
int sum = 0;
int i =0;
for(i=1;i<11;i++){
sum += i;
}

printf("The sum is: %d\n", sum); //prints-> The sum is 55

return 0;
}在上面的示例中,我们使用了一个简单的for循环来得到前十个自然数的总和。支持过程编程范式的语言是:CC++JavaColdFusionPascal在以下情况下,过程编程通常是最佳选择:有一个复杂的操作,其中包括操作之间的依赖关系,以及需要清晰了解不同应用程序状态(“ SQL加载”,“ SQL加载”,“网络在线”,“无音频硬件”等)时。这通常适用于应用程序启动和关闭。该计划非常独特,共享的要素很少。该程序是静态的,预计不会随时间变化很大。随着时间的流逝,预计没有或只有少量功能会添加到项目中。为什么要考虑学习过程编程范例?这真的很简单。跟踪程序流程的更简便方法。它具有高度模块化或结构化的能力。需要更少的内存:高效而有效。1.2面向对象的编程范例OOP是最流行的编程范例,因为它具有独特的优势,例如代码的模块化以及能够根据代码直接关联实际业务问题的能力。面向对象的编程提供了一种可持续的方式来编写意大利面条式代码。它使你可以将程序作为一系列补丁来添加。
保罗·格雷厄姆面向对象编程的关键特性包括类,抽象,封装,继承和多态。一个类从中创建对象的模板或蓝图。
描述了面向对象编程的关键概念对象是类的实例。对象具有属性/状态和方法/行为。属性是与对象关联的数据,而方法是对象可以执行的动作/功能。
说明对象的状态和行为抽象将接口与实现分开。封装是隐藏对象的内部实现的过程。继承使层次结构关系得以表示和完善。多态性允许不同类型的对象接收相同的消息并以不同的方式响应。为了说明这一点,让我们找到面向对象范例方法中前十个自然数的总和。Java示例:public class Main
{
public static void main(String[] args) {
Addition obj = new Addition();
obj.num = 10;
int answer = obj.addValues();
System.out.println("The sum is = "+answer); //prints-> The sum is 55
}
}

class Addition {
int sum =0;
int num =0;
int addValues(){
for(int i=1; i<=num;i++){
sum += i;
}
return sum;
}
}有一个Addition类,它拥有两种状态,sum和num,其初始化为零。我们还有一个addValues()返回num数字总和的方法。在Main类中,我们创建了objAddition类的一个对象。然后,我们将初始化num为10,然后调用addValues()method来获取总和。支持面向对象范例的语言:PythonRubyJavaC++Smalltalk在以下情况下,最好使用面向对象的编程:您有多个程序员不需要了解每个组件。有很多代码可以共享和重用。预计该项目会经常更改,并且会随着时间的推移而增加。为什么要考虑学习面向对象的编程范例?通过继承重用代码。多态性带来的灵活性。使用数据隐藏(封装)和抽象机制实现高安全性。改进的软件开发效率:面向对象的程序员可以缝合新的软件对象,以制作全新的程序。加快开发速度:重复使用可以加快开发速度。降低开发成本:软件的重用也降低了开发成本。通常,将更多的精力投入到面向对象的分析和设计(OOAD)中,从而降低了总体开发成本。更高质量的软件:更快的软件开发和更低的开发成本允许更多的时间和资源用于软件验证。面向对象的程序设计倾向于产生更高质量的软件。1.3并行处理方式并行处理是通过在多个处理器之间划分程序指令来进行的处理。并行处理系统允许许多处理器通过划分它们而在更少的时间内运行程序。支持并行处理方法的语言:NESL(最古老的语言之一)CC ++在以下情况下,并行处理方法通常是最佳的选择:您所使用的系统具有不止一个CPU或多核处理器,而这些是当今计算机上常见的。即使需要使用功能更强大的微处理器,您也需要解决一些需要花费数小时/天才能解决的计算问题。您需要处理需要更多动态仿真和建模的真实数据。为什么要考虑学习并行处理方法?加快性能。常用于人工智能。由于此方法似乎像分而治之的方法,因此很容易解决问题。2.声明式编程范例声明式编程是一种构建程序的样式,该表达式表示计算的逻辑而无需谈论其控制流。声明式编程是一种编程范式,其中程序员定义了程序需要完成的工作,而没有定义如何实现。换句话说,该方法侧重于需要实现的目标,而不是指示如何实现。想象一下,在工作状态下,总统宣布了他们想要实现的目标的意图。另一方面,命令式编程就像是麦当劳特许经营的经理。它们非常重要,因此,这使得一切都很重要。因此,他们告诉每个人如何做最简单的动作。所以主要的区别是命令式告诉你如何做,声明式告诉你该做什么。2.1逻辑编程范例逻辑编程范例采用声明式方法来解决问题。它基于形式逻辑。逻辑编程范式不是由指令组成的,而是由事实和从句组成的。它使用它所知道的一切,并试图提出一个世界,其中所有这些事实和条款都是真实的。例如,苏格拉底是一个人,所有人都是凡人,因此苏格拉底是凡人。以下是一个简单的Prolog程序,它解释了上述实例: man(Socrates).
mortal(X) :- man(X).第一行可以读为“苏格拉底是一个男人。”这是一个基本条款,表示一个简单的事实。“;‘换句话说,所有的人都必死。’X是致命如果X是一个人”‘’这是一个条款的第二行可被读取,,或规则,用于确定何时它的输入X是“死的“。 '(符号“:-”,有时也称为旋转门,发音为“ if”。)我们可以通过询问以下问题来测试程序:?- mortal(Socrates).也就是说,“苏格拉底是凡人吗?”(“ ?-”是计算机提示问题的提示)。Prolog会回复“ yes”。我们可能要问的另一个问题是:?- mortal(X).也就是说,“谁(X)是致命的?” Prolog会回答“ X = Socrates”。约翰是比尔和丽莎的父亲。玛丽是比尔和丽莎的母亲。现在,如果有人问“比尔和丽莎的父亲是谁?” 或“比尔和丽莎的母亲是谁?” 我们可以教计算机使用逻辑编程来回答这些问题。Prolog中的示例:/*We're defining family tree facts*/
father(John, Bill).
father(John, Lisa).
mother(Mary, Bill).
mother(Mary, Lisa).

/*We'll ask questions to Prolog*/
?- mother(X, Bill).
X = Mary 示例说明:father(John, Bill).上面的代码定义约翰是比尔的父亲。我们在问Prolog X的什么值使这个说法正确?X应该是Mary,以使陈述正确。它会回应X = Mary?- mother(X, Bill).
X = Mary 支持逻辑编程范例的语言:PrologAbsysALF (algebraic logic functional programming language)AliceCiao在以下情况下,逻辑编程范例通常是最佳用法:如果您打算从事定理证明,专家系统,术语重写,类型系统和自动计划等项目。为什么要考虑学习逻辑编程范例?易于实现的代码。调试很容易。由于它是使用true / false语句构成的,因此我们可以使用逻辑编程来快速开发程序。由于它基于思想,表达和实现,因此也可以应用于非计算程序。它支持特殊形式的知识,例如可以更改的元级别或更高级别的知识。2.2函数式编程范例由于JavaScript,一种功能编程语言已经引起人们的关注,JavaScript是一种近来越来越流行的功能编程语言。函数式编程范式源于数学,并且与语言无关。此范例的关键原理是执行一系列数学函数。您编写简短函数程序。所有代码都在函数内。所有变量都作用于该函数。在函数编程范例中,函数不会修改该函数范围之外的任何值,并且函数本身不受其范围之外的任何值的影响。为了说明这一点,让我们确定给定的数字在函数式编程范例中是否为质数。JavaScript中的示例:function isPrime(number){
for(let i=2; i<=Math.floor(Math.sqrt(number)); i++){
if(number % i == 0 ){
return false;
}
}
return true;
}
isPrime(15); //returns false在上面的例子中,我们使用Math.floor()和Math.sqrt()数学函数有效地解决我们的问题。我们可以在不使用内置JavaScript数学函数的情况下解决此问题,但是为了有效地运行代码,建议使用内置JS函数。number的作用域仅限于该函数,isPrime()并且不受其范围之外的任何值的影响。isPrime()给定相同的输入时,函数始终会产生相同的输出。注意:函数式编程中没有for和while循环。相反,函数式编程语言依赖于递归进行迭代。支持函数式编程范例的语言:HaskellOCamlScalaClojureRacketJavaScript在以下情况下,通常最好使用函数式编程范例:使用数学计算。使用针对并发或并行的应用程序。为什么要考虑学习函数式编程范例?可以快速,轻松地对功能进行编码。通用功能可以重用,从而可以快速进行软件开发。单元测试更容易。调试更容易。由于功能非常简单,因此整个应用程序不太复杂。2.3数据库处理方式这种编程方法基于数​​据及其移动。程序语句由数据定义,而不是对一系列步骤进行硬编码。数据库是通常以电子方式存储在计算机系统中的结构化信息或数据的有组织的集合。数据库通常由数据库管理系统(DBMS)控制(“什么是数据库”,Oracle,2019年)。为了处理数据并查询它们,数据库使用表。然后可以轻松地访问,管理,修改,更新,控制和组织数据。良好的数据库处理方法对任何公司或组织都至关重要。这是因为数据库存储了有关公司的所有相关详细信息,例如员工记录,交易记录和薪水详细信息。大多数数据库使用结构化查询语言(SQL)来编写和查询数据。这是数据库处理方法(SQL)的示例:CREATE DATABASE personalDetails;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);该PersonID列的类型为int,将容纳一个整数。的LastName,FirstName,Address,和City列是varchar类型的,并且将保持的字符,并且这些字段的最大长度为255个字符。

结论编程范式降低了程序的复杂性。每个程序员在实现他们的代码时都必须遵循一种范式方法。每个人都有其优点和缺点。如果您是初学者,我建议您先学习面向对象的编程和函数式编程。了解它们的概念,并尝试将其应用到您的项目中。例如,如果您正在学习面向对象编程,那么面向对象编程的支柱是封装,抽象,继承和多态,通过这样做学习这些范式。这将帮助您更深入地了解它们的概念,并且您的代码将变得更简单,更高效。

科学

1 2 3 4 5 >>