软件工程与方法学——面向对象程序设计例子

题目:

/*
⑴ 有四个按钮输入,分别称为B1,B2,B3和B4;
⑵ 有两个灯泡作为输出,分别称为L1和L2;
⑶ B1是打开电源的按钮;
⑷ B4是关闭电源的按钮;
⑸ B2和B3 是操作按钮;
⑹ 在B1被按下后及B4被按下前,系统应称为电源打开状态;
⑺ 在B4被按下后及B1被按下前,系统应称为电源关闭状态;
⑻ 在电源关闭状态下,B2和B3按钮不起作用;
⑼ 在电源关闭状态下,灯应不亮;
⑽ 从最近一次电源打开状态算起,如果B2被按下的次数比B3被按下的次数多,L1亮,否则L2亮。
⑾ 任何时候都不能有一个以上的灯泡亮;
⑿ 如果其中的一个灯泡出现故障,另一个灯泡应以2秒钟的间隔闪烁,而不管B2和B3的操作过程。当B4按下时,闪烁停止;当B1被按下时,闪烁重新开始。当故障被排除后闪烁停止,系统恢复正常状态。

*/

一个盒子

两个灯

四个开关

分析各个对象应该具有的属性,以及相关操作。

/*Button 对象*/
package homework01;

public class Button {
    String name;
    int pressTime;
    boolean Pressed;
    public
        Button(String name)
        {
            this.name = name;
            pressTime = 0;
            Pressed =false;
        }
        boolean isPressed(){
            return Pressed;
        }
        int getPressTime(){return pressTime;}

        void press(){
            Pressed = true;
            pressTime++;}
        void reset(){
            Pressed =false;
            pressTime = 0;
        }
}
/*Light 灯对象*/
package homework01;

public class Light {
    private
        String name;
        boolean use_state;
        boolean light_state;
    public
        Light(String name){
            this.name = name;
            use_state = true;
            light_state =false;
    }
        boolean isGood(){return use_state;}
        boolean isLight(){return light_state;}

        void light(){
            light_state = true;
            System.out.println(this.name + " light!");
        }
        void die(){
            light_state = false;
            System.out.println(this.name + " dies!");
        }
        void goWrong(){
            use_state = false;}
        void goUse(){
            use_state = true;
        }
        void flash(){ System.out.println(this.name + " flashing!");}
}
/*盒子对象*/
package homework01;
import homework01.Button;
import homework01.Light;

public class Box {
    private
        Button B1 = new Button("B1");
        Button B2 = new Button("B2");
        Button B3 = new Button("B3");
        Button B4 = new Button("B4");
        Light L1 = new Light("L1");
        Light L2 = new Light("L2");
        boolean lightState = false;
    public
    void checkLightState(){
        if(!(L1.isGood() && L2.isGood())){
            if(!L1.isGood()  && lightState && L2.isGood())
            {
                L2.flash();
            }
            else if(!L2.isGood() && lightState && L1.isGood()){
                L1.flash();
            }
        }
        else if(lightState){
            if(B2.getPressTime() > B3.getPressTime())
            {
                L1.light();
            }
            else
            {
                L2.light();
            }
        }

    }

    void lightGoWrong(String light){
        if(light == "L1")
        {
            L1.goWrong();
        }
        else if(light == "L2") L2.goWrong();
        checkLightState();
    }

    void lightGoUse(String light){
        if(light == "L1")
        {
            L1.goUse();
        }
        if(light =="L2") {
            L2.goUse();
        }
        checkLightState();
    }

    void pressButton(String button)
    {
        if(button == "B1")
        {
            B1.press();
            this.lightState = true;
            System.out.println("****power on****");
            B4.reset();
        }
        if(button == "B2" && this.lightState)
        {
            B2.press();
        }
        if(button == "B3" && this.lightState)
        {
            B3.press();
        }
        if(button == "B4")
        {
            B4.press();
            this.lightState = false;
            System.out.println("****power down****");
            B1.reset();
            B2.reset();
            B3.reset();
        }
        checkLightState();
    }
}
/*模拟操作,作为测试*/
package homework01;
import homework01.Box;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Box B = new Box();
        B.pressButton("B1");//start
        B.pressButton("B2");//
        B.pressButton("B4");
        B.pressButton("B2");
        B.pressButton("B1");
        B.lightGoWrong("L1");
        B.lightGoWrong("L2");
        B.lightGoUse("L1");
        B.lightGoUse("L2");
        B.pressButton("B4");
        B.lightGoWrong("L1");
        B.lightGoWrong("L2");
        B.lightGoUse("L1");
        B.lightGoUse("L2");
    }

}
时间: 2024-07-29 07:43:48

