oop-面向对象程序设计

小柏树 小柏树     2022-10-30     352

关键词:

https://baike.baidu.com/item/面向对象的程序设计/5880653?fr=aladdin转载出处!

此处百科解释的挺好的!

 

 

面向对象的程序设计

 
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。
目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。 此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。
当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。
 
中文名
面向对象的程序设计
外文名
Object-oriented programming
所    属
计算机编程架构
使用领域
CAD技术、人工智能等

面向对象的程序设计基本理论

编辑
一项由Deborah J. Armstrong进行的长达40年之久的计算机著作调查显示出了一系列面向对象程序设计的基本理论。 [1]  它们是

面向对象的程序设计类

类(Class)定义了一件事物的抽象特点。通常来说,定义了事物的属性和它可以做到的(它的行为)。举例来说,“狗”这个类会包含狗的一切基础特征,即所有“狗”都共有的特征或行为,例如它的孕育、毛皮颜色和吠叫的能力。类可以为程序提供模版和结构。一个类的方法和属性被称为“成员”。 我们来看一段伪代码
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
类 狗
开始
公有成员:
    吠叫():
私有成员:
    毛皮颜色:
    孕育:结束
//Java示例:
public class Dog
    public void bark()
        //...
    
     
    private String colorOfFur;
    private boolean breed;
在这串代码中,我们声明了一个类,这个类具有一些狗的基本特征。关于公有成员和私有成员,请参见下面的继承性一节。

面向对象的程序设计对象

对象(Object)是类的实例。例如,“狗”这个类列举狗的特点,从而使这个类定义了世界上所有的狗。而莱丝这个对象则是一条具体的狗,它的属性也是具体的。狗有皮毛颜色,而莱丝的皮毛颜色是棕白色的。因此,莱丝就是狗这个类的一个实例。一个具体对象属性的值被称作它的“状态”。(系统给对象分配内存空间,而不会给类分配内存空间。这很好理解,类是抽象的系统不可能给抽象的东西分配空间,而对象则是具体的。)
假设我们已经在上面定义了狗这个类,我们就可以用这个类来定义对象:
 
1
2
3
4
定义莱丝是狗
莱丝.毛皮颜色:棕白色
莱丝.吠叫()
Dog lars
我们无法让狗这个类去吠叫,但是我们可以让对象“莱丝”去吠叫,正如狗可以吠叫,但没有具体的狗就无法吠叫。
类和对象就好比是“实型”和“1.23”,“实型”是一种数据的类型,而“1.23”是一个真正的“实数”(即对象)。所有的“实数”都具有“实型”所描述的特征,如“实数的大小”,系统则分配内存给“实数”存储具体的数值。

面向对象的程序设计消息传递

一个对象通过接受消息、处理消息、传出消息或使用其他类的方法来实现一定功能,这叫做消息传递机制(Message Passing)。
如:莱丝可以通过吠叫引起的注意,从而导致一系列的事发生。

面向对象的程序设计继承

继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化。例如,“狗”这个类可能会有它的子类“牧羊犬”和“吉娃娃犬”。在这种情况下,“莱丝”可能就是牧羊犬的一个实例。子类会继承父类的属性和行为,并且也可包含它们自己的。我们假设“狗”这个类有一个方法(行为)叫做“吠叫()”和一个属性叫做“毛皮颜色”。它的子类(前例中的牧羊犬和吉娃娃犬)会继承这些成员。这意味着程序员只需要将相同的代码写一次。
在伪代码中我们可以这样写:
 
1
2
3
4
5
6
7
8
9
10
类牧羊犬:继承狗
 
