第7章 类和对象

合集下载

软件工程与开发技术(西电第二版)第7章 面向对象技术总论

软件工程与开发技术(西电第二版)第7章 面向对象技术总论

第7章 面向对象技术总论
在程序设计语言中,类是一个完整的、独立的、可重用 的,具有低耦合、高内聚特性的程序模块。类相当于一种自 定义数据类型,它类似于C语言中的结构体类型(C++本身就 可以使用strut关键字来定义类),不仅包含数据结构也包含 操作结构。数据类型作为程序语言中进行变量内存分配、类 型匹配、操作检查的基础,为程序的一致性和安全性提供了 重要的保证。因此,类概念的引入从类型角度进一步提高了 程序的安全性。
第7章 面向对象技术总论
7.2.2 对象及对象实例 现实世界中的具体事物就是对象或者对象实例,类则是
对象实例的结构抽象。 每个对象实例一般具有三方面的特性(亦称对象“三要
素”): (1) 确定的标识,能够被唯一地确认。 (2) 具有一定的属性,表示其性质或状态。 (3) 具有一定的行为能力或者操作能力,可给外界提供
第7章 面向对象技术总论
例如,客户如果想从ATM机中取钱,通常会按下取钱 按键,这实际上就是向ATM机发送了取钱消息,也是向 ATM机发送了取钱请求,ATM机会显示一个取钱界面,让 用户输入取款数额,这是通过ATM机的一个方法或者操作 实现的。用户输入取款金额后按下确定键,相当于又向 ATM机发送新的消息,导致ATM机的另一个方法的调用, 通常在该方法中又会向其他对象发送消息,例如该客户的账 户Account对象,通过调用该账户对象的draw()操作实现账 户上资金的更新。用户通过和ATM机一系列的请求/响应的 交互活动完成了执行系统的某个功能,如取钱。客户对象、 ATM对象、Account对象之间的消息交互见图7.6。
第7章 面向对象技术总论
如上所述,新一代的程序设计语言技术并不是简单地否 定上一代语言,而是在上一代语言的基础上增加新的程序结 构元素(函数、类),从而实现更复杂的程序结构。这种新的 程序元素更直观、更真实、更自然、更完整地抽象了现实世 界中的数据和处理(或者事物与概念),更好地抽象了程序中 的变量和代码,也进一步增强了程序的易读性、安全性、稳 定性和重用性,同时改变了系统的分析和设计方法。归根结 底,程序设计语言的发展就是程序结构以及建立在其基础上 的分析、设计方法的发展。

