【创作赢红包】面向对象基础概念

news2025/1/22 19:33:57

什么是面向对象

面向对象(Object Oriented)是软件开发方法,一种编程范式,它是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

早期的计算机编程是基于面向过程的方法,如实现算术运算,只需要通过设计一个算法就可以解决问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,可以帮助人们实现对现实世界的抽象与数字建模。

通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率

面向对象的思想已经涉及到软件开发的各个方面,如:面向对象的分析(OOA,Object Oriented Analysis)、面向对象的设计(OOD,Object Oriented Design),以及我们经常说到的面向对象的编程实现(OOP,Object Oriented Programming)。

面向对象与面向过程

上面提到“早期的计算机编程是基于面向过程的方法”,而面向对象也是相对于面向过程来讲的,它的底层还是面向过程,下面我们就来看看两者的区别吧。

一、出发点不同

面向对象方法是用符合常规思维的方式来处理客观世界的问题,强调把问题领域的要领直接映射到对象及对象之间的接口上。而面向过程方法强调的则是过程的抽象化于模块化,它是以过程为中心构造或处理客观世界的问题。

二、层次逻辑关系不同

面向对象方法则是用计算机逻辑来模拟客观世界中的物理存在,以对象的集合类作为处理问题的基本单元,尽可能地使计算机世界向客观世界靠拢,以使问题的处理更清晰直接,面向对象的方法是用类的层次结构来体现类之间的继承和发展。而面向过程方法处理问题的基本单位是能清晰准确地表达过程的模块,用模块的层次结构概括模块或模块间的关系与功能,把客观世界的问题抽象成计算机可以处理的过程。

三、数据处理方式与控制方式不同

面向对象方法将数据与对应代码封装成一个整体,原则上其他对象不能直接修改其数据,即对象的修改只能由自身的成员函数完成,控制程序方式上是通过“事件驱动”来激活和运行程序。面向过程方法是直接通过程序来处理数据,处理完毕后即可显示处理结果,在控制程序方式上是按照设计调用或返回程序,不能自由导航,各模块之间存在着控制与被控制、调用与被调用的关系。

四、分析设计与编码转换方式不同

面向对象方法贯穿于软件生命周期的分析、设计及编码中,是一种平滑过程,从分析到设计再到编码是采用一致性的模型表示,即实现的是一种无缝连接。面向过程方法强调分析、设计及编码之间按规则进行转换,贯穿于软件生命周期的分析、设计及编码中,实现的是一种有缝的连接。

基本思想

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

 

传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类。

面对对象程序设计是尽可能地在模拟人类的思维。通过这样的方式能够让开发的软件更加符合人类的认知,人们使用起来也能够更加顺手。并且通过应用软件能够切实地解决现实生活中的问题。面向对象程序设计使得描述问题的问题空间和问题的解决方法空间组合在一起,并且尽可能地保持一致。能够将客观世界中的抽象问题转化为具体的问题对象。

面向对象的思维更符合人认识和思考问题的方式,面向对象的概念和应用已经超越了软件开发和程序设计,扩展到多个的领域,其中一个应用的分支就是面向对象的知识表示法。这种表示法把组成客观世界的实体抽象为数据和对数据的操作,并使用类把数据和对数据的操作封装成为一个不可分割、互相依存的整体。面向对象表示的知识更接近客观世界,表示方案更加自然,易于理解。面向对象技术良好的模块性,面向对象的系统良好的可维护性可扩充性可重用性等特点,正符合人们组织和管理知识库的需求。

面向对象的优点

面向对象的开发方法把系统软件看成是各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点:

  • 把软件系统看成是各种对象的集合,这更接近人类认识世界的自然思维方式
  • 软件需求的变动往往是功能的变动,而功能的执行者 —— 对象一般不会有大的变化。这使得按照对象设计出来的系统结构比较稳定
  • 对象包括属性(数据)行为(方法),对象把数据及方法的具体实现方式一起封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性,从而提高了软件的可维护性
  • 支持封装、抽象、继承和多态各种特性,提高了软件的可重用性、可维护性和可扩展性

广义地讲,面向对象编程是结构化编程的一种改进实现方式。传统的面向过程的结构化编程的最小子系统是功能模块,而面向对象的最小子系统是对象。方式。传统的面向过程的结构化编程的最小子系统是功能模块,而面向对象的最小子系统是对象。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端工程化:环境准备—NodeJs安装-Vue项目开发流程

一、前端工程化-Yapi 介绍:YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务 地址: http://yapi.smart-xwork.cn/ 具体操作步骤: 1、添加项目 2、添加接口:根据ID查…

技术分享 | observer 资源水位介绍

作者:郭斌斌 爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 OceanBase 集群界面会展示 Observer …

MATLAB绘制柱状/饼图填充图

MATLAB绘制柱状填充图方法1:hatchfill2工具1.1 案例1:柱状图填充1.2 案例2:饼图填充方法2:applyhatch函数2.1 案例1:柱状图填充2.2 案例2:饼图填充方法3: applyhatch_plusC函数3.1 案例1&#x…

Python 小型项目大全 31~35

三十一、猜数字 原文:http://inventwithpython.com/bigbookpython/project31.html 猜数字是初学者练习基本编程技术的经典游戏。在这个游戏中,电脑会想到一个介于 1 到 100 之间的随机数。玩家有 10 次机会猜出数字。每次猜中后,电脑会告诉玩…

Java实现ArrayList和底层源码讲解

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

