面向对象思想是什么(c++面向对象思想)

关于我下个你上网上一搜答案绝对是一大堆,但是基本无非都是在摆理论。刚好本人既写过面向过程(POP)的C程序也写过面向对象(OOP)的C#程序,甚至是万物皆对象的python程序。

下面本人就从自身的实际感受来解答,而不是一上来就给初学者摆什么封装、继承、多态这些概念

面向对象更容易让人理解

其实object也可以翻译为物件,我想这个词对于初学者肯定比对象更友好。以前的pop思想其实就是过程导向,就是我想实现一个什么样的计算结果,然后用变量和函数将这个结果实现,但是这样很抽象化,初学者较难理解。但是面向对象的话将抽象的概念都给你具像化了,是以物件为主导。接下来我用一段对比代码展示可能更容易理解。

比如,我要计算两个人绕着操场跑一圈的时间。

左边是面向过程的,右边是面向对象的。其实面向对象,你可以将他的.运算符理解为我们汉语的‘的’,这样更容易让程序员理解

封装

然后就讲到面向对象的封装,如上右图。面向对象可以将速度、距离等全部封装在一个抽象的类中,然后再通过new操作来具像化对象,而面向过程只能通过函数和变量来存储数据和运算。这样当一个工程够大的时候,面向对象的程序更容易维护,且重用性也更好

继承和多态

继承和多态的话是面向对象最主要的特征。其实也很好理解。还是拿上面那个例子,现在有一个小孩,他除了run这个动作外还需要加一个喝奶(drinkMilk)动作,那么小孩子也属于人这一类,我是不是可以不用再去重复的写关于Run这个动作的相关代码呢?由此,继承的概念就出来了。

namespace test0923

{

class People

{

public double speed { get; set; }

public double distance { get; set; }

public double time { get; set; }

public People()

{ }

public People(double distance ,double speed)

{

this.distance = distance;

this.speed = speed;

}

public double Run()

{

return this.distance / this.speed;

}

}

class Children:People

{

public void drinkMilk()

{

Console.WriteLine(“milk is very delicious”);

}

}

class Progaram

{

static void Main(string[] args)

{

People xiaoMing = new People(100,10);

xiaoMing.time = xiaoMing.Run();

People xiaoHua = new People(120, 12);

xiaoHua.time = xiaoHua.Run();

Children baby = new Children();

baby.distance = 100;

baby.speed = 2;

baby.Run();

baby.drinkMilk();

}

}

}

那么另外一个问题又来了,小孩Run可能速度计算不能跟大人一样,可能需要自己的计算方法,那么怎么办呢?这时候,多态的概念又出来了。我们只需要给父类的即People的Run方法加上virtual,再在子类中加override就可以了

namespace test0923

{

class People

{

public double speed { get; set; }

public double distance { get; set; }

public double time { get; set; }

public People()

{ }

public People(double distance ,double speed)

{

this.distance = distance;

this.speed = speed;

}

public virtual double Run()

{

return this.distance / this.speed;

}

}

class Children:People

{

public override double Run()

{

return this.distance/this.speed + 10;

}

public void drinkMilk()

{

Console.WriteLine(“milk is very delicious”);

}

}

class Progaram

{

static void Main(string[] args)

{

People xiaoMing = new People(100,10);

xiaoMing.time = xiaoMing.Run();

People xiaoHua = new People(120, 12);

xiaoHua.time = xiaoHua.Run();

Children baby = new Children();

baby.distance = 100;

baby.speed = 2;

baby.Run();

Console.WriteLine(baby.Run());

baby.drinkMilk();

Console.Read();

}

}

}

怎么样,现在对面向对象有一个大概的了解了吧。相比面向过程,面向对象的思想在编写大型项目时代码更容易维护、更易懂、代码重用率更高。但相对的牺牲的就是运行的效率了。

原创文章,作者:普尔小编,如若转载,请注明出处:http://www.puerpx.cn/pxwd/7839.html

(0)
上一篇 2023-02-24 上午9:30
下一篇 2023-02-24 上午9:47

相关推荐

  • 影视后期培训,影视后期培训要学哪些内容

    想要知道影视后期培训要学那些内容,就先要明白什么是影视后期 鬼谷云课堂影视后期专业资深课程顾问来为你答疑: 影视后期制作顾名思义,从字面上可以理解通过后期及时来进行影视制作,具体流…

    培训问答 2022-04-19
  • 哈尔滨工业大学威海校区怎么样

    很多人都知道哈工大是老牌C9名校,属于高端大气上档次的985名校。但你报志愿的时候会发现这样一个问题,哈工大与哈工大(威海)在志愿书里边是分开招生的。 1.哈工大(威海)确实是哈工…

    培训问答 2023-06-22
  • 学java去哪里

    现在培训机构越来越多,越来越容易挑花了眼。 如果是花钱去学习Java的话,其实最重要的就是这个钱不能白花。 那么怎么挑合适的机构呐? 要从机构的口碑、师资情况、课程安排、学生的学习…

    培训问答 2022-05-26
  • 去意大利留学之前,你做的第一件事是什么英文

    相信很多学生一定是拿出手机,百度一下怎么留学,自己的条件允许不,出国需要准备什么?这些虽然在网上都可以查到,但千奇百怪的答案会让你眼花缭乱,不知所以然。 首先是要你能够满足留学的条…

    培训问答 2022-08-04
  • 怎么做马卡龙甜点

    马卡龙 马卡龙,又称作玛卡龙、法式小圆饼,是一种用蛋白、杏仁粉、白砂糖和糖霜制作,并夹有水果酱或奶油的法式甜点。口感丰富,外脆内柔,外观五彩缤纷,精致小巧。 Macaron一词本是…

    培训问答 2023-06-19
  • 连云港好玩吗,连云港美食

    连云港有山有海,还是挺不错的。有A的景区更是很多个,要是好好玩的话,玩个三五天,也不能全都玩完。 1.花果山 爬山的话,有花果山五A级风景区,就是西游记里齐天大圣的花果山。这个要玩…

    培训问答 2023-05-04
  • 广西公务员考试题库哪个比较好,2020广西公务员考试题库及答案

    华图在线专注于线上公务员考试教育培训,所以我们开发了“华图在线APP”,方便大家在线刷题和参加模拟考试。因此,图兔十分推荐大家用华图在线APP进行刷题,理由如下: 一、UI界面十分…

    培训问答 2023-06-17
  • 美术艺考集训学校,艺考集训学校怎么选择

    我们这里的学生多数是到省城济南的一个学校去参加艺考集训。一般高三的上半学期都在外集训。具体去什么学校集训,学生不用管,都是学校给联系的,到时候只要准备好钱就行,一般第一年应届生都到…

    培训问答 2022-12-25
  • 借钱有什么技巧(借钱窍门)

    我就碰到过,一个发小要找我借钱。但是他开口不是先借钱,而是说我们一起去某地大学城开宾馆。这一开口,一下子把我们的关系拉的更亲密,心里想这兄弟可以啊,有路子还记得把我带着,把我那个感…

    培训问答 2023-04-05
  • 雅思口语怎么获得考官好感(雅思考试口语考官是什么人)

    1.整洁的仪表和良好的精神状态 考试之前,剪/梳一个清爽的发型(特别对于男生来说很重要),一定要洗澡X3!换一身干净整洁的服装,初高中生朋友最好不要穿学校发那种比自己身形大两码的难…

    培训问答 2023-05-09