一、界面与逻辑
基本程序架构包含:
用户界面模块(UI):
接受用户输入及呈现数据
业务逻辑模块:
根据用户需求处理数据
二、基本设计原则
功能模块之间需要进行解耦
核心思想:强内聚,若耦合
每个模块应该只实现单一的功能
模块内部的子模块只为整体的单一功能而存在
模块之间通过约定好的接口进行交互
接口是什么?
广义:
接口是一种契约(协议、语法、格式)
狭义:
面向过程:接口是一组预定义的函数原型
面向对象:接口是纯虚类(C#和java直接支持的接口)
模块之间仅通过接口进行关联
必然存在模块会使用接口
必然存在模块实现对应的接口
模块间的关系是单向依赖的
避免模块间存在循环依赖的情况
循环依赖是糟糕设计的标准之一
计算器应用程序的整体架构:
三、计算器程序集成测试
QCalculator.cpp
#include "QCalculator.h"
QCalculator::QCalculator()
{
}
bool QCalculator::construct()
{
m_ui = QCalculatorUI::NewInstance();
if( m_ui != NULL )
{
m_ui->setCalculator(&m_cal); //ui与核心算法关联起来
}
return (m_ui != NULL);
}
QCalculator* QCalculator::NewInstance()
{
QCalculator* ret = new QCalculator(); //第一阶段 new
if( (ret == NULL) || !ret->construct() ) //第二阶段 构造
{
delete ret;
ret = NULL;
}
return ret;
}
void QCalculator::show()
{
m_ui->show();
}
QCalculator::~QCalculator()
{
delete m_ui;
}
QCalculator.h
#ifndef _QCALCULATOR_H_
#define _QCALCULATOR_H_
#include "QCalculatorUI.h"
#include "QCalculatorDec.h"
class QCalculator
{
protected:
QCalculatorUI* m_ui;
QCalculatorDec m_cal;
QCalculator();
bool construct();
public:
static QCalculator* NewInstance();
void show();
~QCalculator();
};
#endif // QCALCULATOR_H
四、小结:
模块之间的交互需要通过接口完成
接口是开发中模块之间的一种“契约”
模块之间不能出现循环依赖
基本设计原则:强内聚,若耦合。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。