面向对象的编程语言(Object-oriented Programming Language)是专门为面向对象观念而发展出来的,通过它可以便捷地实现面向对象的封装、继承、多态等特性。
1.封装
封装是一种信息隐藏技术,即对象内部对用户是隐藏的,不可直接访问;用户只能见到对象封装界面上的信息,通过对象的外部接口访问对象。
封装的目的在于将对象的使用者和对象的设计者分开,使用者无须知道对象内部实现的细节,只需要知道对象接收的消息即可。
当用户向对象发送消息后,对象将根据收到的消息来调用内部方法以做出响应。
在C++语言中,对象的构成由类来描述,每个类的成员可以分为私有和公有两种类型,对象的外部不能直接访问对象的私有部分。
对象的封装特性可以提高模块之间的独立性,使得系统易于调试和维护。
假设应用系统中有两个模块:一个模块从计算机的串行通讯口接收数据,放入缓冲区;另一个为数据处理模块。
数据处理模块可以直接访问缓冲区,从缓冲区中读取数据。
此时这两个模块之间的关联程度密切,模块独立性很差。
如果接收数据的模块改变缓冲区的管理方法,则第二个模块必须做相应的改变。
如果数据处理模块对缓冲区操作有误,将影响数据接收模块,在程序调试时难以确定错误发生在哪一个模块中。
实际上,数据处理模块并不需要缓冲区的管理信息,它只需要知道缓冲区中有没有数据以及有什么样的数据。
上面的处理方法违反了软件工程中的信息隐藏原则,数据处理模块访问了它不需要的信息。
将数据接收模块封装为一个对象,缓冲区的管理信息作为其私有数据,即可避免上面的问题。
数据接收模块只要提供一个从缓冲区获得数据的接口即可。
数据处理模块只能访问该接口,而不能直接操作缓冲区。
此时两个模块之间的独立性提高,如需改变缓冲区的管理方法,只需修改数据接收模块,数据处理模块将不受任何影响,因为数据接收模块提供的外部接口没有改变。
2.继承
人们在对客观世界的事物进行描述时,经常采取分类的方法。
类是有层次的,即某个大类的事物可能分为若干小类,而这些小类可能又分为若干个更小的类。
面向对象思想采纳了事物分类的层次思想,在描述类的时候,某些类之间具有结构和行为的共性。
例如教师类与学生类,在结构方面均具有姓名、年龄、身高、体重等,在行为(或操作)方面均具有回答身高、回答体重等操作。
将这些共性抽取出来,形成一个单独的类--人,描述教师类和学生类中的共性。
类(人)的结构特征和行为特征可以被多个相关的类共享,例如教师类和学生类继承了人的结构和行为特征。
在C++语言中,通过类的派生机制来实现类的继承,可以从一个类中派生出一个新的类,这个类称为派生类的基类或父类,派生出的新类称为基类的派生类或子类。
派生类的对象具有基类对象的特征,同时又有其自身特有的特征。
一个教师类的对象与一个学生类的对象都具有人这个类所描述的特征,同时又具有教师类和学生类各自所特有的特征。
利用类之间的继承关系,可以简化类的描述。
在人这个类中描述教师类和学生类的共性,而在学生类和教师类中只需描述各自的个性。
利用继承机制可以提高软件代码的可重用性。
在设计一个新类时,不必从头设计和编写全部的代码,可以通过从已有的具有类似特性的类中派生出一个类,继承原有类中的部分特性,再加上所需要的新特性。
这一点与面向过程的设计语言中的过程或函数不同,在面向过程的设计语言中,要使用具有相似功能的过程或函数,必须修改源程序代码以使其适应新系统的功能需求,而类的派生机制无需原有类的源代码即可派生出新的类。
利用类及其继承性描述系统时,由于类之间的继承关系,可能会形成一种具有层次性的类结构。
在使用类的层次结构描述系统时,某些类之间的层次关系可以有多种实现方案。
例如中学生类,既可以直接从人这个类派生出来,也可以从人这个类的派生类--学生类派生出来。
在设计类的层次结构时,应注意建立的类层次结构是否易于理解以及组织类结构的费用等方面的问题。
设计出来的类层次结构是否合理,往往取决于系统分析员的经验等因素。
3.多态性
多态性是面向对象系统的又一重要特性。
所谓多态,即一个名词可具有多种语义。
在C++语言中,多态性主要表现在以下两个方面。
(1) 重载
在C++语言中,同一函数名以及运算符可以具有不同含义的多种实现版本,编译器将根据函数调用的参数形式决定调用哪一种实现版本。
(2) 虚函数
C++语言引入了虚函数机制,允许在不同类层次对象中应用函数成员的不同版本。
例如实现一个类Shape,然后从该类派生出画点的类Point、画圆的类Circle、画直线的类Line,每一种图形的画法均不同,但是它们都有几种共同的操作--显示图形、擦除图形、移动图形。
移动图形的操作都是首先擦除图形,然后改变图形的位置基准点,再在新位置显示出图形。
在类Shape中实现移动图形的操作,每种图形的显示、擦除、改变基准点等操作在派生类中分别实现。
若程序中使用某图形对象的移动操作,编译器采用动态联编的手段,在执行时根据该图形对象是哪一个类的实例,决定调用哪一个类的显示、擦除、改变基准点的方法。
这种多态性称为运行时的多态性。
而重载在编译时编译器即可确定使用哪一个实现版本,是静态的。
关于TTCLOUD服务商在今年初的时候有介绍过一次,而且对于他们家的美国圣何塞服务器有过简单的测评,这个服务商主要是提供独立服务器业务的。目前托管硬件已经达到5000台服务器或节点,主要经营圣何塞,洛杉矶以及日本东京三个地区的数据中心业务。这次看到商家有推出了新上架的日本独立服务器促销活动,价格 $70/月起,季付送10Mbps带宽。也可以跟进客户的需求进行各种DIY定制。内存CPU硬盘流量带宽价...
搬瓦工怎么样?2021年7月最新vps套餐推荐及搬瓦工优惠码整理,搬瓦工优惠码可以在购买的时候获取一些优惠,一般来说力度都在 6% 左右。本文整理一下 2021 年 7 月最新的搬瓦工优惠码,目前折扣力度最大是 6.58%,并且是循环折扣,续费有效,可以一直享受优惠价格续费的。搬瓦工优惠码基本上可能每年才会更新一次,大家可以收藏本文,会保持搬瓦工最新优惠码更新的。点击进入:搬瓦工最新官方网站搬瓦工...
UCloud优刻得商家这几年应该已经被我们不少的个人站长用户认知,且确实在当下阿里云、腾讯云服务商不断的只促销服务于新用户活动,给我们很多老用户折扣的空间不多。于是,我们可以通过拓展选择其他同类服务商享受新人的福利,这里其中之一就选择UCloud商家。UCloud服务商2020年创业板上市的,实际上很早就有认识到,那时候价格高的离谱,谁让他们只服务有钱的企业用户呢。这里希望融入到我们大众消费者,你...