一、面向过程
我们是怎么思考和解决上面的问题的呢?
答案是:我们自己的思维一直按照步骤来处理这个问题,这是我们常规思维,这就是所谓的面向过程POP编程
二、面向过程POP为什么转换为面向对象OOP
面向过程想的思想步骤越多,变化越多,是无法掌控的,所以有时候非常复杂,就比如我们拿起来手机玩游戏如果按照POP编程则代码如下:
namespace OOP { /// <summary> /// OOP 面向对象编程 Object Oriented Programming /// </summary> class Program { static void Main(string[] args) { Console.WriteLine("我要玩手机游戏了"); Console.WriteLine("手机开机"); Console.WriteLine("打开游戏"); Console.WriteLine("正在打游戏"); Console.WriteLine("游戏结束"); } } }
但是出现不同手机,不同的玩法,不同的游戏,那么又要重新写类似的东西,所以面向过程虽然更更符合人的思考方式,但是及其不方便扩展管理,不能够重复使用,尤其是项目复杂的情况下,会使编程不好维护
但是怎么从POP转换为OOP呢?
我们通过手机玩游戏,可以转换一下思想,我们把对象进行分析,可以把手机,玩家,游戏分别定义为一个对象,可以参考如下:
1.玩家类
/// <summary> /// 玩家类 /// </summary> public class Player { /// <summary> /// 玩家Id /// </summary> public int Id { get; set; } /// <summary> /// 玩家名字 /// </summary> public string Name { get; set; } /// <summary> /// 玩手机方法 /// </summary> /// <param name="phone"></param> public void PayerPhone(Phone phone) { //玩手机需要先开机 phone.Open(); //玩手机游戏 phone.PlayGame(); } }
2.手机类
/// <summary> /// 手机类 /// </summary> public class Phone { /// <summary> /// 手机Id /// </summary> public int Id { set; get; } /// <summary> /// 手机Name /// </summary> public string Name { set; get; } public void PlayGame() { Game game = new Game(); game.Start(); game.Paly(); game.Over(); } /// <summary> /// 手机开机 /// </summary> public void Open() { Console.WriteLine($"{this.GetType().Name}手机开机"); } /// <summary> /// 手机关机 /// </summary> public void Close() { Console.WriteLine($"{this.GetType().Name}手机关机"); } }
3.游戏类
/// <summary> /// 游戏类 /// </summary> public class Game { /// <summary> /// 开始 /// </summary> public void Start() { Console.WriteLine($"{this.GetType().Name}游戏开始"); } /// <summary> /// 正在进行 /// </summary> public void Paly() { Console.WriteLine($"{this.GetType().Name}玩游戏"); } /// <summary> /// 结束 /// </summary> public void Over() { Console.WriteLine($"{this.GetType().Name}游戏结束"); } }
4.代码调用
/// <summary> /// OOP 面向对象编程 Object Oriented Programming /// </summary> class Program { static void Main(string[] args) { //实例化一个玩家 Player player = new Player() { Id = 1, Name="小明" }; //小明想玩手机,首先得需要一部手机 Phone phone = new Phone() { Id = 1, Name = "努比亚" }; //小明开始玩手手机 player.PayerPhone(phone); } }
我们按照对象划分,就是所谓得万物皆对象,然后我们把对象定义好封装好,然后把对象属性和动作都归结一起,这就所谓得画格子,每个格子自成体系,内部任意改动不会影响到别人,然后每个格子之间相互交互!虽然我们使思路更加复杂化,但是以后极其容易扩展。
总的来说面向对象就是把以前按照步骤考虑得然后划为对象,然后对象之间交互组成宫嗯那个,功能与宫嗯那个之间组成系统,系统与系统之间组成平台,比如:一块块砖砌成墙,然后墙与墙之间组成房间,房间与房间之间组成一个大厦
三、面向对象的好处,特点【封装,继承,多态】
1.封装的好处
A:最主要的好处是:隔离,即是外部不用关系内部怎么实现,只要接口不变,内部可以随意扩展
B:安全 private protect等数据结构,只能通过公开方法来访问,而不能随意修改致于保证数据的安全
C:降低耦合,提高重要性,经理隐藏更多的东西
2.继承的好处:就是为了代码重用,通过继承然后子类拥有父类的一切属性和行为,但只能