Web开发实用教程 第七章(C#)

Web开发实用教程 第七章(C#)

对应.NET类 System.Byte System.SByte System.Int16
ushort 无符号16位整数 0~216-1,即0~65535
int uint long ulong 有符号32位整数 无符号32位整数 有符号64位整数 无符号64位整数
System.UInt16
System.Int32 System.UInt32 System.Int64 System.UInt64
第7章 C#语言基础
学习目标
1.了解C#语言特点及应用前景;
2.掌握和编写C#程序的方法和步骤;
3.了解C#语法基础,包括数据类型、变量、流程控制、错 误处理等;
4. 理解类和对象的概念,能熟悉使用C#创建和使用类。
7.1 在中创建C#程序
C#是整个.NET Framework的基础语言,可以在Visual Studio环境多种开发模 式下使用C#语言,如Windows应用程序、类库等,图7-1是在Visual Studio 2005 新建项目时可供选择的模板。
7.2 数据类型
7.2.1 数据类型概述
表 7-1 C#简单数据类型表
类型 整形
关键字 byte sbyte short
说明 无符号8位整数 有符号8位整数 有符号16位整数
取值范围 0~255 -128~127 -215~215-1,即32768~32767 -231~231-1 0~232-1 -263~263-1 0~264-1
7.3
7.3.3
常量与变量
变量作用范围
变量的作用范围是指一个变量在程序中的生命周期,全局变量在整个程序中都 起作用,局部变量只在变量所在程序段中起作用。 在本章范例ConstVaria中,定义了一个静态全局变量static int sum = 0,只 要在这个页面程序的范围内,都可以访问或修改sum的值。 public partial { static int sum protected void { } protected void { } } class ConstVaria : System.Web.UI.Page = 0; Page_Load(object sender, EventArgs e)

uml建模第七章 交互图

uml建模第七章 交互图
ref login
图7-13 ref操作符
7.1 顺序图——顺序图的深入
顺序图中使用其它的技术: 1、使用注释 2、使用约束 3、使用状态
7.1 顺序图——顺序图建模
1. 为每一个用例编写事件流,包括一个基本事件 流和若干可选事件流或异常流; 2. 识别事件流中参与交互的对象; 3. 为每个事件流绘制顺序图,包括为每个对象设 置生命线,即确定哪些对象存在于整个交互过 程中,哪些对象在交互过程中被创建和撤销; 4. 从引发这个交互过程的初始消息开始,在生命 线之间自顶向下依次画出随后的各个消息; 5. 如果需要,可以画上交互片段、交互引用和约 束等。
7.2 通信图
三、组成元素 1、对象
(2)主动对象(活动对象) 一组属性和一组方法的封装体,其中至少有一 个方法不需要接收消息就能主动执行(称作主 动方法)。
UML中
Rose中
7.2 通信图
三、组成元素 2、链


用来连接对象,消息显示在链的旁边,一个链 上可以有多个消息。 在顺序图中不使用链,只有协作图中才使用链 的概念。
图7-5 嵌套编号
Rose中的消息
7.1 顺序图——顺序图的深入
顺序图中,对象的行为有循环和分支两
种方式,为了表示这两种行为,引入了 交互片段、区域和操作符的概念。
7.1 顺序图——顺序图的深入
每个交互片段都有一个操作符,操作符
决定了交互片段的执行方式。
1、表示分支的操作符

alt:支持多条件
表7-2常用迭代表达式
迭代表达式 [i:=1..n] [I=1..10] [while(表达式)] [until(表达式)]
语义 迭代n次
I迭代10次 表达式为true时才进行迭代 迭代到表达识为true时,才停止迭代 在对象集合上迭代

第7章-类和对象-1

第7章-类和对象-1

成员变量
Strpinugblnicacmlaes;s Ini/t/ia姓lV名istor {
int agep;ublic/s/t年at龄ic void main(String[] args) { //显示信息Sc方an法ner input = new Scanner(S成yst员em方.i法n);
public voidVsishiotowr(v){= new Visitor();
center.classNumber = 10;
bNumber = 10;
System.out.println("\n***初始化成员变量后***");
center.
演示示例:创建和使用对象
第22页/共45页
创建和使用对象示例5-2
问题
编写学员类,输出学员相关信息
编写教员类,输出教员相关信息
分析
学员类
姓名 年龄 班级 爱好 显示学员个人信息
教员类
姓名 专业方向 教授课程
教龄 显示教员个人信息
第23页/共45页
创建和使用对象示例5-3
示例
public class SIntuitdiaelnStu{dent { Spturbinligcnstaamtiec;void//m姓a名in(String args[]成){ 员变量
实现积分回馈功能
金卡客户积分大于1000分或普卡客户积分大于 5000,获得回馈积分500分
创建客户对象输出他得到的回馈积分
完成时间:20分钟 共性问题集中讲解
第35页/共45页
按此按钮, 狮子开始跑
按此按钮, 狮子开始叫
类的方法
电动玩具狮子 属性: 颜色:黄色
行为: 跑 叫

第7章 面向对象学习方法学

第7章 面向对象学习方法学

第七章面向对象学习方法学面向对象方法学的出发点和基本原则,是尽可能按照人类的习惯思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题域空间与实现解法的解空间在结构上尽可能一致.与传统的结构化方法相比,使用面向对象方法开发的软件,其稳定性,可修改性和可重用性都比较好.本章内容主要包括:传统方法学的缺点,面向对象的基本概念,面向对象模型.7.1 基础知识7.1.1 传统方法学的缺点结构化几其他方法学的本质,是在具体的软件开发之前,通过需求分析预先定义软件需求.然后一个一个阶段地开发用户所需要的软件,实现预先定义的软件需要.过去的经验需要告诉我们,结构化及其他方法学并不能完全消除软件危机.结构化及其他方法学仍然有许多不足之处.1.问题的表现1)生产效率低在生命周期方法学中,特别重视软件开发的阶段性.为了提高了软件开发的效率,减少重大返工次数,强调必须早每个阶段结束之前进行评估.从而开发过程中实行严格的质量管理,确实提高了许多软件的开发的成功率.但是,时间表明,开发高利率仍然很有用.2)不能满足用户需要实践表明,在开发需要模糊或需求动态变化的系统时,软件系统的结果往往不能满足用户需求的变化.主要表现在两个方面:一种是开发人员不能完全获得彻底理解用户的需要,以至开发的软件系统与用户预期的系统不一致;另一种表现是,所开发的系统不能适应用户需求变化,系统的稳定性和可扩充性不能满足需要.3)软件服用就是将已有的软件成分用于构造新的软见系统.软件复用是节约人力,提高软件效率的重要途径.结构分析.设计,几乎每一次开发一个系统时都需要针对这个具体的系统做大量的重复劳动..思维成果的可复用性差.4)软件很难维护实践经验告诉我们,即使是用生命周期方法学开发出来的软件,维护起来仍然相当困难,软件维护成本很高.2.问题的原因1)结构化技术本身的问题结构分析和设计技术的基本思想是从目标系统整体功能的单个处理着手,自顶向下不断的把复杂的处理分解为子处理,一层一层的分解下去,直到剩下若干个容易实现的子处理为止。

第7章 面向对象的程序设计基础 答案

第7章  面向对象的程序设计基础 答案

第7章面向对象的程序设计基础答案一、单项选择题1.D2.A3.D4.D5.A6.A7.C8.D9.C 10.A 11.C 12.C 13.A 14.A 15. D 16.A 17.D 18. A 19.C 20.B 21.D 22.A23.C二、多项选择题1.B C2.A B D3.B C D4.A B C5.B C6.A B7.A B C D8.A B D9.A B D10.A B C D三、填空题1.事件方法2.封装性多态性3.容器类控件类容器类对象控件类对象4.类对象5.绝对引用相对引用6.This ThisForm ThisFormset Parent四、面向对象程序设计题1.(1)新建如图7-1所示的表单:图7-1 显示当前系统日期和时间表单(2)在相应的事件过程中,编写如下代码:a)a)在文本框Text1的Click事件中,写入如下代码:this.value=date()b)在文本框Text1的DblClick事件中,写入如下代码:this.value=time()C)在命令按钮Command1的Click事件中,写入如下代码:thisform.text1.value=""d)在命令按钮Command2的Click事件中,写入如下代码:thisform.release(3)运行表单,结果如图7-2所示:注:“删除”为command1按钮,“退出”为command2按钮。

