调用返回风格
1、 主程序-子程序风格
2、 面向对象风格
主程序-子程序:
组件–主程序、子程序
连接件–调用-返回机制
拓扑结构–层次化结构
主程序-子过程风格的优点与缺点
§优点:
–有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护–已被证明是成功的设计方法,可以被用于较大程序
缺点:
–规模:程序超过10万行,表现不好;程序太大,开发太慢,测试越来越困难
–可重用性差、数据安全性差,难以开发大型软件和图形界面的应用软件
–把数据和处理数据的过程分离为相互独立的实体,当数据结构改变时,所有相关的处理过程都要进行相应的修改
–图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。
程序:int main()
{
int m=0,n=0;
cin>>m;
cin>>n;
cout<<Sum(m,n)<<endl;
cout << "Hello world!"<< endl;
return 0;
}
int Sum(int i1,inti2)
{
return(i1+i2);
}
组件:main函数与Sum函数。连接件:Sum(m,n);
面向对象风格:
组件是:类和对象
连接件:对象之间通过功能与函数调用实现交互。
OO风格优点
§复用和维护:利用封装和聚合提高生产力
–因为对象对其它对象隐藏它的表示,所以可以改变一个对象的表示,而不影响其它的对象。
–某一组件的算法与数据结构的修改不会影响其他组件
–组件之间依赖性降低,提高了复用度
§反映现实世界
§容易分解一个系统
–设计者可将一些数据存取操作的问题分解成一些交互的代理程序的集合
OO风格缺点
§管理大量的对象:怎样确立大量对象的结构
§继承引起复杂度,关键系统中慎用
§必须知道对象的身份
–为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识。只要一个对象的标识改变了,就必须修改所有其他明确显式调用它的对象,并消除由此带来的一些副作用(例如,如果A使用了对象B,C也使用了对象B,那么,C对B的使用所造成的对A的影响可能是料想不到的)
–对比:在管道-过滤器系统中,一个过滤器无需知道其他过滤器的任何信息
§不是特别适合功能的扩展。为了增加新功能,要么修改已有的模块,要么就加入新的模块,从而影响性能
程序:class Person
{
private:
string Name;
int Age;
public:
Person(string name,int age)
{
Name=name;
Age=age;
}
string getName()
{
return Name;
}
int getAge()
{
return Age;
}
};
class student
{
public:
bool set(Person p,double score)
{
cout<<"姓名:"<<p.getName()<<endl;
cout<<"年龄:"<<p.getAge()<<endl;
cout<<"成绩:"<<score<<endl;
return true;
}
};
int main()
{
Person p("张三",20);
student s;
s.set(p,98.9);
return 0;
}
组件:Person类与student类还有主程序。连接件:Person p("张三",20); s.set(p,98.9);