关于POP和OOP的解释我想网上的资料已经数不胜数了,但是基本无非都是在摆理论 。刚好本人既写过面向过程(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();}}}怎么样,现在对面向对象有一个大概的了解了吧 。相比面向过程,面向对象的思想在编写大型项目时代码更容易维护、更易懂、代码重用率更高 。但相对的牺牲的就是运行的效率了 。
推荐阅读
- 阿里P7架构师浅析:如何优化Java程序设计、编码提高性能
- php反射机制用法详解
- 给男生介绍对象 男生介绍对象是试探吗
- Python对象的比较、拷贝
- 浅析反射型DDOS攻击
- 梦到对象出轨了气醒了 梦到对象出轨分手了是什么征兆
- 个人隐私|千万别乱下载!部分云祭扫APP涉嫌侵害隐私:祭拜对象可随意填
- 茶叶为什么不能乱送人,送茶要看对象
- JSONP浅析
- 微信小号既然能被坏人盗用,赶快去查一查。 顺便能查对象的小号
