面向对象程序设计的四个主要特征(面向对象程序设计四个主要特点)
今天给各位分享面向对象程序设计的四个主要特征的知识,其中也会对面向对象程序设计四个主要特点进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、面向对象程序设计的基本特征?
- 2、面向对象的四个特征 程序
- 3、面向对象程序设计的基本特征有哪些
- 4、面向对象 基本特征
- 5、面向对象的四个基本特征
- 6、1.面向对象程序设计的四大特征分别为【 】、【 】、【 】、【 】。
面向对象程序设计的基本特征?
面向对象三大特性:封装,继承,多态
面向对象(Object Oriented,缩写为OO)是现代软件技术的精髓。从早期的SmallTalk到如日中天的Java,都渗透着面向对象思想。
OO具有三大特性:封装性、继承性和多态性。想掌握面向对象思想,就必须深入理解
其三大特性。这里我尽量少谈概念,只用一个生活中的例子和一段代码来解释它们。
1、封装性(Encapsulation)
所谓封装,就是将某些东西包装和隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。OO将万物都视为“对象”(Object),任何对象都具有特性和行为。我们将其特性称为“成员变量” (MemberVarible),将其行为称之为“成员函数"(Member Function),被封装的特性只能通过特定的行为去访问。
大家都见过旅馆里常用的一种茶叶吧,就是用纸袋把茶叶包装起来再系是一根线。用的时候只需要将其放在水杯里泡就行。这样的好处是不会将茶叶渣和茶垢弄的满杯子都是。
好!这就是一个封装的例子。
我们喝茶的目的是享受茶叶的香冽;所以茶叶的味道(Flavour)就是茶叶所具有的最
重要特性之一;可是我们无法直接享受它的清香,因为被外面的纸袋“封装”起来了。唯一的办法就是“泡”(Dilute),将茶袋扔在开水中泡,它的味道就出来了,融入水中。
如果我们把袋装茶叶看作一个对象的话,它提供了成员变量Flavour和成员函数Dilute
。并且Flavour是私有(Private)的,我们不能直接把它吞进肚子去,而只能通过成员函
数Dilute才能享受Flavour。
下面用C++代码来描述这个例子:
Class CTea
{
Private:
Cstring m_Flavour; //味道
Cstring m_Color; //颜色
...... //等等其它属性
Private:
Void CTea(); //构造函数
Void ~CTea(); //析构函数
Public:
Cstring Dilute();//沏茶
...... //等等其它方法
}
Cstring CTea::Dilute()
{
//怎样泡出味道来的代码
}
这就是封装。通过将对象的某些属性声明为Private隐藏起来,只能使用其提供的特定
方法去访问。
2、继承(Inheritance)
如果只是封装,那么非面向对象语言也能部分的做到。比如在C中,用结构(Struct)、
VB中用自定义类型(Type)也能封装一些变量。
OO最有吸引力的特性是继承。通俗的说后代具有祖先的某些特点就叫继承,当然后代还可以具有自己独有的特征。举个例子吧,菜刀。
菜刀(cutlery)是钢(Steel)做的,钢是一种金属(Metal),金属则是大千世界里的一种物质(Substance)。所以菜刀的一些特性可以追溯到物质具有的一般属性。正是因为这个道理,MFC中所有类均从CObject继承而来。
这就是继承。菜刀直接继承了钢的特性,钢又继承了金属的特性,......下面的代码描
述了这种复杂而有独特的继承关系:
Class CSubstance
{
Private:
int m_color;
void CSubstance();
void ~CSubstance();
//......(我是学文科的,具体属性说不上来)
}
Class CMetal:Public CSubstance
{
void CMetal();
void ~CMetal();
//......
}
Class CSteel:Public CMetal
{
void CSteel();
void ~CSteel();
//......
}
Class CCutlery:Public CSteel
{
private:
Cstring m_Blade;
void CCutlery();
void ~CCutlery();
//......
Public:
void Cut();
}
这里,CSubstance被称为基类(Base class),其它被称为衍生类(Derived class)。衍生类与基类是“Is kind of”的关系。子类与其祖先类之间复杂的函数调用关系不在本文讨论之列。
继承是一种树状的层次关系。子类在继承祖先类的成员变量和成员函数的同时也可以
定义自己的成员变量和成员函数。比如,Metal 除了继承了Substance的一般特性外,还具有自己的属性诸如可延展性;CCutlery在继承CSteel的特性后还具有自己的成员诸如“刀刃”(Blade)、“锋利”(Sharpness)、行为有如“切”(Cut)等。
面向对象技术是对现实生活的抽象,你可以用生活中的经验去思考程序设计的逻辑。
3、多态性(Polymorphism)
讨论多态之前先要明白什么是“虚拟”(Virtual)。C++/MFC就是用虚拟这种方式实现多态的。为什么“虚拟”这个概念?看下边的例子:
Class Cincect //昆虫类
{
private:
int m_foot; //脚的数量
...... //其它成员变量
private:
void Cincect();
void ~Cincect();
public:
void Bite()//咬人
{
...... //怎样咬人的代码,比如张开嘴啃
}
}
我把Bite(咬)这个动作在基类中定义为一般化动作。可是,不是所有昆虫咬
人的方法都一样(况且还有的根本就不咬人呢,比如蜻蜓),比如蚊子是用嘴那个
吸管叮人而蚂蚁是用嘴去夹。
从昆虫这个类别衍生出以下两个类别:Cant(蚂蚁)、Cmosquito(蚊子)。
class Cant :public Cincect //蚂蚁类
{
......
}
class Cmosquito :public Cincect //蚊子类
{
......
}
它们都继承了Cincect的所有成员,当然也继承了Bite()这个动作。现在就有问题了:
同样继承自昆虫,当我们使用Bite()这个动作时怎么才能区分蚂蚁和蚊子各自的独有的咬人方式呢?
方法之一是用“::”符号指明具体引用的是那一个,但这样明显失去了灵活性;
另一种方法就是“虚拟”。使用关键字virtual将Bite()声明为虚拟函数,然后在每个
衍生类中重新定义,描述它们各自的咬人方法,调用的时候也不会都一种结果啦。于是上边的例子可以改写为:
Class Cincect //昆虫类
{
private:
int m_foot; //脚的数量
...... //其它成员变量
private:
void Cincect();
void ~Cincect();
public:
virtual Bite(){}//咬人,但我们只声明这个成员函数,
//却让它什么动作都不做,让衍生类自己去定
//义各自的咬人方法
}
class Cant :public Cincect //蚂蚁类
{
......
virtual Bite();
}
Cant::Bite()
{
...... //蚂蚁具体的咬人方式
}
class Cmosquito :public Cincect //蚊子类
{
......
virtual Bite();
}
Cmosquito::Bite()
{
...... //蚊子具体的咬人方式
}
所以,虚拟的目的是只在基类中将一般化动作声明一个成员函数的原型而不做
具体定义,让衍生类自己去定义。
这就是面向对象的特征之三:多态性。基类的同一个成员在不同的衍生类中可以具
有不同的形态,更好地抽象和描述大千世界中的诸多“对象”。
1.了解什么是多态性
2.如何定义一个虚方法
3.如何重载一个虚方法
4.如何在程序中运用多态性
面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。 可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作用就体现出来了,这些对象不必是相同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。 如果这些对象都有同名方法,就可以调用每个对象的同名方法。本节课将向你介绍如何完成这些事情。
1.清单9-1. 带有虚方法的基类:DrawingObject.cs
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
说明
清单9-1 定义了DrawingObject类。这是个可以让其他对象继承的基类。该类有一个名为Draw()的方法。Draw()方法带有一个virtual修饰符,该修饰符表明:该基类的派生类可以重载该方法。DrawingObject类的 Draw()方法完成如下事情:输出语句"I'm just a generic drawing object."到控制台。
2.清单9-2. 带有重载方法的派生类:Line.cs, Circle.cs, and Square.cs
using System;
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
}
说明
清单9-2定义了三个类。这三个类都派生自DrawingObject类。每个类都有一个同名Draw()方法,这些Draw()方法中的每一个都有一个重载修饰符。重载修饰符可让该方法在运行时重载其基类的虚方法,实现这个功能的条件是:通过基类类型的指针变量来引用该类。
3.清单9-3. 实现多态性的程序:DrawDemo.cs
using System;
public class DrawDemo
{
public static int Main(string[] args)
{
DrawingObject[] dObj = new DrawingObject[4];
dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new Square();
dObj[3] = new DrawingObject();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}
return 0;
}
}
说明
清单9-3演示了多态性的实现,该程序使用了在清单 9-1 和清单9-2中定义的类。在DrawDemo类中的Main()方法中,创建了一个数组, 数组元素是DrawingObject 类的对象。该数组名为dObj,是由四个DrawingObject类型的对象组成。
接下来, 初始化dObj数组, 由于Line, Circle和Square类都是DrawingObject类的派生类,所以这些类可以作为dObj数组元素的类型。 如果C#没有这种功能,你得为每个类创建一个数组。继承的性质可以让派生对象当作基类成员一样用,这样就节省了编程工作量。
一旦数组初始化之后,接着是执行foreach循环,寻找数组中的每个元素。在每次循环中, dObj 数组的每个元素(对象)调用其Draw()方法。多态性体现在:在运行时,各自调用每个对象的Draw()方法。尽管dObj 数组中的引用对象类型是DrawingObject,这并不影响派生类重载DrawingObject 类的虚方法Draw()。 在dObj 数组中,通过指向DrawingObject 基类的指针来调用派生类中的重载的Draw()方法。
输出结果是:
I'm a Line.
I'm a Circle.
I'm a Square.
I'm just a generic drawing object.
在DrawDemo 程序中,调用了每个派生类的重载的Draw()方法。 最后一行中,执行的是DrawingObject类的虚方法Draw()。这是因为运行到最后,数组的第四个元素是DrawingObject类的对象。
小结
现在对多态性有所了解之后,你可以在派生类中,实现一个重载基类虚方法的方法。虚方法和重载的派生类方法之间的关系就体现出C#的多态性。
面向对象的四个特征 程序
面向对象程序设计所具有的4个共同特征:抽象性、封装性、继承性和多态性。
1.抽象
抽象包括两个方面:过程抽象和数据抽象。过程抽象把一个系统按功能划分成若干个子系统,进行"自顶向下逐步求精"的程序设计。数据抽象以数据为中心,把数据类型和施加在该类型对象上的操作作为一个整体(对象)来进行描述,形成抽象数据类型。
2.封装
封装是面向对象编程的特征之一,也是类和对象的主要特征。封装将数据以及加在这些数据上的操作组织在一起,成为有独立意义的构件。外部无法直接访问这些封装了的数据,从而保证了这些数据的正确性。如果这些数据发生了差错,也很容易定位错误是由哪个操作引起的。
如果外部需要访问类里面的数据,就必须通过接口进行访问。接口规定了可对一个特定的对象发出哪些请求。
3.继承
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类的继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且派生类可以修改或增加新的方法使之更适合特殊的需求。
4.多态性
多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。多态性包括参数化多态性和运行时多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题。
面向对象程序设计的基本特征有哪些
面向对象的特点是:封装.多态.继承.其中多态有分为重载和重写.面向对象的编程思想更加接近现实的事物.
有这样几点好处:
1.是编程更加容易.因为面向对象更接近于现实.所以你可以从现实的东西出发.进行适当的抽象.
2.在软件工程上.面向对象可以使工程更加模块化.实现更低的耦合和更高的内聚.
3.在设计模式上(似乎只有面向对象才设计到设计模式).面向对象可以更好的实现开-闭原则.也使代码更易阅读.
面向对象 基本特征
面向对象基本特征是:
⑴对象唯一性。
每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
⑵抽象性。
抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
⑶继承性。
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
⑷多态性(多形性)
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
扩展资料:
面向对象的要素:
1、抽象:抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。
2、封装性(信息隐藏):封装性是保证软件部件具有优良的模块性的基础。对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。
3、共享性:面向对象技术在不同级别上促进了共享。同一类中的共享。同一类中的对象有着相同数据结构。这些对象之间是结构、行为特征的共享关系。
参考资料:百度百科-面向对象
面向对象的四个基本特征
特征见下面:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
封装是面向对象的特征之一,是对象和类概念的主要特性。多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。
1.面向对象程序设计的四大特征分别为【 】、【 】、【 】、【 】。
1.面向对象程序设计的四大特征分别为【 封装性 】、【 继承性 】、【 多态性 】、【 】。
2.每个C++程序开始执行的函数是【 main函数 】。
3.在C++中enum类型中第一个枚举元素的缺省值为【 1 】。
4.C++中只有一条语句是关于函数头部的描述,没有函数体部分,这条语句被称做函数的【 预处理语句 】。
5.在C++中,允许不同的函数具有相同的名字,只有不同的类型和不同的参数个数,这种函数被称为【 构造函数 】。
6.初始化一个类的数据成员的专用成员函数是【 析构函数 】。
7.一个非成员函数必须声明为一个类的【 private 】,才有可能存取该类的私有数据成员。
8. 【 const final 】保留字表示在对象或变量初始化后是不可修改的。
9. C++提供了【内部类(innerClass)】机制,
10.所有函数模板都用【 template 】关键字定义,接着在符号和符号范围内列出函数模板的模板形参表。
11.当从一个带有public继承的基类中导出一个类时,这个基类的public成员就成为该导出类的【公共】成员,而这个基类的protected成员就成为该导出类的【私有】成员。
12. 【 operator 】关键字引入了重载运算符的函数定义。
13.在类内部定义的【 private 】数据不能被该类的函数来存取,定义为【 public 】的数据和函数则可以在类外部进行存取。
14.对于导出类的构造函数,在定义对象时构造函数的执行顺序为:先执行【构造函数】,再执行【 对象构造函数】
回答的不好,请见谅
面向对象程序设计的四个主要特征的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于面向对象程序设计四个主要特点、面向对象程序设计的四个主要特征的信息别忘了在本站进行查找喔。