面向对象理解

article/2025/9/18 12:06:50

1.早期发展

面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1]发展到一定阶段后的产物。

2.基本概念

对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。在面向对象程序设计中,对象所指的是计算机系统中的某一个成分。在面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个是动作。对象则是数据和动作的结合体。对象不仅能够进行操作,同时还能够及时记录下操作结果。

方法是指对象能够进行的操作,方法同时还有另外一个名称,叫做函数。方法是类中的定义函数,其具体的作用就是对对象进行描述操作。

继承简单地说就是一种层次模型,这种层次模型能够被重用。层次结构的上层具有通用性,但是下层结构则具有特殊性。在继承的过程中类则可以从最顶层的部分继承一些方法和变量。类除了可以继承以外同时还能够进行修改或者添加。通过这样的方式能够有效提高工作效率。在这里举一个例子,当类X继承了类Y后,此时的类X则是一个派生类,而类Y属于一个基类。继承是从一般演绎到特殊的过程,可以减少知识表示的冗余内容,知识库的维护和修正都非常方便。更有利于衍生复杂的系统。

类是具有相同特性(数据元素)和行为(功能)的对象的抽象。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。[3]类映射的每一个对象都具有这些数据和操作方法,类的继承具有层次性和结构性,高层次对象封装复杂行为,具体细节对该层次知识保持透明,可以减小问题求解的复杂度。

封装是将数据和代码捆绑到一起,对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。防止了程序相互依赖性而带来的变动影响,面向对象的封装比传统语言的封装更为清晰、更为有力。有效实现了两个目标:对数据和行为的包装和信息隐藏。

多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。一个接口,多种方式。

面向对象的方法就是利用抽象、封装等机制,借助于对象、类、继承、消息传递等概念进行软件系统构造的软件开发方法。

3.面向对象的特征

(1)对象唯一性。

每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

(2)抽象性。

抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

(3)继承性。

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

书写子类 (关键字extends):

 

父类定义的属性和方法,可以直接调用

java中4中修饰符分别为public、protect、default、private,他们这就说明了面向对象的封装性,所以我们要适用他们尽可能的让权限降到最低,从而安全性提高。

 

(4)多态性(多形性)

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去响应共同的消息。

多态性增强了软件的灵活性和重用性。

 

1. 多态是在继承或实现的基础上实现的

2. 父类引用指向子类对象

3. 如果子类覆盖了父类中的属性或方法,调用子类覆盖后的属性或方法    

    父类 引用 = new 子类对象

    

4.面向对象程序设计

基本思想

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。

实现

(一)程序设计语言

⒈选择面向对象语言

采用面向对象方法开发软件的基本目的和主要优点是通过重用提高软件的生产率。因此,应该优先选用能够最完善、最准确地表达问题域语义的面向对象语言。

⒉程序设计风格

⑴提高重用性。

⑵提高可扩充性。

⑶提高健壮性。


http://chatgpt.dhexx.cn/article/cR3L5uNT.shtml

相关文章

error: unknown file type '.pyx' (from 'pycocotools/_mask.pyx')

在 YOLO v3模型中运用 cocoapi 进行评估模型,安装时报错显示: building pycocotools._mask extension error: unknown file type .pyx (from pycocotools/_mask.pyx) make: *** [all] Error 1可能的解决方法:   运行的 Python 版本不对。 …

sklearn/tree/_criterion.pyx

注解: criterions分为几类,其中有classification criterions与regression criterions。classification criterions是针对离散的,regression criterions是针对连续分布的 本文主要讲解一下RegressionCriterion。 RegressionCriterion用于回归树(Regression Tree 回归树)中…

python中导入.pyx文件的问题解决

已经几次遇到这种问题了, 里面的region指的是一个.pyx文件。 ImportError: cannot import name region from toolkit.utils (D:\******\RPN\pysot-master\toolkit\utils\__init__.py) 解决方案: 创建一个setup.py文件,一般如果是搬运的话里面会有&…

将pyx文件编译成pyd文件(很多坑,已解决)

项目场景: Faster R-CNN项目,将pyx文件编译成pyd文件(很多坑,请注意) 项目环境 python 3.6 – conda的虚拟环境 TensorFlow 1.15.0 win 10 问题描述 使用网上的教程进行编译 有一个需要被编译的bbox.pyx文件,创建…

python文件中import pyx文件问题

1、首先,pyx文件需要安装Cython,这里先进入自己的虚拟环境,用conda安装Cython conda install Cython 2、需要用到pyx的地方是mattnet中的mask.py 文件,里面 import _mask.pyx 文件,需要先在mask的目录下建立setup文…

成功解决windows下将.pyx文件编译成.pyd文件

在linux上正常跑通的算法,搬到windows下使用就报错了 原来是其中涉及到.pyx文件的编译 在linux下.pyx会被编译成.so的文件,但是在windows下是无法使用.so文件的 需要重新编译成windows下的.pyd格式的才可以直接将python模块成功导入到算法中 所以需要解…

