面向对象的四大特征

   

面向对象的四大特征

面向对象的程序设计方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。

面向对象程序设计,是通过为数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法。对象是计算机内存中的一块区域,通过将内存分块,每个模块(即对象)在功能上相互之间保持相对独立。

这些内存模块中不但存储数据,而且也存储代码,这对保证对象是受保护的这一点很重要,只有对象中的代码才可以访问存储于这个对象中的数据,这清楚地限定了对象所具有的功能(即一个对象在一个软件中所能起到的作用),并使对象保护它自己不受未知的外部其它的事件的影响,从而使自己的数据和功能不会因此遭到破坏。

在面向对象的程序中,对象之间可以通过函数调用实现相互通信。一个对象可以调用另一个对象的函数,处于对象外部的代码就没有机会通过直接修改对象的内存区域。当对象的一个函数被调用时,对象执行其内部代码来响应这个调用,这使tb对象呈现出一定的行为。行为及其结果就是该对象的功能。对象被视为能做出动作的实体,动作在对象相互作用时被激发,换句话说,对象就像在宿主计算机上拥有数据和代码,并能相互通信的具有特定功能的一台较小的计算机。

 

抽象

面向对象鼓励程序员以抽象的观点看待程序,即程序是由一组抽象的对象组成的。另一方面,我们又可以将一组对象的共同特征进一步抽象出来,从面形成“类”的概念。

抽象是一种从一般的观点看待事物的方法,它要求程序员集中于事物的本质特征,而不是具体细节或具体实现。面向对象鼓励程序员以抽象的观点看待程序,也就是说程序是一组抽象的对象-类组成的(严格讲,C++程序不是纯面向对象的,因为程序中还有像main这样的全局函数)。程序从一组对象为起来,抽取公共的行为放入到一个类中,这是抽象分类的观点,不同类的对象具有不同的行为。

类的概念来源于人们认识自然、认识社会的过程。在这一过程中,人们主要使用两种方法:由特殊到一般的归纳法和由一般到特殊的演绎法。在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取出来,形成一个一般的概念,这就是“归类”;在演绎的过程中,我们又把同类的事物,根据不同的特征分成不同的小类,这又是“分类”。对于一个具体的类,它有许多具体的个体,我们就管这些个体叫做“对象”。

举个例子,“人”是一个类,具有“直立行走、会使用工具”等一些区别于其它事物的共同特征;而张三、李四、王五等一个个具体的人,就是“人”这个类的一个个“对象”。

 

封装

所谓数据封装,就是将一组数据和与这组数据相关的操作集合组装在一起,形成一个能动的实体,也就是对象。在这种情况下,用户是不可以直接操作数据的,他必须通过和数据相关的操作来访问数据。换句话说,数据封装就是给数据提供了与外界联系的标准接口,无论是谁,只有通过这些接口,使用规范的方式,才能访问这些数据。同时,由于客户端总是和接口打交道,他也就不必要了解数据的具体细节。

由此可见,封装要求一个对象应具备明确的功能,并具有接口以便和其它对象相互作用。同时,对象的内部实现(代码和数据)是受保护的,外界不能访问它们,只有局部于对象的代码才可以访问对象的内部数据。对象的内部数据结构的不可访问性称为数据隐藏。封装使得一个对象可以像一个部件一样用在各种程序中,而不用担心对象的功能受到影响。

早期的软件设计方法,把数据和程序混在一起,结构化很差,被细称为“一碗面条”的编程方法。在这一阶段程序的可读性与可维护性都很差,于是产生了“软件危机”,为了解除这种危机便提出了结构化程序设计。在结构化程序设计里,虽然程序被分为不同的模块,以便大大减少不同模块之间的相互作用,但数据仍然属于整个程序的。这就又存在着这样一个问题:一方面,程序员在设计每一个模块的时候,都要或多或少地作全局考虑,模块与模块之间的耦合度相对太高了,势必增加不同模块的程序员之间沟通所带来的工作量;另一方面,在某地方对数据的改动,有可能又对整个程序产生难以预料的影响。随着软件工程的进一步发展,软件越来越大,数据越来越多,这个问题也越来越突出。

数据封装的提出,就是为了解决这一问题。它一方面使得程序员在设计程序时可以专注于自己的对象,“各人自扫门前雪,莫管他人瓦上霜”,同时也切断了不同模块之间数据的非法使用,减少了出错的可能性。

 

