职能类模型2

//vec.h
//包含处理venctor数组操作的一组函数模板
//ventry 2008-5-29

#include <vector>

//--------------------------------------------------------------------------------
//元素压入ventor数组
template<typename T>
inline int vec_PushBack( std::vector<T>& t_vec, const T& t )
{
 t_vec.push_back(t);
 return 1;
}

//--------------------------------------------------------------------------------
//跟据元素值删除第一个符合条件的元素
template<typename T>
int vec_DelObj( std::vector<T>& t_vec, const T& t )
{
 for (int i=0; i<t_vec.size(); i++)
 {
  if(t_vec[i]==t)
  {
   t_vec.erase(t_vec.begin()+i);
   return i;
  }
 }
 return -1;
}

//--------------------------------------------------------------------------------
//根据下标删除符合条件的元素
template<typename T>
inline int vec_DelObj( std::vector<T>& t_vec, int i )
{
 if(i<0 || i> t_vec.size()-1 ) return -1;
 delete t_vec[i];
 return 1;
}

//--------------------------------------------------------------------------------
//清除vector数组中所有元素
template<typename T>
int vec_Clear( std::vector<T>& t_vec )
{
 int res = t_vec.size();
 for (int i=t_vec.size()-1; i>=0; i--)
 {
  delete t_vec[i];
 }
 return res;
}
//--------------------------------------------------------------------------------

 

//main.cpp-----------------------------

 

#include <iostream>
#include "vec.h"
#include <string>
using namespace std;
//--------------------------------------------------------------------------------
class A
{//有个前提,它的所有子类都是单根继承或者它作为父类被继承时排在第一位,并且默认它和它的子类指针值是相同的
public:
 A(int data){ m_data = data; vec_PushBack(instanc_vec,this);}
 virtual ~A(){ vec_DelObj(instanc_vec, this); }
 const static vector<A*>& GetObjVec(){ return instanc_vec; }
 static int DelObj(int i){  return vec_DelObj( instanc_vec,i ); }
 static int Clear(){  return vec_Clear(instanc_vec); }
 virtual int put()=0;
 int m_data;
 
protected:
 static vector<A*> instanc_vec;
 
};

//--------------------------------------------------------------------------------
class B:public A
{
public:
 B(int data):A(data){}
 //virtual ~B(){ vec_DelObj(A::instanc_vec, (A*)this);}
 int put(){ return 0; }

};


//--------------------------------------------------------------------------------
void pnt()
{
 cout<<"---------------------------------------------"<<endl;
 for (int i=0;i<A::GetObjVec().size();i++)
 {
  cout<<A::GetObjVec()[i]->m_data<<endl;
 }
}

//----------------------------------------------------------------------------------
vector<A*> A::instanc_vec;
//----------------------------------------------------------------------------------

int main(void)
{
 A *pa = new B(123);
 B *pb = new B(546);

 pnt();
 //delete pa;
 A::DelObj(1);
 pnt();
 A::DelObj(0);
  pnt();
 return 0;

 

}

### 软件需求分析中的分模型与方法 软件需求分析是一个复杂而重要的过程,其目标是清晰地定义系统的功能和非功能性需求。以下是几种常见的分模型和方法: #### 1. 结构化分析方法 结构化分析是一种传统的系统建模技术,主要通过数据流图(DFD)、实体关系图(ERD)和数据字典来描述系统的行为和数据流动[^3]。这种方法强调自顶向下的分解方式,适合于处理逻辑性强的功能性需求。 ```plaintext // 数据流图示例 (伪代码表示) Process: 输入 -> 处理 -> 输出 Entity: 用户, 文件系统 Data Flow: 用户请求 -> 解析器 -> 显示模块 ``` #### 2. 面向对象分析方法 面向对象分析(OOA)关注的是现实世界中的事物及其相互作用。它通过对问题域的对象进行抽象,构建图、用例图和其他UML图表来表达系统的静态和动态特性[^1]。此方法特别适用于复杂的业务场景,能够更直观地反映实际操作流程。 - **需求模型**: 使用用例图展示外部参与者与系统间的交互。 - **分析模型**: 利用图描绘内部组件的关系及责任分配。 #### 3. 功能驱动型方法 该方法侧重于识别并实现特定的功能单元。例如,在引用[2]提到的案例中,解析文件路径是一项核心功能,因此可以围绕这一主题展开深入探讨。具体步骤可能涉及输入/输出规格制定、算法选择以及用户体验优化等方面[^2]。 #### 4. 行为驱动开发(BDD) 作为一种敏捷实践延伸出来的理念,BDD鼓励团队成员共同编写可执行的故事叙述或脚本来验证预期行为是否满足。这种方式有助于减少误解,并促进跨职能协作[^4]。 ```gherkin Feature: File Path Parsing Scenario: User searches for specific connections within a file structure Given the user has uploaded a valid document containing connection details When they initiate a search operation specifying certain criteria Then only matching entries should be highlighted visually alongside statistical summaries like histograms. ``` #### 5. 原型法 快速原型制作允许开发者尽早呈现设计方案给利益相关者审阅反馈。尽管初期版本未必具备全部功能,但它足以揭示潜在的设计缺陷或者激发新的创意点子[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值