2.(1)新建如图7-3所示的表单:(2)在相应的事件过程中,编写如下代码:a ) a ) 在表单Form1的ACTIV ATE 事件中,写入如下代码: thisform.text3.setfocus public n n=0b ) b ) 在文本框Text1的Click 事件中,写入如下代码:this.value=date()c ) c ) 在文本框Text2的Click 事件中,写入如下代码:this.value=time()d )在命令按钮Command1的Click 事件中,写入如下代码: ma=thisform.text3.valuek1=str(month(date()),2)+str(day(date()),2) k2=subs(time(),1,2) k=k1+k2 k=allt(k)if allt(ma)=kbel3.caption="欢迎使用本系统!" elsen=n+1 if n=3bel3.caption="您无权使用本系统!" thisform.text3.enabled=.f.mand1.enabled=.f.图7-2 显示当前系统的日期和时间的运行结果图7-3 密码输入表单elsebel3.caption="口令错,请重新输入口令!" thisform.text3.value="" thisform.text3.setfocus endif endife )在命令按钮Command2的Click 事件中,写入如下代码: thisform.release(3)运行结果如图7-4所示:注:“确定”为command1按钮,“关闭”为command2按钮。

第7章:MFC编程基础知识

第7章:MFC编程基础知识
7.1 MFC 概述 7.2 MFC的层次结构及其子类功能简介 7.3 MFC应用程序架构 习题
Visual C++
概述
VC开发应用程序的最常用的模式就是利用MFC进行Win32应 用程序的设计。简单来说,MFC就是利用面向对象的思想,将 Windows大部分API函数封装起来的一个浩瀚的类库,利用MFC 编写程序本质上就是选择该类库中合适的类,并调用其下相 应成员函数来完成某个功能。虽然MFC编程相对于API编程简 单了(入门是简单了,但作到胸中丘壑自成却不容易),但 初学者却常常忘不了学习MFC的艰难。其主要原因有:(1) MFC采用的是C++语言,对C++本身的技术没有掌握。因此想学 好MFC,必须把第一篇的内容搞清楚;(2)MFC庞大的类库中 类的命名及成员变量或成员函数的命名没有清楚,其实很简 单,MFC中的类及其成员的命名都采用的是匈牙利命名法,把 这些名字的英文直接翻译过来,就知道它是什么意思。(3) MFC编程,首先生成的是一个应用程序架构,对这个架构的不 了解导致生成的代码不知其为何如此。本章就是要给大家一 个架构的概貌;(4)传统的API编程的步骤统统不见了,使人 们不知道编写的Windows程序什么时候建立起来 、什么时候 消亡. 事实上,MFC的应用程序架构把类似于API编程所要求 的步骤都隐藏了,都封装到架构中了。
Visual C++
*7.1.5 使用C++和MFC的好处
从本书的第一篇,我们已经看出了面向对象程序设计的好处,如 可复用性、代码和数据紧密地绑定等。类是面向对象程序设计的核心 概念,程序中不仅可以使用自己建立的类,还可以使用系统所提供的 类,一个好的类库可以大大减少编码的数量。MFC成功之处在于,它是 一个类库、一个包罗计算机系统方方面面的类库、一个集MicroSoft 各路软件高手之大成的类库。通过从MFC继承自己所需要的类,可以充 分利用基类所具有的各种功能。 MFC将类、类的继承、动态约束、类的关系和相互作用等应用程序 概念封装起来,可以使开发者高效、轻松地建立Windows应用程序,而 不受设备限制并且由事件进行驱动。 MFC具有良好的通用性和可移植性,它定义了应用程序的轮廓,并 提供了用户接口的标准实现方法,程序员所要做的工作就是通过VC所 提供的各种工具来完成这个工作。

Java程序设计教程第7章7.2 多 态

