- 面向对象?面向过程?一文带你了解什么是编程范式
- 来源:天均地鞭
啊,不对,这句话是马丁·福勒说的,不是鲁迅先生说的。我们平常在编程时,复杂度是永远的敌人。最初令人印象深刻的就是程序非常复杂,具有许多活动部件和相互依赖的组件。但是,将现实问题转换为简单的解决方案的能力则需要更深入的理解。
在开发应用程序或解决简单问题时,我们经常说“如果我有更多的时间,我会写一个更简单的程序”。主要的原因就是,我们创作了一个复杂度非常高的程序。当然如果程序写的越简单,调试和理解就越容易。程序变得越复杂,就越难以执行。
管理复杂性是程序员的主要问题。
那么程序员如何处理复杂性呢?有许多通用的方法可以降低程序的复杂性或使其更易于管理。主要方法之一是编程范例。让我们深入探讨编程范式!
编程范式一词是指一种编程风格。
它不是指特定的语言,而是指您编程的方式。
众所周知有许多的编程语言,但是在实现它们时都需要遵循一些策略,而这种策略就是一个范式。
编程范例的类型
命令式编程范式
“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循环来得到前十个自然数的总和。
支持过程编程范式的语言是:
在以下情况下,过程编程通常是最佳选择:
- 有一个复杂的操作,其中包括操作之间的依赖关系,以及需要清晰了解不同应用程序状态(“ 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来获取总和。
支持面向对象范例的语言:
在以下情况下,最好使用面向对象的编程:
- 您有多个程序员不需要了解每个组件。
- 有很多代码可以共享和重用。
- 预计该项目会经常更改,并且会随着时间的推移而增加。
为什么要考虑学习面向对象的编程范例?
- 通过继承重用代码。
- 多态性带来的灵活性。
- 使用数据隐藏(封装)和抽象机制实现高安全性。
- 改进的软件开发效率:面向对象的程序员可以缝合新的软件对象,以制作全新的程序。
- 加快开发速度:重复使用可以加快开发速度。
- 降低开发成本:软件的重用也降低了开发成本。通常,将更多的精力投入到面向对象的分析和设计(OOAD)中,从而降低了总体开发成本。
- 更高质量的软件:更快的软件开发和更低的开发成本允许更多的时间和资源用于软件验证。面向对象的程序设计倾向于产生更高质量的软件。
1.3并行处理方式
并行处理是通过在多个处理器之间划分程序指令来进行的处理。
并行处理系统允许许多处理器通过划分它们而在更少的时间内运行程序。
支持并行处理方法的语言:
在以下情况下,并行处理方法通常是最佳的选择:
- 您所使用的系统具有不止一个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
支持逻辑编程范例的语言:
在以下情况下,逻辑编程范例通常是最佳用法:
- 如果您打算从事定理证明,专家系统,术语重写,类型系统和自动计划等项目。
为什么要考虑学习逻辑编程范例?
- 易于实现的代码。
- 调试很容易。
- 由于它是使用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循环。相反,函数式编程语言依赖于递归进行迭代。
支持函数式编程范例的语言:
在以下情况下,通常最好使用函数式编程范例:
- 使用数学计算。
- 使用针对并发或并行的应用程序。
为什么要考虑学习函数式编程范例?
- 可以快速,轻松地对功能进行编码。
- 通用功能可以重用,从而可以快速进行软件开发。
- 单元测试更容易。
- 调试更容易。
- 由于功能非常简单,因此整个应用程序不太复杂。
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个字符。
结论
编程范式降低了程序的复杂性。每个程序员在实现他们的代码时都必须遵循一种范式方法。每个人都有其优点和缺点。
如果您是初学者,我建议您先学习面向对象的编程和函数式编程。了解它们的概念,并尝试将其应用到您的项目中。
例如,如果您正在学习面向对象编程,那么面向对象编程的支柱是封装,抽象,继承和多态,通过这样做学习这些范式。这将帮助您更深入地了解它们的概念,并且您的代码将变得更简单,更高效。
科学
-
- 华为nova 6再次确定,12月5日正式发布,售价更感人
- 华为nova 6再次确定,12月5日正式发布,售价更感人! 5G的大潮已经到来,就在这个月,将有一大波5G手机到来,而率先打头阵的就是华为。在12月5日,华为nova 6将正式发布,据了解,这款机型将
- 科技说说说
-
- 华为5G随行WiFi评测:有了它4G手机也能5G高速上网
- 目前三大运营商都在大力推进5G基站的建设,虽然5G手机大量上市了,但是其价格还相对较高。很多小伙伴也处于观望状态,而购买iPhone 11系列的消费者更是与5G网络无缘。如果只有一部4G也想5G上网该
- 科技浪尖
-
- 华为回应李洪元事件:华为有权利也有义务举报涉嫌违法行为
- 针对沸沸扬扬的离职员工被拘251天事件,华为终于发声回应。 12月2日晚,华为针对前员工李洪元事件发布回应称:华为有权利,也有义务,并基于事实对于涉嫌违法的行为向司法机关举报。“我们尊重司法机关,包括
- 澎湃新闻
-
- 华为新系统EMUI10耗电快?都是这3个设置在捣鬼,1键关闭再用4年
- 有不少花粉表示手机更新EMUI10之后手机耗电加快。手机出现耗电的原因和新的系统有直接关系。但更新之后手机后台没有设置好也会出现加快手机耗电。设置好以下几个功能,可以让手机不再耗电。 1、关闭自启动
- 手机技能汇
-
- 任正非:“底薪+提成”害死人,一套让员工干劲十足的薪酬方案
- 现在很多企业主都采用这种烂街的传统薪酬设计:固定薪酬或底薪提成。固定工资的好坏,不用多说。不过,“底薪提成”基本上是商业团队计算工资的一种非常普遍的方式。但是,绩效委员会是否应该根据员工当月的绩效设置
- 真智眼
-
- 暴跌20%!拼多多彻夜无眠,第三季度亏损超21亿,用户评价太真实了
- 随着互联网快速的发展,各种电商平台快速纷纷崛起。电商的“黑马”层出不穷。目前大家用的比较多的APP有淘宝、京东,这两家做的比较出色的。可以说占据了国内大部分的电商市场 。 然而在近几年另一家平台的兴起
- 智慧趣
-
- 华为正式宣布:智能穿戴设备发货量突破1000万台
- 近日,根据多家科技媒体的消息,华为终端手机产品线总裁何刚正式宣布,华为智能穿戴大中华区2019年出货量已突破1000万台。而这,显然意味着在智能手机业务之外,华为终端成功扩充了自己的产品线。就智能穿戴
- YY胡
-
- 华为任正非“认识5G,发展5G”
- 如果需要 "认识5G,发展5G" PPT,私信我。 对于5G技术,大家现在几乎是每天耳闻目睹,5G时常霸占媒体头条,但是5G技术到底有什么先进之处,它能带来多大改变?这个问题对普通人来说又是一道难题。
- 科技Mr
-
- 拥有一个仿真智能机器人是什么感受?目前很少有人知道
- 时代发展超乎想象,许多高科技产业进入人们的视野,科技的产生颠覆人们的生活方式,对社会的进步起着难以估计的“蝴蝶效应”,最近,在许多科技产品中,仿真类的智能机器人频频亮相,它们能替代人们繁重的脑力工作,
- 三日视界
-
- 面向对象?面向过程?一文带你了解什么是编程范式
- 鲁迅 啊,不对,这句话是马丁·福勒说的,不是鲁迅先生说的。我们平常在编程时,复杂度是永远的敌人。最初令人印象深刻的就是程序非常复杂,具有许多活动部件和相互依赖的组件。但是,将现实问题转换为简单的解决方
- 天均地鞭
-
- 10岁女程序员婉拒谷歌Offer研发全球首款AI桌游,现在是一名CEO
- 又是一个别人家孩子的故事。 最近,硅谷出现了一款 AI 桌游,名叫 CoderMindz,能够帮助大小朋友们(4-104岁)学习基本的AI概念,包括模型、推理、自适应学习等。 很多人在 10 岁的时候
- 123少儿编程
-
- 半导体及元件:国产替代进程正在稳步前进
- 源达 根据龙头公司发布的高增长三季度业绩报,相信国产替代进程正在稳步前进,2020科技对半导体有更旺盛的需求,随着科技创新,5G/AI/Iot/汽车电子/VR/AR等热门领域需要强有力的硬件支撑,国内
- 信息早报
-
- 清华北大教授泄露 Python345集视频教程清单,这就是你现在需要的
- 北京清华大学(资料) Python是世界上功能最多,功能最强大的编程语言之一。通过Python,可以编写自己的应用程序,创建游戏,设计算法,甚至编程机器人。而且Python的热度现在一直高居不下,比如
- 水晶女孩
-
- 苹果正式官宣:红色苹果标志正式启用!全球苹果门店悉数换新标
- 就在近日,笔者出门时偶然发现:苹果的线下门店全部换成了红色的“缺口苹果”Logo: 其实不仅仅是笔者所在的区域,目前全球的苹果Apple Store均迎来了全新的红色Logo,这一全新的红色标志,在外
- IT爆料王