当前位置:文档之家› 什么是面向对象技术

什么是面向对象技术

什么是面向对象技术
什么是面向对象技术

第1章习题

1. 什么是面向对象技术?

2. 面向对象与面向过程程序设计有什么不同?

3. 面向对象技术有哪些优点?

4. 面向对象技术中的封装性有何优缺点?如何克服这些缺点?

5. 为什么要应用继承机制?

6. C++对多态性的支持体现在哪些方面?

7. 目前常用的面向对象程序设计语言有何异同?

8. 什么是.NET?

第2章习题

1. 写出下面程序的运行结果。

#include

void main()

{

int* a;

int* &p=a;

int b=10;

p=&b;

cout<<*a<

cout<<*p<

}

2. 写出下面程序的运行结果。

#include

void main()

{

int iarray[10]={0,2,4,6,8,10,12,14,16,18};

int sum=0;

int* iptr=iarray;

for(int i=0;i<10;i++)

{

sum+=*iptr;

iptr++;

}

cout<<"sum is"<

}

3. 写出下面程序的运行结果。

#include

int m=8;

int add3(int x,int y=7,int z=m)

{ return x+y+z; }

void main()

{

int a=1,b=2,c=3;

cout<

cout<

}

4. 编程求所有的水仙花数。如果一个三位数的个位数、十位数和百位数的立方和等于该数本身,则称该数为水仙花数。

5. 编程求1000以内所有素数。

6. 编写一个可以打印任何一年日历的程序。

7. 在10000以内验证哥德巴赫猜想之“1+1”命题:任意大的偶数,都可以表示为两个素数之和。

8. 编写一个函数,用冒泡法对输入的十个整数从小到大排序。

9. 编写一个函数,输入一个十六进制数,输出相应的十进制数。

10. 将给定的一个二维数组(3×3)转置,即行列互换。

11. 用非递归的函数调用方式求fibonaci数列第n项。fibonaci数列形如:

0,1,1,2,3,5,8,13,┄

其通项为:F0=0;F1=1;┄;F n=F n-1+F n-2。

12. 编写重载函数max,分别返回字符数组、int数组、long数组、float数组、double 数组和字符串数组的最大元素。

第3章习题

1. 类定义由哪些部分组成?在定义和使用时要注意什么问题?

2. 说明一个类的公有成员、保护成员和私有成员的区别。

3. 何时执行类构造函数及析构函数?若该对象作为类的成员,何时执行其构造函数和析构函数?

4. 创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。其功能有修改姓名、显示数据信息。要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。其中数据成员为保护的,函数为公有的。

5. 修改第4题中的类,将姓名构成Name类,其名和姓在该类中为保护数据成员,其构造函数为接受一个指向完整姓名字符串的指针。该类可显示姓名。然后将Employee类中的姓名成员(字符数组)修改为Name类对象。

6. 改正下列程序中的错误,并说明理由。

程序1:

include ;

class Student

