徐迎晓 xuyingxiao@126.com 复旦大学软件学院 实现模型 徐迎晓 xuyingxiao@126.com 复旦大学软件学院.

Slides:



Advertisements
Similar presentations
面向对象与设计模式 RD 常见编程范式介绍  并行编程 - Process-orientedProcess-oriented  组件编程 - Component-basedComponent-based  事件驱动 - Service-oriented,Time-drivenService-orientedTime-driven.
Advertisements

6. 6 Overloading methods and constructors 6
語言測驗與評量教學.
第16章 代理模式 Website:
 圖書資料採購實務 曾淑賢.
-CHINESE TIME (中文时间): Free Response idea: 你周末做了什么?
叙事研究与教师成长 张肇丰.
专题八 书面表达.
用合作和探索教学方法 讲授《中文》的阅读课
Java Programming Hygiene - for DIDC
自衛消防編組任務職責 講 義 This template can be used as a starter file for presenting training materials in a group setting. Sections Right-click on a slide to add.
第一章 面向对象程序设计.
第4章 VHDL设计初步.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
程設一.
Module 1 My classmates.
第八章 分析與設計階段 – 物件導向設計(OOD)
教师如何促进自身专业成长 ——教师专业化的内涵、标准及发展途经
01 C++ (Dynamic Array, Sort & STL)
Unit2 School life Reading 2.
Unit 4 I used to be afraid of the dark.
Module 5 Shopping 第2课时.
I’m going to be a basketball player.
Chapter 1 OBJECT-ORIENTED ANALYSIS AND DESIGN
API设计实例分析 通用IO API.
軟體原型 (Software Prototyping)
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
初二英语写作课 课件 福建省闽清县第一中 王国豪
Unit title: 嗨!Hi! Introducing yourself in Chinese
Proteus 可视化设计 Drag, Drop and PLAY! Slide 1.
軟體工程 -物件導向程式設計與UML系統分析實作
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
單元3:軟體設計 3-2 順序圖(Sequence Diagrams)
创建型设计模式.
软件建模精要 面向对象软件建模技术.
唐大仕 JAVA 程序设计 怎样写好程序 唐大仕
Unit 4 My day Reading (2) It’s time for class.
黄海波 & 陶万山 with contribution by 劳晖
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
第4章 物件導向分析與設計簡介 4-1 物件導向的軟體系統開發 4-2 物件導向分析與設計 4-3 UML的物件導向分析與設計
但是如果你把它发给最少两个朋友。。。你将会有3年的好运气!!!
This Is English 3 双向视频文稿.
Java
第九單元 Classes and data abstraction I
Unit 1 What are those farmers doing ?
Oxford English Module 3 Out and about 8 Visiting museums.
INTRODUCTION TO C# & HANDLING DATA
Agile Software Development
Try to write He Mengling Daqu Middle School.
两种不同类别的软件: 功能预定义软件;用户驱动的软件。他们对软件工程方法有不同的需求
英语教学课件 九年级全.
UML语言.
資料結構 Data Structures Fall 2006, 95學年第一學期 Instructor : 陳宗正.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第13章 設計模型 13-1 再談物件導向設計 13-2 建立互動圖 13-3 建立狀態機圖 13-4 設計模型的類別圖
软件工程 第四章 软件设计 软件过程设计技术与工具.
英语教学课件 九年级全.
中央社新聞— <LTTC:台灣學生英語聽說提升 讀寫相對下降>
成才之路 · 英语 人教版 · 必修1 路漫漫其修远兮 吾将上下而求索.
第十六课复习.
浅谈高中英语阅读教学中的问题设计 浙江省临安中学 方利春.
Interfaces and Packages
The viewpoint (culture) [观点(文化)]
方法進階及物件導向基礎 Lecturer: 楊昌樺.
 隐式欧拉法 /* implicit Euler method */
OOA/OOD UML RUP Architecture Pattern MDA
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
Usage Eclipse 敏捷方法工具介紹 實驗室網站:
以分为镜知对错 以卷为鉴晓得失 —邯郸市一模得与失
Presentation transcript:

徐迎晓 xuyingxiao@126.com 复旦大学软件学院 实现模型 徐迎晓 xuyingxiao@126.com 复旦大学软件学院

实现模型 输入:设计过程的制品(交互图,设计类图) 可边设计边编程 对2周的迭代,考虑靠近迭代开始的半天做可视化建模设计工作,再进入编程 设计得到的是不完整的结果,编程和测试时会有大量修改,并发现和解决大量细节问题

实现模型 MAPPING DESIGNS TO CODE Testing & Refactoring Component Diagram Deployment Diagram

MAPPING DESIGNS TO CODE Defining a Class with Methods and Simple Attributes

Creating Methods from Interaction Diagrams

实现的顺序

Test-First Programming 编写代码之前编写单元测试代码 节奏:编写一点测试代码(SaleTest),再编写一点产品代码(Sale),通过测试后,再编写一点测试代码,…

优点 若放到后面写,程序员的天性是不写单元测试代码 心理学上,先编产品代码,再非正式测试,再事后增加单元测试,则感觉不是很满意。先写测试代码,再编写产品代码并改进之以通过测试,可增加程序员成就感。 先编写测试代码,可澄清类中的操作确切含义 成百上千的单元测试提供了有意义的验证 增强修改代码时的信心

