设为首页 加入收藏

TOP

OOP面向对象(一)
2019-09-17 17:12:29 】 浏览:46
Tags:OOP 面向 对象

一、面向过程

我们是怎么思考和解决上面的问题的呢?

答案是:我们自己的思维一直按照步骤来处理这个问题,这是我们常规思维,这就是所谓的面向过程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();
        }
    }
View Code

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}手机关机");
        }
    }
View Code

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}游戏结束");
        }
    }
View Code

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.继承的好处:就是为了代码重用,通过继承然后子类拥有父类的一切属性和行为,但只能

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇RocketMQ从3.5.8升级到4.3.2版本.. 下一篇spring cloud gateway之filter篇

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目