继承

所谓继承是指一个对象可以获得另一个对象的特性的机制,它支持层次类这一概念。例如:红苹果属于苹果类,而苹果类又属于水果类。通过继承,低层的类只需定义特定于它的特征,而共享高层类中的特征。

 

多态

不同的对象可以调用相同名称的函数,并可导致完全不同的行为的现象称为多态性。

如果子类中的成员函数对父类中的成员进行了覆盖,当一个指向中子类的父类指针或引用了子类的父类引用,当使用它调用虚函数,然后根据实际的调用对象调用子类中的覆盖函数,而不是父类中了虚函数,这种语法现象叫多态。

利用多态性,程序中只需进行一般形式的函数调用,函数的实现细节留给接受函数调用的对象。这大大提高了我们解决复杂问题的能力。例如绘制三角形与绘制正方形所调用的绘制函数其效果肯定是不同的,但我们可以设计一个公共的Draw()函数代表绘制,而不同对象的绘制图形的具体细节则分别由具体对象负责实现。

 

转载于:https://www.cnblogs.com/1996-1-0-3-0/p/9469521.html

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

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

相关文章

centos7 安装cacti

1 cacti运行环境准备   cacti需要phpapachemysqlsnmpRRDTool,以及cacti本身。cacti本体是用php开发的网站,通过snmp对远端设备信息进行采集。apachemysqlphp在以前已经做过了      这里只对剩余的部分进行安装。 2 安装snmp    yum install -y n…

linux下zabbix安装

1本人用的是apachemysqlphp 2下载zabbix软件包,官网下载 https://sourceforge.net/projects/zabbix/files/ZABBIX Latest Stable/2.2.23/zabbix-2.2.23.tar.gz/download 上传到 var/www/html下 3cd /var/www/html #进入软件包下载目录 tar zxvf zabbix-2.2.23.tar.g…

定时器取数据时实时进来的数据_Redis-数据淘汰策略amp;持久化方式(RDB/AOF)amp;Redis与Memcached区别...

Redis与Memcached区别: 两者都是非关系型数据库。主要有以下不同: 数据类型: Memcached仅支持字符串类型。 redis支持:String,List,set,zset,hash 可以灵活的解决问题。 数据持久化: Memcached不支持持久化。 Redis采…

linux 下建立多个tomcat

第一步:复制,解压 将准备好的tomcat压缩包复制到你准备安装的目录,我的tomcat压缩包名字是tomcat.tar.gz,我的安 装目录是 /usr/java/tomcat 第二步:解压tomcat [rootaliServer tomcat]# tar -xvf tomcat.tar.gz 第三步&#xff…

linux iptables配置

1 iptables默认系统自带 setup 2重启防火墙 /etc/init.d/iptables restart 3接受端口 Vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 4 #配置,禁止进,允许出,允许回环网卡 iptables -P I…

memcpy函数_[PART][BUG][MSVCRT][C][CCF NOI1097] 关于memcpy的坑

[Incompleted]CCF NOI1097 试题,本人的源码:Ubuntu Pastebin​paste.ubuntu.comUbuntu PastebinUbuntu Pastebin: SourceCodebyJulianDroid​paste.ubuntu.com满分代码:https://blog.csdn.net/tigerisland45/article/details/71038551​blog.…

Bugku杂项-convert

一进去就发现一堆二进制数,然后考虑怎么才能把这个和隐写扯上关系。首先,二进制我们肉眼就是看不懂再说什么的,这里就想到了转换,再联想上hex将原始数据转化为16进制。我们可以先把2进制转化为16进制,然后再放到hex上看…

图解cacti简单使用

1登录 admin admin 2点击devices localhost 3进入配置保存 4保存 http服务要启动哦 5一步步做 6graph tree 7执行/usr/bin/php /var/www/html/cacti/poller.php 8如果时间设置错误去php.ini里面修改时间 YSTEM STATS: Time:0.4759 Method:cmd.php Processes:1 Threads:N/…

AFNetworking 3.0源码阅读 - AFURLResponseSerialization

这次来说一下AFURLResponseSerialization这个HTTP响应类。 定义了一个协议,该协议返回序列化后的结果。后续的AFHTTPResponseSerializer以及他的子类都遵循了该协议 该类内有很多子类定义,这里借用一张图来展示,之后一个一个来说。 我们先来看…

linux 下tomcat服务每天定时启动