实现模型 MAPPING DESIGNS TO CODE Testing & Refactoring Component Diagram Deployment Diagram

Accepted best practices in OO Testing & Refactoring Accepted best practices in OO Write unit tests prior to coding Refactor code continuously

Testing & Refactoring Unit testing Tests get written (not postponed) Programmers get better at writing tests Deeper understanding prior to coding Reusable automated verification Rerun all unit tests after every code change Change code w/o excessive debugging JUnit is the testing framework for Java W/O WITHOUT

Testing & Refactoring Unit testing steps Create object to be tested Do something to it (invoke some method) Check if results are correct Write tests for 1 method at a time

Fig. 21.1 JUnit in Eclipse IDE

Testing & Refactoring Refactoring Structured, disciplined method of rewriting/restructuring code w/o changing its behavior Refactor in small steps ‘Refactoring: Improving the Design of Existing Code’, by Fowler Eclipse provides built-in support

Why refactor? Improve Design! Testing & Refactoring Why refactor? Improve Design! Remove duplicate code Improve clarity Shorten methods Remove hard-coded constants Move methods to another class See Fowler’s book for more! Inseparable from iterative OOAD

Refactoring indications Testing & Refactoring Refactoring indications Duplicate code Big methods Class with lots of instance variables Very similar subclasses Few/no interfaces High coupling Lots more…

Fig. 18.25

Fig. 21.2 Extract Method refactoring example private Piece piece; public class Player { private Piece piece; private Board board; private Die[] dice; // … public void takeTurn() // roll dice int rollTotal = 0; for (int i = 0; i < dice.length; i++) dice[i].roll(); rollTotal += dice[i].getFaceValue(); } Square newLoc = board.getSquare(piece.getLocation(), rollTotal); piece.setLocation(newLoc); } // end of class Move dice rolling loop to another method! Extract Method refactoring example

Fig. 21.3 After refactoring, this method now rolls the dice public class Player { private Piece piece; private Board board; private Die[] dice; // … public void takeTurn() // the refactored helper method int rollTotal = rollDice(); Square newLoc = board.getSquare(piece.getLocation(), rollTotal); piece.setLocation(newLoc); } private int rollDice() int rollTotal = 0; for (int i = 0; i < dice.length; i++) dice[i].roll(); rollTotal += dice[i].getFaceValue(); return rollTotal; } // end of class After refactoring, this method now rolls the dice

Fig. 21.4 Introduce Explaining Variable Refactoring // good method name, but the logic of the body is not clear boolean isLeapYear( int year ) { return ( ( ( year % 400 ) == 0 ) || ( ( ( year % 4 ) == 0 ) && ( ( year % 100 ) != 0 ) ) ); } Introduce Explaining Variable Refactoring What do all the numbers really represent? What is being returned?

Fig. 21.5 // that’s better! boolean isLeapYear( int year ) { boolean isFourthYear = ( ( year % 4 ) == 0 ); boolean isHundrethYear = ( ( year % 100 ) == 0); boolean is4HundrethYear = ( ( year % 400 ) == 0); return ( is4HundrethYear || ( isFourthYear && ! isHundrethYear ) ); } Method refactored by introducing variables that explain what the numbers mean It is now clear under what logical conditions a leap year occurs!

Fig. 21.6 Refactoring support in eclipse

Fig. 21.7 takeTurn method after refactoring

实现模型 MAPPING DESIGNS TO CODE Testing & Refactoring Component Diagram Deployment Diagram

构件图

Component Component. 为存在于节点上的物理事物建模(可执行体、库、表、文件、文档) 构件名称:简单名,路径名,可用标记值或分隔栏修饰

构件实现类

构件和接口

构件种类 实施构件deployment components. 工作产品构件work product components. 执行构件 构成可执行系统必要和充分的构件 如DLL,EXE。 工作产品构件work product components. 开发过程中的源代码、数据文件等,用来生成可执行系统 执行构件 正在执行的系统的产生的结果,如DLL实例化形成的COM+对象

构件标准元素 标准元素 可执行体executable:能在节点上执行的构件 库library:动态或静态对象库 表table:数据库表 文件file:含源代码和数据的文档 文档document:文档

构件-可执行体和库

构件-表,文件和文档

构件-API

构件——源代码

构件图——源代码

构件图——可执行体的发布

构件图——可执行体的发布2

构件图——物理数据库

实现模型 MAPPING DESIGNS TO CODE Testing & Refactoring Component Diagram Deployment Diagram

Deployment Diagram

实施——节点 节点:存在于运行时,并代表一项计算资源的物理元素,一般至少拥有一些内容,通常具有处理能力

实施——节点2 通常只显示名称,可用标记值或附加栏修饰

实施——节点和构件 节点是执行构件,构件是被节点执行的事物 节点隐含依赖构件

实施——节点属性 节点可以有属性(如处理器速度,内存容量等) 可以有操作 如turnOn, turnOff suspend

实施——节点的组织 包,依赖,泛化,关联,实现

实施——处理器和设备

实施——构件分布

实施图 内容 节点 依赖和关联 各种图中都有的注解和约束 可包括包和子系统 可有构件

实施图——嵌入式系统

实施图——客户/服务器系统

实施图——全分布式系统

穿插Rose演示 绘制构件图和实施图 ROSE正向工程和逆向工程