软件工程与方法学——面向对象程序设计例子的相关文章

传统软件工程方法学在当代是否还有使用价值

目前使用最广泛的软件工程方法学是传统方法学和面向对象方法学.传统方法学既为传统必有其不适用于当代的地方,那么它在当代是否还有应用价值呢? 传统方法学也称为生命周期方法学或结构化泛型.它采用结构化技术(结构化分析.结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用.这种方法学把软件生命周期的全过程一次划分为若干个阶段,然后顺序的完成每个阶段的任务.通常前一阶段任务的完成是开始进行后一个阶段工作的前提和基础.传统方法学强调自顶向下顺序的完成软件

软件工程:结构化方法 VS 面向对象方法

一.基本概念 1.结构化方法 结构化方法是一种传统的软件开发方法,它是由结构化分析.结构化设计和结构化程序设计三部分有机组合而成的. 基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内. 2.面向对象方法 面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO,是建立在"对象"概念基础上的方法学.对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象

架构设计的方法学

约公元前25年,古罗马建筑师维特鲁威说:"理想的建筑师应该既是文学家又是数字家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得医药知识,具有法学造诣,深谙天文学及天文计算."(好难哪,软件构架设计师的要求呢?大家好好想想吧.)   本文目录   一.与构架有关的几个基本概念:   二.构架设计应考虑的因素概揽:   三.程序的运行时结构方面的考虑:   四.源代码的组织结构方面的考虑:   五.写系统构架设计文档应考虑的问题   六.结语   一.与构架有关的几个基本概念:   1.模

20135234马启扬 实验二 Java面向对象程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1352  姓名:马启扬  学号:20135234 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习程度:         实验时间:15:50--22:50 仪器组次:34         必修/选修: 选修            实验序号:02 实验名称:实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和T

软件工程之结构化方法与面向对象方法之比较与结合

软件开发方法指,在项目投资规模和时间限制内,设计.实现符合用户需求的高质量软件,根据软件开发的特点,提出的多种软件开发的策略.随着20世纪60年代,计算机软件.硬件发展不均衡,使大型软件的开发过程中出现了复杂程度高.研制周期长.正确性难以保证的三大难题,引发了"软件危机".为了同时提高软件效率和质量,软件开发方法不断革新.经过几十年的研究和应用,两种基于相应的程序设计思想和语言的软件开发方法,结构化方法与面向对象方法,成为了主流的开发方法之一,广泛地使用于软件工程. 结构化方法包括结构

20135119_涂文斌 实验二 Java面向对象程序设计

北京电子科技学院(BESTI) 实  验  报  告 课程: Java        班级:1351           姓名:涂文斌          学号:20135119 成绩:               指导教师:娄嘉鹏    实验日期:2015.4.17 实验密级:         预习程度:             实验时间:15:30~18:00 仪器组次:         必修/选修:选修       实验序号:(一) 实验名称:java面向对象程序设计 实验目的:1.初步掌握

面向对象程序设计简介(1/2)

在使用 Cocoa 和 Objective-C 进行编程的时候,最让人感到困惑的就是面向对象编程.几乎所有的现代编程语言都是面向对象的,学习面向对象的概念和模式对你读写代码都会带来很大的帮助.UITableView 和 UIScrollView 或者 NSString 和NSMutableString 之间的关系体现的是面向对象设计的基本理念.通过对这些理念的理解,您将更好的领会到Cocoa 和 Cocoa Touch内部为什么要像它现在这样组织,并且在您以后编写您自己的应用或者框架的时候,将会

设计模式李建忠(面向对象程序设计部分)

面向对象 面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流.面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围.如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.       谈到面向对象,这方面的文章非常多.但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现.其初,“面向对象”是专指在程序设计中采用封装.继承.抽象等设计方法.可是,这个定义显然不能再适

实验二Java面向对象程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1352               姓名:王国伊      学号:20135207 成绩:                 指导教师:娄嘉鹏         实验日期:2015.5.8 实验密级:无           预习程度:                 实验时间:15:30~18:00 仪器组次:07          必修/选修:选修            实验序号:02 实验名称