书签 分享 收藏 举报 版权申诉 / 143
上传文档赚钱

类型四川大学软件学院课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4777599
  • 上传时间:2023-01-09
  • 格式:PPT
  • 页数:143
  • 大小:3.92MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《四川大学软件学院课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    四川大学 软件 学院 课件
    资源描述:

    1、第6讲 设计工程补充:关于学习方法心有疑随札记就人问求确义节选自:弟子规.余力学文回顾:非功能性需求o非功能线性需求(质量属性):n可承载性:系统或用例的可承载性表述了在给定时间内系统能够被使用的次数。n安全:数据/信息安全。n紧急程度:用例的紧急程度。n使用与响应的频率:理解使用频率有助于设计人员明白需要花费多大的努力来进行代码优化。n可用性:可用性是人界界面设计关注的内容,直接关系到系统的有效部署和可接受性方面的问题。n可靠性:可靠性包括了有效性、从错误中恢复的能力和精确性。n可维护性:软件的可维护性是指维护人员为纠正软件系统出现的错误或缺陷,以及为满足新的要求而理解、修改和完善软件系统的

    2、难易程度。n可扩展性:软件环境的变化(可能是业务环境,运行环境)导致软件要进行改动才能满足人们对它的要求,这种系统本身适应变化的能力就是可扩展性。n主要内容o 6.1 设计工程n6.1.1为什么要设计?n6.1.2软件设计是建模活动的最后一个软件工程活动 o 6.2 设计模型的元素-体系结构元素o 6.3设计模型的元素-构件级设计o 6.4设计模型的元素-用户界面设计o 6.5设计模式o 6.6小结o 6.7习题与思考题 6.1.1设计工程:为什么要设计?o 本节内容 n 6.1.1.1取决于“需求模型的特点”n 6.1.1.2“用代码来表达设计”难以展现体系结构的全貌n 6.1.1.3设计之

    3、所以重要在于它允许在软件实现前评估软件的质量6.1.1设计工程:为什么要设计?o 6.1.1为什么要设计?n 6.1.1.1取决于“需求模型的特点”n 6.1.1.2“用代码来表达设计”难以展现体系结构的全貌n 6.1.1.3设计之所以重要在于它允许在软件实现前评估软件的质量6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”o 问题陈述:绘制一个迷宫,迷宫由多个房间组成,每个房间由4面组成,当你在一个房间试图进入一扇门,门开着,则进入另一个房间;否则,就碰壁。6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”MazeAddRoom()RoomNo()

    4、RoomEnter()SetSide()GetSide()roomNumberWallEnter()DoorEnter()isOpen1*10.40.44 class Room public:Room(int roomNo);void Enter();void SetSide(Direction,?private:int _roomNumber;Wall _wall4;Door _door4;其中,用枚举类型Direction来指定房间的东南西北:enum Direction North,South,East,West 6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”c

    5、lass Room public:Room(int roomNo);void Enter();void SetSide(Direction,Side*);Side*GetSide(Direction)const;private:int _roomNumber;Side*_sides4;MazeAddRoom()RoomNo()RoomEnter()SetSide()GetSide()roomNumberSideEnter()DoorEnter()isOpen1*14WallEnter()6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”MazeAddRoom()RoomN

    6、o()RoomEnter()SetSide()GetSide()roomNumberSideEnter()DoorEnter()isOpen1*14WallEnter()MazeAddRoom()RoomNo()RoomEnter()SetSide()GetSide()roomNumberMapSiteEnter()DoorEnter()isOpen1*WallEnter()14MazeGameCreateMaze()MazeAddRoom()RoomNo()RoomEnter()SetSide()GetSide()roomNumberMapSiteEnter()DoorEnter()isOp

    7、en1*WallEnter()14RoomDoorMazeGameCreateMaze()WallMazeo 创建一个有2个房间的迷宫6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”Class MapSite/抽象类 public:/纯虚函数 virtual void Enter()=0;Class Room:public MapSite public:Room(int roomNo);MapSite*GetSide(Direction)const;void SetSide(Direction,MapSite*);virtual void Enter();private

    8、:MapSite*_sides4;int _roomNumber;enum Direction North,South,East,West);Class Wall:public MapSite public:Wall();virtual void Enter();Class Door:public MapSite public:Door(Room*=0,Room*=0);virtual void Enter();Room*OtherSideFrom(Room*);private:Room*_room1;Room*_room2;bool _isOpen;Room1Room2int main()M

    9、azeGame game;game.CreateMaze();return 0;Class Maze public:Maze();void AddRoom(Room*);Room*RoomNo(int)const;private:/Class MazeGame public:MazeGame();Maze*CreateMaze();private:/int main()MazeGame game;game.CreateMaze();return 0;Room1Room2int main()MazeGame game;game.CreateMaze();return 0;Room1Room2Ma

    10、ze*MazeGame:CreateMaze()Maze*aMaze=new Maze;Room*r1=new Room(1);Room*r2=new Room(2);Door*theDoor=new Door(r1,r2);aMaze-AddRoom(r1);aMaze-AddRoom(r2);r1-SetSide(North,new Wall);r1-SetSide(East,theDoor);r1-SetSide(South,new Wall);r1-SetSide(West,new Wall);r2-SetSide(North,new Wall);r2-SetSide(East,new

    11、 Wall);r2-SetSide(South,new Wall);r2-SetSide(West,theDoor);return aMaze;Class MapSite/抽象类 public:/纯虚函数 virtual void Enter()=0;Class Room:public MapSite public:Room(int roomNo);MapSite*GetSide(Direction)const;void SetSide(Direction,MapSite*);virtual void Enter();private:MapSite*_sides4;int _roomNumbe

    12、r;enum Direction North,South,East,West);Class Wall:public MapSite public:Wall();virtual void Enter();Class Door:public MapSite public:Door(Room*=0,Room*=0);virtual void Enter();Room*OtherSideFrom(Room*);private:Room*_room1;Room*_room2;bool _isOpen;Class Maze public:Maze();void AddRoom(Room*);Room*Ro

    13、omNo(int)const;private:/;Class MazeGame public:MazeGame();Maze*CreateMaze();private:/;6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”o 硬编码问题导致重写CreateMaze()函数。RoomRoomWithABombEnchantedRoomDoorDoorNeedingSpellMazeGameCreateMaze()CreateEnchantMaze()CreateBombedMaze()WallBombedWallMaze6.1.1设计工程:为什么要设计?6.1.1.1取决于

    14、“需求模型的特点”o 解决办法:抽象工厂模式的结构。AbstractFactoryCreateProductA()CreateProductA()ConcreteFactory1CreateProductA()CreateProductA()ConcreteFactory2CreateProductA()CreateProductA()AbstractProductAProductA2ProductA1AbstractProductBProductB2ProductB1Client6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”MazeFactoryCreateMaze

    15、()CreateRoom()CreateDoor()CreateWall()EnchantMazeFactoryCreateRoom()CreateDoor()BoombedMazeFactoryCreateRoom()CreateWall()RoomRoomWithABombEnchantedRoomDoorDoorNeedingSpellMazeGameCreateMaze(f:MazeFactory)WallBombedWallMazeo利用“抽象工厂模式”解决重用问题。MazeAddRoom()RoomNo()RoomEnter()SetSide()GetSide()roomNumbe

    16、rMapSiteEnter()DoorEnter()isOpen1*WallEnter()146.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”int main()MazeGame game;BombeMazefactory factory;game.CreateMaze(factory);return 0;class Mazefactory public:Mazefactory();/继承与多态性:虚拟函数,可重载 virtual Maze*CreateMaze()const return new Maze;virtual Room*CreateRoom(int n)c

    17、onst return new Room(n);virtual Wall*CreateWall()const return new Wall;virtual Maze*CreateDoor(Room*r1,Room*r2)const return new Door(r1,r2);Class MapSite/抽象类 public:/纯虚函数 virtual void Enter()=0;Class Room:public MapSite public:Room(int roomNo);MapSite*GetSide(Direction)const;void SetSide(Direction,M

    18、apSite*);virtual void Enter();private:MapSite*_sides4;int _roomNumber;enum Direction North,South,East,West);Class Wall:public MapSite public:Wall();virtual void Enter();Class Door:public MapSite public:Door(Room*=0,Room*=0);virtual void Enter();Room*OtherSideFrom(Room*);private:Room*_room1;Room*_roo

    19、m2;bool _isOpen;Class Maze public:Maze();void AddRoom(Room*);Room*RoomNo(int)const;private:/;Class MazeGame public:MazeGame();Maze*CreateMaze(MazeFactory&);private:/;class EnchantedMazeFactory:Mazefactory public:EnchantedMazefactory();/继承与多态性:虚拟函数非纯虚函数,可继承可重载 virtual Room*CreateRoom(int n)const retu

    20、rn new EnchantedMazeRoom(n,CastSpell();virtual Maze*CreateDoor(Room*r1,Room*r2)const return new DoorNeedingSpell(r1,r2);protected:Spell*CastSpell()const;class BombedMazeFactory:Mazefactory public:EnchantedMazefactory();/继承与多态性:虚拟函数非纯虚函数,可继承可重载 virtual Room*CreateRoom(int n)const return new RoomWithA

    21、Bomb(n);virtual Maze*CreateWall()const return new BombedWall();Maze*MazeGame:CreateMaze(MazeFactory&factory)Maze*aMaze=factory.Createmaze();Room*r1=factory.CreateRoom(1);Room*r2=factory.CreateRoom(2);Door*theDoor=factory.Create Door(r1,r2);aMaze-AddRoom(r1);aMaze-AddRoom(r2);r1-SetSide(North,factory

    22、.CreateWall);r1-SetSide(East,theDoor);r1-SetSide(South,factory.Create Wall);r1-SetSide(West,factory.CreateWall);r2-SetSide(North,factory.CreateWall);r2-SetSide(East,factory.CreateWall);r2-SetSide(South,factory.CreateWall);r2-SetSide(West,theDoor);return aMaze;Room1Room2class RoomWithABomb:Room;class

    23、 EnchantedMazeRoom:Room;class DoorNeedingSpell:Door;class BombedWall:Wall;6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”o比较int main()MazeGame game;game.CreateMaze();return 0;Room1Room2Maze*MazeGame:CreateMaze()Maze*aMaze=new Maze;Room*r1=new Room(1);Room*r2=new Room(2);Door*theDoor=new Door(r1,r2);aMaze-AddRo

    24、om(r1);aMaze-AddRoom(r2);r1-SetSide(North,new Wall);r1-SetSide(East,theDoor);r1-SetSide(South,new Wall);r1-SetSide(West,new Wall);r2-SetSide(North,new Wall);r2-SetSide(East,new Wall);r2-SetSide(South,new Wall);r2-SetSide(West,theDoor);return aMaze;int main()MazeGame game;BombeMazefactory factory;gam

    25、e.CreateMaze(factory);return 0;Maze*MazeGame:CreateMaze(MazeFactory&factory)Maze*aMaze=factory.Createmaze();Room*r1=factory.CreateRoom(1);Room*r2=factory.CreateRoom(2);Door*theDoor=factory.Create Door(r1,r2);aMaze-AddRoom(r1);aMaze-AddRoom(r2);r1-SetSide(North,factory.CreateWall);r1-SetSide(East,the

    26、Door);r1-SetSide(South,factory.Create Wall);r1-SetSide(West,factory.CreateWall);r2-SetSide(North,factory.CreateWall);r2-SetSide(East,factory.CreateWall);r2-SetSide(South,factory.CreateWall);r2-SetSide(West,theDoor);return aMaze;Room1Room2class RoomWithABomb:Room;class EnchantedMazeRoom:Room;class Do

    27、orNeedingSpell:Door;class BombedWall:Wall;6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”考虑“可扩展性”非功能需求o比较RoomRoomWithABombEnchantedRoomDoorDoorNeedingSpellMazeGameCreateMaze()CreateEnchantMaze()CreateBombedMaze()WallBombedWallMazeMazeFactoryCreateMaze()CreateRoom()CreateDoor()CreateWall()EnchantMazeFactoryCrea

    28、teRoom()CreateDoor()BoombedMazeFactoryCreateRoom()CreateWall()RoomRoomWithABombEnchantedRoomDoorDoorNeedingSpellMazeGameCreateMaze(f:MazeFactory)WallBombedWallMaze6.1.1设计工程:为什么要设计?6.1.1.1取决于“需求模型的特点”考虑“可扩展性”非功能需求6.1.1设计工程:为什么要设计?o 6.1.1为什么要设计?n 6.1.1.1取决于“需求模型的特点”n 6.1.1.2“用代码来表达设计”难以展现体系结构的全貌n 6.1.

    29、1.3设计之所以重要在于它允许在软件实现前评估软件的质量6.1.2软件设计是建模活动的最后一个软件工程活动o本节内容:n6.1.2.1设计思想o6.1.2.1.1软件质量属性o6.1.2.1.2设计过程、设计过程指导原则和目标n6.1.2.1.2.1软件设计是一个迭代过程n6.1.2.1.2.2设计过程的目标n6.1.2.1.2.3设计的技术标准n6.1.2.1.2.4评估设计所表示的质量o6.1.2.1.3软件设计方法和设计概念n6.1.2.1.3.1软件设计方法及其共同特征n6.1.2.1.3.2设计概念n6.1.2.2.软件设计做什么o6.1.2.2.1 通用的设计任务集o6.1.2.2

    30、.2设计模型n6.1.2.2.2.1需求模型到设计模型的转换n6.1.2.2.2.2设计模型的维度6.1.2软件设计是建模活动的最后一个软件工程活动o 6.1.2.1.1软件质量属性n Hewlett-Packard制定了一系列的软件质量属性,并取其首字母组合为FURPS:o 功能性(functionality)。o 易用性(usability)。o 可靠性(reliability)。o 性能(performance)。o 可支持性(supportability)。n 怎么在设计时,来认识和思考这些质量属性呢?6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.2设计过程、设计

    31、过程指导原则和目标n6.1.2.1.2.1软件设计是一个迭代过程:软件设计是一个迭代过程,通过这个过程,需求被变换为用于构建软件的“蓝图”。最初,这个蓝图描述了软件的整体视图,也就是说,设计是在高抽象层次的表达在该层次上可以直接跟踪到特定的系统目标和更详细的数据、功能和行为需求。随着设计迭代的开始,后续的精化导致更低抽象层次的设计表示。这些表示仍然能够跟踪到需求、但是连接更加错综复杂了。n6.1.2.1.2.2设计过程的目标o(1)设计必须实现所有包含在需求模型中的明确需求,而且必须满足利益相关者期望的所有隐含需求。o(2)对于那些生成代码的人和那些进行测试以及随后维护软件的人而言,设计必须是

    32、可读的、可理解的指南。o(3)设计必须提供软件的全貌、从实现的角度说明数据域、功能域和行为域。6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.2.3设计的技术标准n(1)设计应展现出这样一种结构:已经使用可识别的体系结构风格或模式创建;由展示出良好设计特征的构件构成;能够以演化(非线性的、迭代的但对较小的系统来说,设计有时可以线性的开发)的方式实现,以便于实现和测试。n(2)设计应当模块化;也就是说,应将软件逻辑的划分为元素或子系统。n(3)设计应该包含数据、体系结构、接口和构件的清晰表示。n(4)设计应导出数据结构,这些数据结构适用于要实现的类,并从可识别的数据模式提取。

    33、n(5)设计应显示独立功能特征的构件。n(6)设计应导出接口,这些接口降低了构件之间以及与外部环境连接的复杂性。n(7)设计的导出应根据软件需求分析过程中获取的信息采用可重复的方法进行。n(8)应使用能够有效的传达其意义的表示法来表达设计。o6.1.2.1.2.4评估设计所表示的质量n如何在设计过程中评估质量?技术评审(Technical Review,TR)o(1)组织开展方式(过程层面)。o(2)评审设计模型/工作产品(技术层面)。6.1.2软件设计是建模活动的最后一个软件工程活动o 6.1.2.1.3软件设计方法和设计概念n 6.1.2.1.3.1软件设计方法及其共同特征o 软件设计方法

    34、n结构化设计方法n面向对象方法n体系结构和设计模式o 共同特征n(1)将需求模型转换为设计表示的方法;n(2)表示功能性构件及他们之间结构的表示法;n(3)精化和分割的启发式方法;n(4)质量评估的指导原则。n 6.1.2.1.3.2设计概念6.1.2软件设计是建模活动的最后一个软件工程活动o 6.1.2.1.3软件设计方法和设计概念n 6.1.2.1.3.1软件设计方法及其共同特征n 6.1.2.1.3.2设计概念o(1)使用什么标准将软件分割为独立的构件?o(2)功能和数据结构的细节如何从软件的概念表示中分离出来?o(3)定义软件设计技术质量的统一标准是什么?6.1.2软件设计是建模活动的

    35、最后一个软件工程活动o6.1.2.1.3.2设计概念n抽象o(1)“当力图陈述一种解决方案时,面向问题的术语和面向实现的术语会同时使用”,以“提供更为详细的解决方案”。o(2)并且,软件设计师应“力图得到解决现有问题的过程抽象和数据抽象”。n求精o求精实际上是一个细化的过程。该过程从高抽象级上定义的功能陈述或信息描述开始,随着在每个细化(精化)的持续进行,将提供越来越多的细节。需求建模设计建模构造问题的需求过程抽象+数据抽象:用例图、分析类、CRC模型、行为模型、流模型用例图、分析类、CRC模型、行为模型、流模型过程抽象+数据抽象:体系结构、设计类、构件图、活动图、顺序图、部署图体系结构、设计

    36、类、构件图、活动图、顺序图、部署图过程抽象+数据抽象:源代码抽象高低精化/细化6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n“抽象和求精”概念的应用实例“4+1View”模型1个视图1个类图1个类对类的1个操作的详述透视关系构造关系抽象和求精的应用1:“4+1View模型”X14321.31.21.12.22.12.32.4抽象和求精的应用2:创建数据流图6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n“抽象和求精”概念与设计:体系结构设计构件级设计+人机界面设计.6.1.2软件设计是建模活动的最后一个软件工程活动o6.

    37、1.2.1.3.2设计概念n体系结构o体系结构的定义o“体系结构”作为一个设计概念提出来,从以下几个方面指定了体系结构设计表示应达成的内容:n结构特征。应定义系统的构件、构件被封装的方式以及构件之间相互作用的方式。n外部功能特征。应指出设计体系结构如何满足需求,应包括:性能需求、能力需求、可靠性需求、安全性需求、可适应性需求以及其他系统特征需求n相关系统族。体系结构应当能抽取出在一类相似系统开发中经常遇到的重复性模式。本质上,设计应当能够重用体系结构构件。o工作产品n关于这些特征的规格说明。n用一种或多种不同的模型来表示体系结构设计:结构模型。框架模型。动态模型。过程模型。功能模型。o体系结构

    38、描述语言6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n关注点有限分离:应当进行模块化,但在模块化时应注意将模块的数量保持在最小成本区域M附近。应该避免不足的模块化或过度的模块化问题。o关注点分离:n the perceived complexity:p1p2=the effort required to solve the problem:p1p2n the perceived complexity:p1p11+p12=把一个复杂问题分解为若干可管理的块来求解是会更容易。o模块化是关注点分离最常见的表现o模块化和软件成本n信息隐蔽:信息隐蔽原则建议模块应该

    39、“具备的特征是:每个模块对其它所有模块都隐藏自己的设计策略”。n功能独立:功能独立的概念是关注点分离、模块化、抽象和信息隐藏的直接产物。模块数量成本/工作量成本/模块集成成本总成本M:最小成本区域6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n方面:在理想情况下,一个方面作为一个独立的模块(构件)进行实施,而不是作为分散的或者和许多构件“纠缠的”软件片段进行实施。o关注点,包括要求、用例、特征、数据结构、服务质量问题、变量、知识产权边界、合作、模式以及合同等等。o横切关注点。考虑两个需求X和Y。“如果已经选择了一种软件分解精化分解即求精,在这种分解中,如果不

    40、考虑需求X的话,需求Y就不能得到满足”,这里,我们称“需求X横切需求Y”。o方面:一个横切关注点的表示。6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n方面,举例o 用例描述:用例:通过互联网访问摄像机监视显示摄像头视图(ACS-DCV)。主要参与者:房主。情景目标:从任何远程地点通过互联网查看遍布房间的摄像头输出。前提条件:必须完整配置系统;必须获得正确的用户身份证和密码。启动:房主在远离家的时候决定查看房屋内部。场景:.房主登录SafeHome产品网站。.房主输入他或者她的用户身份验证。.房主输入两个密码,每个都至少有8个字符的长度。.系统显示所有的主要

    41、功能按钮。.房主从主要功能按钮中选择“监视”。.房主选择“选取摄像头”。.系统显示房屋的平面设计图。.房主从房屋的平面设计图中选择某个摄像头的图标。.房主选择“视图”按钮。.系统显示一个由摄像头编号确定的视图窗口。.系统在视图窗口中以每秒一帧显示视频输出。异常:.身份证号或密码不正确或无法确认参见用例:“确认身份证号和密码”。.没有为该系统配置监视功能系统显示恰当的错误消息;参见用例:“配置监视功能”。.房主选择“查看所有摄像头的缩略视图快照”参见用例:“查看所有摄像头的缩略视图快照”。.平面设计图不可用或未配置显示恰当的错误消息,参见用例:“配置平面设计图”。.遇到报警条件参看用例“遇到报警

    42、条件”。6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n方面,举例n设计o 关注点=ACS-DCV。o 需求A=“房主通过放置在空间的相机访问视频”。o 需求B=“房主需要在使用监视模块之前,必须先进行验证。o A*是需求A的设计表示,B*是需求B的设计表示,而A*和B*则是关注点ACS-DCV的表示,而且B*横切A*。因而,B*就成为一个方面。o 应用“方面设计概念”支持方面设计。ACS_DCVA*B*/处理片段执行ACS_DCVA*执行B*验证6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n重构:o重构是使用这样一种方

    43、式改变软件系统的过程:不改变代码的外部行为而是改进其内部结构。o设计活动:n分析检查n修改 RoomRoomWithABombEnchantedRoomDoorDoorNeedingSpellMazeGameCreateMaze()CreateEnchantMaze()CreateBombedMaze()WallBombedWallMazeMazeFactoryCreateMaze()CreateRoom()CreateDoor()CreateWall()EnchantMazeFactoryCreateRoom()CreateDoor()BoombedMazeFactoryCreateRoom

    44、()CreateWall()RoomRoomWithABombEnchantedRoomDoorDoorNeedingSpellMazeGameCreateMaze(f:MazeFactory)WallBombedWallMaze1.硬编码问题导致重写CreateMaze()函数。2.修改6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n面向对象的概念o(1)应用在3个工作上:分析、设计和编码o(2)“面向对象”的基本观点n客观世界由对象组成,任何客观事物都是对象,复杂对象可以由简单对象组成。n具有相同数据和操作的对象可归纳成类,对象是类的一个实例。n类可以派

    45、生出子类,子类除了继承父类的全部特性外还可以有自己的特性。n对象之间的联系通过消息传递来维系。o(3)面向对象的特点n抽象性n封装性n继承性n多态性n共享性n强调对象结构而不是程序结构o(4)区分“面向对象”和“基于对象”两个不同的概念6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n设计类:o 需要将分析模型映射为设计类n 通过提供使类得以实现的设计细节对分析类进行细化。n 创建一组新的设计类实现支持业务解决方案的软件基础结构。o 将分析模型映射为设计类 n 将分析模型映射为5种不同类型的设计类用户界面类。业务域类。处理类。持久类。系统类。n 随着体系结构设

    46、计的进展,需要为每个设计类开发出完整的一组属性和操作。n 评审改进。完整性和充分性。原始性。高内聚。低耦合。6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n设计类:从本质上讲是“设计类概念”下的精细化。举例:用户场景:房主希望选择一个摄像机的时候,可以从一个平面设计图中进行选择。CameratypeIDLocationfieldViewpanAngleZoomSettingdetermineType()translateLocation()displayID()displayView()displayZoom()WallSegmenttypestartCoo

    47、rdinatestopCoordinatenextWallSegmentdetermineType()draw()typestartCoordinatestopCoordinatenextWindowdetermineType()draw()WindowDoortypestartCoordinatestopCoordinatenextDoordetermineType()draw()WalltypewallDimensiondetermineType()computeDimension()FloorPlantypenameoutsideDimensiondetermineType()posit

    48、ionFloorPlan()scale()changeColor()是其中的一部分放置在用于创建用于创建用于创建FloorPlanTypeoutsideDimensionaddCamera()addWall()addWindow()deleteSegment()Draw()CameratypeIDfieldViewpanAngleZoomSetting1*SegmentstartCoordinatestopCoordinategetType()draw()WallSegmentWindow1*精化:(1)摄像机有ID,其它无?=关系:一般关联,聚合。(2)属性nextWall=考虑一种“链表”

    49、的数据结构,则定义FloorPlan为容器类。(3)问题空间:类Wall=解空间:类Segment6.1.2软件设计是建模活动的最后一个软件工程活动o6.1.2.1.3.2设计概念n模式oChristopher Alexander:“每个模式都描述了一个在我们所处环境内反复发生的问题,然后描述该问题的核心解决方案,你可以几百次的重复使用该解决方案,而根本不需要用同样的方式重复工作两次。”o应用模式:n模式是否适用于当前的工作?n模式是否能够复用(而不是再去开发一次解决方案,以节约设计时间)?n模式是否能够用于指导开发一个类似的、但是功能或结构不同的模式?6.1.2软件设计是建模活动的最后一个软

    50、件工程活动o通用设计任务集n1.检查信息域模型,并为数据对象及其属性设计恰当的数据结构。n2.使用分析模型,选择一种适用于软件的体系结构风格。n3.将分析模型分割为若干个设计子系统,并在体系结构内分配这些子系统。o确保每个子系统是功能内聚的。o设计子系统接口。o为每个子系统分配分析类或构件。n4.创建一系列的设计类或构件:o将每个分析类描述转化为设计类。o根据设计标准检查每个设计类,考虑继承问题。o定义与每个设计类相关的方法和消息。o评估设计类或子系统,并为这些类或子系统选择设计模式。o评审设计类,并在需要时修改。n5.设计外部系统或设备所需要的所有接口。n6.设计用户接口:o评审任务分析的结

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:四川大学软件学院课件.ppt
    链接地址:https://www.163wenku.com/p-4777599.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库