鱼C论坛

 找回密码
 立即注册
查看: 2770|回复: 2

[技术交流] 类、对象、封装、接口、多态性简单理解(摘)

[复制链接]
发表于 2016-3-10 10:03:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
类、对象、封装、接口、多态性简单理解


希望对于初学者有帮助

什么是类(Class)

       面向对象的思想来源于对现实世界的认知。现实世界种类繁多,难于认识和理解。但是聪明的人们学会了把这些纷繁复杂的事物进行分类,从而使世界变得井井有条。比如我们由各式各样的具体的汽车抽象出“汽车”的概念,由形形色色的具体的猫抽象出“猫”的概念,由五彩斑斓的具体的鲜花抽象出“花类”的概念等。汽车、猫、花都代表着一类事物。每一类事物都有特定的状态,比如汽车的品牌、时速、马力、耗油量、座椅数;小猫的年龄、体重、毛色;鲜花的颜色、花瓣形状、花瓣数目,都是在描述事物的状态。每类事物也都有一定的行为,比如汽车启动、行驶、加速、减速、刹车、停车;猫捉老鼠;鲜花盛开。这些不同的状态和行为将各类事物区分开来。   
       面向对象编程也采用了类的概念,把事物编写成一个个“类”。在类中,用数据表示事物的状态,用函数实现事物的行为,这样就使编程方式和人的思维方式保持一致,极大的降低了思维难度。
   
什么是封装(Encapsulation)
  
        制造汽车的过程中什么人最牛?当然不是焊钢板的,也不是装轮胎的,更不是拧螺丝的,而是设计汽车的工程师,因为他知道汽车的运行原理。但是我们开车时,需要知道汽车的运行原理吗?答案显然不需要。汽车的运行原理已经被伟大的工程师封装在汽车内部,提供给司机的只是一个简单的使用接口,司机操纵方向盘、刹车及各种按钮就可以灵活自如的开动汽车了。与制造汽车相似,面向对象技术把事物的状态和行为的实现细节封装在类中,形成一个可以重复使用的“部件”。类一旦被设计好,就可以像工业部件一样,被成千上万的对其内部原理毫不知情的程序员使用。类的设计者相当于汽车工程师,类的使用者相当于司机。这样程序员就可以充份利用他人已经编写好的“部件”,而将主要精力集中在自己的专属领域。对象是封装了数据和操作的程序块。所谓封装是为这个程序块建立显示的界面。其它对象只能向这个界面发消息,不能访问内部的私有数据和操作。比如我们要求某人“坐下”(发消息),某人接受消息后调整自己的肌肉、神经使自己坐下(操作),从而改变了他的状态(描述姿态的数据变了)。外界不必过问动用了哪几条神经,收缩了哪几块肌肉。
   
什么是接口(Interface)

        司机操纵方向盘、刹车及各种按钮就可以灵活自如的使用汽车,同样,人们通过类的接口使用类。程序员在编写类时精心地为它设计接口,而设计良好的接口不但方便其他程序员使用,还有利于类的升级改造。假设你是一个环保人士,最近你用节能的荧光灯代替了普通的白炽灯。白炽灯通过加热电阻丝照亮整个屋子;荧光灯则是激活空气中的某些分子的电子能而发光。虽然它们的原理不同,但是它们的功能却是一样的—照明。因为两种灯具有相同的接口,所以你只需拧下白炽灯,然后再拧上荧光灯即可,轻易的实现“零件”的更新换代。同样,在面向对象编程中,只要保持接口不变,你可以任意更改类的实现细节,用一个设计更好的类替换原来的类,实现类的升级换代。现在软件维护和修改的成本已经占到了整个软件开发的80%,类的这一编成思想极大的方便了程序的维护和修改,降低了软件成本。   

对象(Object)和类(Class)的区别

        作为初学者,比较容易混淆类和对象的概念。类是一个抽象的概念,对象则是类的具体实例。比如人是一个类,司马迁、李白、杜甫都是对象;首都是一个类,则北京、伦敦、华盛顿、莫斯科都是对象;动画猫是一个类,则Kitty、Grafield和Doraemon都是对象。  我们可以说Kitty猫的体重是1.5kg,而不能说猫类的体重是1.5kg;可以说刘翔在跨栏比赛中夺冠,而不说人类在跨栏比赛中夺冠。状态是描述具体对象而非描述类的,行为是由具体对象发出的而非类发出的。   

什么是继承(Extends)

        封装使程序局部化,易修改、好维护,但许多对象有相同的功能时免不了重复,所以面向对象技术有继承的机制。作为新类的基础的类称为‘基类’。从基类派生出的类称为‘派生类’。派生类继承基类中定义的所有字段、属性、方法和事件。  
        例如,我们描述了“人”这一对象。人有姓名、年龄、职业、住址等数据和吃饭、乘车、上班等操作。我们再设计一个新对象“中国人”时,它将继承“人”的所有数据和操作,再加上“说汉话”、“写汉字”、“身份证号”等“中国人”特有的数据和操作。这样,设计新对象时只要在原有对象基础上作较少的派生,如果运行无误,便将新对象入库,下次又可继续派生,如从中国人派生出“中国男人”、“中国女人”等。于是,库中各类对象按继承关系可形成一棵倒置的树,分枝不断增加,到一定时候一个新程序要用到的对象类库中全有,只要“摘取”出来就可以直接使用,几乎不用编程。

什么是多态性(Polymorphism)

       由于对象自己操作自己的数据。同一消息不同的对象均以自己的方式响应,使得一种消息可有多种响应方式,这叫多态性。例如,“吃饭”这个消息,“中国人”和“俄国人”响应不同(一用筷子,一用刀叉)
        封装、继承、多态是面向对象程序的主要特征。正是这些特征使程序安全、可靠、可重用、易维护。把这些思想用于硬件、数据库、人工智能技术、分布式计算、网络、操作系统都显示出其优越性。因而,成为当今新兴的计算机技术。特别是多媒体数据只有与相应的操作相联系才能显现出图、声、像,采用封装数据和操作的办法,有力地促进了多媒体应用技术的发展。

评分

参与人数 2荣誉 +5 鱼币 +8 收起 理由
Ninaduu + 2 + 3
~风介~ + 3 + 5 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-23 17:25:24 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-4 08:57:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-6 13:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表