面向对象软件工程—课后作业
c面向对象程序设计课后习题

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)》课后作业及任务要求(参考解答请见《面向对象编程与设计(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)软件业一直在探讨,如何使软件实现如同传统产业一样的大规模生产。
软件工程专业《面向对象技术》课程的课后大作业

软件工程专业《面向对象技术》课程的课后大作业利用在“面向对象技术”的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部分)

}
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)(答案)软件工程作业第二部分一、填空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部分)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面向对象程序设计课后习题参考答案

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面向对象程序设计课后习题答案联祥义

习题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。
- 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 为什么在需求获取或分析过程中不能描述边界用例。