{

public

void Student()

void display()

{

cin<<'number:'<

cout<

cout<

private:

int number,char* name,float score;

}

程序2:

include ;

class example()

{

private:

int date;

static int count

public;

void example(int y=10)(date=y;)

(

cout<<"date="<

return count;

)

}

7. 写出下面程序的运行结果。注意:构造函数和析构函数的执行次序、构造函数的初始化表。

#include

class Ex

{

public:

Ex(int x,char c='c');

~Ex()

{

cout<<'B'<

}

void outdata(void)

{

cout<

int da;

char ch;

};

void main()

{

Ex x(3,'a'),y(1);

Ex z[2]={Ex(10,'a'),Ex(1,'d')};

x.outdata();

y.outdata();

z[0].outdata();

}

Ex::Ex(int x,char c):da(x),ch(c) {

cout<<'A'<

}

8. 写出下面程序的运行结果。

#include

#include

#include

class Ex

{

public:

Ex(const char* s)

{

len=strlen(s);

p=new char[len+1];

strcpy(p,s);

}

Ex()

{

p=new char[8];

cout<<"****"<

}

Ex(const Ex& st)

{

len=strlen(st.p);

p=new char[len+1];

strcpy(p,st.p);

{

delete p;

}

void outdata(void)

{

printf("%x:%d ,%x:%s\n",&len,len,&p,p);

}

private:

int len;

char* p;

};

void main()

{

Ex x("first");

Ex y=x,z;

x.outdata();

y.outdata();

}

9. 写出下面程序的运行结果。

#include

class MyClass

{

public:

MyClass();

MyClass(int);

void Display();

~MyClass();

protected:

int number;

};

MyClass::MyClass()

{

cout<<"Constructing normally\n";

}

MyClass::MyClass(int m)

{

number=m;

cout<<"Constructing with a number:"<

void MyClass::Display()

{

cout<<"Display a number:"<

}

MyClass::~MyClass()

{

cout<<"Destructing\n";

}

void main()

{

MyClass obj1;

MyClass obj2(10);

obj1.Display();

obj2.Display();

}

10. 什么是静态数据成员?它有何特点?

11. 编写一个类,声明一个数据成员和一个静态数据成员。其构造函数初始化数据成员,并把静态数据成员加1,其析构函数把静态数据成员减1。

(1)编写一个应用程序,创建该类的3个对象,然后显示其数据成员和静态数据成员,再析构每个对象,并显示它们对静态数据成员的影响。

(2)修改该类,增加静态成员函数并访问静态数据成员,并声明静态数据成员为保护成员。体会静态成员函数的使用,静态成员之间与非静态成员之间互访问题。

12. 假设有两个类Student和Score,使用时,怎样允许Score成员访问Student中的私有成员和保护成员?

13. 为什么要定义友元?友元有哪几种类型?

14.改正下面代码的错误。

#include

class Animal;

void SetValue(Animal&,int);

void SetValue(Animal&,int,int);

class Animal

{

public:

friend void setValue(Animal&,int);

protected:

int itsWeight;

int itsAge;

};

void SetValue(Animal& ta,int tw)

ta.itsWeight=tw;

}

void SetValue(Animal& ta,int tw,int tn)

{

ta.itsWeught=tw;

ta.itsAge=tn;

}

void main()

{

Animal peppy;

SetValue(peppy,5);

SetValue(peppy,7,9);

}

将第14题程序中的友元改成普通函数,为此增加访问类中保护数据的成员函数。

第4章习题

1. 什么是继承?它在软件设计中有什么作用?

2. 比较类的三种继承方式之间的差别。

3. 如果派生类B已经重新定义了基类A的一个成员函数fn1(),没有定义重载成员函数fn2(),怎样调用基类的成员函数fn1()、fn2()?

4. 写出运行结果,分析程序中的访问权限,并回答所列问题。

#include

class A

{

public:

void f1();

A()

{

cout<<"A Constructor"<

i1=10;j1=11;

cout<<"i1="<

}

~A(){cout<<"A Destructor"<

protected:

int j1;

private:

int i1;

};

class B:public A

{

public:

void f2();

B()

{

cout<<"B Constructor"<

i2=20;j2=21;

cout<<"i2="<

}

~B(){cout<<"B Destructor"<

protected:

int j2;

private:

int i2;

};

class C:public B

{

public:

void f3();

C()

{

cout<<"C Constructor"<

i3=30;j3=31;

cout<<"i3="<

}

~C(){cout<<"C Destructor"<

protected:

int j3;

private:

int i3;

};

void main()

{

A a;

B b;

C c;

}

(1)派生类B中成员函数f2()能否访问基类A中的成员f1()、i1和j1?

(2)派生类B的对象b能否访问基类A中的成员f1()、i1和j1?

(3)派生类C中成员函数 f3()能否访问直接基类 B中的成员 f2()、j2和i2?能否访问间接基类A中的成员f1()、j1和i1?

(4)派生类C的对象c能否访问直接基类B中的成员f2()、i2和j2呢?能否访问间接基类A中的成员f1()、j1和i1?

(5)根据上述结果总结继承中构造函数和析构函数的调用顺序。

(6)将派生B类的继承方式改为私有继承和保护继承,结果分别怎样?试总结它们的异同。

5. 写出下面程序的运行结果。

#include

class A

{

public:

A(int i,int j){a=i;b=j;}

void move(int x,int y){a+=x;b+=y;}

void show()

{

cout<<"("<

}

private:

int a,b;

};

class B:public A

{

public:

B(int i,int j,int k,int l):A(i,j),x(k),y(l){}

void show()

{

cout<

}

void fun(){move(3,5);}

void f1(){A::show();}

private:

int x,y;

};

void main()

{

A aa(1,2);

aa.show();

B bb(3,4,5,6);

bb.fun();

bb.A::show();

bb.B::show();

bb.f1();

}

6. 编写一个学生和教师数据输入和显示程序。学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。

7. 写出下面程序的运行结果,并分析总结。

#include

class Base

{

public:

void who(){cout<<"Base class"<

};

class Derive1:public Base

{

public:

void who(){cout<<"Derivel class"<

};

class Derive2:public Base

{

public:

void who(){cout<<"Derive2 class"<

};

void main()

{

Base obj1,*p;

Derive1 obj2;

Derive2 obj3;

p=&obj1;

p->who();

p=&obj2;

p->who();

p=&obj3;

p->who();

obj2.who();

obj3.who();

}

9. 在多继承方式下,派生类的构造函数和析构函数调用顺序是怎样的?

10. 什么是虚基类?有何作用?

第5章习题

1. 什么是多态性?在C++中是如何实现多态的?

2. 虚函数与重载在设计方法上有何异同?

3. 编写一个时间类,实现时间的加、减、读和输出。

4. 定义一个哺乳动物Mammal类,再由此派生出狗Dog类,两者都定义Speak成员函数,基类中定义为虚函数,定义一个Dog类的对象,调用Speak函数,观察运行结果。

5. 写出下面程序的运行结果,并回答问题。

#include

class Point

{

public:

Point(int x1,int y1){x=x1;y=y1;}

int area() const {return 0;}

private:

int x,y;

};

class Rect:public Point

{

public:

Rect(int x1,int y1,int u1,int w1): Point(x1,y1)

{

u=u1;w=w1;

}

int area() const {return u*w;}

private:

int u,w;

};

void fun(Point &p)

{

cout<

}

void main()

{

Rect rec(2,4,10,6);

fun(rec);

}

如果将Point类的area()函数定义为虚函数,其运行结果是什么?为什么?

6. 在C++中,能否声明虚构造函数?为什么?能否声明虚析构函数?有何用途?

7. 什么叫做抽象类?抽象类有何作用?抽象类的派生类是否一定要给出纯虚函数的实现?

8. 定义一个Shape抽象类,在此基础上派生出Rectangle和Circle类,二者都有GetArea()函数计算对象的面积,GetPerim()函数计算对象的周长。使用Rectangle类派生一个新类Square。

9. 写出下面程序的运行结果,并回答问题。

#include

class A

{

public:

A(int i):k(i){}

virtual void operator!()

{

cout<<"A: K="<

}

protected:

int k;

};

class B:public A

{

public:

B(int n=0):A(0),j(n){k++;}

virtual void operator!()

{

cout<<"B: K="<

}

protected:

int j;

};

class C:public B

{

public:

C(int n=0):B(0),m(n){k++;j++;}

virtual void operator!()

{

cout<<"C: K="<

}

private:

int m;

};

void main()

{

B b(5);

C c(3);

A a(2);

A* ab=&a;

!*ab;

!b;

!c;

A &ba=(A)b;

!ba;

A &ca=(B)c;

!ca;

B &cb=c;

!cb;

}

如果将类A的虚函数定义为普通成员函数,其结果如何?为什么?如果将C类改为A类的公有派生类,应做如何修改才能使程序正常运行?

10. 前缀自加和后缀自加运算符重载时如何区别?

第6章习题

1. 编写一个函数模板,实现求不同类型的数的相反数。

2. 编写一个函数模板,实现对不同类型的数组排序。

3. 以下是一个整数链表类的定义:

const int maxqueue=10;

class List

{

public:

List();

~List();

void Add(int);

void Remove(int);

int* Find(int);

void PrintList();

protected:

struct Node

{

Node* pNext;

int* pT;

};

Node* pFirst; //链首节点指针

};

(1)编写一个链表的类模板(包括其成员函数定义),让任何类型的对象提供链表结构数据操作。

(2)在应用程序中创建整数链表、字符链表和浮点数链表,并提供一些数据插入链表,在链表中删除一个节点和打印链表所有节点元素,遍历整个链表查找给定对应节点等操作。

第7章习题

1. 什么是流? C++中用什么方法实现数据的输入/输出?

2. C++的I/O流库由哪些类组成?其继承关系如何?

3. C++中进行格式化输入/输出方法有哪几种? 各是如何实现的?

4. 写出下面程序的运行结果。

#include

void main()

{

int x=77;

cout<<"12345678901234567890\n";

cout.fill('#');

cout.width(10);

cout<<"x=";

cout.width(10);

cout.setf(ios::left);

cout.fill('$');

cout<

int y=0x2a;

cout<<"12345678901234567890\n";

cout.unsetf(ios::left);

cout.fill('%');

cout.width(10);

cout<<"y=";

cout.unsetf(ios::right);

cout.width(10);

cout.setf(ios::left);

cout.fill('$');

cout<

}

5. 写出下面程序的运行结果。

#include

#include

void main()

{

int a=5,b=7,c=-1;

float x=67.8564,y=-789.124;

char ch='A';

long n=1234567;

unsigned u=65535;

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<<"%%"<

cout<

cout<

cout<

cout<

cout<

cout<

cout<<"COMPUTER"<<","<<"COMPUTER"<

}

6. 编写一个程序,从键盘上输入一个八进制数,要求分别以八进制、十进制、十六进制(其中的字母要大写)形式左对齐方式输出,格式如下:

Hex Decimal Octal

xxx xxx xxx

7. 编写一个程序,分别计算并输出6!至15!的值,用setw()控制“=”左右边数值的宽度,使输出结果排列整齐。要求分别以浮点和定点两种形式输出。

8. 编写一个程序,打印2~100之间数字的自然对数与以10为底的对数表。要求对表进行格式化,使数字可以显示在宽度为10的范围内,用小数位数占5位的精度进行右对齐。

9.编写一个程序,从键盘上输入5个学生的数据(包括学号、姓名、年龄、三门功课的分数),然后求出每个人的平均分数,把学号、姓名和平均分数输出到磁盘文件STUD.REC中,最后从STUD.REC文件中读出这些数据,并在屏幕上显示出来。

第8章习题

1. 列出五个常见的异常例子。

2. 写出下面程序的运行结果。

#include

void main()

{

int wait_time=46;

try

{

cout<<"Try block entered."<

if (wait_time>30)

throw wait_time;

cout<<"Leaving try block."<

}

catch(int thrown_value)

{

cout<<"exception thrown with"<

<<"wait_time equal to"<

}

cout<<"After catch block."<

}

如果将“int wait_time=46;”替换成“int wait_time=12;”,其结果如何?

3. 创建一个含有可抛出异常的成员函数的类,在该类中,创建一个被嵌套的类用作一个异常对象,它带有一个char*参数,该参数是一个有意义的字符串。创建一个可抛出该异常的成员函数。编写一个try块使它能调用该函数并且捕获异常,以打印该字符串的方式处理该异常。

第9章习题

1. 在应用程序向导AppWizard中能够创建哪些类型的文件?

2. MFC类库的层次结构怎样?将9.2节中表9-5至9-10的内容用层次结构表达出来。

第10章习题

1. MFC应用程序是如何实现Windows消息机制的,请详细解释。

2. 什么是文档模板?

3. 当应用程序向导生成MFC应用程序时,在源代码中找不到WinMain()函数,这是为什么?

4. 文档类、文档模板类和视图类的结构是如何定义的?

5. 修改DlgDemo程序,使用如图10-27所示的对话框实现作图图形的选择。

图10-27 用于选择作图图形的对话框

第11章习题

1. 在MFC中,构成多文档应用程序的类有哪些?它们的功能是什么?

2. 多文档应用程序中的多种文件类型和多菜单是怎样实现的?

第12章习题

1. 基于表单的应用程序的特点是什么?

2. 修改12.2.2节中的示例程序,设计一个能计算加、减法的计算器。

JAVA语言与面向对象程序设计课后习题答案

第1章面向对象软件开发概述 1.简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向过程的编程语言各两种。 答:面向过程问题求解,以具体的解题过程为研究和实现的主体,其思维特点更接近于计算机;面向对象的问题求解,则是以“对象”为主体,“对象”是现实世界的实体或概念在计算机逻辑中的抽象表示,更接近于人的思维特点。 面向过程的编程语言:C,Pascal,Foratn。 面向对象的编程语言:C++,Java,C#。 2.简述对象、类和实体及它们之间的相互关系。尝试从日常接触到的人或物中抽象出对象的概念。 答:面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中的映射和体现。类是同种对象的集合与抽象。类是一种抽象的数据类型,它是所有具有一定共性的对象的抽象,而属于类的某一个对象则被称为是类的一个实例,是类的一次实例化的结果。如果类是抽象的概念,如“电视机”,那么对象就是某一个具体的电视机,如“我家那台电视机”。 3.对象有哪些属性?什么是状态?什么是行为?二者之间有何关系?设有对象“学生”,试为这个对象设计状态与行为。 答:对象都具有状态和行为。 对象的状态又称为对象的静态属性,主要指对象内部所包含的各种信息,也就是变量。每个对象个体都具有自己专有的内部变量,这些变量的值标明了对象所处的状态。 行为又称为对象的操作,它主要表述对象的动态属性,操作的作用是设置或改变对象的状态。 学生的状态:姓名、性别、年龄、所在学校、所在系别、通讯地址、电话号码、入学成绩等; 学生的行为:自我介绍、入学注册、选课、参加比赛等。 4.对象间有哪三种关系?对象“班级”与对象“学生”是什么关系?对象“学生”与对象“大学生”是什么关系? 答:对象间可能存在的关系有三种:包含、继承和关联。 对象“班级”与对象“学生”是包含关系。 对象“学生”与对象“大学生”是继承关系。 5.有人说“父母”和“子女”之间是继承的关系。这种说法是否正确?为什么? 答:“父母”和“子女”之间不是面向对象意义上的“继承”关系。因为这里的继承关系是“is a”的关系,“男人”与“人”之间可以说是继承关系。 6.面向对象的软件开发包括哪些过程?OOA模型包括哪三个层次?OOD模型在OOA模型的基础上引入了哪些工作? 答:面向对象的软件开发过程可以大体划分为面向对象的分析(Object Oriented analysis,OOA)、面向对象的设计(Object oriented design,OOD)、面向对象的实现(Object oriented programming,OOP)三个阶段。 面向对象的分析的主要作用是明确用户的需求,并用标准化的面向对象的模型规范地表述这一需求,最后将形成面向对象的分析模型。 面向对象的设计将在OOA模型的基础上引入界面管理、任务管理和数据管理三部分的内容。 7.面向对象的程序设计方法有哪些优点? 答:由于对象的概念能够以更接近实际问题的原貌和实质的方式来表述和处理这些问题,所以面向对象的软件开发方法比以往面向过程的方法有更好的灵活性、可重用性和可扩展性,使得上述“分析—设计—实现”的开发过程也更加高效、快捷。

《面向对象程序设计》教学大纲资料

面向对象程序设计教学大纲西北民族大学数学与计算机科学学院 制定的时间:二〇一二年五月

面向对象程序设计教学大纲 一、课程基本资料 主讲教师:曹永春、蔡正琦、顿毅杰 主教材:《C++面向对象程序设计》中国铁道出版社,陈维兴、林小茶编著,第2版,2009 辅助教材: 1.《C++编程思想》机械工业出版社,美Bruce Eckel,Chuck Alliso著,刘宗田,袁兆山,潘秋菱等译; 第1版,2011年 2. 《C++程序设计教程》机械工业出版社,美H.M.Deitel P.J.deitel 薛万鹏等译,2000年 3.《C++程序设计语言》,机械工业出版社,美Bjarne Stroustrup 著,裘宗燕译,2005年 4.《C++面向对象程序设计习题解析与上机指导》清华大学出版社,陈维兴主编,第2版,2009年 实验教材及参考书: 同上 课程性质:学科选修课 学分:4分 课时:72学时,其中理论课54学时,上机实验18学时 先修课程:计算机导论、C语言程序设计 课程结构:多媒体教学,课堂讨论、课内实验、课后作业 评价方案:(考核依据、评分的办法、权重的分布) ?平时成绩:10% 课堂表现(课堂提问、考勤、作业等) ?实验成绩:20%(实验报告、实验考试)

?期中成绩:20%(闭卷考试) .期末成绩:50%(闭卷考试) 参考书目: 名称编著者出版社出版年月《C++编程思想》刘宗田,袁兆山,潘 机械工业出版社2011年 秋菱等译 机械工业出版社2000年 《C++程序设计教程》H.M.Deitel, P.J.deitel 著,薛万鹏等译 《C++程序设计语言》Bjarne Stroustrup 机械工业出版社2005年 著,裘宗燕译 陈维兴主编清华大学出版社2009年 《C++面向对象程序设计 习题解析与上机指导》 推荐刊物: 1、《计算机学报》 2.《软件学报》 3.《程序员杂志》 4.《码农周刊》 5.《快乐码农》 相关网站: 1. 中国计算机学会https://www.doczj.com/doc/3814321277.html,/sites/ccf/ 2. 计算机爱好者协会https://www.doczj.com/doc/3814321277.html,/forum.php 3.C语言中文网https://www.doczj.com/doc/3814321277.html,/cpp 5.中国悠悠期刊网https://www.doczj.com/doc/3814321277.html,/ 6. 中国知网https://www.doczj.com/doc/3814321277.html,/ 文献 1.谭浩强.C程序设计.第4版.北京:清华大学出版社,2010

面向对象程序设计概述

1.什么是结构化程序设计方法?这种方法有哪些优点和缺点? 【解答】结构化程序设计方法是指20世纪60年代开始出现的高级语言程序设计方法,由于采用了数据结构化、语句结构化、数据抽象和过程抽象等概念,使程序设计在符合客观事物与逻辑的基础上更进了一步。结构化程序设计的思路是:自顶向下、逐步求精。程序结构由具有一定功能的若干独立的基本模块(单元)组成,各模块之间形成一个树状结构,模块之间的关系比较简单,其功能相对独立,模块化通过子程序的方式实现。结构化程序设计方法使高级语言程序设计开始变得普及,并促进了计算机技术的深入应用。 虽然结构化程序设计方法采用了功能抽象、模块分解与组合,以及自顶向下、逐步求精的方法,能有效地将各种复杂的任务分解为一系列相对容易实现的子任务,有利于软件开发和维护;但与面向对象程序设计方法相比,结构化程序设计存在的主要问题是,程序的数据和对数据的操作相互分离,若数据结构改变,程序的大部分甚至所有相关的处理过程都要进行修改。因此,对于开发大型程序具有一定的难度,软件的可重用性差,维护工作量大,不完全符合人类认识世界的客观规律。 2.面向对象程序设计有哪些重要特点? 【解答】软件设计的目的是为了解决日常生活中存在的各种实际问题,面向对象程序设计与以往各种程序设计方法的根本区别是程序设计的思维方法的不同。它主要具有如下重要特点: (1)面向对象程序设计实现了较直接地描述客观世界中存在的事物(即对象)及事物之间的相互关系,它所强调的基本原则是直接面对客观事物本身进行抽象,并在此基础上进行软件开发,将人类的思维方式与表达方式直接应用在软件设计中。 (2)面向对象的程序设计将客观事物看作具有属性和行为的对象,通过对客观事物进行抽象来寻找同一类对象的共同属性(静态特征)和行为(动态特征),并在此基础上形成类。 (3)面向对象的程序设计将数据和对数据的操作封装在一起,提高了数据的安全性和隐蔽性。

面向对象程序设计C++课后题答案

第一章:面向对象程序设计概述 [1_1]什么是面向对象程序设计? 面向对象程序设计是一种新型的程序设计范型。这种范型的主要特征是: 程序=对象+消息。 面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。 面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。 [1_2]什么是类?什么是对象?对象与类的关系是什么? 在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。对象可以认为是:数据+操作 在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。 类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。 在面向对象程序设计中,总是先声明类,再由类生成对象。类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。 [1_3]现实世界中的对象有哪些特征?请举例说明。 对象是现实世界中的一个实体,其具有以下一些特征: (1)每一个对象必须有一个名字以区别于其他对象。

(2)需要用属性来描述它的某些特性。 (3)有一组操作,每一个操作决定了对象的一种行为。 (4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。例如:雇员刘名是一个对象 对象名:刘名 对象的属性: 年龄:36 生日:1966.10.1 工资:2000 部门:人事部 对象的操作:吃饭开车 [1_4]什么是消息?消息具有什么性质? 在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。当对象接收到发向它的消息时,就调用有关的方法,执行相应的操作。消息是一个对象要求另一个对象执行某个操作的规格的说明,通过消息传递才能完成对象之间的相互请求或相互协作。消息具有以下3个性质: (1)同一个对象可以接收不同形式的多个消息,做出不同的响应。 (2)相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的。(3)消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以不响应。[1_5]什么是方法?消息和方法的关系是什么? 在面向对象程序设计中,要求某一对象作某一操作时,就向该对象发送一个响应的消息,当对象接收到发向它的消息时,就调用有关的方法,执行响应的操作。方法就是对象所能执行的操作。方法包括界面和方法体两部分。方法的界面也就是消息的模式,它给出了方法的调用协议;方法体则是实现某种操作的一系列计算步骤,也就是一段程序。在C++语言中方法是通过函数来实现的,称为成员函数。消息和方法的关系是:对象根据接收到的消息,调用相应的方法;反过来,有了方法,对象才能响应相应的消息。 [1_6]什么是封装和抽象?请举例说明。

面向对象程序设计完整版

Object- Orien ted Programmi ng C++ 主讲成长生 东华大学计算机科学与技术学院

第一章概述 § 1.1 面向对象程序设计的基本思想 C++是基于C语言发展的,又冲破C语言局限的面向对象的程序设计语言。它与Java 语言都作为当前计算机科学的主流语言, 越来越受到用户的欢迎。 要弄清楚什么是面向对象的程序设计, 首先了解和回顾传统的 ( Pascal(或C))结构化程序设计方法及其设计思想、程序结构及特点。SP(Structure Programming)是60 年代诞生的针对当时爆发的所谓”软件危机” , 为此发展形成了现代软件工程学的基础。 SP的总的设计思想是: . 自顶向下、层次化 . 逐步求精、精细化 程序结构是按功能划分基本模块的树型结构, 使模块间的关系尽可能简单独立。因此SP的程序的基本特点是: . 按层次组织模块(战略上划分战役) . 每一模块只有一个入口, 一个出口 ?代码和数据分离(程序=数据结构+算法) 归纳得到: SP 把数据和过程(代码、函数)分离为相互独立的实体, 用数据代表问题空间中的客体借以表示实际问题中的信 息; 程序代码则用来处理加工这些数据。程序员在编程时 必须时刻考虑所要处理的数据结构和类型。对不同的数据格式即使要作同样

的处理计算, 或者要对相同的数据格式作不同的处理都必须编写不同的程序(如两个整型数和两个浮点数相加)。这样的编程方法,即传统的SP方法设计出来的程序或系统其可重用的成分很少。其次把数据和代码作为不同的分离实体时, 总存在着用错误的数据调用正确的程序模块, 或用正确的数据调用错误的程序模块的危险, 从而使数据与程序始终保持兼容, 已成为程序员 的一个沉重的负担。在开发一个大型软件课题中, 当工程进入到 后期若用户改变了方案要求, 很容易使技术人员的前期工作受到摧毁性的打击,使其前功尽弃。为克服以上的弊端或者该SP方法难以控制处理的矛盾而产生了面向对象程序设计方法, 即Object —Oriented Programming ----------- OOP从二十世纪六十年代提出对象 的雏形, 到七十年代美国国防部的专用语言Ada 语言, 直到当前国际上流行的高品味的Java 和C++(Tc++,Balandc++ 及Vc++), , 应该讲OOP方法与技术吸取了SP的一切优点,同时又正视和顺应现实世界由物质和意识二部分组成。映射到面向对象的解空间就是: 具体事物—对象; 抽象概念—类。 OOP的基本原理是用问题领域的模型来模拟大千世界,从而设计出尽可能直接、自然地表示问题求解方法的软件, 这样的软件由对象组成, 而对象则是完整反映客观世界事物具有不可分割的静态属性(”数据结构” )与动态行为(”方法” )的。而且它们是既有联系又

面向对象方法学概述资料

9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型 9.6 功能模型 9.7 3种模型之间的关系 传统的软件工程方法学曾经给软件产业带来巨大进步,部分地缓解了软件危机,使用这种方法学开发的许多中、小规模软件项目都获得了成功。但是,人们也注意到当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功。 在20世纪60年代后期出现的面向对象编程语言Simula-67中首次引入了类和对象的概念,自20世纪80年代中期起,人们开始注重面向对象分析和设计的研究,逐步形成了面向对象方法学。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。面向对象技术已成为当前最好的软件开发技术。 9.1 面向对象方法学概述 9.1.1 面向对象方法学的要点 面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。 面向对象方法学所提供的“对象”概念,是让软件开发者自己定义或选取解空间对象,然后把软件系统作为一系列离散的解空间对象的集合。应该使这些解空间对象与问题空间对象尽可能一致。这些解空间对象彼此间通过发送消息而相互作用,从而得出问题的解。也就是说,面向对象方法是一种新的思维方法,它是把程序看作是相互协作而又彼此独立的对象的集合。

概括地说,面向对象方法具有下述4个要点: (1) 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。按照这种观点,可以认为整个世界就是一个最复杂的对象。因此,面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。 由此可见,面向对象方法用对象分解取代了传统方法的功能分解。 (2) 把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。因此,每当建立该对象类的一个新实例时,就按照类中对数据的定义为这个新对象生成一组专用的数据,以便描述该对象独特的属性值。 (3) 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承(inheritance)。 (4) 对象彼此之间仅能通过传递消息互相联系。对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。 重点:如果仅使用对象和消息,则这种方法可以称为基于对象的(object-based)方法,而不能称为面向对象的方法;如果进一步要求把所有对象都划分为类,则这种方法可称为基于类的(class-based)方法,但仍然不是面向对象的方法。只有同时使用对象、类、继承和消息的方法,才是真正面向对象的方法。 9.1.2 面向对象方法学的优点 1. 与人类习惯的思维方法一致 2. 稳定性好 3. 可重用性好(重点) 用已有的零部件装配新的产品,是典型的重用技术,例如,可以用已有的预制件建筑一幢结构和外形都不同于从前的新大楼。重用是提高生产率的最主要的方法。

《面向对象技术》课程教学大纲

《面向对象技术》课程教学大纲 课程编号:20411101 总学时数:48 总学分数:3 课程性质:必修课程 适用专业:计算机科学与技术 一、课程的任务和基本要求 该课程是计算机科学与技术专业的专业基础课程。本课程的基本要求是掌握面向对象程序设计的基本原理、概念和方法;掌握C++语言的基本知识,包括类的定义、继承,对象的创建、使用、销毁等;掌握基本的面向对象程序设计过程和技巧,具备一定的面向对象程序设计能力,为后继课程打下基础。 二、基本内容和要求 1、面向对象技术概要 教学内容:概括地面向对象技术,介绍C++语言和C语言的差异。 基本要求: (1)了解面向对象技术特点 (2)掌握C++ 语言的输入、输出 (3)掌握C++ 语言的空间申请和释放 (4)了解C++ 语言的对象引用的含义 2、类的定义 教学内容:介绍C++语言中最基本的类定义,数据成员和函数成员,三种权限区域。 基本要求: (1)理解类和对象的概念 (2)掌握类构造函数和析构函数的定义方法和作用 (3)掌握对象的定义及初始化方法 (4)掌握类成员函数和内联函数的定义方法 (5)掌握函数重载的方法 (6)熟悉运算符的重载方法 3、类的派生与继承 教学内容:介绍类与类之间的派生关系,派生类的成员继承和存取权限,函数多态基本要求: (1)了解派生类的定义方法 (2)掌握派生类中继承成员的存取关系 (3)掌握派生类构造函数的定义与执行顺序 (4)了解虚函数和抽象类的作用 (5)了解编译多态和运行多态 4、类的友元和聚合 教学内容:不同类间引用的权限,封装与效率的关系,静态数据成员 基本要求:

(1)熟悉类的友元及应用 (2)了解类的封装和聚合 (3)熟悉类静态数据成员的作用与应用 5、面向对象的程序设计 教学内容:面向对象设计的思想、对象的生存期、对象的永久化和对象的传输。 基本要求: (1)熟悉面向对象程序设计的思想 (2)了解对象的创建过程和销毁过程 (3)掌握对象的永久化的操作方法 (4)熟悉对象传输的含义和实现方式 6、模板 教学内容:介绍函数模板和模板函数,类模板和模板类,STL的使用 基本要求: (1)熟悉函数模板 (2)熟悉类模板 (3)了解利用模板的使用方法 (4)熟悉STL的应用 7、异常处理 教学内容:异常处理的内容。 基本要求: (1)了解异常处理的目的 (2)熟悉异常处理的的基本形式 (3)了解异常处理的几种应用方式 三、实践环节和要求 通过由浅入深、循序渐进地练习,使学生通过上机来验证课堂教学的理论,全面了解面向对象技术的基本方法和编程技巧,学会设计一些简单的应用程序。 实验环节类型:上机 实验环节学时:16 1、含有类的C++程序设计(2学时) 上机内容:类的定义与应用。 2、类的继承与派生(2学时) 上机内容:派生类的定义与应用。 3、抽象类与重载(2学时) 上机内容:抽象类与重载。 4、友元与静态数据的应用(2学时) 上机内容:友元与静态数据的应用。 5、面向对象程序设计(4学时) 上机内容:使用面向对象技术设计应用程序。 6、模板的应用(4学时) 上机内容:类模板和类函数的应用。 四、教学时数分配 理论: 32 实验:上机:16 其它:

面向对象技术课程设计[2017]

《面向对象技术》课程设计 一、课程设计的目的与要求 1、教学目的 本课程设计是《面向对象程序设计》课程的组成之一,也是它的继续和延伸,为使该课程取得更好的教学效果而设置,使学生通过参加小型软件的开发过程,进一步掌握面向对象的程序设计方法,巩固和补充课堂讲授的理论知识,训练学生初步的综合分析问题和程序设计能力,综合运用所学的理论知识解决实际问题的能力,分析和总结面向对象程序设计的能力。使学生具有团队协作精神,并培养学生的创新能力和创新意识。 2、基本要求: 1.采用面向对象方法(抽象、类、继承、多态性)进行分析、设计、编程。 2.提交开发程序的源代码和技术文档; 3.达到设计要求,并完成技术答辩。 课程设计报告应包含以下八个内容。 一、题目简介 二、系统概述 对系统要实现的功能,设计的特点进行扼要的描述,以及团队成员分工。 三、系统设计 要求使用类图(类图描述了系统中的类及其相互之间的继承、组合等关系)、对象图加以描述. 四、关键技术(关键类/对象/变量/函数/算法...) 五、效果及存在问题 说明系统的运行效果(附上运行界面图片),存在哪些不足以及预期的解决办法。 六、心得体会 谈谈自己在课程设计过程中的心得体会。 七、附录 附上各功能模块的主要代码。 八、参考文献 列出各种参考文献,包括参考书目,论文和网址等。

二、课程设计的内容与安排 1、选题范围 所选题目必须能够实现一个完整意义上的应用系统,但题目名称与具体功能不限。学生可根据自身的兴趣,特点等进行选题。 所选题目可与以下知识点结合:类定义与对象访问,类的派生与继承,重载,菜单,工具栏,对话框,文档结构,文件操作,图形操作,多媒体技术,数据库操作等。要充分运用C#语言描述所设计的类,如图形图像类,工具类,游戏背景画面类,细胞类,题目类,飞行器类等,每一个类应包含数据成员和成员函数,设计基类和派生类,并运用多态性和虚函数的知识。 2、课程设计步骤 (1)、根据个人兴趣,爱好,以及课程设计的时间要求,确定设计题目的名称; (2)、查找与设计题目相关的资料; (3)、进行应用程序总体结构,使用功能的设计; (4)、进行应用程序的界面设计和源程序代码的编写; (5)、上机编辑,调试程序; (6)、实践设计报告的撰写。 3、课程设计时间 本课程设计原时间安排是18周,在一周内完成设计任务并提交成果。由于教学安排的时间将近考试周,为同学们更好地安排复习计划,可由同学灵活掌握。 课程设计考核(检查,答辩)在开学第一周内完成 4、选题 以下给出若干选题,具体功能自行扩展完善: 1)、即时通讯(IM) 至少有如下功能: ?可以通过IP地址和端口号向其他计算机发送信息,一般从好友列表中选择其他计算机的IP地址和端口号。 ?随时侦听是否有其他计算机的连接请求,并显示接受的信息。

OOP技术:面向对象技术

第三章面向对象技术 【课前思考】 1.什么是对象?什么是类? 2.面向对象编程的特性有哪三个?它们各自又有哪些特性? 3.你知道java语言在面向对象编程方面有何独特的特点吗? 【学习目标】 本讲主要讲述了java语言的面向对象技术,包括面向对象的基本概念、面向对象的程序设计方法及java中的类、包、对象、的特性。通过本讲的学习,同学们可以使用面向对象技术编写java程序。 【学习指南】 应深刻理解各知识点的概念,使用上一讲的编程基础知识及面向对象技术,编写简单的java类,由浅至深,养成风格良好的编程习惯。 【难重点】 重点: 1.仔细体会面向对象编程的思想,熟练理解类和对象的概念,理解面向对象的特性,会编写简单的类,逐渐掌握面向对象编程的方法。 2.注意java语言中,不允许多重继承,以及类变量和类方法的使用。

难点: 1.理解方法重载和方法重写,不要混淆了两者的使用。 2.类变量和类方法的使用。 【知识点】 3.1 面向对象技术基础 3.1.1 面向对象的基本概念 3.1.2 面向对象的基本特征 3.1.3 面向对象的程序设计方法 3.2 Java语言的面向对象特性 3.2.1 类 3.2.2 对象 3.2.3面向对象特性 3.1 面向对象技术基础 3.1.1 面向对象的基本概念 面向对象的基本思想 面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。 1.对象的基本概念 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。 主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作主动服务)。

面向过程与面向对象程序设计(马京振)

面向过程与面向对象程序设计 一、面向过程的程序设计 面向过程(Process Oriented)这个词是在面向对象(Object Oriented)出现之后为与之相对而提出的,其实它在以前基本被叫做“结构化编程”。早期的程序设计,大量使用共享变量(全局变量)和GOTO语句一类的东西,后来有人证明所有的程序流程都可以使用三种基本流程(顺序、选择、重复)来实现,并提出“GOTO有害说”,从此人们进行编程的方式发生重大变化,每种语言都 提供这些基本控制结构的实现方式,并提供把数据访问局部化的能力,以及某种形式的模块化/分别编译机制。在这些基础上,人们所进行的编程活动基本是通过编写用于不同目的的功能函数/过程来实现,故称为“面向过程”。 1.1面向过程设计概述 面向过程的结构化程序设计方法就是采用面向过程的方法来设计结构化程序。结构化程序通常包含一个主程序和若干个子过程,其中每个子过程都描述了某一个小问题的解决方法再由主过程自顶向下调用各子过程,来逐步解决整个问题。结构化程序设计方法是一种数学思维或计算机思维方法,和人们认识世界时所习惯使用的方法不同。 面向过程开发方式是对计算机底层结构的一层抽象,它把程序的内容分为数据和操纵数据的操作两部分。这种编程方式的核心问题是数据结构和算法的开发和优化。C语言所提供的机制就是典型的结构化编程设施。 1.2面向对象设计的特点 面向过程的程序设计方法通过在程序中模拟问题求解中的过程来进行问题 求解,这种方法认为过程或函数可以作为建立大型复杂软件系统的抽象机制。但由于在问题求解过程中,一些过程比较复杂,为控制复杂性,引入了功能分解的方法,即将一个复杂的过程分解为复杂性较低的低级过程,这种分解一直进行到参与设计和编程的人员可以理解的步骤或过程为止。这样使得系统是过程的组件,在整个分解过程中,数据结构的安排是出于对过程组织的需要而进行的。因此,数据处于次要地位,而过程是关心的焦点。面向过程的程序方法把重点放在解决问题的过程上,将数据结构和操作这些数据结构的函数分开,在方法上存在明显的不足。 二、面向对象的程序设计 人们在认识客观世界中的各种系统时所习惯使用的方法是面向对象的方法。面向对象的程序设计(OOP)方法就是用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的程序系统能够映射问题域,即程序系统中的对象以及对象之间的关系能够如实地反映问题域中固有的事物及其关系。因此,它为我们提出了一个全新的概念,其主要思想是将数据(成员数据)及处理这些数据的相应函数(成员函数)封装到一个类(class)中,而使用类的数

三种面向对象方法

三个著名的面向对象开发方法

摘要 主要介绍了3种典型的面向对象开发方法,并对它们进行了比较。面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。 关键字:面向对象;开发方法;OMT;BOOCH;JACOBSON; 1.引言 面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。 面向对象程序设计方法起源于六十年代末期的simnia语言.Smalltalk语言的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象与开发方法开始结合,出现 了面向对象的开发方法.自80年代后期以来,相继出现了多种面向对象开发方法,现将其中几种典型的方法作一比较分析. 2.三种典型的面向对象开发方法 2.1 OMT/Rumbaugh OMT(Object Modeling Technique)方法提出于1987年,曾扩展应用于关系数据库设计.1991年Jim Rumbaugh正式把OMT应用于面向对象的分析和设计.这种方法是在 实体关系模型上扩展了类、继承和行为而得到的.OMT覆盖了分析、设计和实现3个阶段,包括一组相互关联的类(class )、对象(object)、一般化(generalization)、继承(inheritance)、链(link)、链属性(link attribute)、聚合(aggregation)、操作(operation)、事件(event)、场景(scene)、属性(attribute)、子系统(subsystem)、模块(module)等概念. OMT方法把分析时收集的信息构造在3种模型中,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充.对象模型用ER图描述问题域中的列象及其相互关系,用类和关系来刻画系统的静态结构,包括系统中的对象、对象之间的关系、类的属性和操作等特征.动态模型用事件和对象状态来刻画系统的动态特性,包括系统对象的事件序列、状态和操作.功能模型按照对象的操作来描述如何从输入给出输出的结果,描述动态模型的动作所定义对象操作的意义。 OMT方法包含分析、系统设计、对象设计和实现4个步骤,它定义了3种模型,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充。这3种模型是:对象模型,用类和关系来刻画系统的静态结构;动态膜型,用事件和对象状态来刻画系统的动态特性;功能模型,按照对象的操作来描述如何从输人给出输出结果。分析的目的是建立可理解的现实世界模型。系统设计确定高层次的开发策略。对象设计的目的是确定对象的细节,包括定义对象的界面、算法和操作。实现对象则在良好的面向对象编程风格的编码原则指导下进行。 开发的四个阶段如下: (1)分析。基于问题和用户需求的描述,建立现实世界的模型。分析阶段的产物有: ●问题描述 ●对象模型=对象图+数据词典 ●动态模型=状态图+全局事件流图 ●功能模型=数据流图+约束 (2)系统设计。结合问题域的知识和目标系统的系统结构(求解域),将目标系统

传统方法学与面向对象区别

小议传统方法学与面向对象的区别 姓名:戴育兵 学号:G1030510 年级 :大二 班级: .net(2)班

摘要 传统的软件工程方法学曾经给软件产业带来巨大进步,部分地缓解了软件危机,使用这种方法学开发的许多中、小规模软件项目都获得了成功。但是,人们也注意到当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功。 在20世纪60年代后期出现的面向对象编程语言Simdla_67中首次引入了类和对象的概念,自20世纪80年代中期起,人们开始注重面向对象分析和设计的研究,逐步形成了面向对象方法学。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。面向对象技术已成为当前最好的软件开发技术。

软件工程传统方法学 1.传统方法学概述 随着计算机应用领域的不断拓广,各种各样的问题也不断涌现,当问题严重到开发人员无法控制的时候便产生了软件危机。软件危机的出现,促使了软件工程学的形成和发展。随之整合整套技术的软件工程方法学广泛应用,主流之一就是传统方法学。传统方法学在软件开发过程中占据相当大的比重,因为其悠久的历史而为很多软件工程师青睐。如果说自然语言和编程语言之间有一道难以跨越的鸿沟,传统方法学就是跨越这道鸿沟的桥梁。 传统方法学又称生命周期方法学或结构化范型。一个软件从开始计划起,到废弃不用止,称为软件的生命周期。在传统的软件工程方法中,软件的生存周期分为需求分析、总体设计、详细设计、编程和测试几个阶段。 传统方法学使用的是结构化分析技术来完成需求分析阶段的工作。软件工程学中的需求分析具有两方面的意义。在认识事物方面,它具有一整套分析、认识问题域的方法、原则和策略。这些方法、原则和策略使开发人员对问题域的理解比不遵循软件工程方法更为全面、深刻和有效。在描述事物方面,它具有一套表示体系和文档规范。但是,传统的软件工程方法学中的需求分析在上述两方面都存在不足.它在全局范围内以功能、数据或数据流为中心来进行分析。这些方法的分析结果不能直接地映射问题域,而是经过了不同程度的转化和重新组合。因此,传统的分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难。 在总体设计阶段,以需求分析的结果作为出发点构造出一个具体的系统设计方案,主要是决定系统的模块结构,以及模块的划分,模块间的数据传送及调用关系。详细设计是在总体设计的基础上考虑每个模块的内部结构及算法,最终将产生每个模块的程序流程图。但是传统的软件工程方法中设计文档很难与分析文档对应,原因是二者的表示体系不一致,所谓从分析到设计的转换,实际上并不存在可靠的转换规则,而是带有人为的随意性,从而很容易因理解上的错误而留下隐患。 编程阶段是利用一种编程语言产生一个能够被机器理解和执行的系统,测试是发现和排除程序中的错误,最终产生一个正确的系统。但是由于分析方法的缺陷很容易产生对问题的错误理解,而分析与设计的差距很容易造成设计人员对分析结果的错误转换,以致在编程时程序员往往需要对分析员和设计人员已经认识过的事物重新进行认识,并产生不同的理解。因此为了使两个阶段之间能够更好的衔接,测试就变得尤为重要。 软件维护阶段的工作,一是对使用中发生的错误进行修改,二是因需求发生了变化而进行修改。前一种情况需要从程序逆向追溯到发生错误的开发阶段。由于程序不能映射问题以及各个阶段的文档不能对应,每一步追溯都存在许多理解障碍。第二种情况是一个从

C++面向对象程序设计课后答案(谭浩强)

C++面向对象程序设计课后答案(1-4章) 第一章:面向对象程序设计概述 [1_1]什么是面向对象程序设计? 面向对象程序设计是一种新型的程序设计范型。这种范型的主要特征是: 程序=对象+消息。 面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。 面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。 [1_2]什么是类?什么是对象?对象与类的关系是什么? 在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。对象可以认为是:数据+操作 在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。 类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。

在面向对象程序设计中,总是先声明类,再由类生成对象。类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。 [1_3]现实世界中的对象有哪些特征?请举例说明。 对象是现实世界中的一个实体,其具有以下一些特征: (1)每一个对象必须有一个名字以区别于其他对象。 (2)需要用属性来描述它的某些特性。 (3)有一组操作,每一个操作决定了对象的一种行为。 (4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。例如:雇员刘名是一个对象 对象名:刘名 对象的属性: 年龄:36 生日:1966.10.1 工资:2000 部门:人事部 对象的操作:吃饭开车 [1_4]什么是消息?消息具有什么性质? 在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。当对象接收到发向它的消息时,就调用有关的方法,执行相应的操作。消息是一个对象要求另一个对象执行某个操作的规格的说明,通过消息传递才能完成对象之间的相互请求或相互协作。消息具有以下3个性质: (1)同一个对象可以接收不同形式的多个消息,做出不同的响应。

什么是面向对象技术

第1章习题 1. 什么是面向对象技术? 2. 面向对象与面向过程程序设计有什么不同? 3. 面向对象技术有哪些优点? 4. 面向对象技术中的封装性有何优缺点?如何克服这些缺点? 5. 为什么要应用继承机制? 6. C++对多态性的支持体现在哪些方面? 7. 目前常用的面向对象程序设计语言有何异同? 8. 什么是.NET? 第2章习题 1. 写出下面程序的运行结果。 #include <> void main() { int* a; int* &p=a; int b=10; p=&b; cout<<*a< void main() { int iarray[10]={0,2,4,6,8,10,12,14,16,18}; int sum=0; int* iptr=iarray; for(int i=0;i<10;i++) { sum+=*iptr; iptr++; } cout<<"sum is"<

int m=8; int add3(int x,int y=7,int z=m) { return x+y+z; } void main() { int a=1,b=2,c=3; cout<

面向对象技术试题

1、请将传统方法和面向对象方法进行比较。 答: 2、为什么要有设计模式,谈谈你对设计模式的理解。 3、设计类测试用例时需要考虑哪些方面? 4、你能想到模板方法模式在代码编写中或者生活实践中的那些应用?试举1个例子,用模式图加文字说明。 5、你能想到状态模式在生活实践中的有哪些应用?试举1个例子,用模式图加文字说明。第七章7.7 6、请比对CORBA、EJB和COM技术的优缺点,以及三种技术方案的选择方式和各自的应用环境。 第一题:答:(1)传统的面向过程方法:是结构化设计与分析吗?如是,在第一章绪论 PPT 11页开始,到17页左右。有些直接抄标题,像类型的。 (2)面向对象,就是以对象观点来分析现实世界中的问题。从普通人认识世界的观点出发,把事物归类、综合,提取其共性并加以描述。其基本思想是从现实世界中客观存在的事物(即对象)出发来构造系统并在系统中尽可能运用人类的自然思维方式。 面向对象方法的主要特点:(a)从问题域中存在的客观事物来抽象对象,并以此作为构造软件系统的基本构成单位。(b)事物的静态特征由对象的属性来表示;事物的动态特征由对象的方法来表示。(c)对象的属性和方法结合为一体,成为一个独立的实体,对外屏蔽其内部细节,也即封装。(d)对事物分类,具有相同属性和方法的对象归为一类,类是这些对象的抽象描述,每个对象是它所属类的一个实例。 (e)通过较多或较少地忽略事物之间的差异,来实现不同程度上的抽象,以得到较一般的类和较特殊的类,特殊类继承一般类的属性和方法。(f)复杂的对象可以把简单对象作为其构造成分,也即聚合。(g)对象之间通过消息进行通信。(h)用关联来表达对象之间的静态关系。面向对象的优势:(a)生产效率高,(b)优良的可复用性(c)面向对象方法对软件复用的支持。 与传统的面向过程方法相比:(a)面向对象方法是从现实世界中客观存在的事物(即对象)出发来构造软件系统;(b)在系统构造中尽可能运用人类的自然思维方式;(c)强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题;(d)根据事物本质特点,将其抽象为对象,作为系统的基本构成单位;(e)这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。 第二题:答:也许有人会问:“为什么要学习设计模式呢?”原因有很多,一些非常明显, 而另一些则不那么明显。 学习模式最常见的理由是因为我们可以借其: ● 复用解决方案——通过复用已经公认的设计,我能够在解决问题时取得先发优势,而且避免重蹈前人覆辙。我可以从学习他人的经验中获益,用不着为那些总是会重复出现的问题再次设计解决方案了。 ● 确立通用术语——开发中的交流和协作都需要共同的词汇基础和对问题的共识。设计模式在项目的分析和设计阶段提供了共同的基准点。 模式还为我们提供了观察问题、设计过程和面向对象的更高层次的视角,这将使我们从“过早处理细节”的桎梏中解放出来。

相关主题
文本预览
相关文档 最新文档