1l先准备一个脚本 #!/bin/sh #./etc/profile export JAVA_HOME/usr/java/jdk1.6.0_45 sh /home/tomcat-bingchuang/bin/shutdown.sh sleep 60s sh /home/tomcat-bingchuang/bin/startup.sh 2放置到如上/home/ tomcat-bingchuang/bin/目录下 赋予777权限 并在linux里面设置…

Swordsman

ps&#xff1a;比赛的时候想到了做法&#xff0c;k次排序&#xff0c;然后每次消去能消的。。。然而这种做法是错误的&#xff0c;神奇的是测试案例中排在奇数的案例会WA&#xff0c;排在偶数的案例都过了&#xff0c;被注释的代码会T. #include<bits/stdc.h> #define UL…

java socket编程聊天室_Java Socket通信之聊天室功能

Java Socket通信之聊天室功能发布时间&#xff1a;2020-10-17 14:36:00来源&#xff1a;脚本之家阅读&#xff1a;73作者&#xff1a;LY_624本文实例为大家分享了Java Socket聊天室功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下Client.javaimport java.io.*;i…

linux mysql数据库定时备份

1在linux上面创建一个文件夹&#xff0c;并且进行备份 cd /home mkdir backup cd backup 2创建一个脚本 Vi imaginebase.sh #!/bin/bash mysqldump -uroot -ppassword01! imaginebase > /home/backup/imaginebase_KaTeX parse error: Expected group after _ at position 1…

[NOI2014] 起床困难综合症

水题的题解也水...... 原题链接&#xff1a;洛谷 P2114 [NOI2014]起床困难综合症 位运算每一位之间互不干扰。 经过所有门之后每一位不外乎四种结果&#xff1a;一定是0&#xff0c;一定是1&#xff0c;不变或取反。 按位枚举&#xff0c;贪心即可。 对于不变的&#xff0c;我们…

统计一行文本的单词个数_word操作技巧:不同情况的文字统计方法

最近有朋友询问&#xff0c;如何快速统计出Word文档的字数&#xff1f;这个问题其实非常简单&#xff0c;但往往是这种最简单的知识容易被大家忽视&#xff0c;因此造成困扰。所以&#xff0c;今天我们将为大家详细介绍几种Word统计文档字数的方法&#xff0c;希望能帮助到你&a…

linux mysql5.6.27源码安装和错误解决

centos mysql5.6.27 1编译安装 先进入到文件放置的路径下 创建一个个文件 #mkdir–p /data/mysql/mysql #mkdir–p /data/mysql/mysqldat 2创建用户和用户组 groupadd mysql useradd -r -g mysql mysql 3赋予数据存放目录权限 chown mysql:mysql -R /data/mysql/mysqldata/ 4解…

mysql集群和主从区别_搭建MySQL主从集群,主从复制过程中同步延迟问题

上一节我们成功搭建了主从复制、读写分离&#xff0c;实际上并发量和数据量不大的情况下&#xff0c;使用起来也是非常的流畅&#xff0c;无任何问题&#xff0c;可以正常运行了。但是&#xff0c;要保证高可用&#xff0c;高并发的情况&#xff0c;可以写数据库master就有累了…

java I O类大全_Java I/O最简单的几个类

今天把I/O中最简单的几个类整理了一下&#xff0c;之所以整理最简单的&#xff0c;是因为这样会让我更加快速方便的理顺这里面的东西&#xff0c;以前每一次用的时候都要先百度一下&#xff0c;觉得很烦。首先需要先看一下Read,Write和Stream&#xff0c;那么看下面的图就明确多…

linux mysql数据库备份并删除前一分钟的数据

linux 中mysql数据库定时备份并删除前一分钟的所有数据 #!/bin/bash #mysqldump -uroot -ppassword01! imaginebase > /home/backup/imaginebase_KaTeX parse error: Expected EOF, got # at position 27: …%d_%H%M%S).sql #̲mysqldump -uroo…(date %Y%m%d_%H%M%S).sql.g…

打开 igv java_必备可视化Integrative Genomic Viewer(IGV)

你会用到的网站&#xff1a;写在前面&#xff1a;之前mac不小心升级了一下java&#xff0c;然后igv就不能用了&#xff0c;要写教程必须降级java首先&#xff0c;看官方说明&#xff0c;需要安装Java -8&#xff0c;9以上版本不支持。我的mac不知道什么时候更新到了java 10&…