Java程序设计教程第7章7.2 多 态
mas参ter数.fe都ed是(pPenegt类uin的);子类
master.feed(xxx); ……
public void feed( XXX xxx ) { xxx.eat();
可否使用一个feed(Pet pet) 实现对所有宠物的喂食?
}
… … 频繁修改代码,代码可扩展性、可维护性差,
}
如何优化?
课堂操作——购置新车2-2
提前做完的同学可以尝试改进系统:
1. 循环从控制台选择汽车种类 2. 从控制台输入天数 3. 累加计算总租金
20/30
多态
总结
使用多态的好处
减少类中代码量 提高代码的可扩展性和可维护性
向上转型——子类转换为父类,自动进行类型转换
向下转型——父类转换为子类,结合instanceof运算符进行强 制类型转换
编写测试方法
调用主人类给狗狗喂的方法 调用主人类给企鹅喂的方法
为什么使用多态5-2
3/30
为什么使用多态5-3
问题
如果再领养XXX宠物,并需要给XXX喂食,怎么办?
添加XXX类,继承Pet类,实现吃食方法 修改Master类,添加给XXX喂食的方法
4/30
为什么使用多态5-4
主人类
练习
需求说明
使用多态实现喂养宠物功能 增加宠物猫并喂食,其健康值增加4
9/30
使用父类作为方法返回值实现多态
使用多态实现领养宠物
使用父类作为方法返回值 实现思路
在Master类添加领养方法getPet(String typeId ) 创建测试类,根据主人选择宠物类型编号来领养宠物
public class Master { public void feed( Dog dog ) { dog.eat(); } public void feed( Penguin pgn ) { pgn.eat(); }

UML基础与Rose建模实用教程课后习题及答案(无第四章)

UML基础与Rose建模实用教程课后习题及答案(无第四章)

UML基础与Rose建模实用教程课后习题及答案第1章面向对象概述1. 填空题(1)软件对象可以这样定义:所谓软件对象,是一种将状态和行为有机结合起来形成的软件构造模型,它可以用来描述现实世界中的一个对象。

(2)类是具有相同属性和操作的一组对象的组合,即抽象模型中的“类”描述了一组相似对象的共同特征,为属于该类的全部对象提供了统一的抽象描述。

(3)面向对象程序的基本特征是抽象、封装、继承和多态。

2. 选择题(1)可以认为对象是ABC。

(A)某种可被人感知的事物(B)思维、感觉或动作所能作用的物质(C)思维、感觉或动作所能作用的精神体(D)不能被思维、感觉或动作作用的精神体(2)类的定义要包含以下的要素ABD。

(A)类的属性(B)类所要执行的操作(C)类的编号(D)属性的类型(3)面向对象程序的基本特征不包括B。

(A)封装(B)多样性(C)抽象(D)继承(4)下列关于类与对象的关系的说法不正确的是A。

(A)有些对象是不能被抽象成类的(B)类给出了属于该类的全部对象的抽象定义(C)类是对象集合的再抽象(D)类用来在内存中开辟一个数据区,并存储新对象的属性3. 简答题(1)什么是对象?试着列举三个现实中的例子。

对象是某种可被人感知的事物,也可是思维\感觉或动作所能作用的物质或精神体,例如桌子.椅子.汽车等。

(2)什么是抽象?抽象是对现实世界信息的简化。

能够通过抽象将需要的事物进行简化、将事物特征进行概括、将抽象模型组织为层次结构、使软件重用得以保证。

(3)什么是封装?它有哪些好处?封装就是把对象的状态和行为绑在一起的机制,使对象形成一个独立的整体,并且尽可能地隐藏对象的内部细节。

封装有两个含义;一是把对象的全部状态和行为结合在一起,形成一个不可分割的整体。

对象的私有属性只能够由对象的行为来修改和读取。

二是尽可能隐蔽对象的内部细节,与外界的联系只能够通过外部接口来实现。

通过公共访问控制器来限制对象的私有属性,使用封装具有以下好处:避免对封装数据的未授权访问、帮助保护数据的完整性、当类的私有方法必须修改时,限制了在整个应用程序内的影响。

java语言程序设计(基础篇) 第七章

java语言程序设计(基础篇) 第七章
3
7.2. 为对象定义类
例如一个圆对象(circle),有数据域圆半径( radius)(标识了圆的属性),圆的行为就是 其面积可以通过方法getArea计算而得。同类型 的对象使用一个公共的类来定义。类就是定义 对象的数据和方法的模板.。一个对象是类的实 例(instance)。你可以生成一个类的很多个实 例,产生一个实例也叫做实例化(instantiation
To distinguish between object reference variables and primitive data type variables (§7.4).
To use classes in the Java library (§7.5).
To declare private data fields with appropriate get and set methods to make class easy to maintain (§7.6-7.8).
第7章 对象和类
在前一部分(2到6章),我们学习了编程基础,学会 使用基本数据类型、控制语句、方法以及数组 ,这些都是所有的面向过程的语言都具有的特 征,但, Java,是个面向对象的语言,不但具有 面向过程语言的要素,也具有抽象、封装、继 承、多态等特征以实现强大的灵活性、模块化 、以及可重用性以开发软件,在这一部分,我 们将学习如何定义、扩展以及使用类与对象
).术语对象、实例通常可互用,类和对象的关
系类似于书版和从书版印刷出很多的书。 下面是个圆的例子。
4
对象
类名: Circle
数据域: radius is _______
方法: getArea
一个类模板
圆对象 1
数据域: radius is 10

数据结构-第7章图答案

数据结构-第7章图答案

7.3 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点, 并且使图中的每个顶点仅被访问一次的过程。 一、深度优先搜索 从图中某个顶点V0 出发,访问此顶点,然后依次 从V0的各个未被访问的邻接点出发深度优先搜索遍 历图,直至图中所有和V0有路径相通的顶点都被访 问到,若此时图中尚有顶点未被访问,则另选图中 一个未曾被访问的顶点作起始点,重复上述过程, 直至图中所有顶点都被访问到为止。
void BFSTraverse(Graph G, Status (*Visit)(int v)) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组 visited。 for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; InitQueue(Q); // 置空的辅助队列Q for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) { // v尚未访问 EnQueue(Q, v); // v入队列 while (!QueueEmpty(Q)) { DeQueue(Q, u); // 队头元素出队并置为u visited[u] = TRUE; Visit(u); // 访问u for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) ) if ( ! visited[w]) EnQueue(Q, w); // u的尚未访问的邻接顶点w入队列Q
4。邻接多重表
边结点
mark ivex
顶点结点
ilink
jvex
jlink
info
data
firstedge
#define MAX_VERTEX_NUM 20 typedef emnu {unvisited, visited} VisitIf; typedef struct Ebox { VisitIf mark; // 访问标记 int ivex, jvex; // 该边依附的两个顶点的位置 struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条 边 InfoType *info; // 该边信息指针 } EBox; typedef struct VexBox { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 } VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; // 无向图的当前顶点数和边数 } AMLGraph;

第7章分析问题-课件

第7章分析问题-课件

第7章 分析问题
2024/11/1
8
7.3 分析过程概述
1. 使用系统需求模型查找候选 的类,以描述与系统相关的 对象,并在类图上建立它们
2. 确定类之间的关系(关联、聚 合、复合和继承)
3. 确定类的属性(对象的、已 指定的简单特性)
第7章 分析问题
2024/11/1
9
分析过程概述
4. 检查系统用例,确定已有的 对象支持它们。在检查过程 中微调类、属性和关系,这 个用例的实现过程将生成一 些操作,来补充属性
{...}//不需要创建任何Person对
象,其Students都是已有的Person
对象
public void destroy()
{...}//只需要关掉School对象和 断开它与自己所有的Person对象的 关联即可,Person对象是不会销毁 的
}
2024/11/1
31
6. 实现关系
• 实现:指的是一个类元描述了 另一个类元保证实现的契约。 对类来说,就是一个类实现了 一个接口
• 组合是用带实心菱形的实线来表示。
第7章 分析问题
NewClass2
2024/11/1
29
复合关系
public Class Window {
private Menu menu; public Window() {
menu = new Menu(); }//可以在这时候创建Menu对象, 也可以在之后创建
• 对于具有聚集关系(尤其是强聚集关系)的两个对 象,整体对象会制约它的组成对象的生命周期。部 分类的对象不能单独存在,它的生命周期依赖于整 体类的对象的生命周期,当整体消失,部分也就随 之消失。比如张三的电脑被偷了,那么电脑的所有 组件也不存在了,除非张三事先把一些电脑的组件 (比如硬盘和内存)拆了下来。

第 7章 类和对象

第 7章  类和对象

char GetSex(); };
7.5 数据成员的初始化

