zoukankan      html  css  js  c++  java
  • 面向对象的编程的实施例

            以前的博客主要是理论介绍面向对象编程,过一个计算器的实例来学习面向对象的优点。

           依照面向对象的三大特征:

           1、封装

            对事物的状态和行为的细节封装,这样就形成了一个能够反复使用的“零件”,这样就使得我们写的代码可复用,以下是计算器的代码展示,把计算器的业务逻辑与界面逻辑分开:    

    ///业务逻辑——OPeration运算类
    public class Operation
        {
            public static double GetResult(double numberA, double numberB, string operate)
            {
                double result = 0d;
                switch (operate)        ///给运算类(+、-、*、/)定义
                {
                    case "+":
                        result = numberA + numberB;
                        break;
                    case "-":
                        result = numberA - numberB;
                        break;
                    case "*":
                        result = numberA * numberB;
                        break;
                    case "/":
                        result = numberA / numberB;
                        break;
                }
                return result;
            }
        }

    ///界面逻辑——client代码 
    static void Main (string[] args)
            {
                Operation oper;
                oper = OperationFactory.createOperate("+");
                oper.NumberA = 1;
                oper.NumberB = 2;
                double result = oper.GetResult();
                ///对界面进行设计定义
                try 
                {
                    Console.Write("请输入数字A:");
                    string strNumberA = Console.ReadLine();
                    Console.Write("请选择运算符号(+、-、*、/):");
                    string strOperate = Console.ReadLine();
                    Console.Write("请输入数字B:");
                    string strNumberB=Console.ReadLine();
                    string strResult="";
                    strResult = Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA), Convert.ToDouble(strNumberB), strOperate));
                    Console.WriteLine("结果是:" + strResult);
                    Console.ReadLine();
                }
                catch (Exception ex)     ///错误信息提示
                {
                    Console.WriteLine("您的输入有错:" + ex.Message);   
                }
                
            }
    这样。我们就能够自由的改动类的内部。用户假设想写一个其它版的程序,既能够直接复用这个Operation运算类。

             2、继承        

    class OperationAdd : Operation    ///加法类,继承运算类
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA + NumberB;
                return result;
            }
        }
        class OperationSub : Operation   ///减法类。继承运算类
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA -NumberB;
                return result;
            }
        }
        class OperationMul : Operation   ///乘法类,继承运算类
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA * NumberB;
                return result;
            }
        }
        class OperationDiv : Operation   ///除法类。继承运算类
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB == 0)
                    throw new Exception("除数不能为0.");
                result = NumberA / NumberB;
                return result;
            }
        }
    加减乘除是运算方法类,执行时的代码大部分都同样,把同样的代码都放到父类运算类(OPeration)中,这样写代码的时候反复的部分就能够不用写,直接从父类中继承即可,并且假设不用继承。当你改动功能。就必须在全部反复的方法中改动,代码越多。出错的可能就越大。

            3、多态

            我们建一个简单运算工厂。这个工厂的功能生产各种运算。加减乘除。平方根,立方根,自然对数,正弦余弦...

    public class OperationFactory
        {
            public static Operation createOperate(string operate)
            {
                Operation oper = null;
                switch (operate )      ///定义新的运算
                {
                    case "+":
                        oper = new OperationAdd();
                        break;
                    case "-":
                        oper = new OperationSub();
                        break;
                    case "*":
                        oper = new OperationMul();
                        break;
                    case "/":
                        oper = new OperationDiv();
                        break;
                }
                return oper;
            }
        }
    各种运算都是子类,他们都有一个共同的父类运算类(Operation),尽管每一种运算也是一种类,可是他们的终于结果是把几个数的运算结果算出来。

    这样我们就实现了我们所写的程序可维护、可扩展、可复用、灵活性好的功能。

     


           

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    2015年5月1日 转载--各种变量在内存中的分布
    2015年4月30日 计算两个日期天数,写的代码
    2015年4月29日 dayofweek
    2015年4月28日
    2015年4月28日----高大上的数组,进制准换,最多是35进制
    2015年4月27日---C语言:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
    2015年4月27日
    《C++ Primer》学习笔记:迭代器介绍
    《C++ Primer》学习笔记:3.3.3其他vector操作
    《C++ Primer》学习笔记:向vector对象添加元素蕴含的编程假定
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4747390.html
Copyright © 2011-2022 走看看