面向对象简介,C赢在起跑线上

背景

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

早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2=4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的集合。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

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

面向对象的分析根据抽象关键的问题域来分解系统。面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法把系统构造成“现实世界”的对象。面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。

一、面向对象的相关概念?

1.类

  类作为设计蓝图来创建对象的代码段,它描述了对象的特征;该对象具有什么样的属性,怎样使用对象完成一些任务,他对事件进行怎样的响应等!

  具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。

  类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。

  类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

2.对象

  对象是类的一个实例,通常通过调用类的一个构造函数来创建它!

  对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

  对象具有状态,一个对象用数据值来描述它的状态。

  对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。

  对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。

3.消息

  对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。[2]

4.方法

  类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、方法体。

  方法是在类中定义的函数,一般而言,一个方法描述了对象可以执行的一个操作!

5.属性

  属性是类中定义的变量,类的属性突出刻画了对象的性质或状态。某些情况下,对象的使用者可能不允许改变对象的某些属性,这是因为类的创建者已经规定了那些属性不能被使用者更改。这就比如你只能知道我是男生,但你没有办法改变!

6.事件

  事件驱动!事件是由某个外部行为所引发的对象方法。他可与用户行为(例如单击某个Button)或系统行为相关联。

7.构造函数

  构造函数是创建对象所调用的特殊方法,在大多数语言中,对象的创建是通过在给定的类中创建名为new的过程而实现的!

8.析构函数

  析构函数是释放对象时所调用的特殊方法,有时应调用析构函数确保计算机的性能!

///summary

包含构造函数和析构函数的C++程序。

////summary

9.继承

  继承是面向对象的一个概念,它规定一个类可以从其他的小类(基类)中派生,并且该派生类继承其基类的接口和相应代码!(该类称为派生类或子类)

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

  继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。

  在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。

  在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。

  多重继承,JAVA、VB、NET、Objective-C均仅支持单继承,注意在C++多重继承时,需小心二义性。

  在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重用性。

  采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。

10.重写

  重写是面向对象的一个概念,它规定一个派生类可以创建其基类某个方法的不同实现代码。实际上,它完全重写了基类中该方法所执行的操作!

11.接口

  接口是一种约定,它定义了方法、属性、时间和索引器的结构。我们不能直接从一个接口创建对象,而必须首先通过创建一个类来实现接口所定义的特征!

12.封装

  封装是一个概念,它的含义是把方法、属性、事件集中到一个统一的类中,并对使用者屏蔽其中的细节问题一个关于的封装的实例是小汽车——我们通过操作方向盘、刹车和加速来操作汽车。好的封装不需要我们考虑燃料的喷出、流动问题等。

13.重载

  他规定一个方法可以具有不同的实现,但方法的名称是相同的。

14.多态

  它规定,一个同样的函数对于不同的对象可以具有不同的实现。例如一个Add方法,它既可以执行整数的加法求和操作,也可以执行字符串的连接操作!

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

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

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

二、什么是实体?

  实体:具有相同属性描述的对象(人、地点、事物)的集合。

三、什么是UML?

  是一种面向对象的建模语言,它是运用统一的、标准化的标记和定义实现对软件系统进行面向对象的描述和建模。

四、类分为哪些类型?

  分为边界类、实体类和控制类。

  边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。这种交互包括转换事件,并记录系统表示方式(例如接口)中的变更。

  实体类:主要是作为数据管理和业务逻辑处理层面上存在的类别;它们主要在分析阶段区分实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。

  控制类用于对一个或几个用例所特有的控制行为进行建模。控制对象(控制类的实例)通常控制其他对象,因此它们的行为具有协调性质。控制类将用例的特有行为进行封装。

五、类的层次结构?

(1)聚集关系。

  聚集是一种“整体-部分”关系。在这种关系中,有整体类和部分类之分。聚集最重要的性质是传递性,也具有逆对称性。

  聚集可以有不同层次,可以把不同分类聚集起来得到一颗简单的聚集树,聚集树是一种简单表示,比画很多线来将部分类联系起来简单得多,对象模型应该容易地反映各级层次。

(2)一般化关系。

  一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方式。它是“一般---具体”的关系。一般化类称为父类,具体类又能称为子类,各子类继承了父类的性质,而各子类的一些共同性质和操作又归纳到父类中。因此,一般化关系和继承是同时存在的。一般化关系的符号表示是在类关联的连线上加一个小三角形。

六、什么是属性和行为?

属性可用来描述同一类事物的特征,行为可描述一类事物可做的操作

七、面向对象三大特征是什么?

  封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。对象是封装的最基本单位。

  继承:指一个对象直接使用另一对象的属性和方法。

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

八、什么是装箱拆箱?装箱拆箱为什么要进行大量运算?

  装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型;

  将值类型转换为引用类型,需要进行装箱操作(boxing):

1)首先从托管堆中为新生成的引用对象分配内存。

2)然后将值类型的数据拷贝到刚刚分配的内存中。

3)返回托管堆中新分配对象的地址。

  可以看出,进行一次装箱要进行分配内存和拷贝数据这两项比较影响性能的操作。

  将引用内型转换为值内型,需要进行拆箱操作(unboxing):

1)首先获取托管堆中属于值类型那部分字段的地址,这一步是严格意义上的拆箱。

2)将引用对象中的值拷贝到位于线程堆栈上的值类型实例中。

  经过这2步,可以认为是同boxing是互反操作。严格意义上的拆箱,并不影响性能,但伴随这之后的拷贝数据的操作就会同boxing操作中一样影响性能。

九、为什么用泛型,都哪些是泛型,哪些是非泛型?

  泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。

例如在C#中,所有被声明为以下类型的事物被称为值类型:

bool

byte

char

decimal

double

enum

float

int

long

sbyte

short

struct

uint

ulong

ushort

2.引用类型:

所有的被声明为以下类型的事物被称为引用类型:

class

interface

delegate

object

string

[参考资料]

①百度百科——面向对象

②百度百科——析构函数









































北京治疗白癜风哪里比较好
哪家医院治疗白癜风好



转载请注明:http://www.nydjfy.com/pxxx/1538.html

  • 上一篇文章:
  •   
  • 下一篇文章: