提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、原则
代码编写的要求:
- 可维护
- 可复用
- 可扩展
- 灵活性
面向对象的优点:通过封装(模块化,可复用)、继承(可拓展)、多态(灵活性)把程序的耦合度降低。
Ctrl+C 和 Ctrl+V容易导致代码中存在大量的重复冗余代码,维护的时候,可能就是一场灾难,编程有一定原则,就是用尽可能的办法去避免重复。
二、实例
场景:
用C++、Java、C#、VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。
知识点:
- 分离业务逻辑与界面逻辑(server-client),将业务逻辑抽象封装为一个operation类;
- 各个运算逻辑需分离,例如 + - * /等,增删改查其中一个操作,并不会影响已实现的其他逻辑;
- 使用一个单独的类做创造实例的过程;
1.代码实现
class Operation {
public:
double _numberA = 0;
double _numberB = 0;
public:
Operation(double numberA, double numberB):_numberA(numberA),_numberB(numberB) {}
virtual double GetResult () {
double result = 0;
return result;
}
}
// + 类
class OperationAdd : public Operation {
public:
double GetResult() {
double result = 0;
result = _numberA + _numberB;
return result;
}
}
// - 类
class OperationSub : public Operation {
public:
double GetResult() {
double result = 0;
result = _numberA - _numberB;
return result;
}
}
//
class OperationMul : public Operation {
public:
double GetResult() {
double result = 0;
result = _numberA * _numberB;
return result;
}
}
class OperationDiv : public Operation {
public:
double GetResult() {
double result = 0;
if (_numberB == 0)
throw new Exception("除数不能为0");
result = _numberA / _numberB;
return result;
}
}
class OperationFactory {
public:
void createOperate(string operate);
}
OperationFactory:: void createOperate(string operate) {
Operation* p;
switch (operate) {
case "+":
p = new OperationAdd();
break;
case "-":
p = new OperationSub();
break;
case "*":
p = new OperationMul();
break;
case "/":
p = new OperationDiv();
break;
}
return p;
}
int main() {
Operation* per = OperationFactory.createOperate("+");
p._numberA = 1;
p._numberB = 2;
double result = p.GetResult();
}