用任意一种面向对象语句实现计算机程序,要求输入两个数和符号,得到结果。
小菜:
Console.WriteLine("please input first interger"); string first_number = Console.ReadLine(); Console.WriteLine("please input second interger"); string second_number = Console.ReadLine(); Console.WriteLine("please input yunsaunfu"); string caozuo = Console.ReadLine(); double result_number = 0; if (caozuo == "+") result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number); if (caozuo == "-") result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number); if (caozuo == "*") result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number); if (caozuo == "/") result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number); Console.WriteLine(result_number);
问题:
- 4个if 分支,每个都要走一遍
- 除法没有考虑异常的情况
改进如下:
Console.WriteLine("please input first interger"); string first_number = Console.ReadLine(); Console.WriteLine("please input second interger"); string second_number = Console.ReadLine(); Console.WriteLine("please input yunsaunfu"); string caozuo = Console.ReadLine(); Console.WriteLine(first_number); Console.WriteLine(second_number); Console.WriteLine(caozuo); double result_number = 0; switch (caozuo) { case "+": result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number); break; case "-": result_number = Convert.ToDouble(first_number) - Convert.ToDouble(second_number); break; case "*": result_number = Convert.ToDouble(first_number) * Convert.ToDouble(second_number); break; case "/": if (second_number == "0") Console.WriteLine("can't be zero"); else result_number = Convert.ToDouble(first_number) / Convert.ToDouble(second_number); break; } Console.WriteLine(result_number);
改好了,可是出题者是想用面向对象语言来实现,也就是要用面向对象。
初级编程者遇到问题就用计算机能理解的逻辑来描述和解决问题。
这本身没有错,但这样的思维使得我们的程序只能满足当前的需求,程序不容易维护,不容易扩展,更不容易复用。从而达不到高质量代码的要求。
那么,应该怎么做呢?
===============================================================
活字印刷的故事。
曹操:喝酒唱歌,人生真爽,...... 印刷工匠开始刻板印刷。
曹操认为太俗,改为:对酒当歌,人生真爽,...... 印刷工匠开始刻板印刷。
曹操认为太直接,改为:对酒当歌,人生几何,...... 印刷工匠开始刻板印刷。累死累活。拼命干。
问题出在哪里?改字的时候,必须要整个刻板重新刻。
对,如果有了活字印刷,只需要更改四个字就可以,其他工作都未白做。