面向对象软件工程—课后作业
c面向对象程序设计课后习题
![c面向对象程序设计课后习题](https://img.taocdn.com/s3/m/1a01db806e1aff00bed5b9f3f90f76c661374c3f.png)
c面向对象程序设计课后习题面向对象程序设计是一种以对象为基本单位的编程范式,它强调数据和行为的封装、继承和多态性。
以下是一些面向对象程序设计的课后习题,旨在帮助学生巩固和深化对面向对象概念的理解。
习题一:封装的实现1. 定义一个类 `Person`,包含私有属性 `name` 和 `age`。
2. 实现公共方法 `getName()` 和 `setName(String name)` 来获取和设置 `name` 属性。
3. 实现公共方法 `getAge()` 和 `setAge(int age)` 来获取和设置`age` 属性。
4. 添加一个构造器,允许在创建 `Person` 对象时初始化 `name` 和`age`。
习题二:继承的应用1. 定义一个基类 `Vehicle`,包含属性 `speed` 和方法 `move()`.2. 创建一个派生类 `Car`,继承自 `Vehicle`,添加属性 `wheels` 和 `color`.3. 重写 `move()` 方法,以反映汽车的移动特性。
4. 添加一个构造器,允许初始化 `Car` 对象的所有属性。
习题三:多态性的使用1. 定义一个接口 `Animal`,包含一个抽象方法 `makeSound()`.2. 创建几个实现类,如 `Dog`,`Cat`,`Bird`,它们都实现了`Animal` 接口。
3. 为每个类实现 `makeSound()` 方法,以产生不同的声音。
4. 编写一个测试类,创建 `Animal` 类型的数组,包含不同种类的动物对象,并调用 `makeSound()` 方法。
习题四:抽象类的使用1. 定义一个抽象类 `Shape`,包含抽象方法 `calculateArea()`.2. 创建几个具体类,如 `Circle`,`Rectangle`,`Triangle`,它们继承自 `Shape` 并实现 `calculateArea()` 方法。
《面向对象编程与设计(Java)》课后作业及任务要求
![《面向对象编程与设计(Java)》课后作业及任务要求](https://img.taocdn.com/s3/m/3094c42b31126edb6f1a10b0.png)
《面向对象编程与设计(Java)》课后作业及任务要求(参考解答请见《面向对象编程与设计(Java)》课后作业及参考解答)1.1.1第一周课程(9月4日)的课后作业1、本周作业任务(1)在本机器中安装并配置出本次教学中推荐的IDE工具开发环境(Eclipse + MyEclipse)插件环境(当然,也可以采用其它形式的IDE)(2)请用Java程序示例说明什么是面向过程的程序设计方法、什么是面向对象的程序设计方法?(3)请定义出下面图中的“人”、“中国人”、“美国人”、“培训教师”、“学员”等类目的:熟悉类的定义语法及成员定义,并注意类是有层次的(4)谈谈你对开源的理解(可以是任何方面的主题),你熟悉J2EE平台中的哪些开源框架、对这些开源框架的熟悉程度怎样(包括在项目中的具体应用)注:本题是对大家的技术水平进行摸底和调查,从而调整以后各周的课程深度。
(5)对“面向对象编程与设计(Java)”结课后的项目大作业”进行需求收集和整理2、本周的作业提交的时间:本周的作业在(9月11日)第2周上课时由本课程的课代表收集并交给授课教师。
提交的作业的内容:只需要提交src目录下的源程序及主要的*.xml配置文件(以后需要时),并将执行过程截屏拷贝到Word文档中以便能够观察项目的执行状态的结果正确与否。
并按照每个同学的学号和姓名作为文件名称------如“12XXXXX张三.doc”形式(以后每次提交的作业也都采用此方式,不要采用Word 2007中的*.docx格式)。
3、作业收集的方式:各班的班长或者课程代表将本班的各个同学的作业收集并打包为*.zip或者*.rar文件交给授课教师。
1.1.2第二周课程(9月11日)的课后作业1、本周作业任务(1)为第一周(9月4日)的课后作业中的“人”问题中的类提供一个“工作”接口1)并在该“工作”接口中应该包含有如下的行为定义●沟通●职位升迁●完成任务指标2)并对该“工作”的接口加以具体的实现(2)请用Java程序示例说明什么是Java中的静态多态性和动态多态性?(3)软件业一直在探讨,如何使软件实现如同传统产业一样的大规模生产。
软件工程专业《面向对象技术》课程的课后大作业
![软件工程专业《面向对象技术》课程的课后大作业](https://img.taocdn.com/s3/m/9fda3b8bdaef5ef7ba0d3c44.png)
软件工程专业《面向对象技术》课程的课后大作业利用在“面向对象技术”的8周课程所学习到各个方面的知识编程实现一个模拟银行卡并在ATM机中进行操作的C/S 架构的J2SE的应用程序。
1、具体的应用功能要求如下1)至少应该提供对企业用户或者个人用户进行开户、存钱、取钱和转帐、查询帐户信息等方面的功能。
并以Windows的窗口的方式提供图形界面(具体可以参考下面的形式)。
2)程序启动后需要对操作者进行身份验证,提示的对话框为下面的形式。
身份验证通过后才显示出程序的主窗口。
3)在技术实现方面应该要应用Java多线程中有关的互斥等技术、并将用户的各种操作信息作为日志信息保存到磁盘文件中。
4)为系统提供一个后台管理方面的功能,管理员可以设置和改变程序中的各个配置选项(具体需要什么方面的配置项目和数据格式,可以自己定义),并以对象序列化的技术保存起来;程序启动时,再利用反序列化的技术获得管理员所产生的配置项目,并自动地调整程序的状态或者界面。
2、数据库系统(1)选择每个学员自己所熟悉的某种数据库系统,可以为SQLServer2000、Oracl9i、mySQL 或者其它。
并且各自在该数据库中创建出项目中的各个数据库表和表结构(自己定义表结构)。
(2)必须使用JDBC驱动程序的数据库连接方法来连接数据库(不能使用JDBC-ODBC桥方式)。
3、开发工具的使用开发工具可以利用JBuilder(其内直接提供了对Swing GUI技术的支持)或者Eclipse 工具(由于要涉及到J2SE的GUI技术中的Swing技术,需要安装SWT插件)。
4、最好应该应用Java GUI(图形用户界面技术)中的Swing组件来构造程序的窗口、菜单和对话框对于Swing技术,由于本次课程的课时有限,没有在课程中直接讲授,希望大家自己学习这方面的知识。
主要涉及各种组件的应用、事件的编程实现等方面的内容。
“挑战自我”,您有信心吗?!5、分组要求最好是每个人能够独立地完成该任务,或者最多两个人为一组(但说明各自所承担的任务)。
软件工程专业《面向对象技术》课程的课后作业参考答案(第4部分)
![软件工程专业《面向对象技术》课程的课后作业参考答案(第4部分)](https://img.taocdn.com/s3/m/8e0f9092ec3a87c24028c41f.png)
}
public void run(){ //结束条件设定为,当卡内资金大于 100 元时,线程 OVER while(this.mycard.getMoney()<=100){ AddSystem.addMoney(this.mycard); } System.out.println("资金大于 100 元,该线程 OVER"); System.out.println("");
}
public void addMoney(float addmoney){
money=money+addmoney;
//金额累加:
System.out.println("充值完毕,增加了"+addmoney+"元钱lass Student extends Thread{
money=0; id=0; name="No"; }
Card(int id, String name){ money=0;
this.id=id;
=name; }
public float getMoney(){
return money; }
public void dispInformation() { System.out.println("该一卡通考号为:"+id+"号");
}
public void dispInformation() { System.out.println("******************************"); System.out.println("该学生的基本信息如下:"); System.out.println("姓名-------:"+name);
软件工程大作业(2)(答案)
![软件工程大作业(2)(答案)](https://img.taocdn.com/s3/m/2fbdf16d2a160b4e767f5acfa1c7aa00b42a9d52.png)
软件工程大作业(2)(答案)软件工程作业第二部分一、填空1.结构化分析方法的分析策略是___自顶向下逐步求精_______。
2.衡量模块独立性的两个定性标准是_耦合性与内聚性________。
3.软件集成测试的方法主要有两种,它们是___渐增式与非渐增式测试_______。
4.继承性是子类自动共享其父类的__数据结构和方法____________机制。
5.在面向对象方法中,人们常用状态图描述类中对象的___动态行为________。
6.规定功能的软件,在一定程度上能从错误状态自动恢复到正常状态,则称该软件为____容错_____软件。
7.可行性研究的目的是用最小的代价在尽可能短的时间内确定该软件项目_是否值得开发_。
8.需求分析阶段,分析人员要确定对问题的综合需求,其中最主要的是__功能需求_。
9.软件生存周期中时间最长、花费的精力和费用最多的一个阶段是__维护_____阶段。
10.对象之间进行通信叫做__消息_____。
11.计算机辅助软件工程这一术语的英文缩写为_CASE_______。
12.McCall提出的软件质量模型包括______11________个软件质量特性。
13.为了便于对照检查,测试用例应由输入数据和预期的___输出结果____两部分组成。
14.软件结构是以____模块__________为基础而组成的一种控制层次结构。
15.结构化语言(PDL)是介于自然语言和____形式语言____之间的一种半形式语言。
16.软件概要设计的主要任务就是__软件结构的设计______。
17.结构化程序设计方法是使用___三种基本控制结构____构造程序。
18.软件开发是一个自顶向下逐步细化和求精过程,而软件测试是一个__自底向上或相反顺序 _____集成的过程。
19.在建立对象的功能模型时,使用的数据流图中包含有处理、数据流、动作对象和__数据存储对象_____。
二、选择1.UML是软件开发中的一个重要工具,它主要应用于哪种软件开发方法( C )A、基于瀑布模型的结构化方法B、基于需求动态定义的原型化方法C、基于对象的面向对象的方法D、基于数据的数据流开发方法2.面向对象的开发方法中,(B)将是面向对象技术领域内占主导地位的标准建模语言。
软件工程专业《面向对象技术》课程的课后作业参考答案(第6部分)
![软件工程专业《面向对象技术》课程的课后作业参考答案(第6部分)](https://img.taocdn.com/s3/m/074f66a11a37f111f1855b3e.png)
软件工程专业《面向对象技术》课程的课后作业参考答案(第6部分)1.1.1第五周课程(10月18日)1、作业题目设计一个实现对下面的EBook数据库表进行CRUD-----“增(CREATE)、删(DELETE)、改(UPDATE)、查(READER)”操作的J2SE程序。
物理数据库系统不限制,可以为MS SQLServer、MYSQL和Oracle等。
(2)作业基本要求提交源代码,并将执行的结果以“拷屏”的方式放入到Word 文档中。
(3)作业提交时间本周的作业在(10月25日)上课时交给授课教师,具体的要求同前面的作业要求。
(4)相关的功能实现的程序代码示例/** DesktopApplication.java* 程序编写说明:* 在完成老师布置的对EBook数据库表进行CRUD-----“增(CREATE)、删(DELETE)、改(UPDATE)、查(READER)的基础上尝试了java的GUI编程,理解了事件的监听机制的原理、桌面程序的布局等知识。
* 编程工具:NetBeans IDE 6.0 Preview (M9, build 070502)。
* 数据库:mysql-5.0.16-win32*/package desktopapplication;import javax.swing.*;import javax.swing.table.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.sql.*;class Table extends JFrame implements ActionListener{/*-------------------------------菜单栏的各项元素定义-----------------------*/ /*下拉菜单*/private JMenuBar menubar;private JMenu menu;private JMenuItem iselect,iinsert,idel,iupdate;/*插入时的输入框*/private JTextField Tebook_id;private JTextField Tebook_name;private JTextField Tebook_kind;private JTextField Tebook_price;/*显示标签*/private JLabel label_title;private JLabel label_id;private JLabel label_name;private JLabel label_kind;private JLabel label_price;private JLabel label_updateid; //显示更新的记录集号的标签//出错后的提示标签,提示出错信息为没有输入数字的标签private JLabel exception_interger=new JLabel("请输入数字!");private JPanel panel; //面板//private JTextArea textarea;//文本区域private Container contrainer;//容器private JButton insert_enter; // 插入确定按钮private JButton del_enter; // 删除确定按钮private JButton update_select_enter; // 更新选择按钮private JButton update_detail_enter; // 更新确定按钮public Table(){ //初始化表格/*-------------------------------初始化界面----------------------*/ menubar= new JMenuBar();menu = new JMenu("对数据表的处理");iselect = new JMenuItem("显示数据表");iinsert = new JMenuItem("插入数据");idel = new JMenuItem("删除数据");iupdate = new JMenuItem("更新数据");//添加监视器iselect.addActionListener(this);iinsert.addActionListener(this);idel.addActionListener(this);iupdate.addActionListener(this);menu.add(iselect);menu.add(iinsert);menu.add(idel);menu.add(iupdate);menubar.add(menu);setJMenuBar(menubar);contrainer=this.getContentPane();this.setTitle("对下面的EBook数据库表进行CRUD-");this.setSize(400,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);contrainer.validate();}/*显示表格的函数(JFrame)*/public void Show_Table(Vector row, Vector tableHead) {/*表格行向量*/ /*表格头名称*/contrainer.removeAll();/*-------------------------------初始化界面----------------------*/ menubar= new JMenuBar();menu = new JMenu("对数据表的处理");iselect = new JMenuItem("显示数据表");iinsert = new JMenuItem("插入数据");idel = new JMenuItem("删除数据");iupdate = new JMenuItem("更新数据");//添加监视器iselect.addActionListener(this);iinsert.addActionListener(this);idel.addActionListener(this);iupdate.addActionListener(this);menu.add(iselect);menu.add(iinsert);menu.add(idel);menu.add(iupdate);menubar.add(menu);this.setJMenuBar(menubar);/*------------------------------声明表格模型----------------------*/ DefaultTableModel tableModel = new DefaultTableModel();/* setDataVectorpublic void setDataVector(Vector dataVector, Vector columnIdentifiers) 参数:dataVector - 新的数据向量,columnIdentifiers - 列的名称*/ tableModel.setDataVector(row, tableHead);/*表格使用模型*/JTable table = new JTable(tableModel);table.setRowHeight(20);JScrollPane scrollPane = new JScrollPane(table);contrainer=this.getContentPane();contrainer.add(scrollPane);contrainer.add(table);this.setTitle("对下面的EBook数据库表进行CRUD-");this.setSize(400,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);contrainer.validate();}/*插入新数据到表格的函数(JFrame)*/public void Insert_Table(){contrainer.removeAll();label_title = new JLabel("请输入书信息");label_id= new JLabel("自动编号");label_name= new JLabel("书名");label_kind= new JLabel("类别");label_price= new JLabel("价格");Tebook_name=new JTextField();Tebook_kind=new JTextField();Tebook_price=new JTextField();insert_enter=new JButton("提交");panel=new JPanel();panel.setLayout(null);label_title.setBounds(0, 60, 90, 60);label_id.setBounds(30, 100, 60, 25);label_name.setBounds(95, 100, 60, 25);label_kind.setBounds(160, 100, 60, 25);label_price.setBounds(230, 100, 60, 25);Tebook_name.setBounds(95, 120, 60, 25);Tebook_kind.setBounds(160, 120, 60, 25);Tebook_price.setBounds(230, 120, 60, 25);insert_enter.setBounds(305, 120, 70, 25);//对确定按钮添加侦听器ActioListenerinsert_enter.addActionListener(this);//各个元素添加到面板上panel.add(label_title);panel.add(label_id);panel.add(label_name);panel.add(label_kind);panel.add(label_price);panel.add(Tebook_name);panel.add(Tebook_kind);panel.add(Tebook_price);panel.add(insert_enter);this.setSize(400,400);contrainer=this.getContentPane();contrainer.add(panel);contrainer.validate();}/*删除数据函数(JFrame)*/public void Del_Table() {contrainer.removeAll();label_title = new JLabel("请输入要删除的书的ID号");Tebook_id = new JTextField("请输入要删除的书的ID号");del_enter = new JButton("删除");panel=new JPanel();panel.setLayout(null);label_title.setBounds(0, 60, 190, 60);Tebook_id.setBounds(30, 100, 100, 20);del_enter.setBounds(200, 120, 70, 25);//添加删除按钮的监听:del_enter.addActionListener(this);panel.add(label_title);panel.add(Tebook_id);panel.add(del_enter);this.setSize(400,400);contrainer=this.getContentPane();contrainer.add(panel);contrainer.validate();}/*选择要更新的记录号的函数(JFrame)*/public void Update_Table_Select() {contrainer.removeAll();label_title = new JLabel("请输入要更新的书的ID号");Tebook_id = new JTextField("请输入要更新的书的ID号");update_select_enter = new JButton("选择该书更新");panel=new JPanel();panel.setLayout(null);label_title.setBounds(0, 60, 190, 60);Tebook_id.setBounds(30, 100, 100, 20);update_select_enter.setBounds(200, 120, 160, 25);//添加删除按钮的监听:update_select_enter.addActionListener(this);panel.add(label_title);panel.add(Tebook_id);panel.add(update_select_enter);this.setSize(400,400);contrainer=this.getContentPane();contrainer.add(panel);contrainer.validate();}/*更新该记录的函数(JFrame)*/public void Update_Table_Detail(int ebook_id) { //获取记录集contrainer.removeAll();label_title = new JLabel("请更新该书信息");label_id= new JLabel("编号");label_name= new JLabel("书名");label_kind= new JLabel("类别");label_price= new JLabel("价格");//将文本框中内容,初始化为要修改的记录内容try{Class.forName( "com.mysql.jdbc.Driver" );Connection con =DriverManager.getConnection( "jdbc:mysql://localhost:3306/MySql" ,"root" , "wby666" ); //注册Statement prepstmt =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs = prepstmt.executeQuery("select * from EBook");rs.absolute(ebook_id);String id = String.valueOf (ebook_id) ;//不可修改该记录的编号,这是要由系统作为主键的自动编号label_updateid=new JLabel(id);// Tebook_id.setEditable(true);Tebook_name=new JTextField(rs.getString("ebook_name"));Tebook_kind=new JTextField(rs.getString("ebook_kind"));String ebook_pricef = Float.toString(rs.getFloat("ebook_price"));Tebook_price=new JTextField(ebook_pricef);rs.close();con.close();}catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode()); }catch (ClassNotFoundException e) {System.out.println(e);}update_detail_enter=new JButton("更新");panel=new JPanel();panel.setLayout(null);label_title.setBounds(0, 60, 110, 60);label_id.setBounds(30, 100, 60, 25);label_name.setBounds(95, 100, 60, 25);label_kind.setBounds(160, 100, 60, 25);label_price.setBounds(230, 100, 60, 25);label_updateid.setBounds(30, 120, 60, 25);Tebook_name.setBounds(95, 120, 60, 25);Tebook_kind.setBounds(160, 120, 60, 25);Tebook_price.setBounds(230, 120, 60, 25);update_detail_enter.setBounds(305, 120, 70, 25);//对更新确定按钮添加侦听器ActioListenerupdate_detail_enter.addActionListener(this);//各个元素添加到面板上panel.add(label_title);panel.add(label_id);panel.add(label_name);panel.add(label_kind);panel.add(label_price);panel.add(label_updateid);panel.add(Tebook_name);panel.add(Tebook_kind);panel.add(Tebook_price);panel.add(update_detail_enter);this.setSize(400,400);contrainer=this.getContentPane();contrainer.add(panel);contrainer.validate();}public void PreparedStatementExecSQLSelect(){ //数据库查询函数Vector tableHead; //表格头Vector cell; //表格中一个元组Vector row; //表格中一行tableHead = new Vector();row = new Vector();//--------------------------建立表头----------------------------------//String[] tableHeadName = {"ebook_id","ebook_name","ebook_kind", "ebook_price"};for (int i = 0; i < tableHeadName.length; i++) {tableHead.add(tableHeadName[i]);}//--------------------------建立数据库----------------------------------//try {Class.forName( "com.mysql.jdbc.Driver" );Connection con =DriverManager.getConnection( "jdbc:mysql://localhost:3306/MySql" ,"root" , "wby666" ); //注册Statement prepstmt =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);//出现下面这一种问题java.sql.SQLException: Before start of result set的原因是:// ResultSet 始终有一个游标指向其当前数据行。
Java面向对象程序设计课后习题参考答案
![Java面向对象程序设计课后习题参考答案](https://img.taocdn.com/s3/m/07093181f524ccbff121843d.png)
public class San_4 {// 编写一个应用程序求1!+2!+ (20)/*** @param args//本题考查对循环的运用和对算法的编写*/public static void main(String[] args) {// TODO Auto-generated method stubint a;double b = 1, sum = 0;// 定义变量for (a = 1; a <= 20; a++) {// for循环实现该功能b = b * a;// 当a=1时,b=b*a=1,依此类推sum = sum + b;// 当a=1时,sum=sum+b=1,依次类推}for (int w = 1; w <= 19; w++) {// for循环打印出阶乘之和的形式来System.out.print(w + "!" + "+");}System.out.println("20!" + "=" + sum);// 最终输出阶乘之和double sum1 = 0, a1 = 1;int i = 1;while (i <= 20)// 用while循环实现该功能{sum1 = sum1 + a1;i++;a1 = a1 * i;}System.out.println("sum1=" + sum1);}}输出结果:1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+11!+12!+13!+14!+15!+16!+17!+18!+19!+20!=2.18203E18sum1=2.18203E18习题3_5public class San_5 {// 求100以内的素数/*** @param args//本题考查对for循环、break语句、if语句的运用*/public static void main(String[] args) {// TODO Auto-generated method stubint i, j;for (i = 2; i <= 100; i++) {// for循环从2开始,逐渐增1for (j = 2; j <= i / 2; j++) {// for循环从2开始,逐步增1if (i % j == 0) {// 如果i除以j的余数为0,则终止本次for循环break;}}if (j > i / 2) {// 如果j>i/2,输出iSystem.out.print(" " + i);}}}}2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 8389 97习题3_6public class San_6 {// 分别用while和for循环计算1+1/2!+1/3!+1/4!...的前20项和/*** @param args//本题考查同学们对while循环、for循环以及对输出字符串格式的运用 */public static void main(String[] args) {// TODO Auto-generated method stubint i = 1, k;double j = 1, m = 1, sum1 = 0, sum2 = 0;while (i <= 20) {// 用while循环实现sum1 = sum1 + j;i++;j = j * (1.0 / i);}System.out.print("1+");for (int r = 2; r <= 19; r++) {System.out.print("1/" + r + "!" + "+");}System.out.print("1/20!" + "=" + sum1);System.out.println();System.out.print("1+");for (int r = 2; r <= 19; r++) {System.out.print("1/" + r + "!" + "+");}for (k = 1; k <= 20; k++) {// 用for循环实现m *= (1.0 / k);sum2 += m;}System.out.println("1/20!" + "=" + sum2);}}计算结果:1+1/2!+1/3!+1/4!+1/5!+1/6!+1/7!+1/8!+1/9!+1/10!+1/11!+1/12!+1/13!+1/14!+1/15!+1/16!+1/17!+1/18!+1/19!+1/20!=1.904551+1/2!+1/3!+1/4!+1/5!+1/6!+1/7!+1/8!+1/9!+1/10!+1/11!+1/12!+1/13!+1/14!+1/15!+1/16!+1/17!+1/18!+1/19!+1/20!=1.90455习题3_7public class San_7 {// 一个数如果恰好等于它的因子之和,这个数就成为”完数“。
(完整word版)java面向对象程序设计课后习题答案联祥义
![(完整word版)java面向对象程序设计课后习题答案联祥义](https://img.taocdn.com/s3/m/6cdb30a833687e21ae45a981.png)
习题11.James Gosling2.(1)使用一个文本编辑器编写源文件。
(2)使用Java编译器(javac。
exe)编译Java源程序,得到字节码文件.(3)使用Java解释器(java。
exe)运行Java程序3.Java的源文件是由若干个书写形式互相独立的类组成的。
应用程序中可以没有public类,若有的话至多可以有一个public类。
4.系统环境path D\jdk\bin;系统环境classpath D\jdk\jre\lib\rt。
jar;。
;5.B6.Java源文件的扩展名是.java。
Java字节码的扩展名是。
class。
7.D8.(1)Speak.java(2)生成两个字节码文件,这些字节码文件的名字Speak.class 和Xiti8。
class(3)java Xiti8(4)执行java Speak的错误提示Exception in thread ”main” java。
lang.NoSuchMethodError: main 执行java xiti8得到的错误提示Exception in thread "main” java。
lang.NoClassDefFoundError:xiti8 (wrong name: Xiti8)执行java Xiti8。
class得到的错误提示Exception in thread ”main” ng.NoClassDefFoundError:Xiti8/class执行java Xiti8得到的输出结果I’m glad to meet you习题21.D2.【代码1】【代码2】错误//【代码3】更正为float z=6.89F; 3.float型常量后面必须要有后缀“f"或“F”。
对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。
4.public class Xiti4{public static void main (String args[ ]){char ch1=’你',ch2=’我',ch3='他';System.out.println(”\”"+ch1+"\”的位置:"+(int)ch1);System。
张海藩《软件工程导论》(第6版)(课后习题 第10章 面向对象分析)【圣才出品】
![张海藩《软件工程导论》(第6版)(课后习题 第10章 面向对象分析)【圣才出品】](https://img.taocdn.com/s3/m/1edb3086a5e9856a57126080.png)
第10章面向对象分析1.用面向对象方法分析研究本书第2章第2题中描述的储蓄系统,试建立它的对象模型、动态模型和功能模型。
答:(1)对象模型储蓄系统的对象模型,如图10-2所示。
图10-2储蓄系统的对象模型(2)动态模型①编写脚本a.正常情况脚本第一,储户有存款要求,填写存款单,包含储户个人信息,存款金额和存款类型;第二,业务员查收存款,审核存款与存款单存款金额吻合;第三,存款单生效;第四,储户有取款要求,填写取款单,包含个人账号、密码(待定)和存款金额;第五,业务员审核存款,验证储户身份,确定储户存款金额>=取款金额;第六,审核通过,取款单生效;第七,系统打印利息清单,业务员把本金和利息返回储户。
b.异常情况脚本第一,储户有存款要求,填写存款单,包含储户个人信息,存款金额和存款类型;第二,业务员查收存款,审核存款与存款单存款金额不符;第三,存款单作废;第四,储户有取款要求,填写取款单,包含个人账号、密码(待定)和存款金额;第五,业务员审核存款,验证储户身份,发现储户存款金额<=取款金额;第六,取款单作废。
②事件追踪图储蓄系统的事件追踪图,如图10-3所示。
图10-3储蓄系统的事件追踪图(3)功能模型储蓄系统的数据库流图,如图10-4所示。
图10-4储蓄系统的数据库流图2.用面向对象方法分析研究本书习题2第3题中描述的机票预订系统,试建立它的对象模型、动态模型和功能模型。
答:略。
3.用面向对象方法分析研究本书习题2第4题中描述的患者监护系统,试建立它的对象模型、动态模型和功能模型。
答:略。
4.下面是自动售货机系统的需求陈述,试建立它的对象模型、动态模型和功能模型:自动售货机系统是一种无人售货系统。
售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。
有效的硬币是一元币、五角币、一角币、五分币、二分币和一分币。
其他货币都被认为是假币。
机器拒绝接收假币,并将其从退币孔退出。
基于面向对象的UML 课后作业
![基于面向对象的UML 课后作业](https://img.taocdn.com/s3/m/2d836fcc8bd63186bcebbc4a.png)
1.填空题
(1)统一建模语言UML是绘制软件蓝图的标准工具语言,可以对软件系统产品进行说明、可视化、构造和编制文档。
(2)UML在实际软件项目中,可以用于构造各种类型系统的业务模型和软件模型。
(3)软件的开发模式有瀑布模型、喷泉模型、基于构件的开发模型和XP开发模型。
(4)面向对象程序的三大元素是封装、继承和多态。
(5)瀑布模型的缺点是缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。
2.选择题
(1)对象程序的基本特征是(ABCD)。
A.抽象 B.封装 C.继承 D.多态
(2)类包含的要素有(ABC)。
A.名字 B.属性 C.操作D编号
(3)下列关于类与对象的关系说法不正确的是(A)。
A有些对象是不能被抽象成类的
B类给出了属于该类的全部对象的抽象定义
C类是对象集合的在再抽象
D类是用来在内存中开辟一个数据区,存储新对象的属性
(4)面向对象方法中的(C)机制使子类可以自动的拥有(复制)父类全部属性和操作。
A抽象B封装C继承D多态
(5)建立对象的动态模型一般包含的步骤有(ABCD)。
A准备脚本B确定事件C准备事件跟踪表D构造状态图。
面向对象软件工程(使用UML,模式与Java)全套课后习题答案
![面向对象软件工程(使用UML,模式与Java)全套课后习题答案](https://img.taocdn.com/s3/m/ff27db23ed630b1c59eeb5de.png)
Advantages:
• Developers need only learn one notation for all development activities. • Traceability among models and between models and code is made easier since they are written in the same
The first decision is a system design decision. The second decision is also a system design decision if made by developers (otherwise, it is a requirements decision). The third decision is a requirements decision.
notation.
Disadvantages:
• A programming language is a low level notation which is difficult to use for representing user requirements, for example.
《面向对象编程与设计(Java)》课后作业及参考解答
![《面向对象编程与设计(Java)》课后作业及参考解答](https://img.taocdn.com/s3/m/33d1dbcb534de518964bcf84b9d528ea81c72f64.png)
《面向对象编程与设计(Java)》课后作业及参考解答《面向对象编程与设计(Java)》课后作业及参考解答1.1.1第一周课程(9月4日)的课后作业及参考解答1、请用Java程序示例说明什么是面向过程的程序设计方法、什么是面向对象的程序设计方法?面向过程就是分析出所需要开发的应用的系统在解决某个问题时所需要的步骤和工作流程,然后用代码(当然应该把这些代码设计为各个函数或者过程)来表示这些步骤的具体实现——面向过程是以过程为中心的编程思想。
而面向对象是把构成问题的各个方面分解成各个对象,并用代码来实现对象之间的交互——面向对象是以事物为中心的编程思想。
(1)面向过程程序设计方法的示例#include "stdio.h"int add(int a, int b){//对数据的操作(方法或者函数)return a+b;}int main(){//数据(属性或者状态)int x=1, y=1;int sum=add(x,y);print("Sum=%d",sum);}面向过程程序的程序中的数据与方法是相互分离的!而面向对象程序中的数据与方法是相互组合在一起的。
当数据(也就是问题的属性或者状态)发生变化,需要修改大量的关联的方法的程序模块。
(2)面向对象程序设计方法的示例import java.io.*;public class Add{//数据(属性或者状态)private int sum;public int add(int a, int b){//对数据的操作(方法或者函数)sum=a+b;return sum;}public void showSum() {//对数据的操作(方法或者函数)System.out.println("Sum="+sum);}public static void main(String args[]){Add oneAdd=new Add();oneAdd.add(1,2);oneAdd.showSum();}}2、谈谈你对开源的理解(可以是任何方面的主题),你熟悉J2EE平台中的哪些开源框架、对这些开源框架的熟悉程度怎样(包括在项目中的具体应用)(1)开源软件1)开源软件一定是源代码开放,任何人可以免费使用,任何人可以再开发;2)开源同时也是一种商业运营手段,软件免费提供但服务收费。
面向对象软件工程 第五章 答案
![面向对象软件工程 第五章 答案](https://img.taocdn.com/s3/m/4386e322cfc789eb172dc88a.png)
Object-Oriented Software Engineering: Using UML, Patterns, and Java: Solutions to Exercises5. Analysis: Solutions5-1Consider a file system with a graphical user interface, such as Macintosh’s Finder, Microsoft’s Windows Explorer, or Linux’s KDE. The following objects were identified from a use case describing how to copy a file from a floppy disk to a hard disk: File, Icon, TrashCan, Folder, Disk, Pointer. Specify which are entity objects, which are boundary objects, and which are control objects.Entity objects: File, Folder, DiskBoundary objects: Icon, Pointer, TrashCanControl objects: none in this example.5–2Assuming the same file system as before, consider a scenario consisting of selecting a file on a floppy, dragging it to Folder and releasing the mouse. Identify and define at least one control object associated with this scenario.The purpose of a control object is to encapsulate the behavior associated with a user level transaction. In this example, we identify a CopyFile control object, which is responsible for remembering the path of the original file, the path of the destination folder, checking if the file can be copied (access control and disk space), and to initiate the file copying.5–3Arrange the objects listed in Exercises 5-1 and 5–2 horizontally on a sequence diagram, the boundary objects to the left, then the control object you identified, and finally, the entity objects. Draw the sequence of interactions resulting from dropping the file into a folder. For now, ignore the exceptional cases.Figure 5-1 depicts a possible solution to this exercise. The names and parameters of the operations may vary. The diagram, however, should at least contain the following elements:•Two boundary objects, one for the file being copied, and one of the destination folder.•At least one control object remembering the source and destination of the copy, and possibly checking for access rights.•Two entity objects, one for the file being copied, and one of the destination folder.In this specific solution, we did not focus on the Disk, Pointer, and TrashCan objects. The Disk object would be added to the sequence when checking if there is available space. The TrashCan object is needed for scenarios in which Files or Folders are deleted.Note that the interaction among boundary objects can be complex, depending on the user interface components that are used. This sequence diagram, however, only describes user level behavior and should not go into such details. As a result, the sequence diagram depicts a high level view of the interactions between these object, not the actual sequence of message sends that occurs in the delivered system.Object-Oriented Software Engineering: Using UML, Patterns, and Java: Solutions to ExercisesFigure 5-2Sample solution for Exercise 5–45–5Identify the attributes of each object that are relevant to this scenario (copying a file from a floppy disk to a hard disk). Also consider the exception cases “There is already a file with that name in the folder” and “There is no more space on disk.”Object-Oriented Software Engineering: Using UML, Patterns, and Java: Solutions to ExercisesThe scenario implies that icons have positions (since they can be moved) and that they can be selected. Each Item, Folder or File, has a size attribute that is checked against the available space in the Disk. The exception “There is already a file with that name in the folder” implies that Item names are unique within a Folder. We represent this by adding a qualifier on the relationship between Item and Folder. Finally, when copying a file, we need to copy its contents, hence we add a contents attribute on the File object.Figure 5-4 A naive model of the Gregorian calendar (UML class diagram).5–7Consider the object model of Figure 5-32 in the book. Using association multiplicity only, can you modify the model such that a developer unfamiliar with the Gregorian calendar could deduce the number of days in each month? Identify additional classes if necessary.The purpose of this exercise is to show the limitation of association multiplicities. There is no complete solution tothis problem. A partial solution indicating the number of days in each month is depicted in Figure 5-5. We createdfour abstract classes for each of the possible month lengths, 11 classes for each of the nonvariable months and twoclasses for the month of February. The part that cannot be resolved with association multiplicities is the definition ofa leap year and that the number of days in February depends on whether the year is leap or not. In practice, thisObject-Oriented Software Engineering: Using UML, Patterns, and Java: Solutions to Exercisesproblem can solved by using informal or OCL constraints, described in more detail in Chapter 9, Object Design: Specifying Interfaces.Figure 5-5Revised class diagram indicating how many days each month includes.5–8Consider a traffic light system at a four-way crossroads (e.g., two roads intersecting at right angles). Assume the simplest algorithm for cycling through the lights (e.g., all traffic on one road is allowed to go through the crossroad while the other traffic is stopped). Identify the states of this system and draw a statechart describing them. Remember that each individual traffic light has three states (i.e. green, yellow, and red).Object-Oriented Software Engineering: Using UML, Patterns, and Java: Solutions to ExercisesWe model this system as two groups of lights, one for each road. Opposing lights have always the same value. Lights from at least one group must always be red for safety reasons. We assume there are no separate lights for left and right turns and that cycles are fixed. Figure 5-6 depicts the startchart diagram for this solution.5–10Consider the addition of a nonfunctional requirement stipulating that the effort needed by Advertisers toobtain exclusive sponsorships should be minimized. Change the AnnounceTournament and the ManageAdvertisement use cases (solution of Exercise 4-12) so that the Advertiser can specify preferences in her pro file so that exclusive sponsorships can be decided automatically by the system.Figure 5-7Sample solution for Exercise 5–5Object-Oriented Software Engineering: Using UML, Patterns, and Java: Solutions to ExercisesA new use case, ManageSponsorships , should be written and included in the ManageAdvertisement use case and de fine the preferences that the Advertiser can specify for automatically accepting an exclusive sponsorship. Figure 5-8 depicts a possible solution for this use case.In the AnnounceTournament use case, steps 6 & 7 are the modi fied as follows:6.The system noti fies the selected sponsors about the upcoming tournament and the flat fee for exclusive sponsorships. For advertisers who selected an automatic sponsorship preferences, the system automatically generates a positive answer if the fee falls within the bounds speci fied by the Advertiser.7.The system communicates their answers to the LeagueOwner .5–11Identify and write de finitions for any additional entity, boundary, and control objects participating in theAnnounceTournament use case that were introduced by realizing the change speci fied in Exercise 5-10.As speci fied above, this exercise should result in the identi fication of two new entity objects:•SponsorshipPreferences stores the time frame during which a tournament can be considered for an automatic sponsor ship and the maximum fee the Advertiser is willing to pay without being noti fied. This object also has associations to the leagues that should be considered during the automatic sponsorship decision.• ExclusiveSponsorship represents an exclusive sponsorship that was awarded to an Advertiser . It is associatedwith the tournament and Advertiser objects involved in the sponsorship. It stores a boolean indicating whether or not the sponsorship was decided automatically.However, the instructor may choose to extend the exercise so that the students also consider the objects participating in the ManageSponsorships use case. In this case, the student should identify a control object for the new use case and two boundary objects for displaying the exclusive sponsorships and the preferences, respectively.5–12Update the class diagrams of Figure 5-29 and Figure 5-31 to include the new objects you identi fied in Exercise5-11.Use case nameManageSponsorships Participating actorsInitiated by Advertiser Flow of events 1.The Advertiser requests the sponsorships area..2. ARENA displays the list of tournaments for which the Advertiserhas exclusive sponsorships and indicates for each tournamentwhether the exclusive sponsorship was decided by the system orthe Advertiser .3.The Advertiser may change the conditions under which atournament becomes a candidate for her exclusive sponsorship,including specifying a set of leagues, a time frame, or a maximumfee that she is willing to pay for an exclusive sponsorship. TheAdvertiser may also select not to use the automatic sponsorshipfeature and be noti fied about such opportunities directly.4.ARENA records the changes of preferences for the automatic sponsorships. Entry condition•The Advertiseris logged into ARENA .Exit conditions •ARENA checks the advertisers automatic sponsorship pro file for any new tournaments created after thecompletion of this use case.Figure 5-8ManageSponsorships use case.Figure 5-9 depicts the objects discussed in Exercise 5-11 and their associations.5–13The Figure 5-1 A UML startchart diagram for AnnounceTournamentControl .Create TournamentWait For Sponsor RepliesDecide on SponsorshipWait for Player Applicationsnotify sponsorship deadline expired notify players Decide on Interest Groupssponsors notify sponsors。
软件工程专业《面向对象技术课程实训》课程的每周课后作业
![软件工程专业《面向对象技术课程实训》课程的每周课后作业](https://img.taocdn.com/s3/m/fa008f6df46527d3250ce000.png)
软件工程专业《面向对象技术课程实训》课程的每周课后作业1.1.1“面向对象技术”课程的项目实训大作业利用在“面向对象技术”的8周课程所学习到各个方面的知识设计并实现一个C/S架构的J2SE的应用程序或者B/S架构的J2EE Web应用程序。
该实训项目的具体业务功能大家自己决定,但最好是解决具体应用问题的(比如学生管理、帐户管理、图书管理、电子商务、内容管理等)。
1、目前大家所欠缺的知识和技巧各位同学经过本科所学习到的与Java及J2EE有关的各个方面的知识,同时辅助Oracle、软件系统分析与设计技术、需求工程等方面的课程的学习。
部分同学应该初步掌握或者了解了目前企业级J2EE应用开发中所涉及的相关的知识。
但大部分同学目前所缺少的是(1)实际的企业级项目开发的体验和锻炼(2)同时也还缺少对在本科以及在本学期其它的各个课程中所学习到的各种技术和知识的合理地应用的技巧(3)当然作为一位职业程序员所应该具备的软件规范化如设计的文档化、软件测试等方面的体验不多。
(4)团队协作形式的开发方式今天的大多软件工作能否获得成功,取决于团队的协作,而不是个人的突出表现。
当然,对于非常小的团队来说,不需要太多的交流的途径。
但随着团队的成长,交流途径的数量就值得注意了。
但协作不止是交流。
协作意味着不同实体的交互——个人和小组——朝着共同的目标工作。
协作通过分享使每个人都能更接近于达到目标的知识和工件,使大家互相帮助。
2、项目实训的目的和要求(1)目的上面所列出的大家目前所欠缺的知识和技巧其实也就是本课程的“项目实训大作业”想要达到的主要目的。
而通过“项目实训大作业”这个环节一方面能够弥补在课堂知识学习过程中的欠缺,另一方面也能够对真正的企业开发有所体验和经历。
最终使得大家在就业和实习方面能够具有更好的竞争力,同时也提高毕业设计的论文的水平。
1)实际的企业级项目开发的体验和锻炼以及文档的标准化和规范化方面的意识的增强2)增强对所学习的各种技术和知识的合理地综合应用的技巧、并培养独立地解决问题和自学能力。
面向对象课后习题和课件.doc
![面向对象课后习题和课件.doc](https://img.taocdn.com/s3/m/371c6c99bed5b9f3f90f1c9a.png)
面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。
面向对象技术在计算机学科产生了巨大的影响,在产业界有着广泛应用。
它已经渗透到计算机科学技术的几乎每一个分支领域,如编程语言、系统分析与设计、数据库、人机界面、`知识工程、操作系统、计算机体系结构等等。
此外,新兴的基于构件开发、面向服务计算、Agent和面向方面开发等技术也以面向对象技术作为基础。
当我们提到对象导向的时候,它不仅指一种程序设计方法。
它更多意义上是一种程序开发方式。
在这一方面,我们必须了解更多关于对象导向系统分析和对象导向设计(Object Oriented Design,简称OOD)方面的知识。
对象导向程序设计Object-Oriented Programming,缩写:OOP,指一种程序设计范型,同时也是一种程序开发的方法论。
它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
软件是客观世界中问题空间与解空间的具体描述,追求表达能力强、更符合人类思维模式具有易构造性和易演化性的计算模型软件工程应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、发布和维护的工程或以之为研究对象的学科。
计算机软件一般指计算机系统中的程序及文档,程序是以计算机语言表达的软件系统,文档是以人类语言表达的软件系统,二者互相配合共同构成了完整的软件系统。
软件是系统逻辑的体现必须依附于一定的载体例如:纸张、软盘、硬盘、光盘等,人类抽象的经验、知识正逐步由软件予以精确地体现。
软件发展现状(1)已经存在大量正在运行的软件:金融、电信、航空航天等(2)软件的应用范围不断扩大:商务、交通、家电等,“无处不在的软件”(3)软件的规模与复杂性持续增加,越来越多的知识正在由软件进行显式表达(4)出现了大量与软件相关的标准(5)软件危机仍然存在(软件脱节)1968-2009软件发展特点(1)软件应用范围将继续扩大,成为信息社会的物理设施(2)遗留软件将继续发挥作用(3)软件的可靠性与安全性日趋重要(4)网络化软件将是发展重点(5)工业化生产是必由之路软件开发的特点:软件开发是典型的知识密集型活动、复杂度高、开发周期长、可靠性保证难。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象软件工程第八章8.1.什么是面向对象方法学,它有哪些优点?答:面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现揭发的解空间在结构上尽可能一致的方法学科。
优点:1、与人类的习惯的思维方法一致;2、稳定性好;3、可重用性好;4、适合用于大型软件产品;5、所开发的软件有较好的可维护性;6、面向对象的软件比较容易修改;7、面向对象软件比较容易理解;8、易于测试和调式。
8.2.什么是对象,它与传统的数据有何异同?答:对象是对问题域中某个实体的抽象。
相对于传统数据的静态被处理,对象既有静态的属性,又有动态的行为,是进行处理的主体。
8.3.什么是类?答:类是对具有相同数据和相同操作的一组相似对象的定义。
8.4.什么是继承?答:继承是指能够直接获得已有事物的性质和特征,而不必重复定义他们。
8.5.什么是模型,开发软件为何要建模?答:所谓模型就是为了理解事物而对该事物做出的一种抽象,是对事物的一种无歧视定义的书面描述。
由于模型忽略了事物的非本质东西,因此模型比原始事物更容易操作。
对于那些因过分复杂而不能直接理解的系统,特别需要建立模型,建模的目的主要是为了降低复杂性。
人的头脑每次只能出来少量信息,模型通过把系统的重要部分分解成人的头脑一次能处理的若干个子部分,从而减少了系统的复杂程度。
8.6.什么是对象模型,建立对象模型时主要使用哪些图形符号,这些符号的含义是什么?答:对象模型表示静态的、结构化的系统性质,是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
在UML中,用类图来建立对象模型,表示一个类及属于该类的对象。
8.7.什么是动态模型,建立动态模型时主要使用哪些图形符号,这些符号的含义是什么?答:动态模型时描述系统控制结构,即行为化的一种模型。
在UML中主要用状态图、交互图、活动图来建立动态模型。
状态图用多个状态及这些状态之间的迁移描述单个对象的动态行为。
8.8.什么是功能模型,建立功能模型时主要使用哪些图形符号?答:功能模型表示变化的系统的功能性质,指明了系统应有的功能,更直接的反应了系统的需求。
在UML中主要用用例图表示功能模型,从用户观点描述系统的功能。
8.9.试用面向对象观点分析、研究本书的订票系统的例子。
在这个例子中有哪些类,试建立其系统的对象模型。
8.10.建立订票系统的用例模型。
8.11.考虑一下ATM系统。
至少标识出于系统交互的三个不同的参与者。
答:储户、中央计算机、柜员。
8.12.场景和用例之间,有何不同,这两个工具在何时使用?答:一个用例是能够被行为者感受到的、系统将完成的一个完整的功能。
场景是一种说i明人们将做什么的陈述性描述。
一个用例是描述相关功能的所有可能场景的抽象,场景是用例的实例。
在需求文档中,为了标明系统的一些功能时,使用用例。
在需求获取中,开发者和用户通过撰写并求精一系列场景,以达到系统应该做什么的共同理解,对用户而言,场景相对于用例,易于理解。
8.13. 画出列车售票系统的用例图。
该系统包括两个参与者:可以购买不同类型车票的旅客和中心计算机系统管理一个价格表引用数据库。
用例应该包括BuyOneWayTicket、BuyWeeklyCard、BuyMonthlyCard和UpdataTariff.。
也应该包括意外情况:TimeOut(即旅行这=者等待时间太长而无法输入正确的数据)、TransactionAborted(即旅行者选择终止按钮,未完成交易)、DistributorOutOfChange和DistributorOutOfPaper。
8.14.按如下定义要求画出表示书的类图:“一本书有数个部分组成,每个部分由数章组成。
各章又由数节组成”。
画图时将注意力放在类及其关系上。
答:他们的关系属于组合聚集关系。
第九章9.1. 考虑一下带有图形用户界面的文件系统,如 Macintosh 的Finder 、 Microsoft 的 Windows Explorer 和 Linux 的 KDE 。
从描述怎样从一个软盘拷贝一个文件到硬盘的用例中标识出了如下对象: File 、 Icon 、 TrashCan 、 Folder 、 Disk 和 Pointer 。
说明哪些对象是实体对象,哪些对象是边界对象,哪些对象是控制对象。
答:实体对象:Folder、Disk 、File;边界对象:Icon、TrashCan ;控制对象:Pointer 。
9.2. 假设如前所述的同一文件系统,考虑一个包含了从软盘上选择文件并拖动该文件到 Folder 再释放鼠标的场景。
标识和定义至少一个关联到此场景的控制对象。
复制文件:(1)将鼠标移动到所需要移动的文件的图形上,并点击确认;(2)按住左键不放;(3)将文件移到指定的文件夹Folder;(4)释放鼠标;9.3. 在顺序图中水平地排列习题 9-1 和习题 9-2 中列出的对象,将边界对象放在左边,将你要标识的控制对象放在中间,将实体对象放在右边。
画出将文件拖入文件夹的交互顺序。
在本题中,忽略异常情况。
9.4. 检查你在练习 9-3 中画出的顺序图,标识出这些对象之间的关联。
9.5. 标识出与场景(将一个文件从一张软盘拷贝硬盘)相关的每一个对象的属性。
考虑如下异常情况“在该文件夹中存在同一文件名”和“磁盘中没有足够的空间”。
答:如果在操作过程中,发现文件的名字属性有相同的,给出提示“文件夹中已有改文件,是否修改文件名!”;如果其文件的所占内存大于磁盘的总内存,给出提示“磁盘容量不够!”9-6 考虑9-10所示的对象模型,给出有关日历的知识,列出有关该模型的所有问题。
修改该模型的每一个问题。
答:一般情况下一年有365天,一年共分12个月。
12个月中分大月、小月和平月,大月有31天,小月30天,平月(二月)只有28天。
而有时候会是闰年,即年份是4的倍数,四年一闰,百年不闰,四百年再闰,但不能闰年是366天,二月有29天。
模型中画的是年、月、星期、日的共享聚集关系。
应该是组合聚集的关系。
图如下题所示。
9.7 考虑上图中的对象模型,仅使用关联多样性,可以修改该模型,以便不熟悉日历的系统分析员可以减少每一个月中的天数吗?如果需要,标识出外部类。
9.8 考虑四方向十字路口的交通灯系统(两条成直角的相交道路)。
假设为了考虑循环通过交通灯的最简单算法(即当一个十字路口的在一条路上的交通是允许的话,则同时另一条路上的交通停止)。
标识出这一系统的状态,并画很粗描述这一状态的状态图。
记住每一个单独的交通灯具有三个状态(绿、黄和红)。
第十章10.1 将一个系统分解成多个子系统会降低复杂性,同时设计者是通过简化各模块、增加这些模块的一致性来处理这一复杂性的。
但分解后常常会增加另一些不同的复杂性,如更小的模块意味着更多的模块及接口。
如果内聚是让设计者将子系统分解成更小的指导性原则,那么让设计者保持各模块数目之和比较小的原则是什么呢?答:如果模块数目的增加,各个模块之间关系的复杂程度就会增加,从而导致设计模块间接口所需要的工作量和成本加大,显得不经济,所以设计者会保持各模块数目之和比较小。
10.2 将设计目标分成了5类:性能、可靠性、成本、维护和最终用户。
将上面的一类或多类设计目标赋给下面的例子:(1).当用户发出任何命令后系统必须在一秒钟内将信息反馈给用户。
性能、可靠性(2).即使在网络失败的情况下,火车票发行器也必须能够成功地提交火车票。
可靠性(3).火车票发行器的房间必须考虑安装新的按钮以防火警的数目有所上升。
维护(4).自动出纳机必须能够抵御字典攻击(即用户通过不断的系统尝试试图得到认证码)。
可靠性10.3 假设你正在开发一个系统,该系统要将数据存储在UNIX文件系统上。
并且你预测到以后会发布运行在其他操作系统上的系统新版本,提供对不同的文件系统支持。
给出一个考虑到了将来变更的子系统分解方案。
10.4 老的编译器是根据管道过滤器体系结构风格来设计的,没一个阶段均要把输入转换成中间表示传给下一个阶段。
现代开发环境中的编译器,是一个包括带有句法文本编辑器和源代码调试器在内的集成交互开发环境,这一环境采用了仓库体系结构风格。
请说明将管道过滤器风格转换为仓库风格的设计目标是什么?答:管道过滤器体系结构的编译器是通过过滤器一步一步的转换而处理数据,这个过程容易受到某一个因素而阻碍整个编译过程。
仓库风格适合于发生改变的且有复杂数据处理的任务,可以提高编译器的性能,性能更高。
10.5 考虑模型/视/控制器的例子。
讨论模型/视/控制器体系结构对下列设计目标是有帮助的还是有副作用的:(1)可扩展性(如增加新的视类型)有帮助(2)响应时间(如用户输入与所有视被更新的时间间隔)副作用(3)可修改性(如在模型中增加新的属性)有帮助(4)访问控制(如确保只有合法用户才能访问模型中特定部分的能力)。
有帮助10.6 列出当采用带有多层的封闭体系结构时实现有困难的那些设计目标(如正文中所描绘的OSI例子)。
答:OSI分层较多,会影响性能响应时间与吞吐量的要求的实现,对于成本而言其开发成本较高。
10.7 在许多体系结构中,如三层或四层体系结构,持久性对象的存储由专门的一层来处理。
你认为哪些设计目标导致了这一决策?答:可维护性和性能。
10.8 考察一个含有一台网络服务器、两台数据库服务器的系统。
两台数据库服务器是相同的:第一台作为主服务器,第二台是在第一台出现故障时作为冗余的备份服务器使用。
用户使用网页浏览器通过网络服务器来访问数据。
他们还可以选择使用有权直接访问数据库的私有客户身份。
画出UML的部署图以展示这个系统的硬件/软件映射。
10.9 如果为一个基于网络的零售商店设计访问控制策略。
客户可以通过网络访问商店,浏览商品的信息,输入他们的地址和付账信息,购买商品。
供应商能够添加新的商品、更新商品信息、接收订单。
商店老板可以设置零售价格、基于顾客的购买情况提供打折或销售服务。
必须处理三种参与者:商店管理者、供应商和消费者。
为这三种参与者设计一种访问控制策略。
消费者可以由网络创建,而供应商由商店管理者创建。
消费者:1.浏览商品 2.购买商品供应商:1.添加商品 2.更新商品信息 3.接受订单商店管理者:1. 设置价格 2.设置打折 3.销售服务10.10 为下面的每个系统选择一种你觉得最合适的控制流机制。
因为在绝大多数的案例中,多个选择是可行的,请证实你的选择。
设计一个持续高负荷的网络服务器。
线程机制一个文字处理器的图形用户界面。
事件驱动控制一个嵌入式实时系统(例如,一个卫星发射导航系统)。
过程驱动控制10.11 为什么在需求获取或分析过程中不能描述边界用例。