1.今天看了一章的大话设计模式,把简单的工厂模式用C++终于做出来了,下面是我的学习笔记:
第一章主要讲的是用面向对象的方法实现一个计算器控制台程序,要求输入两个数和运算符,的到结果
》》在这之前先简单了解一下关于软件的可重用性, 可维护性, 可拓展性 , 灵活性?
书中用印刷术来作为背景:
(1)如果要该一句话中的几个字,直接修改即可(可维护)
(2)这些字并非用完这次就不会再用,完全可以在后来的印刷术中继续用(可复用)
(3)如果要加字,只需要另外印刷所要加的字(可拓展)
(4)字的排列可以是横排,也可以是竖排,只要将活字移动就可以达到排列的需求(灵活性)
》》什么是业务的封装?
答: 让业务逻辑和界面逻辑分开,让他们之间的耦合度降低,只有分开,才能达到容易维护或者容易拓展
下面是用C++实现的简单的工厂模式:
#include
#include
using namespace std;
class Operation
{
public:
public:
virtual double GetResult() = 0;
public:
double numberA;
double numberB;
};
class AddOperation:public Operation
{
public:
double GetResult()
{
double res = 0;
res = numberA + numberB;
return res;
}
};
class SubOperation:public Operation
{
public:
double GetResult()
{
double res = 0;
res = numberA - numberB;
return res;
}
};
class MulOperation:public Operation
{
public:
double GetResult()
{
double res = 0;
res = numberA * numberB;
return res;
}
};
class DivOperation:public Operation
{
public:
double GetResult()
{
double res = 0;
if(numberB == 0)
{
exit(-1);
}
res = numberA / numberB;
return res;
}
};
class OperationFactory
{
public:
static Operation* createOperate(char operate)
{
Operation *oper;
switch(operate)
{
case '+':
oper = new AddOperation();
break;
case'-':
oper = new SubOperation();
break;
case'*':
oper = new MulOperation();
break;
case'/':
oper = new DivOperation();
break;
}
return oper;
}
};
//“简单工厂模式”:到底要实例化谁,将来会不会增加实例化的对象,应该考虑用单独的类
//来做这个创造实例的过程,这就是工厂: 总结:工厂的作用:如何创造实例
int main()
{
Operation *oper;
oper = OperationFactory::createOperate('+');
oper->numberA = 10;
oper->numberB = 20;
double result = oper->GetResult();
cout<
下面是运行的结果:
今天就只读了第一章~~~~~~
接下来总结我在牛客网上刷的一套软件工程的专项练习。。。。。今天学的东西还不少(~~~~~~~)
(2)C++中调用类的静态方法:应该用::来调用,而不应该用. 调用
(3)MVC设计模式
a.简介
Model-View-Control 的简称: 模型-------视图-----控制器:存在于服务器表达层的模型,将应用分开,改变应用之间的高度耦合
b.模式结构:(模型+视图+控制器)
1》》视图:数据的展现,是用户看到并与之交互的界面,视图向用户显示相关数据,并能接收用户的输入数据,但是不进行任何实际的业务处理,视图可以向模型查询业务状态,但是不能改变模型,视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新
2》》模型:应用对象
模型是应用程序的主体部分,代表了业务数据和业务逻辑,当数据发生改变时, 它要负责通知视图部分;一个模型能为多个视图提供数据
3》》控制器:逻辑处理,控制实体数据在视图上的显示,调用模型处理业务请求
当web 用户单击web 页面中的提交按钮来发送html表单时, 控制器接受请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据
在MVC 模式中,Web 用户向服务器提交的所有请求都由控制器接管,接受到请求之后,控制器负责决定该调用哪一个模型来进行处理,然后模型根据用户的需要进行相应的业务逻辑处理,并返回数据,最后控制器调用相应的视图来格式化模型返回的数据,并通过视图来展现给用户
(4)四种开发模型
a》瀑布模型:各项活动严格按照顺序执行,当前活动接受上一活动的工作结果,实施完成所需要的工作内容
b》原型模型:快速建立起可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集,主要目的是确定客户的需求
c》螺旋模型:将瀑布模型和原型模型结合起来,并且加入两种模型都忽略的风险分析,特点是螺旋模型是风险驱动的,关注风险,运行风险分析后决策是否继续进行项目
d》增量模型:融合了瀑布模型的基本成分和原型模型的迭代特征,采用随着日程时间进展而交错的线性序列,把软件产品作为一系列增量构件来进行分析,设计, 编码, 测试, 发布
选择的原则:
瀑布模型:需求明了,时间要求宽松, 功能单一, 项目规模 比较小
原型模型:适用于客户能提出一般性的目标,但是不能作出详细的输入,输出,或者开发者不能确定算法的有效性
螺旋模型:适用于大规模的软件项目,需求不明朗,风险比较高的项目
增量模型:适用于需求逐渐明朗清晰的软件项目
(5)接口的作用:契约式设计(要求软件设计者为软件组件定义正确的,精确的, 并且可验证的接口)以封装实现
(6)可移植性:指软件从一个运行环境到另一个环境下的难易程度,提高软件的可移植性应该提高它的设备不依赖性
(7)软件工程的三大要素 = 方法 + 工具 + 过程
(8)E-R 模型的组成:实体+属性+联系
如何将E-R模型转换为关系模型
a》一对一
独立对应一个关系模式,由各实体的主码构成关系模式, 关系模式的主码可以是任一个实体集的主码
b》一对多
与一对一情况相似,只是其主码不再是任一实体的主码,而必须是指定n 端的主码为关系模式的主码
c》多对多
每个实体集对应一个关系模式,多对多联系单独对应一个实体集,该实体集的主码由各实体集的主码共同构成
(9)构成计算机软件的是 计算机程序+ 处理的数据 +相关的文档