.pyx文件编译出错

文章目录 .pyx文件的编译导入 参考博客(写的超级好,完美解决了问题) 错误 ImportError: Building module dtw failed: ["distutils.errors.CompileError: command D:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2019\\\\Pr…

python导入pyx文件失败

报错如下: 出现无法导入的情况时,在import之前加上一下两条语句即可解决问题: import pyximport pyximport.install()

pyx 编译成 pyd

1、编写好py文件,然后将后缀改为pyx 2、编写好setup.py文件 3、在setup.py 文件同目录下打开命令行执行: python setup.py build_ext --inplace之后就会生成pyd文件 和C文件 示例: 需要编译成pyd的文件 fast_fib.pyx import functoolsdef …

如何在pycharm上编译使用pyx文件

前言 cython是专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的“编译器”先将 Cython代码转变成C,然后使用C编译器编译出最终的Python可调用的模块。 本人因在github中找到了一份用cython写的自定义库…

虚拟机的安装与ubuntu的创建,,Ubuntu快捷键

文章目录 vmware安装包与Ubuntu镜像文件:VMware的安装Ubuntu的创建Ubuntu快捷键 在学习与工作中,我们往往可能需要用到windows以外的操作系统,比如Linux系统就适合开发者的使用,往往用到虚拟机,这篇博客来讲讲VMware的…

Ubuntu操作-09 快捷键

文章目录 1 系统快捷键2 终端快捷键3 Gedit编辑器快捷键 Ubuntu快捷键介绍,已在Ubuntu21.10测试 1 系统快捷键 命令说明Ctrl Alt Fn1进入图形化用户登录界面Ctrl Alt Fn2进入当前图形化界面Ctrl Alt Fn3-Fn6进入命令行虚拟终端Ctrl Alt Fn7-Fn12进入另外的…

不可不知的ubuntu系统快捷键

软硬件环境 ubuntu 19.10 64bit Desktop 前言 ubuntu是当前最流行的linux发行版之一,使用ubuntu除了经常使用的Ctrlc (复制) 和Ctrlv (粘帖),其实还有一些不常用但却很有用的快捷键,熟练掌握常用快捷键绝对可以大大提升你的工作学习效率。文中…

ubuntu系统的快捷键,软件等配置

最近要完全使用ubuntu桌面系统了,很多在win 上的快捷键和软件都无法使用了,这里打算总结一下。 文章目录 1 常用快捷键2 常用配置调整左侧状态栏的顺序截图火狐禁止通知键盘快捷键设置DNS修改默认打开程序vs code 终端间距太大 3 常用软件安装meshlabana…

ubuntu的快捷键

1.一起按AltTab,在应用间顺向一览窗口,AltTabShift是逆向预览窗口。先打开终端,后打开文本编辑器,是下面这个样子。 一起按AltTab之后就会变成下面这样子 2.AltF2是打开命令窗口,可输入命令启动应用程序。一起按AltF2之后变成下面这样子,还可…

ubuntu系统快捷键

Ubuntu 16.04常用快捷键(转) 注意:在Linux下Win键就是Super键 启动器 Win(长按) 打开启动器,显示快捷键Win Tab 通过启动器切换应用程序Win 1到9 与点击启动器上的图标效果一样Win Shift 1到9 在应用中打开一个新窗口Win T 打…

Ubuntu快捷键、Ubuntu终端常用命令

Ubuntu快捷键、Ubuntu终端常用命令 作为一个window多年忠实粉,后来转去做自动驾驶不得已选用Ubuntu系统,系统需要劳烦同事帮忙装,装好后win10+ubuntu18.04双系统,开机登录ubuntu后一开始真的一脸蒙,啥都不…

14个你必须要知道的ubuntu快捷键

文章目录 1、 Super 键:打开活动搜索界面2、 CtrlAltT:打开 Ubuntu 终端窗口3、 SuperL 或 CtrlAltL:锁屏4、 SuperD or CtrlAltD:显示桌面5、 SuperA:显示应用程序菜单6、 SuperTab 或 AltTab:在运行中的应…

Ubuntu 16.04常用快捷键(转)

注意:在Linux下Win键就是Super键 启动器 Win(长按) 打开启动器,显示快捷键Win Tab 通过启动器切换应用程序Win 1到9 与点击启动器上的图标效果一样Win Shift 1到9 在应用中打开一个新窗口Win T 打开垃圾桶 面板 Win(轻触点击) 打开dash主页Win A 打…

Ubuntu常用快捷键

一、 打开Terminal的快捷键是CtrlAltT 二、 中止运行CtrlC 一般最常用的是cd, ls, mkdir, rmdir, cp, rm, mv, clear, pwd, shutdown. 一般使用时只需记住常用命令,不清楚的时候用man查询。如需查看更多命令可以阅读《The Linux Command Line》(《Linux命令行大全…