Centos7安装MySQL5.7.30

文章目录1. 环境准备1.1 卸载mariadb1.2 下载MySQL 5.7.301.3 安装MySQL依赖项1.4 创建目录1.5 创建用户和用户组1.6 修改Mysql用户权限2. 安装MySQL2.1 解压2.2 修改解压目录名称2.3 初始化2.4 添加my.cnf异常找不到Sock文件2.5 启动MySQL服务2.5.1 建立软连接2.5.2 启动2.6 设…

TCP协议工作机制二(滑动窗口,流量控制,拥塞控制,延时应答,捎带应答等)

目录 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 面向字节流 异常情况 UDP和TCP对比 滑动窗口 由于TCP是可靠传输,有确认应答,超时重传,连接管理等机制,发送消息时需要等待接收方返回的ack.因此会消耗大量等待ack的时间,我们引入滑动窗口的机制来竭尽可能提高TCP的…

基于支持向量机的Digits手写数字识别

基于支持向量机的Digits手写数字识别 描述 支持向量机(Support Vector Machine,简称SVM)模型既可以用于分类也可以用于回归。手写数字识别是一个多分类问题(判断一张手写数字图片是0~9中的哪一个),数据集…

图片英文翻译成中文转换器-中文翻译英文软件

您正在准备一份重要的英文资料或文件,但是您还不是很熟练地掌握英文,需要翻译才能完成您的任务吗?哪个软件能够免费把英文文档翻译成中文?让我们带您了解如何使用我们的翻译软件来免费翻译英文文档为中文。 我们的翻译软件是一款功…

C风格的字符串赋值方式

文章目录(1)C语言中,没有字符串类型但可以用字符数组模拟字符串。(2)C语言中,字符串是以’\0’作结尾字符。(3)C语言中,字符串常量本质上是一个无名的字符数组。C风格的字…

使用Spring JDBC中的JdbcTemplate对数据进行增删改查操作教程~

jdbcTemplate实现添加数据功能: spring框架对jdbc框架进行封装,使用jdbcTemplate方便实现对数据库的操作 数据库准备工作: 在已有数据库中创建新的表: create table t_user (id int,username varchar(20),password varchar(20…

搜索词分析工具-网站关键词挖掘

怎么能找到行业的关键词 以下是如何找到行业关键词的建议: 了解行业:要找到与行业相关的关键词,首先需要了解行业。了解行业以及核心目标,从而更好地理解行业中的主题和词汇。 找到竞争对手网站:搜索竞争对手的网站&…

k8s部署Dashboard

k8s和Dashboard的版本对应关系可以到Dashbord的对应版本里看,比如这里: https://github.com/kubernetes/dashboard/releases/tag/v2.7.0 以下步骤都是在master上执行的。 1. 部署步骤 1. 获取Dashbord的yaml文件 wget https://raw.githubusercontent…

【Git】—— 如何安装Git及简单使用

Git是一个开源的分布式版本控制工具,可以更好地管理你的项目。 一、Linux操作系统 如果用的是Ubuntu系统,只需打开shell界面,输入: sudo apt-get install git-core 按下回车即可完成安装。 二、Windows操作系统 Windows操作系统不…

C语言-数据结构与算法-详细全面的链表知识总结归纳

C语言链式存储结构的详细讲解一.前言(为什么要使用链式存储)一.单链表1.单链表的结点描述2.单链表基本操作(1)初始化单链表(2)采用头插法建立单链表(带头结点)(3).采用尾插法建立单链表(4)按照位序查找结点(4)在链表中间插入结点(5)删除第i个结点二.双链表1.双链表的结点类型描…

和ChatGPT-4聊完后,我觉得一切可能已经来不及了

了然无味,晴空万里!和ChatGPT-4开始了一场坦诚的沟通,它全程都表现出高情商,以及不断尽量安抚我的情绪,而这,恰恰令我脊背发凉。 部分文字截取 ZM:我能不能理解每次对话就是一次你的“生命” G&…

【Android -- 软技能】分享一个学习方法

前言 很多人都想通过学习来提升自己,但是,可能因为两个问题,阻碍了自己的高效提升: 学什么? 怎么学? 本文将从自己的学习实践出发,针对这两个问题,给出自己的一套学习流程。 1…

免费集装箱号识别API免费集装箱信息识别,中国人工智能企业CIMCAI集装箱识别云服务全球4千企业用户,中国人工智能企业智慧港航

免费集装箱号识别API免费集装箱信息识别API,CIMCAI飞瞳引擎™集装箱人工智能平台全球4千企业用户,全球领先的飞瞳引擎™AI集装箱识别云服务,集装箱残损识别箱况检测缺陷检验,小程序拍照检测或支持API接口二次开发,应用…

00后整顿职场,我直呼太卷了....

内卷的来源 内卷最早的“出处”是几张名校学霸的图片。 大学生们刷爆朋友圈的几张“内卷”图片是这样的:有的人骑在自行车上看书,有的人宿舍床上铺满了一摞摞的书,有的人甚至边骑车边端着电脑写论文。这些图片最早在清华北大的学霸之间流传。…

AI工具究竟是帮手还是对手?对此你怎么看,一起来聊聊你的看法吧!

© Ptw-cwl 前言 AI工具既可以是帮手,也可以是对手,这取决于我们如何使用它们。 如果我们正确地利用AI工具,它们可以为我们带来很多好处,例如更快的数据分析、更准确的预测和更高效的决策。然而,如果我们滥用AI工…