定义莱丝是牧羊犬
莱丝.吠叫()    /* 注意这里调用的是狗这个类的吠叫方法。*/
public class Shepherd extends Dog
     
 
Shepherd shep = new Shepherd();
shep.bark();
回到前面的例子,“牧羊犬”这个类可以继承“毛皮颜色”这个属性,并指定其为棕白色。而“吉娃娃犬”则可以继承“吠叫()”这个方法,并指定它的音调高于平常。子类也可以加入新的成员,例如,“吉娃娃犬”这个类可以加入一个方法叫做“颤抖()”。设若用“牧羊犬”这个类定义了一个实例“莱丝”,那么莱丝就不会颤抖,因为这个方法是属于吉娃娃犬的,而非牧羊犬。事实上,我们可以把继承理解为“是”或“属于”。莱丝“是”牧羊犬,牧羊犬“属于”狗类。因此,莱丝既得到了牧羊犬的属性,又继承了狗的属性。 我们来看伪代码:
 
1
2
3
4
5
6
7
8
9
类吉娃娃犬:继承狗
开始
公有成员:
    颤抖()
结束
 
类牧羊犬:继承狗
定义莱丝是牧羊犬
莱丝.颤抖()    /* 错误:颤抖是吉娃娃犬的成员方法。 */
当一个类从多个父类继承时,我们称之为“多重继承”。如一只狗既是吉娃娃犬又是牧羊犬(虽然事实上并不合逻辑)。多重继承并不总是被支持的,因为它很难理解,又很难被好好使用。

面向对象的程序设计封装性

具备封装性(Encapsulation)的面向对象程序设计隐藏了某一方法的具体执行步骤,取而代之的是通过消息传递机制传送消息给它。因此,举例来说,“狗”这个类有“吠叫()”的方法,这一方法定义了狗具体该通过什么方法吠叫。但是,莱丝的朋友并不知道它到底是如何吠叫的。
封装是通过限制只有特定类的对象可以访问这一特定类的成员,而它们通常利用接口实现消息的传入传出。举个例子,接口能确保幼犬这一特征只能被赋予狗这一类。通常来说,成员会依它们的访问权限被分为3种:公有成员、私有成员以及保护成员。有些语言更进一步:Java可以限制同一包内不同类的访问;C#VB.NET保留了为类的成员聚集准备的关键字:internal(C#)和Friend(VB.NET);Eiffel语言则可以让用户指定哪个类可以访问所有成员。

面向对象的程序设计多态

多态(Polymorphism)是指由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。 [2]  例如,狗和鸡都有“叫()”这一方法,但是调用狗的“叫()”,狗会吠叫;调用鸡的“叫()”,鸡则会啼叫。 我们将它体现在伪代码上:
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
类狗
 
开始
 
公有成员:
    叫()
        开始
            吠叫()
        结束
结束
 
类鸡
开始
公有成员:
    叫()
        开始
            啼叫()
        结束
结束
 
定义莱丝是狗
定义鲁斯特是鸡
莱丝.叫()
鲁斯特.叫()
这样,虽然同样是做出叫这一种行为,但莱丝和鲁斯特具体做出的表现方式将大不相同。多态性的概念可以用在运算符重载上,本文不再赘述。

面向对象的程序设计抽象性

抽象(Abstraction)是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。举例说明,莱丝在大多数时候都被当作一条狗,但是如果想要让它做牧羊犬做的事,你完全可以调用牧羊犬的方法。如果狗这个类还有动物的父类,那么你完全可以视莱丝为一个动物。

面向对象的程序设计OOP名词释意

编辑
编程范型 对于OOP的准确定义及其本意存在着不少争论。
通常,OOP被理解为一种将程序分解为封装数据及相关操作的模块而进行的编程方式。有别于其它编程方式,OOP中的与某数据类型相关的一系列操作都被有机地封装到该数据类型当中,而非散放于其外,因而OOP中的数据类型不仅有着状态,还有着相关的行为。OOP理论,及与之同名的OOP实践相结合创造出了新的一个编程架构;OOP思想被广泛认为是非常有用的,以致一套新的编程范型被创造了出来。(其它的编程范型例如函数式编程或过程式编程专注于程序运行的过程,而逻辑编程专注于引发程序代码执行的断言)
对面向模拟系统的语言(如:SIMULA 67)的研究及对高可靠性系统架构(如:高性能操作系统和CPU的架构)的研究最终导致了OOP的诞生。