1.在构造函数的函数体中进行初始化。 2.在构造函数的头部初始化。 3.混合初始化。 4.拷贝构造函数
1. 在构造函数的函数体中初始化
class Person { char m_strName[20]; int m_nAge; int m_nSex; Person(){ strcpy(m_strName,”XXX”); m_nAge=0; m_nSex=0; } Person(char *name, int age, char sex) public:

家庭情况


基本工资: double 岗位津贴: double 劳保福利: double 独生子女: double 房租: double 电费: double 水费: double 取暖费: double 保育费: double 实发工资: double
类(Class)----数据类型
<数据成员或成员函数表>;
例7-1 定义一个Person类,用来说明人员类对象
// Example 7-1:定义Person类 class Person {private: char m_strName[20]; int m_nAge; int m_nSex; public: void Register(char *name, int age, char sex); char * GetName(); int GetAge(); char GetSex(); void ShowMe(); };
3. 对象的引用

对象是包含现实世界物体特征的抽象实体,反映了系统为之保 存信息和(或)与之交互的能力。

C#习题第7-12章

C#习题第7-12章

第七章类和对象一、选择题1.下列关于构造函数的描述正确的是()A)构造函数可以声明返回类型。

B)构造函数不可以用private修饰C)构造函数必须与类名相同D)构造函数不能带参数2.下列关于C#中索引器理解正确的是( )A)索引器的参数必须是两个或两个以上B)索引器的参数类型必须是整数类型C)索引器没有名字D)以上皆非3.以下类MyClass 的属性count 属于_____属性.class MyClass{int i;int count{get{ return i; }}}A)只读B)只写C)可读写D)不可读不可写4.类MyClass 中,下列哪条语句定义了一个只读的属性Count?A)private int Count;B)private int count;public int Count{get{return count;}}C)public readonly int Count;D)public readonly int Count{get{ return count;}set{count = value;}}二、填空题1.面向对象最重要的特点有、、。

2.默认的构造函数为,析构函数为。

三、简答题1.简述类和对象的关系2.请叙述属性与索引器的区别。

