计算机, 程序设计
OOP是什么? 面向对象编程的基本原理
为什么面向对象编程在大多数项目中是首选的? OOP提供了一种有效的方法来应对复杂性。 而不是将程序视为可执行指令序列,它将其表示为具有某些属性的一组对象,并与它们执行某些操作。 这导致创建更清晰,更可靠和易于遵循的应用程序。
形成了面向对象编程(OOP)的基本原理,因为在以前的方法中发现了限制。 其中 - 无限制访问数据和大量链接,对引入更改施加了限制。 他们的意识和原因对于了解OOP在程序设计中的作用以及它的好处是重要的。
程序语言
C,Pascal,FORTRAN和类似的语言是程序性的。 也就是说,他们的每个操作员都命令计算机做某事:获取数据,加数,除以6,显示结果。 程序语言应用程序是一个指令列表。 如果它很小,则不需要其他组织原则(通常称为范式)。 程序员创建指令列表,计算机执行它们。
分离成功能
当应用程序变大时,列表变得很麻烦。 几个人可以理解超过几百条指令,直到它们组合在一起。 因此,该功能已经成为使应用程序对其创建者更易理解的方式。 在某些语言中,相同的概念可以称为子程序或过程。
应用程序分为功能,每个功能都有明确的目的和界面。
分离到过程中的想法可以通过将它们分组成一个更大的被称为模块的对象来扩展,但原理是类似的:分组执行指令列表的组件。
功能和模块的分离是结构编程的基石之一,在OOP的出现之前几十年是一个先发制人的范例。
结构编程问题
随着应用程序越来越大, 结构性编程 开始出现困难。 项目变得太复杂了。 图形转移。 涉及更多的程序员。 复杂性增加。 成本飞涨,图表进一步下滑,崩溃。
对这些失败原因的分析表明了程序范式的缺点。 无论结构化编程方法如何实现,大型应用程序变得过于复杂。
与程序语言相关的这些问题的原因是什么? 首先,功能可以无限制地访问全局数据。 其次,无关的程序和意义不能模仿现实世界。
如果我们在采购计划的背景下考虑这些问题,则最重要的全球数据要素之一是会计单位的总计。 不同的功能可以访问它们以输入新值,显示它,更改它等等。
无限访问
例如,在C编写的程序中,有两种数据。 本地隐藏在函数内,其他程序不被使用。
当两个或多个函数需要访问相同的数据时,后者必须是全局的。 例如,这些是关于要考虑的项目的信息。 全球数据可以通过任何程序访问。
在一个大型程序中有许多功能和许多全局元素。 程序范式的问题在于,这导致了他们之间更多的潜在联系。
如此大量的化合物引起了几个困难。 首先,这使程序结构的理解复杂化。 其次,这使得很难做出改变。 全局数据项的更改可能需要调整所有具有访问权限的函数。
例如,在会计程序中,有人认为正在考虑的项目的代码应该由不超过5位数字组成,而不是12位。这将需要将 数据类型 从短到长改变。 现在,与代码相关的功能必须更改为使用新的格式。
当大型应用程序中的元素发生变化时,很难说哪些程序可以访问它们。 但即使这样做是明确的,改变它们可能导致与其他全球数据不正确的工作。 一切都与其他一切有关,所以一个地方的变化将在另一个地方。
现实建模
程序性范式的第二个更重要的问题在于其个人数据和功能的位置不会对现实世界中的事物进行模拟。 在这里我们处理像人和汽车这样的对象。 他们看起来不像数据或功能。 复杂的真实对象具有属性和行为。
属性
人的属性(有时称为特征)的例子是眼睛的颜色和职称,对于汽车 - 电力和门的数量。 事实证明,现实世界中的属性与程序中的数据相当。 它们具有特定的含义,如蓝色(眼睛颜色)或四(门数)。
行为
行为是真实世界的对象产生的一些响应某种影响。 如果你要求当局提高工资,答案是“是”或“否”。 如果你按刹车,车停下来。 发音和停止是行为的例子。 行为就像一个程序:它被调用来做某事,它是这样做的。 因此,单独的数据和功能不能有效地建模现实世界的对象。
解决
OOP中的对象被表示为数据和函数的集合。 只有在C ++中称为成员函数的过程才允许您获取其值。 数据被隐藏并保护不被改变。 值和功能封装在一个单元中。 封装和隐藏是OO语言描述中的主要术语。
如果要更改数据,您将确切知道与其进行交互的功能。 没有其他程序可以访问它们。 这简化了编写,调试和维护程序。
一个应用程序通常由几个对象进行交互,调用成员函数。
今天使用最广泛的OOP语言(面向对象编程)是C ++(plus-plus)。 Java缺少一些功能,如指针,模板和多重继承,这使得它不如C ++那么强大和通用。 C#还没有达到C ++的人气。
应该注意的是,C ++中所谓的成员函数被称为一些其他OO语言的方法,比如Smalltalk。 数据元素称为属性。 调用对象方法是向其发送消息。
类比
您可以向公司的部门提交对象。 在大多数组织中,员工不干干部工作,下次支付工资,然后花一周时间做零售业务。 每个部门都有自己的员工,具有明确的责任。 还有自己的数据:薪资,销售数字,员工记录等。各部门的人员都会与他们的信息一起工作。 因此,公司的分离有助于控制其活动并保持数据的完整性。 会计负责工资。 如果您需要知道7月份在南部分行支付的工资总额,您不需要在档案中翻滚。 向负责人发送记录就足够了,等待这个人访问数据并发送所需信息的回复。 这样可以确保遵守规定和不存在外部干扰。 以同样的方式,OOP中的对象提供了应用程序的组织。
应该记住,对象的方向不涉及程序的细节。 大多数C ++语句对应于诸如C之类的过程语言操作符。实际上,C ++中的成员函数与C中的函数非常相似。只有更广泛的上下文才能确定指令是程序化的还是面向对象的。
OOP中的对象:定义
在考虑使用OO语言进行编程的问题时,不是将其分离成单独的函数,而是分离出对象的问题。 OOP思维使开发应用程序变得更加容易。 这是由于软件和实物的相似性。
什么东西成为OOP的对象? 以下是典型的类别。
OOP中的物理对象是:
- 流式传输;
- 电路设计程序中的电气元件;
- 经济模式中的国家;
- 飞机在空中交通管制系统中。
用户的计算机环境元素:
- 菜单;
- 窗口;
- 图形(线,矩形,圆);
- 键盘,鼠标,打印机,磁盘驱动器。
人:
- 工人;
- 学生;
- 客户;
- 卖家。
信息:
- 会计簿;
- 私事
- 字典;
- 定居点的纬度和经度表。
真实世界对象与OOP之间的联系是功能和数据组合的结果:它们彻底改变了编程。 程序语言没有这种密切的信件。
类
OOP中的对象是类的成员。 这是什么意思? 编程语言具有内置的 数据类型。 int 类型 ,即整数,是在C ++中预定义的。 你可以声明任何数量的int变量。
类似地,定义了一组同一类的对象。 它定义了其对象中包含的函数和数据,而不创建它们,就像int不创建变量一样。
OOP中的一个类是一些类似对象的描述。 王子,叮当和麦当娜都是歌手。 没有一个这个名字的人,但如果他们有适当的特征,人们就可以这么叫。 OOP对象是该类的一个实例。
遗产
在生活中,课堂分为子类。 例如,动物分为两栖动物,哺乳动物,鸟类,昆虫等
这种划分的原则是每个子类与其发生的类具有共同的特征。 所有汽车都有车轮和发动机。 这些是车辆的定义特征。 除了一般的特点,每个子类都有自己的特点。 公共汽车有许多座位,卡车有运送重物的空间。
类似地,基类可以成为可以被定义的几个派生子类的父代,以便它们通过添加它自己来分享其特征。 继承类似于简化程序程序的函数。 如果代码的几个部分几乎相同,则可以提取常见元素并将其放入一个过程中。 三个应用程序段可以调用一个函数来执行常见的操作,但它们也可以执行自己的操作。 类似地,基类包含派生组通用的数据。 像功能一样,继承减少了OO程序,并阐明了其元素的互连。
回收
在类创建和调试之后,它可以传递给其他程序员,以便在自己的应用程序中重用。 这类似于可以包含在不同应用程序中的函数库。
在OOP中,继承是多用途思想的延伸。 从现有的类,不改变它,你可以创建一个添加其他功能的新的类。 重用现有软件的便利性是OOP的重要优势。 相信这样做可以增加初期投资的回报。
创建新的数据类型
对象可以方便地创建新的数据类型。 假设程序使用二维值(例如坐标或纬度和经度),并希望用它们进行算术运算:
Position1 = position + origin,
其中 position1,position 和origin是独立数值对。 创建一个包含这两个值并用其对象声明变量的类创建一个新的数据类型。
多态,过载
上述位置运算中使用的运算符=(等于)和+(加号)的操作方式与内置类型(如int)的方式不同。 对象位置和其他位置不是预定义的,而是被编程。 这些操作员如何知道如何处理? 答案在于你可以为他们设置新的行为模式。 这些操作是Position类的成员函数。
运算符或程序的使用取决于它们的用途,称为多态。 当现有的运算符(如+或=)能够处理新的数据类型时,就被称为过载。 OOP中的重载是一种多态。 这是它的重要特征。
关于OOP“面向对象编程傻瓜”的书将让每个人更加了解这个话题。
Similar articles
Trending Now