什么是oop

...。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;而面向对象是一种基于结构分析的、以数据为中心的程序设计思想。早在面向过程语言时代,有一句话说:程序=算法+数据结构。而现在在面向对象语言时... 查看详情

8--oop

oop-Python面向对象Python的面向对象面向对象编程基础共有私有继承组合,Mixin魔法函数魔法函数概述构造类魔法函数运算类魔法函数1.面向对象概述(ObjectOriented,00)OOP思想几个名词OO:面向对象OOA:面向对象的分析OOD:面向对象的... 查看详情

oop面向对象

...ented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解... 查看详情

javascript精粹基础进阶oop面向对象编程(上)

...ava,c++,都是实现了oop的语言。概念与继承概念面向对象程序设计(Object-orientedprogrammingOOP)是一种程序设计范型, 查看详情

面向对象编程objectorientedprogramming(oop)

...元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低... 查看详情

什么是oop

OOP即面向对象程序设计,全称为ObjectOrientedProgramming,是一种计算机编程架构。其本质是以建立模型体现出来的抽象思维过程和面向对象的方法,模型是用来反映现实世界中事物特征的。面向对象程序设计以对象为核心,该方法... 查看详情

面向对象

...象? 面向对象编程(ObjectOrientedProgramming,OOP,面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP达到了软件工程的三个目标:重用性、灵活性... 查看详情

js设计模式oop面向对象编程

最初我们写js代码的时候是这么写functioncheckName(){//验证姓名}functioncheckEmail(){//验证邮箱}functioncheckPassword(){//验证密码}这种方式会造成全局变量的严重污染,再过渡到varcheckObject={checkName:function(){};checkEmail:function(){};checkPassword: 查看详情

面向对象编程思想(oop)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性、七大设计原则和23种设计模式之间的关系。软件开发中疑难问题:软件复杂庞大很多... 查看详情

面向对象编程思想(oop)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性、七大设计原则和23种设计模式之间的关系。软件开发中疑难问题:软件复杂庞大很多... 查看详情

专业词汇-计算机-面向对象技术-oop:对象

...代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。(1)类具有相 查看详情

面向对象编程

主要内容介绍:什么是面向对象编程 OOP技术WindowsForms应用程序对OOP的依赖关系 什么是面向对象编程使用OOP技术,常常要使用许多代码模块,每个模块都提供特定的功能,每个模块独立,这种模块化编程方法提供了非常大... 查看详情

java面向对象----java面向对象(oop)概念

OOPs(面向对象编程系统)对象意味着真实的单词实体,如:笔,椅子,表等。面向对象编程是一种使用类和对象来设计程序的方法或模式。它通过提供一些概念简化了软件开发和维护:对象类继承多态性抽象封装1.对象任何具有状... 查看详情

面向对象编程思想(oop)(转发)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性、七大设计原则和23种设计模式之间的关系。软件开发中疑难问题:软件复杂庞大很多... 查看详情

ts快速上手面向对象oop-封装-继承-多态(代码片段)

...文献TS基础系列相关博文面向对象面向对象是一种优秀的程序设计方法,它的基本思想是使用类、对象、继承、封装、消息等基本概念进行程序设计。传统的面向对象 查看详情

ts快速上手面向对象oop-封装-继承-多态(代码片段)

...文献TS基础系列相关博文面向对象面向对象是一种优秀的程序设计方法,它的基本思想是使用类、对象、继承、封装、消息等基本概念进行程序设计。传统的面向对象 查看详情

面向对象(oop)

 面向对象程序设计中的三个特性:封装性,继承性和多态性的含义Object对象 一个对象即是一个类的实例化后实例Class类一个类即是对一类拥有相同属性的对象的抽象世界万物皆可分类事件万物皆为对象;只要是对象就肯... 查看详情

面向对象编程(oop)和面向过程编程

面向对象与面向过程  1、二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为。面向对象,将功能封装进对象,强调具备功能的对象。  2、面向对象更加强调运用人类在日志的思维逻辑中... 查看详情