c#,用面向对象思想写一个计算器
来源:互联网 发布:非极大值抑制 知乎 编辑:程序博客网 时间:2024/04/30 04:04
设计模式的第一个例子之后,我再次体会到了做一个软件,不仅仅是为了功能的实现,更多的是“为人民服务”!
不用面向对象的方法去写,要实现一个简单的只有“+ - * /”计算器,那是相当简单的,只需获取用户输入的数字和运算符,然后“A运算B”得出结果显示出来就行了。如下代码所示:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{ class Program { static void Main(string[] args) {
//输入要运算的数字和运算符 Console.WriteLine("请输入数字A"); double A =Convert .ToDouble ( Console.ReadLine()); Console.WriteLine("请输入运算符"); string operate = Console.ReadLine(); Console.WriteLine("请输入数字B"); double B = Convert.ToDouble(Console.ReadLine());
//将结果存储到变量D里面 double D=0;
//用if条件语句判断输入的符号而进行相应的运算并输出 if (operate =="+") { D = A + B; Console.WriteLine("A+B=" + D); } if (operate =="-") { D = A - B; Console.WriteLine("A-B=" +D); } if (operate =="*") { D = A * B; Console.WriteLine("A*B=" +D); } if (operate =="/") { D = A / B; Console.WriteLine("A/B=" + D); } } }}
如果用户的需求发生了变化了呢?比如想再加个开根号的运算,然后就加个if语句,在输入项里也要改动,而且当除数为零时,还会发生错误,直接导致程序死掉,这些变化的产生,对于修改程序是一件非常麻烦的事,小程序还好,大程序的话就特别容易导致错误的发生,而且不易于修改,很可能修改一个地方,却导致了另一个地方出现问题,这种整个程序的程序块与程序块之间有着组合的关系,非常不利于维护和扩展,所以,有了面向对象的思想。
应该把整个程序抽象出一些类来,每个实现一部分功能,就如用于显示的就抽象一个显示类,运算的为运算类,还有运算符类等等,当程序需要扩展增加某项功能时候,我们只需新增一个类就行,跟别的没关系,所以非常易于维护和扩展。修改后的代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 工厂模式_计算器2{ class Program { static void Main(string[] args) { try//如果遇到错误,进行提示 {
//用于输入 Console.WriteLine("请输入数字A"); double _numA =Convert.ToDouble( Console.ReadLine()); Console.WriteLine("请输入运算符(+、-、*、/)"); string _operate = Convert.ToString ( Console.ReadLine()); Console.WriteLine("请输入数字B"); double _numB = Convert.ToDouble(Console.ReadLine()); double _result;//保存结果的变量 Operation oper; oper = operationFactory.createOperate("+"); oper.numberA = _numA;//给类属性赋值 oper.numberB = _numB; operationFactory.createOperate(_operate); _result = oper.GetResult(); Console.WriteLine(_result);//输出结果 } catch { Console.WriteLine("输入有误!"); } } } public class Operation//运算父类 { private double _numberA = 0; private double _numberB = 0; public double numberA { get { return _numberA; } set { _numberA = value; } } public double numberB { get { return _numberB; } set { _numberB = value; } } public virtual double GetResult() { double result = 0; return result; } } public class operationAdd:Operation//继承运算父类的加法运算 { public override double GetResult() { double result = 0; result = numberA + numberB; return result; } } public class operationSub:Operation//继承运算父类的减法运算 { public override double GetResult() { double result = 0; result = numberA - numberB; return result; } } public class operationMul:Operation//继承运算父类的乘法运算 { public override double GetResult () { double result = 0; result = numberA * numberB; return result; } } public class operationDiv :Operation//继承运算父类的除法运算 { public override double GetResult() { double result; result = numberA / numberB; return result; } } 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; } }}
后的程序变得层次分明,并抽象出了几个类,这样以后再需要增加功能,就直接增加类就行了,别的类根本影响不到!
5 0
- c#,用面向对象思想写一个计算器
- 用面向对象的思想写一个计算器
- 使用面向对象的编程思想写一个简单的控制台计算器程序,放松一下
- 用面向对象思想写钟表
- 运用JAVA面向对象思想写一个区域管理程序
- 简单的面向对象思想,写一个传奇人物的属性
- 以面向对象思想写一个js函数
- 面向对象思想实现简易计算器
- 用C写面向对象
- 用C语言写一个的计算器
- 用C实现面向对象思想
- 用面向对象的编程思想去写js
- 用面向对象语言实现一个计算器控制台程序
- 一个面向对象的简单计算器
- 以面向对象的思想设计的计算器 代码
- PHP入门-使用面向对象思想开发的图形计算器
- 用 java 写一个计算器
- 用JQuery写一个计算器
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
- php设置多个session同时运行
- RHCS集群理论暨 最佳实践
- 【逆元】ZOJ 3609 Modular Inverse
- Storm实时流处理Hello World
- c#,用面向对象思想写一个计算器
- VS2010版快捷键
- 迭代器模式
- IBM TSM 6.3学习笔记(2)
- HDU 2841 Visible Trees 解题报告(筛 or 容斥原理)
- Eclipse配置Tomcat
- 俗话说的辩证法
- 数据挖掘开源软件:WEKA基础操作
- Android按键之Menu详解