3.下列的Main 方法的定义是否为合法的程序入口点?namespace MyProgram{public static void Main() {MyClass.DoSomething();}class MyClass{public static void DoSomething(){……}}}4.请写出类声明的语法格式。

5.什么是常量?关键字是什么?6.请比较关键字readonly和const的区别。

7.构造函数有何特点?8.什么是重载?通过举例说明,有的程序中使用重载的必要性。

9.什么是属性过程?为何要使用属性过程?四、程序分析题1.下面程序是否有误?public int staticInt ;static MyClass(){Console.WriteLine(staticInt);Console.WriteLine("The static constructor invoked.");staticInt=1;}2.某文件中有类MyClass,代码如下:class MyClass{ public void MyFunc() {…}public static void MyMethod(){…}}现要在同一文件中类MainClass中使用MyClass类中的两个方法,请完成下面代码class MainClass{ static void Main(){//本行前添加调用MyFun方法的代码。

软件工程 第7章--面向对象设计

软件工程 第7章--面向对象设计
8
§1. OOD准则
5、Cohesion:模块内各个元素彼此结合的紧密程度。 服务内聚(service cohesion):一个服务只完成一个功能。
类内聚(class cohesion):一个类只有一个用途,否则分 解之。
一般-特殊内聚(general-particular cohesion):
17
类构件
类构件:面向对象技术中的“类” 。类构件有3种 重用方式:
–实例重用 –继承重用 –多态重用 1. 可重用类构件应具备的特点 (1) 模块独立性强。具有单一、完整的功能,且经 过反复测试被确认是正确的。是一个不受或很少受 外界干扰的封装体,其内部实现在外面是不可见的。
18
(2) 具有高度可塑性。软构件的应用环境比集成电 路更广阔、更复杂。显然,要求一个软构件能满足 任何一个系统的设计需求是不现实的。因此,可重 用的软构件必须具有高度可裁剪性,必须提供为适 应特定需求而扩充或修改已有构件的机制,而且所 提供的机制必须使用起来非常简单方便。
对象 设计
面向对 象分析
人机界 面设计
任务管 理设计
数据管 理设计
4
§1. OOD准则
§1. OOD准则:优秀软件设计的一个重要特点是 容易维护
回顾:SD准则包括
Modularization Information hiding
Abstraction
Module independence
对于 OOD有类似的准则: 1、Module = Object
• Inheritance —— 无须改动原有代码
13
② 设计重用 —— 当移植系统时
§3. 软件重用
③ 分析重用 —— 当需求未变,而系统结构改变 时(例如将HDIS改为OO实现)

《实用软件工程》第7章 面向对象分析

《实用软件工程》第7章 面向对象分析
一般来说,应该按照问题领域而不是功能分解的方法来确定主题。此外确定主题应遵循 “使不同主题内的类之间依赖和交互最少”的原则来确定主题,可以使用UML的包来展现主题。
21
划分主题
B.主题图 上述的主题划分的最终结果能够形成一个完整的对象类图和一个主题图。 主题图一般有如下3种表示方式。 • 展开方式
18
建立对象模型
复杂问题(大型系统)的对象模型 通常由下述5个层次组成:主题层(也称 为范畴层)、类与对象层、结构层、属 性层和服务层,如图所示。
上述5个层次对应着在面向对象分析 过程中建立对象模型的5项主要活动:划 分主题;找出类与对象;识别结构;定 义属性;定义服务。实际上五项活动没 有必要的完成顺序,设计时也不需要严 格遵守自顶向下原则。
12
面向对象分析原则
1.定义有实际意义的对象 特别要注意的是,一定要把在应用领域中有意义的、与所要解决的问题有关系的所有事物作为对象,
既不能遗漏,也不要定义无关对象。 2.模型的描述要规范、准确
强调实体的本质,忽略无关的属性。对象描述应尽量使用现在时态,陈述语句,以保证语义的清晰。 定义对象时还应该描述对象之间的关系及对象的背景信息 3.共享性
27
确定属性
例:多媒体商店销售系统
需要处理的文件:图像文件和声音文件,都拥有名称和唯一编码,作者信息和 格式信息,声音文件还包括文件时长(秒)。 功能:①添加新的媒体文件;
②通过编码查找需要的文件; ③删除指定文件; ④统计系统中文件的数量。
28
确定属性
分析过程:根据文件的信息,图像文件和声音文件的类都需要有属性:id-编码,author-作者, format-格式。为了方便处理,还可加入source-文件位置。由功能①③,应该有按参数构造和按编码 删除的两个方法。此外还有findByld-查找,count-查找两个方法。

第7章 类与对象

第7章 类与对象
休息 7
抽象实例——人
OOP
数据抽象:
的 基 本 特 点
char *name,char *sex,int age,int id
代码抽象:
生物属性角度: GetCloth(), Eat(), Step(),… 社会属性角度: Work(), Study() ,…
休息 8
前一页
封装
OOP 的 基 本 特 点
inline int Point::GetY() { return Y; }
对象
类 和 对 象

类的对象是该类的某一特定实体,即 类类型的变量。
声明形式: 类名
例:
对象名;

Clock myClock;
前一页
休息
29
类中成员的访问方式
类 和 对 象

类中成员互访
– 直接使用成员名

类外访问
– 使用“对象名.成员名”方式访问 public 属性的成员
为了提高运行时的效率,对于较简单的函 数可以声明为内联形式。
函 数 成 员 的 定 义
定义方式二:
将成员函数定义为内联成员函数。 两种格式: (1)显式定义:在类外定义,用inline关键 字. (2)隐式定义:直接将函数体的定义放在类 的声明内。

休息 23
前一页
显 式 定 义 内 联 函 数 成 员
Eg: 课本P195-196
inline void Clock :: SetTime(int NewH, int
NewM,int NewS) { } Hour=NewH; Second=NewS; Minute=NewM;
Inline void Clock :: ShowTime()

第7章-实用软件工程(第4版)-陆惠恩-清华大学出版社

第7章-实用软件工程(第4版)-陆惠恩-清华大学出版社

7.5.4 面向对象设计的启发规则
1.设计结果应该清晰易懂 2.一般—特殊结构的深度应适当 3.设计简单的类 4.使用简单的协议 5.使用简单的服务 6. 把设计变动减到最小
《实用软件工程(第3版)》 陆惠恩编著
13
7.6 面向对象系统的实现
7.6.1 选择面向对象语言
1. 选择编程语言的关键因素 2. 面向对象语言的技术特点 3.选择面向对象语言的实际因素
《实用软件工程(第3版)》 陆惠恩编著
10
4 、 画状态转换图
【例7.5】分别画出旅馆管理系统中旅客和床位的状态转换图。
《实用软件工程(第3版)》 陆惠恩编著
11
7.4 建立功能模型
确定输入、输出值 画数据流图 定义服务
7.5 面向对象设计
7.5.1 系统设计
1. 将系统分解为子系统 2. 设计问题域子系统 3. 设计人-机交互子系统 4. 设计任务管理子系统 5. 设计数据管理子系统
7.7.2 面向对象的测试步骤
1、制定测试计划 2、设计测试用例 3、实现测试构件 4、集成测试 5、系统测试 6、测试评估
《实用软件工程(第3版)》 陆惠恩编著
15
第7章 小结
面向对象方法是一种将数据和处理相结合的方法。 面向对象方法不强调分析与设计之间的严格区分。 面向对象分析
1、发现对象 2. 分析对象之间的关系 3.划分主题 4.编写脚本、建立动态模型 5.建立功能模型
《实用软件工程(第3版)》 陆惠恩编著
3
7.2.3 确定类的相互关系
1. 类的一般-特珠关系
《实用软件工程(第3版)》 陆惠恩编著
4
2. 聚集关系
“整体—部分”关系
90 80 70 60 50 40 30 20 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(1)便于区分哪些类是相关的。
(2)在不同的包中,可以存在相同名称的类。 (3)可以使用包来控制访问权限。
预定义注解
常用的预定义注解包括@Deprecated、@Override和 @SuppressWarnings三种。@Deprecated注解用于标示弃用的类或者方 法等,它们应该不再使用。@Override注解通常用于修饰重写的方法,如 果开发人员并没有遵守重写的规则,则会给出提示。
this关键字的用途
在普通方法或者构造方法中,this表示当前对象的引用,即普通方法或者 构造方法被调用的对象。使用this就可以在普通方法和构造方法中使用当 前对象的任何成员变量。this关键字有两种用途: (1)使用this来引用成员变量 (2)使用this来引用构造方法
访问权限修饰符
访问权限修饰符用来决定类中成员变量和方法(包括构造方法)能否被 其他类使用。可以将访问控制级别分成以下两类: (1)外部类级别,可以使用public或者不用修饰符。 (2)成员级别,可以使用public、private、protected或者不用修饰符。
局部变量的定义
在方法体中,可以声明局部变量来辅助完成复杂的操作。局部变量的声 明与成员变量相同,但是在使用前,必须要对其进行初始化。
构造方法的定义
在类中,还可以定义一种特殊的方法,即构造方法。构造方法主要用于 创建对象,它可以同时指定对象的状态。构造方法与普通方法的差别主 要有以下两点: (1)不能有返回值。 (2)构造方法的名称与包含该构造方法的类名称完全相同。
final关键字的含义是不可变,可以用来修饰类、成员变量和成员方法。如 果修饰类,则表示该类不能够被继承。如果修饰成员变量,则表示该变 量一旦被赋值之后就不能修改。如果修饰成员方法,则表示该方法不能 够被子类重写。
包的定义与使用
包是Java中管理源代码文件的方式。在前面的内容中,编写的Java文件 都使用了默认的包空间。这相当于把所有的文件都放置在Windows系统 的D盘。随着文件个数不断的增加,肯定增加了文件命名的难度,也不便 于文件的管理。 通过使用包,可以具有如下优势:
什么是继承?
当处理一个问题时,可以将一些有用的类保留下来,当遇到同样问题时 拿来复用。假如这时需要解决信鸽送信的问题,我们很自然就会想到鸟 类。由于鸽子属于鸟类,鸽子具有鸟类相同的属性和行为。便可以在创 建信鸽类时将鸟类拿来复用,并且保留鸟类具有的属性和行为。不过, 并不是所有的鸟都有送信的习惯,因此还需要再添加一些信鸽具有的独 特属性以及行为。鸽子类保留了鸟类的属性和行为,这样就节省了定义 鸟和鸽子共同具有的属性和行为的时间,这就是继承的基本思想。可见 软件的代码使用继承思想可以缩短软件开发的时间,复用那些经定义 好的类可以提高系统性能,减少系统在使用过程中出现错误的几率。
@SuppressWarnings注解用于压制警告信息,例如没有指明泛型的类型。
自定义注解
public @interface Information { String author(); // 用于保存作者信息
String date(); // 用于保存文件创建时间
String lastModifyDate();// 用于保存文件最后修改时间 int version(); // 用于保存文件的版本信息 }
什么是类?
类就是同一类事物的统称,如果将现实世界中的一个事物抽象成对象, 类就是这类对象的统称,比如鸟类、家禽类、人类等。类是构造对象时 所依赖的规范,比如,一只鸟具有一对翅膀,而它可以通过这对翅膀飞 行,而基本上所有的鸟都具有翅膀这个特性和飞行的技能,这样的具有 相同特性和行为的一类事物就称为类,类的思想就是这样产生的。前面 已经描述过类与对象之间的关系,对象就是符合某个类定义所产生出来 的实例。更为恰当的描述是:类是世间事物的抽象称呼,而对象则是这 个事物相对应的实体。如果面临实际问题,通常需要实例化类对象来解 决。比如解决大雁南飞的问题,这里只能拿这只大雁来处理这个问题, 不能拿大雁类或是鸟类来解决。
加访问权限修饰符、类的继承关系以及实现的接口。例如: public class ClassName extends MyClass implements MyInterface { }
成员变量的定义
根据变量在类中声明的位置不同,可以将其进行如下分类: (1)声明在类中的变量叫做成员变量。
(2)声明在块和方法中的变量叫做局部变量。
方法参数的传递
在前面的章节中,已经讲述如何创建方法。在参数列表中,可以使用基 本类型和引用类型,两者的传递方式都是值传递。 值传递就是先将参数复制一份,然后将复制的内容传递到方法中。此时 方法操作的内容与原来的参数无关。 对于引用类型,传递参数后,引用类型的值并未发生变化。
对象创建和使用
对象可以认为是在一类事物中抽象出某一个特例,通过这个特例来处理 这类事物出现的问题,在Java语言中通过new操作符来创建对象。以前 曾经在讲解构造方法中介绍过每实例化一个对象就会自动调用一次构造 方法,实质上这个过程就是创建对象的过程。准确地说,可以在Java语 言中使用new操作符调用构造方法创建对象。其语法格式如下: Test test=new Test(); Test test=new Test("a"); 上面的代码中,等号左边表示对象的声明,右边表示对象的实例化。可 以在实例化时指明对象的属性。
(3)声明在方法声明中的变量叫做参数。
普通方法的定义
在面向对象编程语言中,使用方法来实现对象之间的通信和改变对象的 属性。Java中,典型的方法声明如下: public static void main(String[] args) { } 在声明方法时,只有返回值、方法名称、一对小括号和一对大括号是必 须的。
什么是多态?
多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类以及 相关类。该统一风格可以由父类来实现,根据父类统一风格的处理,就 可以实例化子类的对象。由于整个事件的处理都只依赖于父类的方法, 所以日后只要维护和调整父类的方法即可,这样降低了维护的难度,节 省了时间。 在提到多态的同时,不得不提到抽象类和接口,因为多态的实现并不依 赖具体类,而是依赖于抽象类和接口。
类和对象
本讲大纲: 1、面向对象编程基本概念
2、类和对象
3、注解
什么是对象?
现实世界中,随处可见的一种事物就是对象。对象是事物存在的实体, 比如人类、书桌、电脑、高楼大厦等。人类解决问题的方式总是将复杂 的事物简单化,于是就会思考这些对象都是由哪些部分组成的。通常将 对象划分为两个部分,即动态部分与静态部分。静态部分,顾名思义, 就是不能动的部分,这个部分被称为“属性”。任何对象都会具备其自 身属性,例如一个人,它包括高矮、胖瘦、性别、年龄等。然而具有这 些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣、 微笑、说话、行走,这些是这个人具备的行为(动态部分),人类通过 探讨对象的属性和观察对象的行为了解对象。
static关键字的用途
成员变量和成员方法都需要先创建对象才能够使用。因此,对于不同的 对象,成员变量可以具有不同的状态,而且彼此不会受到影响。如果需
要直接使用成员变量和成员方法而不创建对象,则可以使用static关键字。 它表明被修饰的成员是属于这个类的,而不是某个特定的对象。
final关键字的用途
类的定义
class ClassName { } 上面的代码中class是Java的关键字,用来表示类。ClassName是这个类
的名称,通常推荐使用英语名字,并且首字母大写。两个大括号表示类
定义的范围,其中的内容可以为空。 在大括号中,通常包括成员变量、构造方法和普通方法。它们用来表示
类的属性和行为。上面的代码中定义的类是最简单的形式,可以为其增
相关文档
最新文档